OVR: Added rendering without distortion.

This commit is contained in:
Branimir Karadžić 2014-11-12 21:26:28 -08:00
parent 4ce229b13a
commit e147e7b2e6
5 changed files with 82 additions and 9 deletions

View file

@ -118,6 +118,7 @@ namespace entry
{ entry::Key::F3, entry::Modifier::None, 1, cmd, "graphics wireframe" }, { entry::Key::F3, entry::Modifier::None, 1, cmd, "graphics wireframe" },
{ entry::Key::F4, entry::Modifier::None, 1, cmd, "graphics hmd" }, { entry::Key::F4, entry::Modifier::None, 1, cmd, "graphics hmd" },
{ entry::Key::F4, entry::Modifier::LeftShift, 1, cmd, "graphics hmdrecenter" }, { entry::Key::F4, entry::Modifier::LeftShift, 1, cmd, "graphics hmdrecenter" },
{ entry::Key::F4, entry::Modifier::LeftCtrl, 1, cmd, "graphics hmddbg" },
{ entry::Key::F7, entry::Modifier::None, 1, cmd, "graphics vsync" }, { entry::Key::F7, entry::Modifier::None, 1, cmd, "graphics vsync" },
{ entry::Key::F8, entry::Modifier::None, 1, cmd, "graphics msaa" }, { entry::Key::F8, entry::Modifier::None, 1, cmd, "graphics msaa" },
{ entry::Key::Print, entry::Modifier::None, 1, cmd, "graphics screenshot" }, { entry::Key::Print, entry::Modifier::None, 1, cmd, "graphics screenshot" },

View file

@ -12,6 +12,7 @@ namespace bgfx
OVR::OVR() OVR::OVR()
: m_hmd(NULL) : m_hmd(NULL)
, m_initialized(false) , m_initialized(false)
, m_debug(false)
{ {
} }
@ -39,6 +40,46 @@ namespace bgfx
return false; return false;
} }
if (_debug)
{
switch (_config->Header.API)
{
#if BGFX_CONFIG_RENDERER_DIRECT3D9
case ovrRenderAPI_D3D9:
{
ovrD3D9ConfigData* data = (ovrD3D9ConfigData*)_config;
m_rtSize = data->Header.RTSize;
}
break;
#endif // BGFX_CONFIG_RENDERER_DIRECT3D9
#if BGFX_CONFIG_RENDERER_DIRECT3D11
case ovrRenderAPI_D3D11:
{
ovrD3D11ConfigData* data = (ovrD3D11ConfigData*)_config;
m_rtSize = data->Header.RTSize;
}
break;
#endif // BGFX_CONFIG_RENDERER_DIRECT3D11
#if BGFX_CONFIG_RENDERER_OPENGL
case ovrRenderAPI_OpenGL:
{
ovrGLConfigData* data = (ovrGLConfigData*)_config;
m_rtSize = data->Header.RTSize;
}
break;
#endif // BGFX_CONFIG_RENDERER_OPENGL
default:
BX_CHECK(false, "You should not be here!");
break;
}
m_debug = true;
return false;
}
if (!_debug) if (!_debug)
{ {
m_hmd = ovrHmd_Create(0); m_hmd = ovrHmd_Create(0);
@ -67,6 +108,7 @@ namespace bgfx
| ovrDistortionCap_Vignette | ovrDistortionCap_Vignette
| ovrDistortionCap_TimeWarp | ovrDistortionCap_TimeWarp
| ovrDistortionCap_Overdrive | ovrDistortionCap_Overdrive
| ovrDistortionCap_NoRestore
, eyeFov , eyeFov
, m_erd , m_erd
); );
@ -135,6 +177,8 @@ ovrError:
ovrHmd_Destroy(m_hmd); ovrHmd_Destroy(m_hmd);
m_hmd = NULL; m_hmd = NULL;
} }
m_debug = false;
} }
bool OVR::swap() bool OVR::swap()
@ -197,17 +241,34 @@ ovrError:
eye.pixelsPerTanAngle[0] = erd.PixelsPerTanAngleAtCenter.x; eye.pixelsPerTanAngle[0] = erd.PixelsPerTanAngleAtCenter.x;
eye.pixelsPerTanAngle[1] = erd.PixelsPerTanAngleAtCenter.y; eye.pixelsPerTanAngle[1] = erd.PixelsPerTanAngleAtCenter.y;
} }
_hmd.width = uint16_t(m_rtSize.w);
_hmd.height = uint16_t(m_rtSize.h);
} }
else else
{ {
_hmd.width = 0; for (int ii = 0; ii < 2; ++ii)
_hmd.height = 0; {
_hmd.eye[ii].rotation[0] = 0.0f;
_hmd.eye[ii].rotation[1] = 0.0f;
_hmd.eye[ii].rotation[2] = 0.0f;
_hmd.eye[ii].rotation[3] = 1.0f;
_hmd.eye[ii].translation[0] = 0.0f;
_hmd.eye[ii].translation[1] = 0.0f;
_hmd.eye[ii].translation[2] = 0.0f;
_hmd.eye[ii].fov[0] = 1.32928634f;
_hmd.eye[ii].fov[1] = 1.32928634f;
_hmd.eye[ii].fov[2] = 0 == ii ? 1.05865765f : 1.09236801f;
_hmd.eye[ii].fov[3] = 0 == ii ? 1.09236801f : 1.05865765f;
_hmd.eye[ii].viewOffset[0] = 0 == ii ? 0.0355070010f : -0.0375000015f;
_hmd.eye[ii].viewOffset[1] = 0.0f;
_hmd.eye[ii].viewOffset[2] = 0 == ii ? 0.00150949787f : -0.00150949787f;
_hmd.eye[ii].pixelsPerTanAngle[0] = 1;
_hmd.eye[ii].pixelsPerTanAngle[1] = 1;
} }
} }
_hmd.width = uint16_t(m_rtSize.w);
_hmd.height = uint16_t(m_rtSize.h);
}
} // namespace bgfx } // namespace bgfx
#endif // BGFX_CONFIG_USE_OVR #endif // BGFX_CONFIG_USE_OVR

View file

@ -44,6 +44,11 @@ namespace bgfx
return NULL != m_hmd; return NULL != m_hmd;
} }
bool isDebug() const
{
return m_debug;
}
void init(); void init();
void shutdown(); void shutdown();
@ -68,6 +73,7 @@ namespace bgfx
ovrSizei m_rtSize; ovrSizei m_rtSize;
bool m_warning; bool m_warning;
bool m_initialized; bool m_initialized;
bool m_debug;
}; };
} // namespace bgfx } // namespace bgfx
@ -104,6 +110,11 @@ namespace bgfx
return false; return false;
} }
bool isDebug() const
{
return false;
}
bool swap() bool swap()
{ {
return false; return false;

View file

@ -1833,9 +1833,9 @@ RENDERDOC_IMPORT
void ovrPreReset() void ovrPreReset()
{ {
#if BGFX_CONFIG_USE_OVR #if BGFX_CONFIG_USE_OVR
m_ovr.preReset();
if (NULL != m_ovrRtv) if (NULL != m_ovrRtv)
{ {
m_ovr.preReset();
std::swap(m_ovrRtv, m_backBufferColor); std::swap(m_ovrRtv, m_backBufferColor);
std::swap(m_ovrDsv, m_backBufferDepthStencil); std::swap(m_ovrDsv, m_backBufferDepthStencil);
BX_CHECK(NULL == m_backBufferDepthStencil, ""); BX_CHECK(NULL == m_backBufferDepthStencil, "");
@ -2952,7 +2952,7 @@ RENDERDOC_IMPORT
Matrix4* mtxView[2] = { _render->m_view, mtxViewTmp[1] }; Matrix4* mtxView[2] = { _render->m_view, mtxViewTmp[1] };
Matrix4 mtxViewProj[2][BGFX_CONFIG_MAX_VIEWS]; Matrix4 mtxViewProj[2][BGFX_CONFIG_MAX_VIEWS];
const bool hmdEnabled = m_ovr.isEnabled(); const bool hmdEnabled = m_ovr.isEnabled() || m_ovr.isDebug();
_render->m_hmdEnabled = hmdEnabled; _render->m_hmdEnabled = hmdEnabled;
if (hmdEnabled) if (hmdEnabled)

View file

@ -2017,9 +2017,9 @@ namespace bgfx
void ovrPreReset() void ovrPreReset()
{ {
#if BGFX_CONFIG_USE_OVR #if BGFX_CONFIG_USE_OVR
m_ovr.preReset();
if (m_ovr.isEnabled() ) if (m_ovr.isEnabled() )
{ {
m_ovr.preReset();
GL_CHECK(glBindFramebuffer(GL_FRAMEBUFFER, 0) ); GL_CHECK(glBindFramebuffer(GL_FRAMEBUFFER, 0) );
GL_CHECK(glDeleteFramebuffers(1, &m_msaaBackBufferFbo) ); GL_CHECK(glDeleteFramebuffers(1, &m_msaaBackBufferFbo) );
m_msaaBackBufferFbo = m_ovrFbo; m_msaaBackBufferFbo = m_ovrFbo;
@ -4121,7 +4121,7 @@ namespace bgfx
Matrix4* mtxView[2] = { _render->m_view, mtxViewTmp[1] }; Matrix4* mtxView[2] = { _render->m_view, mtxViewTmp[1] };
Matrix4 mtxViewProj[2][BGFX_CONFIG_MAX_VIEWS]; Matrix4 mtxViewProj[2][BGFX_CONFIG_MAX_VIEWS];
const bool hmdEnabled = m_ovr.isEnabled(); const bool hmdEnabled = m_ovr.isEnabled() || m_ovr.isDebug();
_render->m_hmdEnabled = hmdEnabled; _render->m_hmdEnabled = hmdEnabled;
if (hmdEnabled) if (hmdEnabled)