diff --git a/examples/20-nanovg/nanovg.cpp b/examples/20-nanovg/nanovg.cpp index 6451d3b7b..a61d0b040 100644 --- a/examples/20-nanovg/nanovg.cpp +++ b/examples/20-nanovg/nanovg.cpp @@ -1266,7 +1266,7 @@ class ExampleNanoVG : public entry::AppI imguiCreate(); m_nvg = nvgCreate(1, 0); - bgfx::setViewSeq(0, true); + bgfx::setViewMode(0, bgfx::ViewMode::Sequential); loadDemoData(m_nvg, &m_data); diff --git a/examples/common/imgui/imgui.cpp b/examples/common/imgui/imgui.cpp index 6962d097e..cba91eda0 100644 --- a/examples/common/imgui/imgui.cpp +++ b/examples/common/imgui/imgui.cpp @@ -803,7 +803,7 @@ struct Imgui nvgViewId(m_nvg, _view); bgfx::setViewName(_view, "IMGUI"); - bgfx::setViewSeq(_view, true); + bgfx::setViewMode(_view, bgfx::ViewMode::Sequential); const bgfx::HMD* hmd = bgfx::getHMD(); const bgfx::Caps* caps = bgfx::getCaps(); diff --git a/examples/common/nanovg/nanovg_bgfx.cpp b/examples/common/nanovg/nanovg_bgfx.cpp index ce0a3e250..e9b1e482d 100644 --- a/examples/common/nanovg/nanovg_bgfx.cpp +++ b/examples/common/nanovg/nanovg_bgfx.cpp @@ -1264,5 +1264,5 @@ void nvgluSetViewFramebuffer(uint8_t viewId, NVGLUframebuffer* framebuffer) { framebuffer->viewId = viewId; bgfx::setViewFrameBuffer(viewId, framebuffer->handle); - bgfx::setViewSeq(viewId, true); + bgfx::setViewMode(viewId, bgfx::ViewMode::Sequential); } diff --git a/include/bgfx/bgfx.h b/include/bgfx/bgfx.h index 258f0452f..7c662d4c0 100644 --- a/include/bgfx/bgfx.h +++ b/include/bgfx/bgfx.h @@ -342,6 +342,23 @@ namespace bgfx }; }; + /// View mode sets draw call sort order. + /// + /// @attention C99 equivalent is `bgfx_view_mode_t`. + /// + struct ViewMode + { + enum Enum + { + Default, //!< Default sort order. + Sequential, //!< Sort in the same order in which submit calls were called. + DepthAscending, //!< Sort draw call depth in ascending order. + DepthDescending, //!< Sort draw call depth in descending order. + + Count + }; + }; + static const uint16_t kInvalidHandle = UINT16_MAX; BGFX_HANDLE(DynamicIndexBufferHandle); @@ -2189,9 +2206,9 @@ namespace bgfx /// Set view into sequential mode. Draw calls will be sorted in the same /// order in which submit calls were called. /// - /// @attention C99 equivalent is `bgfx_set_view_seq`. + /// @attention C99 equivalent is `bgfx_set_view_mode`. /// - void setViewSeq(uint8_t _id, bool _enabled); + void setViewMode(uint8_t _id, ViewMode::Enum _mode = ViewMode::Default); /// Set view frame buffer. /// diff --git a/include/bgfx/c99/bgfx.h b/include/bgfx/c99/bgfx.h index ec0452bd7..1441be556 100644 --- a/include/bgfx/c99/bgfx.h +++ b/include/bgfx/c99/bgfx.h @@ -257,6 +257,17 @@ typedef enum bgfx_topology_sort } bgfx_topology_sort_t; +typedef enum bgfx_view_mode +{ + BGFX_VIEW_MODE_DEFAULT, + BGFX_VIEW_MODE_SEQUENTIAL, + BGFX_VIEW_MODE_DEPTH_ASCENDING, + BGFX_VIEW_MODE_DEPTH_DESCENDING, + + BGFX_VIEW_MODE_CCOUNT + +} bgfx_view_mode_t; + #define BGFX_HANDLE_T(_name) \ typedef struct _name { uint16_t idx; } _name##_t @@ -785,7 +796,7 @@ BGFX_C_API void bgfx_set_view_clear(uint8_t _id, uint16_t _flags, uint32_t _rgba BGFX_C_API void bgfx_set_view_clear_mrt(uint8_t _id, uint16_t _flags, float _depth, uint8_t _stencil, uint8_t _0, uint8_t _1, uint8_t _2, uint8_t _3, uint8_t _4, uint8_t _5, uint8_t _6, uint8_t _7); /**/ -BGFX_C_API void bgfx_set_view_seq(uint8_t _id, bool _enabled); +BGFX_C_API void bgfx_set_view_mode(uint8_t _id, bgfx_view_mode_t _mode); /**/ BGFX_C_API void bgfx_set_view_frame_buffer(uint8_t _id, bgfx_frame_buffer_handle_t _handle); diff --git a/include/bgfx/c99/platform.h b/include/bgfx/c99/platform.h index 5e109d123..0011bf777 100644 --- a/include/bgfx/c99/platform.h +++ b/include/bgfx/c99/platform.h @@ -157,7 +157,7 @@ typedef struct bgfx_interface_vtbl void (*set_view_scissor)(uint8_t _id, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height); void (*set_view_clear)(uint8_t _id, uint16_t _flags, uint32_t _rgba, float _depth, uint8_t _stencil); void (*set_view_clear_mrt)(uint8_t _id, uint16_t _flags, float _depth, uint8_t _stencil, uint8_t _0, uint8_t _1, uint8_t _2, uint8_t _3, uint8_t _4, uint8_t _5, uint8_t _6, uint8_t _7); - void (*set_view_seq)(uint8_t _id, bool _enabled); + void (*set_view_mode)(uint8_t _id, bgfx_view_mode_t _mode); void (*set_view_frame_buffer)(uint8_t _id, bgfx_frame_buffer_handle_t _handle); void (*set_view_transform)(uint8_t _id, const void* _view, const void* _proj); void (*set_view_transform_stereo)(uint8_t _id, const void* _view, const void* _projL, uint8_t _flags, const void* _projR); diff --git a/include/bgfx/defines.h b/include/bgfx/defines.h index f05617828..f58a040bd 100644 --- a/include/bgfx/defines.h +++ b/include/bgfx/defines.h @@ -6,7 +6,7 @@ #ifndef BGFX_DEFINES_H_HEADER_GUARD #define BGFX_DEFINES_H_HEADER_GUARD -#define BGFX_API_VERSION UINT32_C(42) +#define BGFX_API_VERSION UINT32_C(43) /// #define BGFX_STATE_RGB_WRITE UINT64_C(0x0000000000000001) //!< Enable RGB write. diff --git a/src/bgfx.cpp b/src/bgfx.cpp index 50de2ce7e..1ea093bf4 100644 --- a/src/bgfx.cpp +++ b/src/bgfx.cpp @@ -3601,11 +3601,11 @@ error: s_ctx->setViewClear(_id, _flags, _depth, _stencil, _0, _1, _2, _3, _4, _5, _6, _7); } - void setViewSeq(uint8_t _id, bool _enabled) + void setViewMode(uint8_t _id, ViewMode::Enum _mode) { BGFX_CHECK_MAIN_THREAD(); BX_CHECK(checkView(_id), "Invalid view id: %d", _id); - s_ctx->setViewSeq(_id, _enabled); + s_ctx->setViewMode(_id, _mode); } void setViewFrameBuffer(uint8_t _id, FrameBufferHandle _handle) @@ -4688,9 +4688,9 @@ BGFX_C_API void bgfx_set_view_clear_mrt(uint8_t _id, uint16_t _flags, float _dep bgfx::setViewClear(_id, _flags, _depth, _stencil, _0, _1, _2, _3, _4, _5, _6, _7); } -BGFX_C_API void bgfx_set_view_seq(uint8_t _id, bool _enabled) +BGFX_C_API void bgfx_set_view_mode(uint8_t _id, bgfx_view_mode_t _mode) { - bgfx::setViewSeq(_id, _enabled); + bgfx::setViewMode(_id, bgfx::ViewMode::Enum(_mode) ); } BGFX_C_API void bgfx_set_view_frame_buffer(uint8_t _id, bgfx_frame_buffer_handle_t _handle) @@ -5045,7 +5045,7 @@ BGFX_C_API bgfx_interface_vtbl_t* bgfx_get_interface(uint32_t _version) BGFX_IMPORT_FUNC(set_view_scissor) \ BGFX_IMPORT_FUNC(set_view_clear) \ BGFX_IMPORT_FUNC(set_view_clear_mrt) \ - BGFX_IMPORT_FUNC(set_view_seq) \ + BGFX_IMPORT_FUNC(set_view_mode) \ BGFX_IMPORT_FUNC(set_view_frame_buffer) \ BGFX_IMPORT_FUNC(set_view_transform) \ BGFX_IMPORT_FUNC(set_view_transform_stereo) \ diff --git a/src/bgfx_p.h b/src/bgfx_p.h index 3186c142b..22d4e56c8 100644 --- a/src/bgfx_p.h +++ b/src/bgfx_p.h @@ -3810,9 +3810,9 @@ namespace bgfx clear.m_stencil = _stencil; } - BGFX_API_FUNC(void setViewSeq(uint8_t _id, bool _enabled) ) + BGFX_API_FUNC(void setViewMode(uint8_t _id, ViewMode::Enum _mode) ) { - m_seqMask[_id] = _enabled ? 0xffff : 0x0; + m_seqMask[_id] = _mode == ViewMode::Sequential ? 0xffff : 0x0; } BGFX_API_FUNC(void setViewFrameBuffer(uint8_t _id, FrameBufferHandle _handle) ) @@ -3858,7 +3858,7 @@ namespace bgfx setViewRect(_id, 0, 0, 1, 1); setViewScissor(_id, 0, 0, 0, 0); setViewClear(_id, BGFX_CLEAR_NONE, 0, 0.0f, 0); - setViewSeq(_id, false); + setViewMode(_id, ViewMode::Default); FrameBufferHandle invalid = BGFX_INVALID_HANDLE; setViewFrameBuffer(_id, invalid); setViewTransform(_id, NULL, NULL, BGFX_VIEW_NONE, NULL);