mirror of
https://github.com/scratchfoundation/bgfx.git
synced 2024-11-28 10:35:43 -05:00
Added function to check both vertex and index transient buffers.
This commit is contained in:
parent
b15dcfd66a
commit
b7c4630ee3
2 changed files with 47 additions and 11 deletions
|
@ -351,6 +351,7 @@ namespace bgfx
|
||||||
/// NOTE:
|
/// NOTE:
|
||||||
/// 'fatal' callback can be called from any thread. Other callbacks
|
/// 'fatal' callback can be called from any thread. Other callbacks
|
||||||
/// are called from the render thread.
|
/// are called from the render thread.
|
||||||
|
///
|
||||||
struct CallbackI
|
struct CallbackI
|
||||||
{
|
{
|
||||||
virtual ~CallbackI() = 0;
|
virtual ~CallbackI() = 0;
|
||||||
|
@ -456,6 +457,7 @@ namespace bgfx
|
||||||
///
|
///
|
||||||
/// NOTE:
|
/// NOTE:
|
||||||
/// Must be called between begin/end.
|
/// Must be called between begin/end.
|
||||||
|
///
|
||||||
void add(Attrib::Enum _attrib, uint8_t _num, AttribType::Enum _type, bool _normalized = false, bool _asInt = false);
|
void add(Attrib::Enum _attrib, uint8_t _num, AttribType::Enum _type, bool _normalized = false, bool _asInt = false);
|
||||||
|
|
||||||
/// Decode attribute.
|
/// Decode attribute.
|
||||||
|
@ -581,28 +583,46 @@ namespace bgfx
|
||||||
/// Update dynamic vertex buffer.
|
/// Update dynamic vertex buffer.
|
||||||
void updateDynamicVertexBuffer(DynamicVertexBufferHandle _handle, const Memory* _mem);
|
void updateDynamicVertexBuffer(DynamicVertexBufferHandle _handle, const Memory* _mem);
|
||||||
|
|
||||||
/// Destory dynamic vertex buffer.
|
/// Destroy dynamic vertex buffer.
|
||||||
void destroyDynamicVertexBuffer(DynamicVertexBufferHandle _handle);
|
void destroyDynamicVertexBuffer(DynamicVertexBufferHandle _handle);
|
||||||
|
|
||||||
/// Returns true if internal transient index buffer has enough space.
|
/// Returns true if internal transient index buffer has enough space.
|
||||||
|
///
|
||||||
|
/// @param _num Number of indices.
|
||||||
|
///
|
||||||
bool checkAvailTransientIndexBuffer(uint16_t _num);
|
bool checkAvailTransientIndexBuffer(uint16_t _num);
|
||||||
|
|
||||||
|
/// Returns true if internal transient vertex buffer has enough space.
|
||||||
|
///
|
||||||
|
/// @param _num Number of vertices.
|
||||||
|
/// @param _decl Vertex declaration.
|
||||||
|
///
|
||||||
|
bool checkAvailTransientVertexBuffer(uint16_t _num, const VertexDecl& _decl);
|
||||||
|
|
||||||
|
/// Returns true if both internal transient index and vertex buffer have
|
||||||
|
/// enough space.
|
||||||
|
///
|
||||||
|
/// @param _numVertices Number of vertices.
|
||||||
|
/// @param _decl Vertex declaration.
|
||||||
|
/// @param _numIndices Number of indices.
|
||||||
|
///
|
||||||
|
bool checkAvailTransientBuffers(uint16_t _numVertices, const VertexDecl& _decl, uint16_t _numIndices);
|
||||||
|
|
||||||
/// Allocate transient index buffer.
|
/// Allocate transient index buffer.
|
||||||
///
|
///
|
||||||
/// @param[out] _tib is valid for the duration of frame, and it can be
|
/// @param[out] _tib is valid for the duration of frame, and it can be
|
||||||
/// reused for multiple draw calls.
|
/// reused for multiple draw calls.
|
||||||
/// @param _num number of indices to allocate.
|
/// @param _num number of indices to allocate.
|
||||||
|
///
|
||||||
void allocTransientIndexBuffer(TransientIndexBuffer* _tib, uint16_t _num);
|
void allocTransientIndexBuffer(TransientIndexBuffer* _tib, uint16_t _num);
|
||||||
|
|
||||||
/// Returns true if internal transient vertex buffer has enough space.
|
|
||||||
bool checkAvailTransientVertexBuffer(uint16_t _num, const VertexDecl& _decl);
|
|
||||||
|
|
||||||
/// Allocate transient vertex buffer.
|
/// Allocate transient vertex buffer.
|
||||||
///
|
///
|
||||||
/// @param[out] _tvb is valid for the duration of frame, and it can be
|
/// @param[out] _tvb is valid for the duration of frame, and it can be
|
||||||
/// reused for multiple draw calls.
|
/// reused for multiple draw calls.
|
||||||
/// @param _num number of vertices to allocate.
|
/// @param _num number of vertices to allocate.
|
||||||
/// @param _decl vertex declaration.
|
/// @param _decl vertex declaration.
|
||||||
|
///
|
||||||
void allocTransientVertexBuffer(TransientVertexBuffer* _tvb, uint16_t _num, const VertexDecl& _decl);
|
void allocTransientVertexBuffer(TransientVertexBuffer* _tvb, uint16_t _num, const VertexDecl& _decl);
|
||||||
|
|
||||||
/// Allocate instance data buffer.
|
/// Allocate instance data buffer.
|
||||||
|
@ -628,6 +648,7 @@ namespace bgfx
|
||||||
/// @param _fsh fragment shader.
|
/// @param _fsh fragment shader.
|
||||||
/// @returns Program handle if vertex shader output and fragment shader
|
/// @returns Program handle if vertex shader output and fragment shader
|
||||||
/// input are matching, otherwise returns invalid program handle.
|
/// input are matching, otherwise returns invalid program handle.
|
||||||
|
///
|
||||||
ProgramHandle createProgram(VertexShaderHandle _vsh, FragmentShaderHandle _fsh);
|
ProgramHandle createProgram(VertexShaderHandle _vsh, FragmentShaderHandle _fsh);
|
||||||
|
|
||||||
/// Destroy program.
|
/// Destroy program.
|
||||||
|
@ -652,6 +673,7 @@ namespace bgfx
|
||||||
///
|
///
|
||||||
/// @param _info Returns parsed DDS texture information.
|
/// @param _info Returns parsed DDS texture information.
|
||||||
/// @returns Texture handle.
|
/// @returns Texture handle.
|
||||||
|
///
|
||||||
TextureHandle createTexture(const Memory* _mem, uint32_t _flags = BGFX_TEXTURE_NONE, TextureInfo* _info = NULL);
|
TextureHandle createTexture(const Memory* _mem, uint32_t _flags = BGFX_TEXTURE_NONE, TextureInfo* _info = NULL);
|
||||||
|
|
||||||
/// Create 2D texture.
|
/// Create 2D texture.
|
||||||
|
@ -702,6 +724,7 @@ namespace bgfx
|
||||||
/// @param _rgba color clear value.
|
/// @param _rgba color clear value.
|
||||||
/// @param _depth depth clear value.
|
/// @param _depth depth clear value.
|
||||||
/// @param _stencil stencil clear value.
|
/// @param _stencil stencil clear value.
|
||||||
|
///
|
||||||
void setViewClear(uint8_t _id, uint8_t _flags, uint32_t _rgba = 0x000000ff, float _depth = 1.0f, uint8_t _stencil = 0);
|
void setViewClear(uint8_t _id, uint8_t _flags, uint32_t _rgba = 0x000000ff, float _depth = 1.0f, uint8_t _stencil = 0);
|
||||||
|
|
||||||
/// Set view clear flags for multiple views.
|
/// Set view clear flags for multiple views.
|
||||||
|
@ -749,6 +772,7 @@ namespace bgfx
|
||||||
/// NOTE:
|
/// NOTE:
|
||||||
/// Use BGFX_STATE_ALPHA_REF, BGFX_STATE_POINT_SIZE and
|
/// Use BGFX_STATE_ALPHA_REF, BGFX_STATE_POINT_SIZE and
|
||||||
/// BGFX_STATE_BLEND_FUNC macros to setup more complex states.
|
/// BGFX_STATE_BLEND_FUNC macros to setup more complex states.
|
||||||
|
///
|
||||||
void setState(uint64_t _state, uint32_t _rgba = UINT32_MAX);
|
void setState(uint64_t _state, uint32_t _rgba = UINT32_MAX);
|
||||||
|
|
||||||
/// Set stencil test state.
|
/// Set stencil test state.
|
||||||
|
@ -756,6 +780,7 @@ namespace bgfx
|
||||||
/// @param _fstencil Front stencil state.
|
/// @param _fstencil Front stencil state.
|
||||||
/// @param _bstencil Back stencil state. If back is set to BGFX_STENCIL_NONE
|
/// @param _bstencil Back stencil state. If back is set to BGFX_STENCIL_NONE
|
||||||
/// _fstencil is applied to both front and back facing primitives.
|
/// _fstencil is applied to both front and back facing primitives.
|
||||||
|
///
|
||||||
void setStencil(uint32_t _fstencil, uint32_t _bstencil = BGFX_STENCIL_NONE);
|
void setStencil(uint32_t _fstencil, uint32_t _bstencil = BGFX_STENCIL_NONE);
|
||||||
|
|
||||||
/// Set model matrix for draw primitive. If it is not called model will
|
/// Set model matrix for draw primitive. If it is not called model will
|
||||||
|
@ -765,12 +790,14 @@ namespace bgfx
|
||||||
/// @param _num number of matrices in array.
|
/// @param _num number of matrices in array.
|
||||||
/// @returns index into matrix cache in case the same model matrix has
|
/// @returns index into matrix cache in case the same model matrix has
|
||||||
/// to be used for other draw primitive call.
|
/// to be used for other draw primitive call.
|
||||||
|
///
|
||||||
uint32_t setTransform(const void* _mtx, uint16_t _num = 1);
|
uint32_t setTransform(const void* _mtx, uint16_t _num = 1);
|
||||||
|
|
||||||
/// Set model matrix from matrix cache for draw primitive.
|
/// Set model matrix from matrix cache for draw primitive.
|
||||||
///
|
///
|
||||||
/// @param _cache index in matrix cache.
|
/// @param _cache index in matrix cache.
|
||||||
/// @param _num number of matrices from cache.
|
/// @param _num number of matrices from cache.
|
||||||
|
///
|
||||||
void setTransform(uint32_t _cache, uint16_t _num = 1);
|
void setTransform(uint32_t _cache, uint16_t _num = 1);
|
||||||
|
|
||||||
/// Set shader uniform parameter for draw primitive.
|
/// Set shader uniform parameter for draw primitive.
|
||||||
|
@ -810,12 +837,14 @@ namespace bgfx
|
||||||
///
|
///
|
||||||
/// @param _id View id.
|
/// @param _id View id.
|
||||||
/// @param _depth depth for sorting.
|
/// @param _depth depth for sorting.
|
||||||
|
///
|
||||||
void submit(uint8_t _id, int32_t _depth = 0);
|
void submit(uint8_t _id, int32_t _depth = 0);
|
||||||
|
|
||||||
/// Submit primitive for rendering into multiple views.
|
/// Submit primitive for rendering into multiple views.
|
||||||
///
|
///
|
||||||
/// @param _viewMask mask to which views to submit draw primitive calls.
|
/// @param _viewMask mask to which views to submit draw primitive calls.
|
||||||
/// @param _depth depth for sorting.
|
/// @param _depth depth for sorting.
|
||||||
|
///
|
||||||
void submitMask(uint32_t _viewMask, int32_t _depth = 0);
|
void submitMask(uint32_t _viewMask, int32_t _depth = 0);
|
||||||
|
|
||||||
/// Request screen shot.
|
/// Request screen shot.
|
||||||
|
|
21
src/bgfx.cpp
21
src/bgfx.cpp
|
@ -931,6 +931,20 @@ namespace bgfx
|
||||||
return s_ctx.m_submit->checkAvailTransientIndexBuffer(_num);
|
return s_ctx.m_submit->checkAvailTransientIndexBuffer(_num);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool checkAvailTransientVertexBuffer(uint16_t _num, const VertexDecl& _decl)
|
||||||
|
{
|
||||||
|
BGFX_CHECK_MAIN_THREAD();
|
||||||
|
BX_CHECK(0 < _num, "Requesting 0 vertices.");
|
||||||
|
return s_ctx.m_submit->checkAvailTransientVertexBuffer(_num, _decl.m_stride);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool checkAvailTransientBuffers(uint16_t _numVertices, const VertexDecl& _decl, uint16_t _numIndices)
|
||||||
|
{
|
||||||
|
return checkAvailTransientVertexBuffer(_numVertices, _decl)
|
||||||
|
&& checkAvailTransientIndexBuffer(_numIndices)
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
void allocTransientIndexBuffer(TransientIndexBuffer* _tib, uint16_t _num)
|
void allocTransientIndexBuffer(TransientIndexBuffer* _tib, uint16_t _num)
|
||||||
{
|
{
|
||||||
BGFX_CHECK_MAIN_THREAD();
|
BGFX_CHECK_MAIN_THREAD();
|
||||||
|
@ -939,13 +953,6 @@ namespace bgfx
|
||||||
return s_ctx.allocTransientIndexBuffer(_tib, _num);
|
return s_ctx.allocTransientIndexBuffer(_tib, _num);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool checkAvailTransientVertexBuffer(uint16_t _num, const VertexDecl& _decl)
|
|
||||||
{
|
|
||||||
BGFX_CHECK_MAIN_THREAD();
|
|
||||||
BX_CHECK(0 < _num, "Requesting 0 vertices.");
|
|
||||||
return s_ctx.m_submit->checkAvailTransientVertexBuffer(_num, _decl.m_stride);
|
|
||||||
}
|
|
||||||
|
|
||||||
void allocTransientVertexBuffer(TransientVertexBuffer* _tvb, uint16_t _num, const VertexDecl& _decl)
|
void allocTransientVertexBuffer(TransientVertexBuffer* _tvb, uint16_t _num, const VertexDecl& _decl)
|
||||||
{
|
{
|
||||||
BGFX_CHECK_MAIN_THREAD();
|
BGFX_CHECK_MAIN_THREAD();
|
||||||
|
|
Loading…
Reference in a new issue