WIP: Adding more sort key modes.

This commit is contained in:
Branimir Karadžić
2017-06-14 18:10:42 -07:00
parent 596bd28446
commit 6910ddba9e
9 changed files with 44 additions and 16 deletions

View File

@@ -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);

View File

@@ -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();

View File

@@ -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);
}

View File

@@ -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.
///

View File

@@ -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);

View File

@@ -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);

View File

@@ -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.

View File

@@ -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) \

View File

@@ -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);