diff options
Diffstat (limited to '3rdparty/bgfx/src/renderer.h')
-rw-r--r-- | 3rdparty/bgfx/src/renderer.h | 121 |
1 files changed, 49 insertions, 72 deletions
diff --git a/3rdparty/bgfx/src/renderer.h b/3rdparty/bgfx/src/renderer.h index ef45002a7a0..025c6f7e927 100644 --- a/3rdparty/bgfx/src/renderer.h +++ b/3rdparty/bgfx/src/renderer.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2018 Branimir Karadzic. All rights reserved. + * Copyright 2011-2019 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -10,6 +10,23 @@ namespace bgfx { + inline constexpr uint32_t toAbgr8(uint8_t _r, uint8_t _g, uint8_t _b, uint8_t _a = 0xff) + { + return 0 + | (uint32_t(_r)<<24) + | (uint32_t(_g)<<16) + | (uint32_t(_b)<< 8) + | (uint32_t(_a) ) + ; + } + + constexpr uint32_t kColorFrame = toAbgr8(0xff, 0xd7, 0xc9); + constexpr uint32_t kColorView = toAbgr8(0xe4, 0xb4, 0x8e); + constexpr uint32_t kColorDraw = toAbgr8(0xc6, 0xe5, 0xb9); + constexpr uint32_t kColorCompute = toAbgr8(0xa7, 0xdb, 0xd8); + constexpr uint32_t kColorMarker = toAbgr8(0xff, 0x00, 0x00); + constexpr uint32_t kColorResource = toAbgr8(0xff, 0x40, 0x20); + struct BlitState { BlitState(const Frame* _frame) @@ -47,74 +64,36 @@ namespace bgfx { } - ViewState(Frame* _frame, bool _stereo) + ViewState(Frame* _frame) { - reset(_frame, _stereo); + reset(_frame); } - void reset(Frame* _frame, bool _stereo) + void reset(Frame* _frame) { m_alphaRef = 0.0f; m_invViewCached = UINT16_MAX; m_invProjCached = UINT16_MAX; m_invViewProjCached = UINT16_MAX; - m_view[0] = m_viewTmp[0]; - m_view[1] = m_viewTmp[1]; - - if (_stereo) - { - m_view[0] = m_viewTmp[0]; - Matrix4 viewAdjust; - bx::mtxIdentity(viewAdjust.un.val); - - for (uint32_t eye = 0; eye < 2; ++eye) - { -/* - const HMD::Eye& hmdEye = hmd.eye[eye]; - viewAdjust.un.val[12] = hmdEye.viewOffset[0]; - viewAdjust.un.val[13] = hmdEye.viewOffset[1]; - viewAdjust.un.val[14] = hmdEye.viewOffset[2]; + m_view = m_viewTmp; - for (uint32_t ii = 0; ii < BGFX_CONFIG_MAX_VIEWS; ++ii) - { - if (BGFX_VIEW_STEREO == (_frame->m_view[ii].m_flags & BGFX_VIEW_STEREO) ) - { - bx::float4x4_mul(&m_view[eye][ii].un.f4x4 - , &_frame->m_view[ii].m_view.un.f4x4 - , &viewAdjust.un.f4x4 - ); - } - else - { - bx::memCopy(&m_view[0][ii].un.f4x4, &_frame->m_view[ii].m_view.un.f4x4, sizeof(Matrix4) ); - } - } -*/ - } - } - else + for (uint32_t ii = 0; ii < BGFX_CONFIG_MAX_VIEWS; ++ii) { - for (uint32_t ii = 0; ii < BGFX_CONFIG_MAX_VIEWS; ++ii) - { - bx::memCopy(&m_view[0][ii].un.f4x4, &_frame->m_view[ii].m_view.un.f4x4, sizeof(Matrix4) ); - } + bx::memCopy(&m_view[ii].un.f4x4, &_frame->m_view[ii].m_view.un.f4x4, sizeof(Matrix4) ); } for (uint32_t ii = 0; ii < BGFX_CONFIG_MAX_VIEWS; ++ii) { - for (uint32_t eye = 0; eye < uint32_t(_stereo)+1; ++eye) - { - bx::float4x4_mul(&m_viewProj[eye][ii].un.f4x4 - , &m_view[eye][ii].un.f4x4 - , &_frame->m_view[ii].m_proj[eye].un.f4x4 - ); - } + bx::float4x4_mul(&m_viewProj[ii].un.f4x4 + , &m_view[ii].un.f4x4 + , &_frame->m_view[ii].m_proj.un.f4x4 + ); } } template<uint16_t mtxRegs, typename RendererContext, typename Program, typename Draw> - void setPredefined(RendererContext* _renderer, uint16_t _view, uint8_t _eye, const Program& _program, const Frame* _frame, const Draw& _draw) + void setPredefined(RendererContext* _renderer, uint16_t _view, const Program& _program, const Frame* _frame, const Draw& _draw) { const FrameCache& frameCache = _frame->m_frameCache; @@ -158,7 +137,7 @@ namespace bgfx { _renderer->setShaderUniform4x4f(flags , predefined.m_loc - , m_view[_eye][_view].un.val + , m_view[_view].un.val , bx::uint32_min(mtxRegs, predefined.m_count) ); } @@ -166,12 +145,11 @@ namespace bgfx case PredefinedUniform::InvView: { - uint16_t viewEye = (_view << 1) | _eye; - if (viewEye != m_invViewCached) + if (_view != m_invViewCached) { - m_invViewCached = viewEye; + m_invViewCached = _view; bx::float4x4_inverse(&m_invView.un.f4x4 - , &m_view[_eye][_view].un.f4x4 + , &m_view[_view].un.f4x4 ); } @@ -187,7 +165,7 @@ namespace bgfx { _renderer->setShaderUniform4x4f(flags , predefined.m_loc - , _frame->m_view[_view].m_proj[_eye].un.val + , _frame->m_view[_view].m_proj.un.val , bx::uint32_min(mtxRegs, predefined.m_count) ); } @@ -195,12 +173,11 @@ namespace bgfx case PredefinedUniform::InvProj: { - uint16_t viewEye = (_view << 1) | _eye; - if (viewEye != m_invProjCached) + if (_view != m_invProjCached) { - m_invProjCached = viewEye; + m_invProjCached = _view; bx::float4x4_inverse(&m_invProj.un.f4x4 - , &_frame->m_view[_view].m_proj[_eye].un.f4x4 + , &_frame->m_view[_view].m_proj.un.f4x4 ); } @@ -216,7 +193,7 @@ namespace bgfx { _renderer->setShaderUniform4x4f(flags , predefined.m_loc - , m_viewProj[_eye][_view].un.val + , m_viewProj[_view].un.val , bx::uint32_min(mtxRegs, predefined.m_count) ); } @@ -224,12 +201,11 @@ namespace bgfx case PredefinedUniform::InvViewProj: { - uint16_t viewEye = (_view << 1) | _eye; - if (viewEye != m_invViewProjCached) + if (_view != m_invViewProjCached) { - m_invViewProjCached = viewEye; + m_invViewProjCached = _view; bx::float4x4_inverse(&m_invViewProj.un.f4x4 - , &m_viewProj[_eye][_view].un.f4x4 + , &m_viewProj[_view].un.f4x4 ); } @@ -258,7 +234,7 @@ namespace bgfx const Matrix4& model = frameCache.m_matrixCache.m_cache[_draw.m_startMatrix]; bx::float4x4_mul(&modelView.un.f4x4 , &model.un.f4x4 - , &m_view[_eye][_view].un.f4x4 + , &m_view[_view].un.f4x4 ); _renderer->setShaderUniform4x4f(flags , predefined.m_loc @@ -274,7 +250,7 @@ namespace bgfx const Matrix4& model = frameCache.m_matrixCache.m_cache[_draw.m_startMatrix]; bx::float4x4_mul(&modelViewProj.un.f4x4 , &model.un.f4x4 - , &m_viewProj[_eye][_view].un.f4x4 + , &m_viewProj[_view].un.f4x4 ); _renderer->setShaderUniform4x4f(flags , predefined.m_loc @@ -301,9 +277,9 @@ namespace bgfx } } - Matrix4 m_viewTmp[2][BGFX_CONFIG_MAX_VIEWS]; - Matrix4 m_viewProj[2][BGFX_CONFIG_MAX_VIEWS]; - Matrix4* m_view[2]; + Matrix4 m_viewTmp[BGFX_CONFIG_MAX_VIEWS]; + Matrix4 m_viewProj[BGFX_CONFIG_MAX_VIEWS]; + Matrix4* m_view; Rect m_rect; Matrix4 m_invView; Matrix4 m_invProj; @@ -481,11 +457,12 @@ namespace bgfx return true; } - for (uint32_t idx = 0, streamMask = _new.m_streamMask, ntz = bx::uint32_cnttz(streamMask) + for (uint32_t idx = 0, streamMask = _new.m_streamMask ; 0 != streamMask - ; streamMask >>= 1, idx += 1, ntz = bx::uint32_cnttz(streamMask) + ; streamMask >>= 1, idx += 1 ) { + const uint32_t ntz = bx::uint32_cnttz(streamMask); streamMask >>= ntz; idx += ntz; |