From 46dcba65e55749b57061e12504937b3d426a3c01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= Date: Mon, 16 Apr 2018 17:58:17 -0700 Subject: [PATCH] debugdraw: Added depth test less to begin. --- examples/common/debugdraw/debugdraw.cpp | 51 ++++++++++++++++++------- examples/common/debugdraw/debugdraw.h | 12 ++++-- 2 files changed, 46 insertions(+), 17 deletions(-) diff --git a/examples/common/debugdraw/debugdraw.cpp b/examples/common/debugdraw/debugdraw.cpp index 60fe7d109..61623348d 100644 --- a/examples/common/debugdraw/debugdraw.cpp +++ b/examples/common/debugdraw/debugdraw.cpp @@ -1007,24 +1007,24 @@ struct DebugDrawEncoderImpl { } - void init(bool _depthTestLess, bgfx::Encoder* _encoder) + void init(bgfx::Encoder* _encoder) { m_defaultEncoder = _encoder; - m_depthTestLess = _depthTestLess; } void shutdown() { } - void begin(bgfx::ViewId _viewId, bgfx::Encoder* _encoder) + void begin(bgfx::ViewId _viewId, bool _depthTestLess, bgfx::Encoder* _encoder) { BX_CHECK(State::Count == m_state); - m_viewId = _viewId; - m_encoder = _encoder == NULL ? m_defaultEncoder : _encoder; - m_state = State::None; - m_stack = 0; + m_viewId = _viewId; + m_encoder = _encoder == NULL ? m_defaultEncoder : _encoder; + m_state = State::None; + m_stack = 0; + m_depthTestLess = _depthTestLess; m_pos = 0; m_indexPos = 0; @@ -1081,6 +1081,19 @@ struct DebugDrawEncoderImpl --m_stack; } + void setDepthTestLess(bool _depthTestLess) + { + BX_CHECK(State::Count != m_state); + if (m_depthTestLess != _depthTestLess) + { + m_depthTestLess = _depthTestLess; + flush(); + Attrib& attrib = m_attrib[m_stack]; + attrib.m_state &= ~BGFX_STATE_DEPTH_TEST_MASK; + attrib.m_state |= _depthTestLess ? BGFX_STATE_DEPTH_TEST_LESS : BGFX_STATE_DEPTH_TEST_GREATER; + } + } + void setTransform(const void* _mtx, uint16_t _num = 1) { BX_CHECK(State::Count != m_state); @@ -2293,10 +2306,10 @@ struct DebugDrawEncoderImpl static DebugDrawEncoderImpl s_dde; BX_STATIC_ASSERT(sizeof(DebugDrawEncoderImpl) <= sizeof(DebugDrawEncoder), "Size must match"); -void ddInit(bool _depthTestLess, bx::AllocatorI* _allocator) +void ddInit(bx::AllocatorI* _allocator) { s_dds.init(_allocator); - s_dde.init(_depthTestLess, bgfx::begin() ); + s_dde.init(bgfx::begin() ); } void ddShutdown() @@ -2325,9 +2338,9 @@ void ddDestroy(GeometryHandle _handle) s_dds.destroy(_handle); } -void ddBegin(uint16_t _viewId, bgfx::Encoder* _encoder) +void ddBegin(uint16_t _viewId, bool _depthTestLess, bgfx::Encoder* _encoder) { - s_dde.begin(_viewId, _encoder); + s_dde.begin(_viewId, _depthTestLess, _encoder); } void ddEnd() @@ -2345,6 +2358,11 @@ void ddPop() s_dde.pop(); } +void ddSetDepthTestLess(bool _depthTestLess) +{ + s_dde.setDepthTestLess(_depthTestLess); +} + void ddSetState(bool _depthTest, bool _depthWrite, bool _clockwise) { s_dde.setState(_depthTest, _depthWrite, _clockwise); @@ -2534,7 +2552,7 @@ void ddDrawOrb(float _x, float _y, float _z, float _radius, Axis::Enum _hightlig DebugDrawEncoder::DebugDrawEncoder() { - DEBUG_DRAW_ENCODER(init(true, s_dde.m_defaultEncoder) ); + DEBUG_DRAW_ENCODER(init(s_dde.m_defaultEncoder) ); } DebugDrawEncoder::~DebugDrawEncoder() @@ -2542,9 +2560,9 @@ DebugDrawEncoder::~DebugDrawEncoder() DEBUG_DRAW_ENCODER(shutdown() ); } -void DebugDrawEncoder::begin(uint16_t _viewId, bgfx::Encoder* _encoder) +void DebugDrawEncoder::begin(uint16_t _viewId, bool _depthTestLess, bgfx::Encoder* _encoder) { - DEBUG_DRAW_ENCODER(begin(_viewId, _encoder) ); + DEBUG_DRAW_ENCODER(begin(_viewId, _depthTestLess, _encoder) ); } void DebugDrawEncoder::end() @@ -2562,6 +2580,11 @@ void DebugDrawEncoder::pop() DEBUG_DRAW_ENCODER(pop() ); } +void DebugDrawEncoder::setDepthTestLess(bool _depthTestLess) +{ + DEBUG_DRAW_ENCODER(setDepthTestLess(_depthTestLess) ); +} + void DebugDrawEncoder::setState(bool _depthTest, bool _depthWrite, bool _clockwise) { DEBUG_DRAW_ENCODER(setState(_depthTest, _depthWrite, _clockwise) ); diff --git a/examples/common/debugdraw/debugdraw.h b/examples/common/debugdraw/debugdraw.h index 6b73efc96..a3cff48ce 100644 --- a/examples/common/debugdraw/debugdraw.h +++ b/examples/common/debugdraw/debugdraw.h @@ -33,7 +33,7 @@ struct GeometryHandle { uint16_t idx; }; inline bool isValid(GeometryHandle _handle) { return _handle.idx != UINT16_MAX; } /// -void ddInit(bool _depthTestLess = true, bx::AllocatorI* _allocator = NULL); +void ddInit(bx::AllocatorI* _allocator = NULL); /// void ddShutdown(); @@ -60,7 +60,7 @@ struct DebugDrawEncoder ~DebugDrawEncoder(); /// - void begin(uint16_t _viewId, bgfx::Encoder* _encoder = NULL); + void begin(uint16_t _viewId, bool _depthTestLess = true, bgfx::Encoder* _encoder = NULL); /// void end(); @@ -71,6 +71,9 @@ struct DebugDrawEncoder /// void pop(); + /// + void setDepthTestLess(bool _depthTestLess); + /// void setState(bool _depthTest, bool _depthWrite, bool _clockwise); @@ -186,7 +189,7 @@ struct DebugDrawEncoder }; /// -void ddBegin(uint16_t _viewId, bgfx::Encoder* _encoder = NULL); +void ddBegin(uint16_t _viewId, bool _depthTestLess = true, bgfx::Encoder* _encoder = NULL); /// void ddEnd(); @@ -197,6 +200,9 @@ void ddPush(); /// void ddPop(); +/// +void ddSetDepthTestLess(bool _depthTestLess); + /// void ddSetState(bool _depthTest, bool _depthWrite, bool _clockwise);