VR: Fix skewed viewports with buffered eye textures
@@ -69,6 +69,14 @@ namespace bgfx
ovr_Shutdown();
}
+ void OVR::getViewport(uint8_t _eye, Rect* _viewport)
+ {
+ _viewport->m_width = (m_rtSize.w - s_eyeBuffer)/2;
+ _viewport->m_height = m_rtSize.h;
+ _viewport->m_x = _eye * (m_rtSize.w + s_eyeBuffer + 1)/2;
+ _viewport->m_y = 0;
+ }
+
bool OVR::postReset(void* _nwh, ovrRenderAPIConfig* _config, bool _debug)
{
if (_debug)
@@ -67,6 +67,7 @@ namespace bgfx
void init();
void shutdown();
+ void getViewport(uint8_t _eye, Rect* _viewport);
bool postReset(void* _nwh, ovrRenderAPIConfig* _config, bool _debug = false);
void postReset(const ovrTexture& _texture);
void preReset();
@@ -3856,8 +3856,17 @@ BX_PRAGMA_DIAGNOSTIC_POP();
PIX_BEGINEVENT(D3DCOLOR_RGBA(0xff, 0x00, 0x00, 0xff), viewNameW);
- viewState.m_rect.m_x = eye * (viewState.m_rect.m_width+1)/2;
- viewState.m_rect.m_width /= 2;
+#if BGFX_CONFIG_USE_OVR
+ if (m_ovr.isEnabled())
+ m_ovr.getViewport(eye, &viewState.m_rect);
+ else
+#endif // BGFX_CONFIG_USE_OVR
+ viewState.m_rect.m_x = eye * (viewState.m_rect.m_width+1)/2;
+ viewState.m_rect.m_width /= 2;
else
@@ -4963,8 +4963,17 @@ namespace bgfx { namespace gl
GL_CHECK(glInsertEventMarker(0, viewName) );