mirror of
https://github.com/scratchfoundation/bgfx.git
synced 2024-11-28 18:45:54 -05:00
VR: Fix skewed viewports with buffered eye textures
Bug fix for #419 Viewport calculations need to take VR eye buffer size into account. Noticable at the older 100px boundary. Skewing still exists at newer 8px buffer, but is harder to notice. Eventually causes pretty bad eye strain, though. Easily reproduced by setting the buffer to something obscenely large, such as 2048.
This commit is contained in:
parent
ad4b2f134f
commit
05d70ea99d
4 changed files with 31 additions and 4 deletions
|
@ -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();
|
||||
|
|
|
@ -3844,8 +3844,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
|
||||
{
|
||||
|
|
|
@ -4955,8 +4955,17 @@ namespace bgfx { namespace gl
|
|||
GL_CHECK(glInsertEventMarker(0, viewName) );
|
||||
}
|
||||
|
||||
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
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue