mirror of
https://github.com/scratchfoundation/bgfx.git
synced 2025-03-22 21:06:42 -04:00
Moved HMD tracking into flip. Removed unnecessary frame data when using single-threaded renderer.
This commit is contained in:
parent
4098dbb8fb
commit
66edb6c566
8 changed files with 44 additions and 65 deletions
34
src/bgfx.cpp
34
src/bgfx.cpp
|
@ -934,14 +934,13 @@ namespace bgfx
|
||||||
|
|
||||||
m_exit = false;
|
m_exit = false;
|
||||||
m_frames = 0;
|
m_frames = 0;
|
||||||
m_render = &m_frame[0];
|
|
||||||
m_submit = &m_frame[1];
|
|
||||||
m_debug = BGFX_DEBUG_NONE;
|
m_debug = BGFX_DEBUG_NONE;
|
||||||
|
|
||||||
m_submit->create();
|
m_submit->create();
|
||||||
m_render->create();
|
|
||||||
|
|
||||||
#if BGFX_CONFIG_MULTITHREADED
|
#if BGFX_CONFIG_MULTITHREADED
|
||||||
|
m_render->create();
|
||||||
|
|
||||||
if (s_renderFrameCalled)
|
if (s_renderFrameCalled)
|
||||||
{
|
{
|
||||||
// When bgfx::renderFrame is called before init render thread
|
// When bgfx::renderFrame is called before init render thread
|
||||||
|
@ -1029,9 +1028,12 @@ namespace bgfx
|
||||||
m_clearQuad.shutdown();
|
m_clearQuad.shutdown();
|
||||||
frame();
|
frame();
|
||||||
|
|
||||||
destroyTransientVertexBuffer(m_submit->m_transientVb);
|
if (BX_ENABLED(BGFX_CONFIG_MULTITHREADED) )
|
||||||
destroyTransientIndexBuffer(m_submit->m_transientIb);
|
{
|
||||||
frame();
|
destroyTransientVertexBuffer(m_submit->m_transientVb);
|
||||||
|
destroyTransientIndexBuffer(m_submit->m_transientIb);
|
||||||
|
frame();
|
||||||
|
}
|
||||||
|
|
||||||
frame(); // If any VertexDecls needs to be destroyed.
|
frame(); // If any VertexDecls needs to be destroyed.
|
||||||
|
|
||||||
|
@ -1054,10 +1056,11 @@ namespace bgfx
|
||||||
{
|
{
|
||||||
m_thread.shutdown();
|
m_thread.shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_render->destroy();
|
||||||
#endif // BGFX_CONFIG_MULTITHREADED
|
#endif // BGFX_CONFIG_MULTITHREADED
|
||||||
|
|
||||||
m_submit->destroy();
|
m_submit->destroy();
|
||||||
m_render->destroy();
|
|
||||||
|
|
||||||
if (BX_ENABLED(BGFX_CONFIG_DEBUG) )
|
if (BX_ENABLED(BGFX_CONFIG_DEBUG) )
|
||||||
{
|
{
|
||||||
|
@ -1159,10 +1162,6 @@ namespace bgfx
|
||||||
|
|
||||||
// release render thread
|
// release render thread
|
||||||
gameSemPost();
|
gameSemPost();
|
||||||
|
|
||||||
#if !BGFX_CONFIG_MULTITHREADED
|
|
||||||
renderFrame();
|
|
||||||
#endif // BGFX_CONFIG_MULTITHREADED
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Context::swap()
|
void Context::swap()
|
||||||
|
@ -1186,9 +1185,12 @@ namespace bgfx
|
||||||
}
|
}
|
||||||
m_submit->finish();
|
m_submit->finish();
|
||||||
|
|
||||||
Frame* temp = m_render;
|
bx::xchg(m_render, m_submit);
|
||||||
m_render = m_submit;
|
|
||||||
m_submit = temp;
|
if (!BX_ENABLED(BGFX_CONFIG_MULTITHREADED) )
|
||||||
|
{
|
||||||
|
renderFrame();
|
||||||
|
}
|
||||||
|
|
||||||
m_frames++;
|
m_frames++;
|
||||||
m_submit->start();
|
m_submit->start();
|
||||||
|
@ -1208,7 +1210,7 @@ namespace bgfx
|
||||||
if (m_rendererInitialized
|
if (m_rendererInitialized
|
||||||
&& !m_flipAfterRender)
|
&& !m_flipAfterRender)
|
||||||
{
|
{
|
||||||
m_renderCtx->flip();
|
m_renderCtx->flip(m_render->m_hmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
gameSemWait();
|
gameSemWait();
|
||||||
|
@ -1225,7 +1227,7 @@ namespace bgfx
|
||||||
if (m_rendererInitialized
|
if (m_rendererInitialized
|
||||||
&& m_flipAfterRender)
|
&& m_flipAfterRender)
|
||||||
{
|
{
|
||||||
m_renderCtx->flip();
|
m_renderCtx->flip(m_render->m_hmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
return m_exit;
|
return m_exit;
|
||||||
|
|
|
@ -1830,7 +1830,7 @@ namespace bgfx
|
||||||
virtual ~RendererContextI() = 0;
|
virtual ~RendererContextI() = 0;
|
||||||
virtual RendererType::Enum getRendererType() const = 0;
|
virtual RendererType::Enum getRendererType() const = 0;
|
||||||
virtual const char* getRendererName() const = 0;
|
virtual const char* getRendererName() const = 0;
|
||||||
virtual void flip() = 0;
|
virtual void flip(HMD& _hmd) = 0;
|
||||||
virtual void createIndexBuffer(IndexBufferHandle _handle, Memory* _mem, uint8_t _flags) = 0;
|
virtual void createIndexBuffer(IndexBufferHandle _handle, Memory* _mem, uint8_t _flags) = 0;
|
||||||
virtual void destroyIndexBuffer(IndexBufferHandle _handle) = 0;
|
virtual void destroyIndexBuffer(IndexBufferHandle _handle) = 0;
|
||||||
virtual void createVertexDecl(VertexDeclHandle _handle, const VertexDecl& _decl) = 0;
|
virtual void createVertexDecl(VertexDeclHandle _handle, const VertexDecl& _decl) = 0;
|
||||||
|
@ -1883,7 +1883,7 @@ namespace bgfx
|
||||||
{
|
{
|
||||||
Context()
|
Context()
|
||||||
: m_render(&m_frame[0])
|
: m_render(&m_frame[0])
|
||||||
, m_submit(&m_frame[1])
|
, m_submit(&m_frame[BGFX_CONFIG_MULTITHREADED ? 1 : 0])
|
||||||
, m_numFreeDynamicIndexBufferHandles(0)
|
, m_numFreeDynamicIndexBufferHandles(0)
|
||||||
, m_numFreeDynamicVertexBufferHandles(0)
|
, m_numFreeDynamicVertexBufferHandles(0)
|
||||||
, m_clearColorDirty(0)
|
, m_clearColorDirty(0)
|
||||||
|
@ -3425,7 +3425,7 @@ namespace bgfx
|
||||||
}
|
}
|
||||||
#endif // BGFX_CONFIG_MULTITHREADED
|
#endif // BGFX_CONFIG_MULTITHREADED
|
||||||
|
|
||||||
Frame m_frame[2];
|
Frame m_frame[1+(BGFX_CONFIG_MULTITHREADED ? 1 : 0)];
|
||||||
Frame* m_render;
|
Frame* m_render;
|
||||||
Frame* m_submit;
|
Frame* m_submit;
|
||||||
|
|
||||||
|
|
17
src/ovr.cpp
17
src/ovr.cpp
|
@ -39,19 +39,6 @@ namespace bgfx
|
||||||
{
|
{
|
||||||
switch (_config->Header.API)
|
switch (_config->Header.API)
|
||||||
{
|
{
|
||||||
#if BGFX_CONFIG_RENDERER_DIRECT3D9
|
|
||||||
case ovrRenderAPI_D3D9:
|
|
||||||
{
|
|
||||||
ovrD3D9ConfigData* data = (ovrD3D9ConfigData*)_config;
|
|
||||||
# if OVR_VERSION > OVR_VERSION_043
|
|
||||||
m_rtSize = data->Header.BackBufferSize;
|
|
||||||
# else
|
|
||||||
m_rtSize = data->Header.RTSize;
|
|
||||||
# endif // OVR_VERSION > OVR_VERSION_043
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
#endif // BGFX_CONFIG_RENDERER_DIRECT3D9
|
|
||||||
|
|
||||||
#if BGFX_CONFIG_RENDERER_DIRECT3D11
|
#if BGFX_CONFIG_RENDERER_DIRECT3D11
|
||||||
case ovrRenderAPI_D3D11:
|
case ovrRenderAPI_D3D11:
|
||||||
{
|
{
|
||||||
|
@ -202,7 +189,7 @@ ovrError:
|
||||||
m_debug = false;
|
m_debug = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OVR::swap()
|
bool OVR::swap(HMD& _hmd)
|
||||||
{
|
{
|
||||||
if (NULL == m_hmd)
|
if (NULL == m_hmd)
|
||||||
{
|
{
|
||||||
|
@ -216,6 +203,8 @@ ovrError:
|
||||||
m_warning = !ovrHmd_DismissHSWDisplay(m_hmd);
|
m_warning = !ovrHmd_DismissHSWDisplay(m_hmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getEyePose(_hmd);
|
||||||
|
|
||||||
m_timing = ovrHmd_BeginFrame(m_hmd, 0);
|
m_timing = ovrHmd_BeginFrame(m_hmd, 0);
|
||||||
|
|
||||||
#if OVR_VERSION > OVR_VERSION_042
|
#if OVR_VERSION > OVR_VERSION_042
|
||||||
|
|
20
src/ovr.h
20
src/ovr.h
|
@ -25,22 +25,9 @@
|
||||||
# include <OVR_CAPI.h>
|
# include <OVR_CAPI.h>
|
||||||
# endif // OVR_VERSION < OVR_VERSION_050
|
# endif // OVR_VERSION < OVR_VERSION_050
|
||||||
|
|
||||||
# if BGFX_CONFIG_RENDERER_DIRECT3D9
|
|
||||||
# define OVR_D3D_VERSION 9
|
|
||||||
# if OVR_VERSION < OVR_VERSION_050
|
|
||||||
# include <OVR_D3D.h>
|
|
||||||
# else
|
|
||||||
# include <OVR_CAPI_D3D.h>
|
|
||||||
# endif
|
|
||||||
# endif // BGFX_CONFIG_RENDERER_DIRECT3D9
|
|
||||||
|
|
||||||
# if BGFX_CONFIG_RENDERER_DIRECT3D11
|
# if BGFX_CONFIG_RENDERER_DIRECT3D11
|
||||||
# ifdef OVR_CAPI_D3D_h
|
|
||||||
# undef OVR_CAPI_D3D_h
|
|
||||||
# undef OVR_D3D_VERSION
|
|
||||||
# endif // OVR_CAPI_D3D_h
|
|
||||||
# define OVR_D3D_VERSION 11
|
|
||||||
# if OVR_VERSION < OVR_VERSION_050
|
# if OVR_VERSION < OVR_VERSION_050
|
||||||
|
# define OVR_D3D_VERSION 11
|
||||||
# include <OVR_D3D.h>
|
# include <OVR_D3D.h>
|
||||||
# else
|
# else
|
||||||
# include <OVR_CAPI_D3D.h>
|
# include <OVR_CAPI_D3D.h>
|
||||||
|
@ -83,7 +70,7 @@ namespace bgfx
|
||||||
bool postReset(void* _nwh, ovrRenderAPIConfig* _config, bool _debug = false);
|
bool postReset(void* _nwh, ovrRenderAPIConfig* _config, bool _debug = false);
|
||||||
void postReset(const ovrTexture& _texture);
|
void postReset(const ovrTexture& _texture);
|
||||||
void preReset();
|
void preReset();
|
||||||
bool swap();
|
bool swap(HMD& _hmd);
|
||||||
void recenter();
|
void recenter();
|
||||||
void getEyePose(HMD& _hmd);
|
void getEyePose(HMD& _hmd);
|
||||||
void getSize(uint32_t& _width, uint32_t& _height) const
|
void getSize(uint32_t& _width, uint32_t& _height) const
|
||||||
|
@ -143,8 +130,9 @@ namespace bgfx
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool swap()
|
bool swap(HMD& _hmd)
|
||||||
{
|
{
|
||||||
|
getEyePose(_hmd);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1297,7 +1297,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
void flip() BX_OVERRIDE
|
void flip(HMD& _hmd) BX_OVERRIDE
|
||||||
{
|
{
|
||||||
if (NULL != m_swapChain)
|
if (NULL != m_swapChain)
|
||||||
{
|
{
|
||||||
|
@ -1314,7 +1314,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
|
||||||
|
|
||||||
if (SUCCEEDED(hr) )
|
if (SUCCEEDED(hr) )
|
||||||
{
|
{
|
||||||
if (!m_ovr.swap() )
|
if (!m_ovr.swap(_hmd) )
|
||||||
{
|
{
|
||||||
hr = m_swapChain->Present(syncInterval, 0);
|
hr = m_swapChain->Present(syncInterval, 0);
|
||||||
}
|
}
|
||||||
|
@ -3205,11 +3205,11 @@ BX_PRAGMA_DIAGNOSTIC_POP();
|
||||||
const bool hmdEnabled = m_ovr.isEnabled() || m_ovr.isDebug();
|
const bool hmdEnabled = m_ovr.isEnabled() || m_ovr.isDebug();
|
||||||
_render->m_hmdEnabled = hmdEnabled;
|
_render->m_hmdEnabled = hmdEnabled;
|
||||||
|
|
||||||
if (hmdEnabled)
|
// if (hmdEnabled)
|
||||||
{
|
// {
|
||||||
HMD& hmd = _render->m_hmd;
|
// HMD& hmd = _render->m_hmd;
|
||||||
m_ovr.getEyePose(hmd);
|
// m_ovr.getEyePose(hmd);
|
||||||
}
|
// }
|
||||||
|
|
||||||
ViewState viewState(_render, hmdEnabled);
|
ViewState viewState(_render, hmdEnabled);
|
||||||
|
|
||||||
|
|
|
@ -1144,7 +1144,7 @@ namespace bgfx { namespace d3d9
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
void flip() BX_OVERRIDE
|
void flip(HMD& /*_hmd*/) BX_OVERRIDE
|
||||||
{
|
{
|
||||||
if (NULL != m_device)
|
if (NULL != m_device)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1600,7 +1600,7 @@ namespace bgfx { namespace gl
|
||||||
return BGFX_RENDERER_OPENGL_NAME;
|
return BGFX_RENDERER_OPENGL_NAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
void flip()
|
void flip(HMD& _hmd)
|
||||||
{
|
{
|
||||||
if (m_flip)
|
if (m_flip)
|
||||||
{
|
{
|
||||||
|
@ -1609,7 +1609,7 @@ namespace bgfx { namespace gl
|
||||||
m_glctx.swap(m_frameBuffers[m_windows[ii].idx].m_swapChain);
|
m_glctx.swap(m_frameBuffers[m_windows[ii].idx].m_swapChain);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!m_ovr.swap() )
|
if (!m_ovr.swap(_hmd) )
|
||||||
{
|
{
|
||||||
m_glctx.swap();
|
m_glctx.swap();
|
||||||
}
|
}
|
||||||
|
@ -4553,11 +4553,11 @@ namespace bgfx { namespace gl
|
||||||
const bool hmdEnabled = m_ovr.isEnabled() || m_ovr.isDebug();
|
const bool hmdEnabled = m_ovr.isEnabled() || m_ovr.isDebug();
|
||||||
_render->m_hmdEnabled = hmdEnabled;
|
_render->m_hmdEnabled = hmdEnabled;
|
||||||
|
|
||||||
if (hmdEnabled)
|
// if (hmdEnabled)
|
||||||
{
|
// {
|
||||||
HMD& hmd = _render->m_hmd;
|
// HMD& hmd = _render->m_hmd;
|
||||||
m_ovr.getEyePose(hmd);
|
// m_ovr.getEyePose(hmd);
|
||||||
}
|
// }
|
||||||
|
|
||||||
ViewState viewState(_render, hmdEnabled);
|
ViewState viewState(_render, hmdEnabled);
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@ namespace bgfx { namespace noop
|
||||||
return BGFX_RENDERER_NULL_NAME;
|
return BGFX_RENDERER_NULL_NAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
void flip() BX_OVERRIDE
|
void flip(HMD& /*_hmd*/) BX_OVERRIDE
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue