Tidy up indentation in openvr changes

This commit is contained in:
James Urquhart 2016-07-12 23:30:11 +01:00
parent e6159a590a
commit 212ac36cc1
25 changed files with 2171 additions and 2172 deletions

View file

@ -83,8 +83,8 @@ protected:
/// Which HMD is the active one
U32 mActiveDeviceId;
/// Device id we need to use to hook up with oculus
ovrGraphicsLuid mLuid;
/// Device id we need to use to hook up with oculus
ovrGraphicsLuid mLuid;
protected:
void cleanUp();

View file

@ -46,10 +46,10 @@
struct OculusTexture
{
virtual void AdvanceToNextTexture() = 0;
virtual void AdvanceToNextTexture() = 0;
virtual ~OculusTexture() {
}
virtual ~OculusTexture() {
}
};
//------------------------------------------------------------
@ -57,105 +57,105 @@ struct OculusTexture
// needed for D3D11 rendering.
struct D3D11OculusTexture : public OculusTexture
{
ovrHmd hmd;
ovrSwapTextureSet * TextureSet;
static const int TextureCount = 2;
GFXTexHandle TexRtv[TextureCount];
GFXDevice *Owner;
ovrHmd hmd;
ovrSwapTextureSet * TextureSet;
static const int TextureCount = 2;
GFXTexHandle TexRtv[TextureCount];
GFXDevice *Owner;
D3D11OculusTexture(GFXDevice* owner) :
hmd(nullptr),
TextureSet(nullptr),
Owner(owner)
{
TexRtv[0] = TexRtv[1] = nullptr;
}
D3D11OculusTexture(GFXDevice* owner) :
hmd(nullptr),
TextureSet(nullptr),
Owner(owner)
{
TexRtv[0] = TexRtv[1] = nullptr;
}
bool Init(ovrHmd _hmd, int sizeW, int sizeH)
{
hmd = _hmd;
bool Init(ovrHmd _hmd, int sizeW, int sizeH)
{
hmd = _hmd;
D3D11_TEXTURE2D_DESC dsDesc;
dsDesc.Width = sizeW;
dsDesc.Height = sizeH;
dsDesc.MipLevels = 1;
dsDesc.ArraySize = 1;
dsDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM_SRGB;// DXGI_FORMAT_R8G8B8A8_UNORM_SRGB;
dsDesc.SampleDesc.Count = 1; // No multi-sampling allowed
dsDesc.SampleDesc.Quality = 0;
dsDesc.Usage = D3D11_USAGE_DEFAULT;
dsDesc.CPUAccessFlags = 0;
dsDesc.MiscFlags = 0;
dsDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET;
D3D11_TEXTURE2D_DESC dsDesc;
dsDesc.Width = sizeW;
dsDesc.Height = sizeH;
dsDesc.MipLevels = 1;
dsDesc.ArraySize = 1;
dsDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM_SRGB;// DXGI_FORMAT_R8G8B8A8_UNORM_SRGB;
dsDesc.SampleDesc.Count = 1; // No multi-sampling allowed
dsDesc.SampleDesc.Quality = 0;
dsDesc.Usage = D3D11_USAGE_DEFAULT;
dsDesc.CPUAccessFlags = 0;
dsDesc.MiscFlags = 0;
dsDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET;
GFXD3D11Device* device = static_cast<GFXD3D11Device*>(GFX);
ovrResult result = ovr_CreateSwapTextureSetD3D11(hmd, device->mD3DDevice, &dsDesc, ovrSwapTextureSetD3D11_Typeless, &TextureSet);
if (!OVR_SUCCESS(result))
return false;
GFXD3D11Device* device = static_cast<GFXD3D11Device*>(GFX);
ovrResult result = ovr_CreateSwapTextureSetD3D11(hmd, device->mD3DDevice, &dsDesc, ovrSwapTextureSetD3D11_Typeless, &TextureSet);
if (!OVR_SUCCESS(result))
return false;
AssertFatal(TextureSet->TextureCount == TextureCount, "TextureCount mismatch.");
AssertFatal(TextureSet->TextureCount == TextureCount, "TextureCount mismatch.");
for (int i = 0; i < TextureCount; ++i)
{
ovrD3D11Texture* tex = (ovrD3D11Texture*)&TextureSet->Textures[i];
D3D11_RENDER_TARGET_VIEW_DESC rtvd = {};
rtvd.Format = DXGI_FORMAT_B8G8R8A8_UNORM;// DXGI_FORMAT_R8G8B8A8_UNORM;
rtvd.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D;
for (int i = 0; i < TextureCount; ++i)
{
ovrD3D11Texture* tex = (ovrD3D11Texture*)&TextureSet->Textures[i];
D3D11_RENDER_TARGET_VIEW_DESC rtvd = {};
rtvd.Format = DXGI_FORMAT_B8G8R8A8_UNORM;// DXGI_FORMAT_R8G8B8A8_UNORM;
rtvd.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D;
GFXD3D11TextureObject* object = new GFXD3D11TextureObject(GFX, &VRTextureProfile);
object->registerResourceWithDevice(GFX);
*(object->getSRViewPtr()) = tex->D3D11.pSRView;
*(object->get2DTexPtr()) = tex->D3D11.pTexture;
device->mD3DDevice->CreateRenderTargetView(tex->D3D11.pTexture, &rtvd, object->getRTViewPtr());
GFXD3D11TextureObject* object = new GFXD3D11TextureObject(GFX, &VRTextureProfile);
object->registerResourceWithDevice(GFX);
*(object->getSRViewPtr()) = tex->D3D11.pSRView;
*(object->get2DTexPtr()) = tex->D3D11.pTexture;
device->mD3DDevice->CreateRenderTargetView(tex->D3D11.pTexture, &rtvd, object->getRTViewPtr());
// Add refs for texture release later on
if (object->getSRView()) object->getSRView()->AddRef();
//object->getRTView()->AddRef();
if (object->get2DTex()) object->get2DTex()->AddRef();
object->isManaged = true;
// Add refs for texture release later on
if (object->getSRView()) object->getSRView()->AddRef();
//object->getRTView()->AddRef();
if (object->get2DTex()) object->get2DTex()->AddRef();
object->isManaged = true;
// Get the actual size of the texture...
D3D11_TEXTURE2D_DESC probeDesc;
ZeroMemory(&probeDesc, sizeof(D3D11_TEXTURE2D_DESC));
object->get2DTex()->GetDesc(&probeDesc);
// Get the actual size of the texture...
D3D11_TEXTURE2D_DESC probeDesc;
ZeroMemory(&probeDesc, sizeof(D3D11_TEXTURE2D_DESC));
object->get2DTex()->GetDesc(&probeDesc);
object->mTextureSize.set(probeDesc.Width, probeDesc.Height, 0);
object->mBitmapSize = object->mTextureSize;
int fmt = probeDesc.Format;
object->mTextureSize.set(probeDesc.Width, probeDesc.Height, 0);
object->mBitmapSize = object->mTextureSize;
int fmt = probeDesc.Format;
if (fmt == DXGI_FORMAT_R8G8B8A8_TYPELESS || fmt == DXGI_FORMAT_B8G8R8A8_TYPELESS)
{
object->mFormat = GFXFormatR8G8B8A8; // usual case
}
else
{
// TODO: improve this. this can be very bad.
GFXREVERSE_LOOKUP(GFXD3D11TextureFormat, GFXFormat, fmt);
object->mFormat = (GFXFormat)fmt;
}
TexRtv[i] = object;
}
if (fmt == DXGI_FORMAT_R8G8B8A8_TYPELESS || fmt == DXGI_FORMAT_B8G8R8A8_TYPELESS)
{
object->mFormat = GFXFormatR8G8B8A8; // usual case
}
else
{
// TODO: improve this. this can be very bad.
GFXREVERSE_LOOKUP(GFXD3D11TextureFormat, GFXFormat, fmt);
object->mFormat = (GFXFormat)fmt;
}
TexRtv[i] = object;
}
return true;
}
return true;
}
~D3D11OculusTexture()
{
for (int i = 0; i < TextureCount; ++i)
{
SAFE_DELETE(TexRtv[i]);
}
if (TextureSet)
{
ovr_DestroySwapTextureSet(hmd, TextureSet);
}
}
~D3D11OculusTexture()
{
for (int i = 0; i < TextureCount; ++i)
{
SAFE_DELETE(TexRtv[i]);
}
if (TextureSet)
{
ovr_DestroySwapTextureSet(hmd, TextureSet);
}
}
void AdvanceToNextTexture()
{
TextureSet->CurrentIndex = (TextureSet->CurrentIndex + 1) % TextureSet->TextureCount;
}
void AdvanceToNextTexture()
{
TextureSet->CurrentIndex = (TextureSet->CurrentIndex + 1) % TextureSet->TextureCount;
}
};
@ -176,7 +176,7 @@ OculusVRHMDDevice::OculusVRHMDDevice()
mConnection = NULL;
mSensor = NULL;
mActionCodeIndex = 0;
mTextureSwapSet = NULL;
mTextureSwapSet = NULL;
}
OculusVRHMDDevice::~OculusVRHMDDevice()
@ -212,35 +212,35 @@ void OculusVRHMDDevice::set(ovrHmd hmd, ovrGraphicsLuid luid, U32 actionCodeInde
mDevice = hmd;
ovrHmdDesc desc = ovr_GetHmdDesc(hmd);
int caps = ovr_GetTrackingCaps(hmd);
ovrHmdDesc desc = ovr_GetHmdDesc(hmd);
int caps = ovr_GetTrackingCaps(hmd);
mSupportedCaps = desc.AvailableHmdCaps;
mCurrentCaps = mSupportedCaps;
mTimewarp = true;
mCurrentCaps = mSupportedCaps;
mTimewarp = true;
// DeviceInfo
mProductName = desc.ProductName;
mManufacturer = desc.Manufacturer;
mVersion = desc.FirmwareMajor;
//
Vector<GFXAdapter*> adapterList;
GFXD3D11Device::enumerateAdapters(adapterList);
//
Vector<GFXAdapter*> adapterList;
GFXD3D11Device::enumerateAdapters(adapterList);
dMemcpy(&mLuid, &luid, sizeof(mLuid));
mDisplayId = -1;
dMemcpy(&mLuid, &luid, sizeof(mLuid));
mDisplayId = -1;
for (U32 i = 0, sz = adapterList.size(); i < sz; i++)
{
GFXAdapter* adapter = adapterList[i];
if (dMemcmp(&adapter->mLUID, &mLuid, sizeof(mLuid)) == 0)
{
mDisplayId = adapter->mIndex;
mDisplayDeviceType = "D3D11"; // TOFIX this
}
}
for (U32 i = 0, sz = adapterList.size(); i < sz; i++)
{
GFXAdapter* adapter = adapterList[i];
if (dMemcmp(&adapter->mLUID, &mLuid, sizeof(mLuid)) == 0)
{
mDisplayId = adapter->mIndex;
mDisplayDeviceType = "D3D11"; // TOFIX this
}
}
mResolution.x = desc.Resolution.w;
mResolution.y = desc.Resolution.h;
@ -256,7 +256,7 @@ void OculusVRHMDDevice::set(ovrHmd hmd, ovrGraphicsLuid luid, U32 actionCodeInde
mSensor = new OculusVRSensorDevice();
mSensor->set(mDevice, mActionCodeIndex);
mDebugMirrorTexture = NULL;
mDebugMirrorTexture = NULL;
updateCaps();
}
@ -274,15 +274,15 @@ void OculusVRHMDDevice::setOptimalDisplaySize(GuiCanvas *canvas)
PlatformWindow *window = canvas->getPlatformWindow();
GFXTarget *target = window->getGFXTarget();
Point2I requiredSize(0, 0);
Point2I requiredSize(0, 0);
ovrHmdDesc desc = ovr_GetHmdDesc(mDevice);
ovrSizei leftSize = ovr_GetFovTextureSize(mDevice, ovrEye_Left, desc.DefaultEyeFov[0], mCurrentPixelDensity);
ovrSizei rightSize = ovr_GetFovTextureSize(mDevice, ovrEye_Right, desc.DefaultEyeFov[1], mCurrentPixelDensity);
ovrHmdDesc desc = ovr_GetHmdDesc(mDevice);
ovrSizei leftSize = ovr_GetFovTextureSize(mDevice, ovrEye_Left, desc.DefaultEyeFov[0], mCurrentPixelDensity);
ovrSizei rightSize = ovr_GetFovTextureSize(mDevice, ovrEye_Right, desc.DefaultEyeFov[1], mCurrentPixelDensity);
requiredSize.x = leftSize.w + rightSize.h;
requiredSize.y = mMax(leftSize.h, rightSize.h);
requiredSize.x = leftSize.w + rightSize.h;
requiredSize.y = mMax(leftSize.h, rightSize.h);
if (target && target->getSize() != requiredSize)
{
GFXVideoMode newMode;
@ -302,7 +302,7 @@ bool OculusVRHMDDevice::isDisplayingWarning()
if (!mIsValid || !mDevice)
return false;
return false;/*
return false;/*
ovrHSWDisplayState displayState;
ovrHmd_GetHSWDisplayState(mDevice, &displayState);
@ -326,145 +326,145 @@ GFXTexHandle OculusVRHMDDevice::getPreviewTexture()
bool OculusVRHMDDevice::setupTargets()
{
// Create eye render buffers
ID3D11RenderTargetView * eyeRenderTexRtv[2];
ovrLayerEyeFov ld = { { ovrLayerType_EyeFov } };
mRenderLayer = ld;
// Create eye render buffers
ID3D11RenderTargetView * eyeRenderTexRtv[2];
ovrLayerEyeFov ld = { { ovrLayerType_EyeFov } };
mRenderLayer = ld;
GFXD3D11Device* device = static_cast<GFXD3D11Device*>(GFX);
GFXD3D11Device* device = static_cast<GFXD3D11Device*>(GFX);
ovrHmdDesc desc = ovr_GetHmdDesc(mDevice);
for (int i = 0; i < 2; i++)
{
mRenderLayer.Fov[i] = desc.DefaultEyeFov[i];
mRenderLayer.Viewport[i].Size = ovr_GetFovTextureSize(mDevice, (ovrEyeType)i, mRenderLayer.Fov[i], mCurrentPixelDensity);
mEyeRenderDesc[i] = ovr_GetRenderDesc(mDevice, (ovrEyeType_)(ovrEye_Left+i), mRenderLayer.Fov[i]);
}
ovrHmdDesc desc = ovr_GetHmdDesc(mDevice);
for (int i = 0; i < 2; i++)
{
mRenderLayer.Fov[i] = desc.DefaultEyeFov[i];
mRenderLayer.Viewport[i].Size = ovr_GetFovTextureSize(mDevice, (ovrEyeType)i, mRenderLayer.Fov[i], mCurrentPixelDensity);
mEyeRenderDesc[i] = ovr_GetRenderDesc(mDevice, (ovrEyeType_)(ovrEye_Left+i), mRenderLayer.Fov[i]);
}
ovrSizei recommendedEyeTargetSize[2];
recommendedEyeTargetSize[0] = mRenderLayer.Viewport[0].Size;
recommendedEyeTargetSize[1] = mRenderLayer.Viewport[1].Size;
ovrSizei recommendedEyeTargetSize[2];
recommendedEyeTargetSize[0] = mRenderLayer.Viewport[0].Size;
recommendedEyeTargetSize[1] = mRenderLayer.Viewport[1].Size;
if (mTextureSwapSet)
{
delete mTextureSwapSet;
mTextureSwapSet = NULL;
}
if (mTextureSwapSet)
{
delete mTextureSwapSet;
mTextureSwapSet = NULL;
}
// Calculate render target size
if (mDesiredRenderingMode == GFXDevice::RS_StereoSideBySide)
{
// Setup a single texture, side-by-side viewports
Point2I rtSize(
recommendedEyeTargetSize[0].w + recommendedEyeTargetSize[1].w,
recommendedEyeTargetSize[0].h > recommendedEyeTargetSize[1].h ? recommendedEyeTargetSize[0].h : recommendedEyeTargetSize[1].h
);
// Calculate render target size
if (mDesiredRenderingMode == GFXDevice::RS_StereoSideBySide)
{
// Setup a single texture, side-by-side viewports
Point2I rtSize(
recommendedEyeTargetSize[0].w + recommendedEyeTargetSize[1].w,
recommendedEyeTargetSize[0].h > recommendedEyeTargetSize[1].h ? recommendedEyeTargetSize[0].h : recommendedEyeTargetSize[1].h
);
GFXFormat targetFormat = GFX->getActiveRenderTarget()->getFormat();
mRTFormat = targetFormat;
GFXFormat targetFormat = GFX->getActiveRenderTarget()->getFormat();
mRTFormat = targetFormat;
rtSize = generateRenderTarget(mStereoRT, mStereoDepthTexture, rtSize);
rtSize = generateRenderTarget(mStereoRT, mStereoDepthTexture, rtSize);
// Generate the swap texture we need to store the final image
D3D11OculusTexture* tex = new D3D11OculusTexture(GFX);
if (tex->Init(mDevice, rtSize.x, rtSize.y))
{
mTextureSwapSet = tex;
}
// Generate the swap texture we need to store the final image
D3D11OculusTexture* tex = new D3D11OculusTexture(GFX);
if (tex->Init(mDevice, rtSize.x, rtSize.y))
{
mTextureSwapSet = tex;
}
mRenderLayer.ColorTexture[0] = tex->TextureSet;
mRenderLayer.ColorTexture[1] = tex->TextureSet;
mRenderLayer.ColorTexture[0] = tex->TextureSet;
mRenderLayer.ColorTexture[1] = tex->TextureSet;
mRenderLayer.Viewport[0].Pos.x = 0;
mRenderLayer.Viewport[0].Pos.y = 0;
mRenderLayer.Viewport[1].Pos.x = (rtSize.x + 1) / 2;
mRenderLayer.Viewport[1].Pos.y = 0;
mRenderLayer.Viewport[0].Pos.x = 0;
mRenderLayer.Viewport[0].Pos.y = 0;
mRenderLayer.Viewport[1].Pos.x = (rtSize.x + 1) / 2;
mRenderLayer.Viewport[1].Pos.y = 0;
// Left
mEyeRT[0] = mStereoRT;
mEyeViewport[0] = RectI(Point2I(mRenderLayer.Viewport[0].Pos.x, mRenderLayer.Viewport[0].Pos.y), Point2I(mRenderLayer.Viewport[0].Size.w, mRenderLayer.Viewport[0].Size.h));
// Left
mEyeRT[0] = mStereoRT;
mEyeViewport[0] = RectI(Point2I(mRenderLayer.Viewport[0].Pos.x, mRenderLayer.Viewport[0].Pos.y), Point2I(mRenderLayer.Viewport[0].Size.w, mRenderLayer.Viewport[0].Size.h));
// Right
mEyeRT[1] = mStereoRT;
mEyeViewport[1] = RectI(Point2I(mRenderLayer.Viewport[1].Pos.x, mRenderLayer.Viewport[1].Pos.y), Point2I(mRenderLayer.Viewport[1].Size.w, mRenderLayer.Viewport[1].Size.h));
// Right
mEyeRT[1] = mStereoRT;
mEyeViewport[1] = RectI(Point2I(mRenderLayer.Viewport[1].Pos.x, mRenderLayer.Viewport[1].Pos.y), Point2I(mRenderLayer.Viewport[1].Size.w, mRenderLayer.Viewport[1].Size.h));
GFXD3D11Device* device = static_cast<GFXD3D11Device*>(GFX);
GFXD3D11Device* device = static_cast<GFXD3D11Device*>(GFX);
D3D11_TEXTURE2D_DESC dsDesc;
dsDesc.Width = rtSize.x;
dsDesc.Height = rtSize.y;
dsDesc.MipLevels = 1;
dsDesc.ArraySize = 1;
dsDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM_SRGB;// DXGI_FORMAT_R8G8B8A8_UNORM_SRGB;
dsDesc.SampleDesc.Count = 1;
dsDesc.SampleDesc.Quality = 0;
dsDesc.Usage = D3D11_USAGE_DEFAULT;
dsDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
dsDesc.CPUAccessFlags = 0;
dsDesc.MiscFlags = 0;
D3D11_TEXTURE2D_DESC dsDesc;
dsDesc.Width = rtSize.x;
dsDesc.Height = rtSize.y;
dsDesc.MipLevels = 1;
dsDesc.ArraySize = 1;
dsDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM_SRGB;// DXGI_FORMAT_R8G8B8A8_UNORM_SRGB;
dsDesc.SampleDesc.Count = 1;
dsDesc.SampleDesc.Quality = 0;
dsDesc.Usage = D3D11_USAGE_DEFAULT;
dsDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
dsDesc.CPUAccessFlags = 0;
dsDesc.MiscFlags = 0;
// Create typeless when we are rendering as non-sRGB since we will override the texture format in the RTV
bool reinterpretSrgbAsLinear = true;
unsigned compositorTextureFlags = 0;
if (reinterpretSrgbAsLinear)
compositorTextureFlags |= ovrSwapTextureSetD3D11_Typeless;
// Create typeless when we are rendering as non-sRGB since we will override the texture format in the RTV
bool reinterpretSrgbAsLinear = true;
unsigned compositorTextureFlags = 0;
if (reinterpretSrgbAsLinear)
compositorTextureFlags |= ovrSwapTextureSetD3D11_Typeless;
ovrResult result = ovr_CreateMirrorTextureD3D11(mDevice, device->mD3DDevice, &dsDesc, compositorTextureFlags, &mDebugMirrorTexture);
if (result == ovrError_DisplayLost || !mDebugMirrorTexture)
{
AssertFatal(false, "Something went wrong");
return NULL;
}
ovrResult result = ovr_CreateMirrorTextureD3D11(mDevice, device->mD3DDevice, &dsDesc, compositorTextureFlags, &mDebugMirrorTexture);
if (result == ovrError_DisplayLost || !mDebugMirrorTexture)
{
AssertFatal(false, "Something went wrong");
return NULL;
}
// Create texture handle so we can render it in-game
ovrD3D11Texture* mirror_tex = (ovrD3D11Texture*)mDebugMirrorTexture;
D3D11_RENDER_TARGET_VIEW_DESC rtvd = {};
rtvd.Format = DXGI_FORMAT_B8G8R8A8_UNORM;// DXGI_FORMAT_R8G8B8A8_UNORM;
rtvd.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D;
// Create texture handle so we can render it in-game
ovrD3D11Texture* mirror_tex = (ovrD3D11Texture*)mDebugMirrorTexture;
D3D11_RENDER_TARGET_VIEW_DESC rtvd = {};
rtvd.Format = DXGI_FORMAT_B8G8R8A8_UNORM;// DXGI_FORMAT_R8G8B8A8_UNORM;
rtvd.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D;
GFXD3D11TextureObject* object = new GFXD3D11TextureObject(GFX, &VRTextureProfile);
object->registerResourceWithDevice(GFX);
*(object->getSRViewPtr()) = mirror_tex->D3D11.pSRView;
*(object->get2DTexPtr()) = mirror_tex->D3D11.pTexture;
device->mD3DDevice->CreateRenderTargetView(mirror_tex->D3D11.pTexture, &rtvd, object->getRTViewPtr());
GFXD3D11TextureObject* object = new GFXD3D11TextureObject(GFX, &VRTextureProfile);
object->registerResourceWithDevice(GFX);
*(object->getSRViewPtr()) = mirror_tex->D3D11.pSRView;
*(object->get2DTexPtr()) = mirror_tex->D3D11.pTexture;
device->mD3DDevice->CreateRenderTargetView(mirror_tex->D3D11.pTexture, &rtvd, object->getRTViewPtr());
// Add refs for texture release later on
if (object->getSRView()) object->getSRView()->AddRef();
//object->getRTView()->AddRef();
if (object->get2DTex()) object->get2DTex()->AddRef();
object->isManaged = true;
// Add refs for texture release later on
if (object->getSRView()) object->getSRView()->AddRef();
//object->getRTView()->AddRef();
if (object->get2DTex()) object->get2DTex()->AddRef();
object->isManaged = true;
// Get the actual size of the texture...
D3D11_TEXTURE2D_DESC probeDesc;
ZeroMemory(&probeDesc, sizeof(D3D11_TEXTURE2D_DESC));
object->get2DTex()->GetDesc(&probeDesc);
// Get the actual size of the texture...
D3D11_TEXTURE2D_DESC probeDesc;
ZeroMemory(&probeDesc, sizeof(D3D11_TEXTURE2D_DESC));
object->get2DTex()->GetDesc(&probeDesc);
object->mTextureSize.set(probeDesc.Width, probeDesc.Height, 0);
object->mBitmapSize = object->mTextureSize;
int fmt = probeDesc.Format;
object->mTextureSize.set(probeDesc.Width, probeDesc.Height, 0);
object->mBitmapSize = object->mTextureSize;
int fmt = probeDesc.Format;
if (fmt == DXGI_FORMAT_R8G8B8A8_TYPELESS || fmt == DXGI_FORMAT_B8G8R8A8_TYPELESS)
{
object->mFormat = GFXFormatR8G8B8A8; // usual case
}
else
{
// TODO: improve this. this can be very bad.
GFXREVERSE_LOOKUP(GFXD3D11TextureFormat, GFXFormat, fmt);
object->mFormat = (GFXFormat)fmt;
}
mDebugMirrorTextureHandle = object;
}
else
{
// No rendering, abort!
return false;
}
if (fmt == DXGI_FORMAT_R8G8B8A8_TYPELESS || fmt == DXGI_FORMAT_B8G8R8A8_TYPELESS)
{
object->mFormat = GFXFormatR8G8B8A8; // usual case
}
else
{
// TODO: improve this. this can be very bad.
GFXREVERSE_LOOKUP(GFXD3D11TextureFormat, GFXFormat, fmt);
object->mFormat = (GFXFormat)fmt;
}
mDebugMirrorTextureHandle = object;
}
else
{
// No rendering, abort!
return false;
}
return true;
return true;
}
String OculusVRHMDDevice::dumpMetrics()
@ -510,17 +510,17 @@ void OculusVRHMDDevice::updateRenderInfo()
PlatformWindow *window = mDrawCanvas->getPlatformWindow();
ovrHmdDesc desc = ovr_GetHmdDesc(mDevice);
ovrHmdDesc desc = ovr_GetHmdDesc(mDevice);
// Update window size if it's incorrect
Point2I backbufferSize = mDrawCanvas->getBounds().extent;
// Finally setup!
if (!setupTargets())
{
onDeviceDestroy();
return;
}
// Finally setup!
if (!setupTargets())
{
onDeviceDestroy();
return;
}
mRenderConfigurationDirty = false;
}
@ -583,12 +583,12 @@ void OculusVRHMDDevice::clearRenderTargets()
mEyeRT[0] = NULL;
mEyeRT[1] = NULL;
if (mDebugMirrorTexture)
{
ovr_DestroyMirrorTexture(mDevice, mDebugMirrorTexture);
mDebugMirrorTexture = NULL;
mDebugMirrorTextureHandle = NULL;
}
if (mDebugMirrorTexture)
{
ovr_DestroyMirrorTexture(mDevice, mDebugMirrorTexture);
mDebugMirrorTexture = NULL;
mDebugMirrorTextureHandle = NULL;
}
}
void OculusVRHMDDevice::updateCaps()
@ -609,21 +609,21 @@ void OculusVRHMDDevice::onStartFrame()
sInFrame = true;
ovrVector3f hmdToEyeViewOffset[2] = { mEyeRenderDesc[0].HmdToEyeViewOffset, mEyeRenderDesc[1].HmdToEyeViewOffset };
ovrTrackingState hmdState = ovr_GetTrackingState(mDevice, 0, ovrTrue);
ovr_CalcEyePoses(hmdState.HeadPose.ThePose, hmdToEyeViewOffset, mRenderLayer.RenderPose);
ovrTrackingState hmdState = ovr_GetTrackingState(mDevice, 0, ovrTrue);
ovr_CalcEyePoses(hmdState.HeadPose.ThePose, hmdToEyeViewOffset, mRenderLayer.RenderPose);
for (U32 i=0; i<2; i++)
{
mRenderLayer.RenderPose[i].Position.x *= OculusVRDevice::smPositionTrackingScale;
mRenderLayer.RenderPose[i].Position.y *= OculusVRDevice::smPositionTrackingScale;
mRenderLayer.RenderPose[i].Position.z *= OculusVRDevice::smPositionTrackingScale;
mRenderLayer.RenderPose[i].Position.x *= OculusVRDevice::smPositionTrackingScale;
mRenderLayer.RenderPose[i].Position.y *= OculusVRDevice::smPositionTrackingScale;
mRenderLayer.RenderPose[i].Position.z *= OculusVRDevice::smPositionTrackingScale;
}
mRenderLayer.SensorSampleTime = ovr_GetTimeInSeconds();
mRenderLayer.SensorSampleTime = ovr_GetTimeInSeconds();
// Set current dest texture on stereo render target
D3D11OculusTexture* texSwap = (D3D11OculusTexture*)mTextureSwapSet;
mStereoRT->attachTexture(GFXTextureTarget::Color0, texSwap->TexRtv[texSwap->TextureSet->CurrentIndex]);
// Set current dest texture on stereo render target
D3D11OculusTexture* texSwap = (D3D11OculusTexture*)mTextureSwapSet;
mStereoRT->attachTexture(GFXTextureTarget::Color0, texSwap->TexRtv[texSwap->TextureSet->CurrentIndex]);
sInFrame = false;
mFrameReady = true;
@ -639,32 +639,32 @@ void OculusVRHMDDevice::onEndFrame()
GFXD3D11Device *d3d11GFX = dynamic_cast<GFXD3D11Device*>(GFX);
ovrViewScaleDesc viewScaleDesc;
ovrVector3f hmdToEyeViewOffset[2] = { mEyeRenderDesc[0].HmdToEyeViewOffset, mEyeRenderDesc[1].HmdToEyeViewOffset };
viewScaleDesc.HmdSpaceToWorldScaleInMeters = 1.0f;
viewScaleDesc.HmdToEyeViewOffset[0] = hmdToEyeViewOffset[0];
viewScaleDesc.HmdToEyeViewOffset[1] = hmdToEyeViewOffset[1];
ovrViewScaleDesc viewScaleDesc;
ovrVector3f hmdToEyeViewOffset[2] = { mEyeRenderDesc[0].HmdToEyeViewOffset, mEyeRenderDesc[1].HmdToEyeViewOffset };
viewScaleDesc.HmdSpaceToWorldScaleInMeters = 1.0f;
viewScaleDesc.HmdToEyeViewOffset[0] = hmdToEyeViewOffset[0];
viewScaleDesc.HmdToEyeViewOffset[1] = hmdToEyeViewOffset[1];
ovrLayerDirect ld = { { ovrLayerType_Direct } };
mDebugRenderLayer = ld;
ovrLayerDirect ld = { { ovrLayerType_Direct } };
mDebugRenderLayer = ld;
mDebugRenderLayer.ColorTexture[0] = mRenderLayer.ColorTexture[0];
mDebugRenderLayer.ColorTexture[1] = mRenderLayer.ColorTexture[1];
mDebugRenderLayer.Viewport[0] = mRenderLayer.Viewport[0];
mDebugRenderLayer.Viewport[1] = mRenderLayer.Viewport[1];
mDebugRenderLayer.ColorTexture[0] = mRenderLayer.ColorTexture[0];
mDebugRenderLayer.ColorTexture[1] = mRenderLayer.ColorTexture[1];
mDebugRenderLayer.Viewport[0] = mRenderLayer.Viewport[0];
mDebugRenderLayer.Viewport[1] = mRenderLayer.Viewport[1];
// TODO: use ovrViewScaleDesc
ovrLayerHeader* layers = &mRenderLayer.Header;
ovrResult result = ovr_SubmitFrame(mDevice, 0, &viewScaleDesc, &layers, 1);
mTextureSwapSet->AdvanceToNextTexture();
// TODO: use ovrViewScaleDesc
ovrLayerHeader* layers = &mRenderLayer.Header;
ovrResult result = ovr_SubmitFrame(mDevice, 0, &viewScaleDesc, &layers, 1);
mTextureSwapSet->AdvanceToNextTexture();
if (OVR_SUCCESS(result))
{
int woo = 1;
}
if (OVR_SUCCESS(result))
{
int woo = 1;
}
// TODO: render preview in display?
// TODO: render preview in display?
mFrameReady = false;
}
@ -700,11 +700,11 @@ void OculusVRHMDDevice::onDeviceDestroy()
mEyeRT[1]->zombify();
}
if (mTextureSwapSet)
{
delete mTextureSwapSet;
mTextureSwapSet = NULL;
}
if (mTextureSwapSet)
{
delete mTextureSwapSet;
mTextureSwapSet = NULL;
}
mStereoRT = NULL;
mStereoDepthTexture = NULL;

View file

@ -102,7 +102,7 @@ protected:
OculusVRSensorDevice *mSensor;
U32 mActionCodeIndex;
ovrGraphicsLuid mLuid;
ovrGraphicsLuid mLuid;
protected:
void updateRenderInfo();
@ -126,7 +126,7 @@ public:
U32 getVersion() const { return mVersion; }
// Windows display device name used in EnumDisplaySettings/CreateDC
const char* getDisplayDeviceType () const { return mDisplayDeviceType.c_str(); }
const char* getDisplayDeviceType () const { return mDisplayDeviceType.c_str(); }
// MacOS display ID
S32 getDisplayDeviceId() const { return mDisplayId; }
@ -190,7 +190,7 @@ public:
String dumpMetrics();
// Stereo RT
GFXTexHandle mDebugStereoTexture;
GFXTexHandle mDebugStereoTexture;
GFXTexHandle mStereoDepthTexture;
GFXTextureTargetRef mStereoRT;
@ -204,12 +204,12 @@ public:
F32 smDesiredPixelDensity;
ovrTrackingState mLastTrackingState;
OculusTexture* mTextureSwapSet;
ovrLayerEyeFov mRenderLayer;
ovrLayerDirect mDebugRenderLayer;
ovrViewScaleDesc mScaleDesc;
ovrTexture* mDebugMirrorTexture;
GFXTexHandle mDebugMirrorTextureHandle;
OculusTexture* mTextureSwapSet;
ovrLayerEyeFov mRenderLayer;
ovrLayerDirect mDebugRenderLayer;
ovrViewScaleDesc mScaleDesc;
ovrTexture* mDebugMirrorTexture;
GFXTexHandle mDebugMirrorTextureHandle;
GFXDevice::GFXDeviceRenderStyles mDesiredRenderingMode;

View file

@ -102,10 +102,10 @@ bool OpenVROverlay::onAdd()
mOverlayTypeDirty = true;
mOverlayDirty = true;
if (OPENVR)
{
OPENVR->registerOverlay(this);
}
if (OPENVR)
{
OPENVR->registerOverlay(this);
}
return true;
}
@ -127,10 +127,10 @@ void OpenVROverlay::onRemove()
mThumbOverlayHandle = NULL;
}
if (ManagedSingleton<OpenVRProvider>::instanceOrNull())
{
OPENVR->unregisterOverlay(this);
}
if (ManagedSingleton<OpenVRProvider>::instanceOrNull())
{
OPENVR->unregisterOverlay(this);
}
}
void OpenVROverlay::resetOverlay()
@ -233,14 +233,14 @@ void OpenVROverlay::showOverlay()
if (mOverlayHandle == NULL)
return;
if (mOverlayType != OVERLAYTYPE_DASHBOARD)
{
vr::EVROverlayError err = vr::VROverlay()->ShowOverlay(mOverlayHandle);
if (err != vr::VROverlayError_None)
{
Con::errorf("VR Overlay error!");
}
}
if (mOverlayType != OVERLAYTYPE_DASHBOARD)
{
vr::EVROverlayError err = vr::VROverlay()->ShowOverlay(mOverlayHandle);
if (err != vr::VROverlayError_None)
{
Con::errorf("VR Overlay error!");
}
}
if (!mStagingTexture)
{
@ -253,10 +253,10 @@ void OpenVROverlay::hideOverlay()
if (mOverlayHandle == NULL)
return;
if (mOverlayType != OVERLAYTYPE_DASHBOARD)
{
vr::VROverlay()->HideOverlay(mOverlayHandle);
}
if (mOverlayType != OVERLAYTYPE_DASHBOARD)
{
vr::VROverlay()->HideOverlay(mOverlayHandle);
}
}
@ -317,8 +317,8 @@ bool OpenVROverlay::castRay(const Point3F &origin, const Point3F &direction, Ray
vr::VROverlayIntersectionParams_t params;
vr::VROverlayIntersectionResults_t result;
Point3F ovrOrigin = OpenVRUtil::convertPointToOVR(origin);
Point3F ovrDirection = OpenVRUtil::convertPointToOVR(direction);
Point3F ovrOrigin = OpenVRUtil::convertPointToOVR(origin);
Point3F ovrDirection = OpenVRUtil::convertPointToOVR(direction);
params.eOrigin = mTrackingOrigin;
params.vSource.v[0] = ovrOrigin.x;
@ -350,17 +350,17 @@ void OpenVROverlay::moveGamepadFocusToNeighbour()
void OpenVROverlay::handleOpenVREvents()
{
if (mManualMouseHandling)
{
// tell OpenVR to make some events for us
for (vr::TrackedDeviceIndex_t unDeviceId = 1; unDeviceId < vr::k_unControllerStateAxisCount; unDeviceId++)
{
if (vr::VROverlay()->HandleControllerOverlayInteractionAsMouse(mOverlayHandle, unDeviceId))
{
break;
}
}
}
if (mManualMouseHandling)
{
// tell OpenVR to make some events for us
for (vr::TrackedDeviceIndex_t unDeviceId = 1; unDeviceId < vr::k_unControllerStateAxisCount; unDeviceId++)
{
if (vr::VROverlay()->HandleControllerOverlayInteractionAsMouse(mOverlayHandle, unDeviceId))
{
break;
}
}
}
vr::VREvent_t vrEvent;
@ -373,13 +373,13 @@ void OpenVROverlay::handleOpenVREvents()
eventInfo.modifier = (InputModifiers)0;
eventInfo.ascii = 0;
//Con::printf("Overlay event %i", vrEvent.eventType);
//Con::printf("Overlay event %i", vrEvent.eventType);
switch (vrEvent.eventType)
{
case vr::VREvent_MouseMove:
{
//Con::printf("mousemove %f,%f", vrEvent.data.mouse.x, vrEvent.data.mouse.y);
//Con::printf("mousemove %f,%f", vrEvent.data.mouse.x, vrEvent.data.mouse.y);
eventInfo.objType = SI_AXIS;
eventInfo.objInst = SI_XAXIS;
eventInfo.action = SI_MAKE;
@ -424,11 +424,11 @@ void OpenVROverlay::handleOpenVREvents()
AssertFatal(false, "WTF is going on here");
break;
case vr::VREvent_KeyboardCharInput:
case vr::VREvent_KeyboardDone:
updateTextControl((GuiControl*)vrEvent.data.keyboard.uUserValue);
break;
}
case vr::VREvent_KeyboardCharInput:
case vr::VREvent_KeyboardDone:
updateTextControl((GuiControl*)vrEvent.data.keyboard.uUserValue);
break;
}
}
@ -450,16 +450,16 @@ void OpenVROverlay::handleOpenVREvents()
void OpenVROverlay::updateTextControl(GuiControl* ctrl)
{
if (!ctrl)
return;
if (!ctrl)
return;
GuiTextCtrl* textCtrl = dynamic_cast<GuiTextCtrl*>(ctrl);
if (textCtrl)
{
char text[GuiTextCtrl::MAX_STRING_LENGTH];
vr::VROverlay()->GetKeyboardText(text, GuiTextCtrl::MAX_STRING_LENGTH);
textCtrl->setText(text);
}
GuiTextCtrl* textCtrl = dynamic_cast<GuiTextCtrl*>(ctrl);
if (textCtrl)
{
char text[GuiTextCtrl::MAX_STRING_LENGTH];
vr::VROverlay()->GetKeyboardText(text, GuiTextCtrl::MAX_STRING_LENGTH);
textCtrl->setText(text);
}
}
void OpenVROverlay::onFrameRendered()
@ -508,27 +508,27 @@ void OpenVROverlay::onFrameRendered()
void OpenVROverlay::enableKeyboardTranslation()
{
vr::IVROverlay *overlay = vr::VROverlay();
if (!overlay || !mOverlayHandle)
return;
vr::IVROverlay *overlay = vr::VROverlay();
if (!overlay || !mOverlayHandle)
return;
GuiTextEditCtrl* ctrl = dynamic_cast<GuiTextEditCtrl*>(getFirstResponder());
if (ctrl)
{
vr::EGamepadTextInputMode inputMode = ctrl->isPasswordText() ? vr::k_EGamepadTextInputModePassword : vr::k_EGamepadTextInputModeNormal;
char text[GuiTextCtrl::MAX_STRING_LENGTH + 1];
ctrl->getText(text);
overlay->ShowKeyboardForOverlay(mOverlayHandle, inputMode, vr::k_EGamepadTextInputLineModeSingleLine, ctrl->getTooltip().c_str(), GuiTextCtrl::MAX_STRING_LENGTH, text, false, (uint64_t)ctrl);
}
GuiTextEditCtrl* ctrl = dynamic_cast<GuiTextEditCtrl*>(getFirstResponder());
if (ctrl)
{
vr::EGamepadTextInputMode inputMode = ctrl->isPasswordText() ? vr::k_EGamepadTextInputModePassword : vr::k_EGamepadTextInputModeNormal;
char text[GuiTextCtrl::MAX_STRING_LENGTH + 1];
ctrl->getText(text);
overlay->ShowKeyboardForOverlay(mOverlayHandle, inputMode, vr::k_EGamepadTextInputLineModeSingleLine, ctrl->getTooltip().c_str(), GuiTextCtrl::MAX_STRING_LENGTH, text, false, (uint64_t)ctrl);
}
}
void OpenVROverlay::disableKeyboardTranslation()
{
vr::IVROverlay *overlay = vr::VROverlay();
if (!overlay || !mOverlayHandle)
return;
vr::IVROverlay *overlay = vr::VROverlay();
if (!overlay || !mOverlayHandle)
return;
overlay->HideKeyboard();
overlay->HideKeyboard();
}
void OpenVROverlay::setNativeAcceleratorsEnabled(bool enabled)

View file

@ -57,7 +57,7 @@ public:
bool mOverlayTypeDirty; ///< Overlay type is dirty
bool mOverlayDirty; ///< Overlay properties are dirty
bool mManualMouseHandling;
bool mManualMouseHandling;
OverlayType mOverlayType;
//
@ -90,12 +90,12 @@ public:
void moveGamepadFocusToNeighbour();
void handleOpenVREvents();
void updateTextControl(GuiControl* ctrl);
void updateTextControl(GuiControl* ctrl);
void onFrameRendered();
virtual void enableKeyboardTranslation();
virtual void disableKeyboardTranslation();
virtual void setNativeAcceleratorsEnabled(bool enabled);
virtual void enableKeyboardTranslation();
virtual void disableKeyboardTranslation();
virtual void setNativeAcceleratorsEnabled(bool enabled);
};
typedef OpenVROverlay::OverlayType OpenVROverlayType;

File diff suppressed because it is too large Load diff

View file

@ -62,91 +62,91 @@ namespace OpenVRUtil
U32 convertOpenVRButtonToTorqueButton(uint32_t vrButton);
/// Converts a point to OVR coords
inline Point3F convertPointToOVR(const Point3F &point)
{
return Point3F(-point.x, -point.z, point.y);
}
/// Converts a point to OVR coords
inline Point3F convertPointToOVR(const Point3F &point)
{
return Point3F(-point.x, -point.z, point.y);
}
/// Converts a point from OVR coords
inline Point3F convertPointFromOVR(const Point3F &point)
{
return Point3F(-point.x, point.z, -point.y);
}
/// Converts a point from OVR coords
inline Point3F convertPointFromOVR(const Point3F &point)
{
return Point3F(-point.x, point.z, -point.y);
}
// Converts a point from OVR coords, from an input float array
inline Point3F convertPointFromOVR(const vr::HmdVector3_t& v)
{
return Point3F(-v.v[0], v.v[2], -v.v[1]);
}
// Converts a point from OVR coords, from an input float array
inline Point3F convertPointFromOVR(const vr::HmdVector3_t& v)
{
return Point3F(-v.v[0], v.v[2], -v.v[1]);
}
};
template<int TEXSIZE> class VRTextureSet
{
public:
static const int TextureCount = TEXSIZE;
GFXTexHandle mTextures[TEXSIZE];
U32 mIndex;
static const int TextureCount = TEXSIZE;
GFXTexHandle mTextures[TEXSIZE];
U32 mIndex;
VRTextureSet() : mIndex(0)
{
}
VRTextureSet() : mIndex(0)
{
}
void init(U32 width, U32 height, GFXFormat fmt, GFXTextureProfile *profile, const String &desc)
{
for (U32 i = 0; i < TextureCount; i++)
{
mTextures[i].set(width, height, fmt, profile, desc);
}
}
void init(U32 width, U32 height, GFXFormat fmt, GFXTextureProfile *profile, const String &desc)
{
for (U32 i = 0; i < TextureCount; i++)
{
mTextures[i].set(width, height, fmt, profile, desc);
}
}
void clear()
{
for (U32 i = 0; i < TextureCount; i++)
{
mTextures[i] = NULL;
}
}
void clear()
{
for (U32 i = 0; i < TextureCount; i++)
{
mTextures[i] = NULL;
}
}
void advance()
{
mIndex = (mIndex + 1) % TextureCount;
}
void advance()
{
mIndex = (mIndex + 1) % TextureCount;
}
GFXTexHandle& getTextureHandle()
{
return mTextures[mIndex];
}
GFXTexHandle& getTextureHandle()
{
return mTextures[mIndex];
}
};
/// Simple class to handle rendering native OpenVR model data
class OpenVRRenderModel
{
public:
typedef GFXVertexPNT VertexType;
GFXVertexBufferHandle<VertexType> mVertexBuffer;
GFXPrimitiveBufferHandle mPrimitiveBuffer;
BaseMatInstance* mMaterialInstance; ///< Material to use for rendering. NOTE:
Box3F mLocalBox;
typedef GFXVertexPNT VertexType;
GFXVertexBufferHandle<VertexType> mVertexBuffer;
GFXPrimitiveBufferHandle mPrimitiveBuffer;
BaseMatInstance* mMaterialInstance; ///< Material to use for rendering. NOTE:
Box3F mLocalBox;
OpenVRRenderModel() : mMaterialInstance(NULL)
{
}
OpenVRRenderModel() : mMaterialInstance(NULL)
{
}
~OpenVRRenderModel()
{
SAFE_DELETE(mMaterialInstance);
}
~OpenVRRenderModel()
{
SAFE_DELETE(mMaterialInstance);
}
Box3F getWorldBox(MatrixF &mat)
{
Box3F ret = mLocalBox;
mat.mul(ret);
return ret;
}
Box3F getWorldBox(MatrixF &mat)
{
Box3F ret = mLocalBox;
mat.mul(ret);
return ret;
}
bool init(const vr::RenderModel_t & vrModel, StringTableEntry materialName);
void draw(SceneRenderState *state, MeshRenderInst* renderInstance);
bool init(const vr::RenderModel_t & vrModel, StringTableEntry materialName);
void draw(SceneRenderState *state, MeshRenderInst* renderInstance);
};
struct OpenVRRenderState
@ -196,21 +196,21 @@ public:
struct LoadedRenderModel
{
StringTableEntry name;
vr::RenderModel_t *vrModel;
OpenVRRenderModel *model;
vr::EVRRenderModelError modelError;
S32 textureId;
bool loadedTexture;
StringTableEntry name;
vr::RenderModel_t *vrModel;
OpenVRRenderModel *model;
vr::EVRRenderModelError modelError;
S32 textureId;
bool loadedTexture;
};
struct LoadedRenderTexture
{
U32 vrTextureId;
vr::RenderModel_TextureMap_t *vrTexture;
GFXTextureObject *texture;
NamedTexTarget *targetTexture;
vr::EVRRenderModelError textureError;
U32 vrTextureId;
vr::RenderModel_TextureMap_t *vrTexture;
GFXTextureObject *texture;
NamedTexTarget *targetTexture;
vr::EVRRenderModelError textureError;
};
OpenVRProvider();
@ -283,21 +283,21 @@ public:
IDevicePose getTrackedDevicePose(U32 idx);
/// }
/// @name Overlay registration
/// {
void registerOverlay(OpenVROverlay* overlay);
void unregisterOverlay(OpenVROverlay* overlay);
/// }
/// @name Overlay registration
/// {
void registerOverlay(OpenVROverlay* overlay);
void unregisterOverlay(OpenVROverlay* overlay);
/// }
/// @name Model loading
/// {
const S32 preloadRenderModel(StringTableEntry name);
const S32 preloadRenderModelTexture(U32 index);
bool getRenderModel(S32 idx, OpenVRRenderModel **ret, bool &failed);
bool getRenderModelTexture(S32 idx, GFXTextureObject **outTex, bool &failed);
bool getRenderModelTextureName(S32 idx, String &outName);
void resetRenderModels();
/// }
/// @name Model loading
/// {
const S32 preloadRenderModel(StringTableEntry name);
const S32 preloadRenderModelTexture(U32 index);
bool getRenderModel(S32 idx, OpenVRRenderModel **ret, bool &failed);
bool getRenderModelTexture(S32 idx, GFXTextureObject **outTex, bool &failed);
bool getRenderModelTextureName(S32 idx, String &outName);
void resetRenderModels();
/// }
/// @name Console API
@ -338,17 +338,17 @@ public:
vr::ETrackingUniverseOrigin mTrackingSpace;
Vector<OpenVROverlay*> mOverlays;
Vector<OpenVROverlay*> mOverlays;
VREventSignal mVREventSignal;
Namespace *mOpenVRNS;
VREventSignal mVREventSignal;
Namespace *mOpenVRNS;
Vector<LoadedRenderModel> mLoadedModels;
Vector<LoadedRenderTexture> mLoadedTextures;
Map<StringTableEntry, S32> mLoadedModelLookup;
Map<U32, S32> mLoadedTextureLookup;
Vector<LoadedRenderModel> mLoadedModels;
Vector<LoadedRenderTexture> mLoadedTextures;
Map<StringTableEntry, S32> mLoadedModelLookup;
Map<U32, S32> mLoadedTextureLookup;
Map<U32, S32> mDeviceEventMap;
Map<U32, S32> mDeviceEventMap;
/// }
GuiCanvas* mDrawCanvas;

File diff suppressed because it is too large Load diff

View file

@ -23,132 +23,132 @@ class PhysicsBody;
class OpenVRTrackedObjectData : public GameBaseData {
public:
typedef GameBaseData Parent;
typedef GameBaseData Parent;
StringTableEntry mShapeFile;
Resource<TSShape> mShape; ///< Torque model
StringTableEntry mShapeFile;
Resource<TSShape> mShape; ///< Torque model
Point3F mCollisionBoxMin;
Point3F mCollisionBoxMax;
Point3F mCollisionBoxMin;
Point3F mCollisionBoxMax;
public:
OpenVRTrackedObjectData();
~OpenVRTrackedObjectData();
OpenVRTrackedObjectData();
~OpenVRTrackedObjectData();
DECLARE_CONOBJECT(OpenVRTrackedObjectData);
DECLARE_CONOBJECT(OpenVRTrackedObjectData);
bool onAdd();
bool preload(bool server, String &errorStr);
bool onAdd();
bool preload(bool server, String &errorStr);
static void initPersistFields();
static void initPersistFields();
virtual void packData(BitStream* stream);
virtual void unpackData(BitStream* stream);
virtual void packData(BitStream* stream);
virtual void unpackData(BitStream* stream);
};
/// Implements a GameObject which tracks an OpenVR controller
class OpenVRTrackedObject : public GameBase
{
typedef GameBase Parent;
typedef GameBase Parent;
enum MaskBits
{
UpdateMask = Parent::NextFreeMask << 0,
NextFreeMask = Parent::NextFreeMask << 1
};
enum MaskBits
{
UpdateMask = Parent::NextFreeMask << 0,
NextFreeMask = Parent::NextFreeMask << 1
};
struct RenderModelSlot
{
StringTableEntry componentName; ///< Component name
S16 mappedNodeIdx; ///< Mapped node idx in mShape
OpenVRRenderModel *nativeModel; ///< Native model
};
struct RenderModelSlot
{
StringTableEntry componentName; ///< Component name
S16 mappedNodeIdx; ///< Mapped node idx in mShape
OpenVRRenderModel *nativeModel; ///< Native model
};
OpenVRTrackedObjectData *mDataBlock;
OpenVRTrackedObjectData *mDataBlock;
/// @name Rendering
/// {
TSShapeInstance *mShapeInstance; ///< Shape used to render controller (uses native model otherwise)
StringTableEntry mModelName;
OpenVRRenderModel *mBasicModel; ///< Basic model
Vector<RenderModelSlot> mRenderComponents;
/// }
/// @name Rendering
/// {
TSShapeInstance *mShapeInstance; ///< Shape used to render controller (uses native model otherwise)
StringTableEntry mModelName;
OpenVRRenderModel *mBasicModel; ///< Basic model
Vector<RenderModelSlot> mRenderComponents;
/// }
S32 mDeviceIndex; ///< Controller idx in openvr (for direct updating)
S32 mMappedMoveIndex; ///< Movemanager move index for rotation
S32 mDeviceIndex; ///< Controller idx in openvr (for direct updating)
S32 mMappedMoveIndex; ///< Movemanager move index for rotation
vr::VRControllerState_t mCurrentControllerState;
vr::VRControllerState_t mPreviousControllerState;
vr::VRControllerState_t mCurrentControllerState;
vr::VRControllerState_t mPreviousControllerState;
IDevicePose mPose; ///< Current openvr pose data, or reconstructed data from the client
IDevicePose mPose; ///< Current openvr pose data, or reconstructed data from the client
Convex* mConvexList;
EarlyOutPolyList mClippedList;
PhysicsBody *mPhysicsRep;
Convex* mConvexList;
EarlyOutPolyList mClippedList;
PhysicsBody *mPhysicsRep;
SimObjectPtr<SceneObject> mCollisionObject; ///< Object we're currently colliding with
SimObjectPtr<SceneObject> mInteractObject; ///< Object we've designated as important to interact with
SimObjectPtr<SceneObject> mCollisionObject; ///< Object we're currently colliding with
SimObjectPtr<SceneObject> mInteractObject; ///< Object we've designated as important to interact with
bool mHoldInteractedObject; ///< Performs pickup logic with mInteractObject
bool mIgnoreParentRotation; ///< Ignores the rotation of the parent object
bool mHoldInteractedObject; ///< Performs pickup logic with mInteractObject
bool mIgnoreParentRotation; ///< Ignores the rotation of the parent object
static bool smDebugControllerPosition; ///< Shows latest controller position in DebugDrawer
static bool smDebugControllerMovePosition; ///< Shows move position in DebugDrawer
static U32 sServerCollisionMask;
static U32 sClientCollisionMask;
static bool smDebugControllerPosition; ///< Shows latest controller position in DebugDrawer
static bool smDebugControllerMovePosition; ///< Shows move position in DebugDrawer
static U32 sServerCollisionMask;
static U32 sClientCollisionMask;
public:
OpenVRTrackedObject();
virtual ~OpenVRTrackedObject();
OpenVRTrackedObject();
virtual ~OpenVRTrackedObject();
void updateRenderData();
void setupRenderDataFromModel(bool loadComponentModels);
void updateRenderData();
void setupRenderDataFromModel(bool loadComponentModels);
void clearRenderData();
void clearRenderData();
DECLARE_CONOBJECT(OpenVRTrackedObject);
DECLARE_CONOBJECT(OpenVRTrackedObject);
static void initPersistFields();
static void initPersistFields();
virtual void inspectPostApply();
virtual void inspectPostApply();
bool onAdd();
void onRemove();
bool onAdd();
void onRemove();
void _updatePhysics();
bool onNewDataBlock(GameBaseData *dptr, bool reload);
void _updatePhysics();
bool onNewDataBlock(GameBaseData *dptr, bool reload);
void setInteractObject(SceneObject* object, bool holding);
void setInteractObject(SceneObject* object, bool holding);
void setTransform(const MatrixF &mat);
void setModelName(String &modelName);
void setTransform(const MatrixF &mat);
void setModelName(String &modelName);
U32 packUpdate(NetConnection *conn, U32 mask, BitStream *stream);
void unpackUpdate(NetConnection *conn, BitStream *stream);
void writePacketData(GameConnection *conn, BitStream *stream);
void readPacketData(GameConnection *conn, BitStream *stream);
U32 packUpdate(NetConnection *conn, U32 mask, BitStream *stream);
void unpackUpdate(NetConnection *conn, BitStream *stream);
void writePacketData(GameConnection *conn, BitStream *stream);
void readPacketData(GameConnection *conn, BitStream *stream);
void prepRenderImage(SceneRenderState *state);
void prepRenderImage(SceneRenderState *state);
MatrixF getTrackedTransform();
MatrixF getLastTrackedTransform();
MatrixF getBaseTrackingTransform();
MatrixF getTrackedTransform();
MatrixF getLastTrackedTransform();
MatrixF getBaseTrackingTransform();
U32 getCollisionMask();
void updateWorkingCollisionSet();
U32 getCollisionMask();
void updateWorkingCollisionSet();
// Time management
void updateMove(const Move *move);
void processTick(const Move *move);
void interpolateTick(F32 delta);
void advanceTime(F32 dt);
// Time management
void updateMove(const Move *move);
void processTick(const Move *move);
void interpolateTick(F32 delta);
void advanceTime(F32 dt);
// Collision
bool castRay(const Point3F &start, const Point3F &end, RayInfo* info);
void buildConvex(const Box3F& box, Convex* convex);
bool testObject(SceneObject* enter);
// Collision
bool castRay(const Point3F &start, const Point3F &end, RayInfo* info);
void buildConvex(const Box3F& box, Convex* convex);
bool testObject(SceneObject* enter);
};