mirror of
https://github.com/scratchfoundation/bgfx.git
synced 2024-11-28 18:45:54 -05:00
Added offset for updating dynamic buffers.
This commit is contained in:
parent
3eb0659898
commit
f36bfe2e4f
5 changed files with 27 additions and 20 deletions
|
@ -793,10 +793,12 @@ void TextBufferManager::submitTextBuffer(TextBufferHandle _handle, uint8_t _id,
|
||||||
vbh.idx = bc.vertexBufferHandleIdx;
|
vbh.idx = bc.vertexBufferHandleIdx;
|
||||||
|
|
||||||
bgfx::updateDynamicIndexBuffer(ibh
|
bgfx::updateDynamicIndexBuffer(ibh
|
||||||
|
, 0
|
||||||
, bgfx::copy(bc.textBuffer->getIndexBuffer(), indexSize)
|
, bgfx::copy(bc.textBuffer->getIndexBuffer(), indexSize)
|
||||||
);
|
);
|
||||||
|
|
||||||
bgfx::updateDynamicVertexBuffer(vbh
|
bgfx::updateDynamicVertexBuffer(vbh
|
||||||
|
, 0
|
||||||
, bgfx::copy(bc.textBuffer->getVertexBuffer(), vertexSize)
|
, bgfx::copy(bc.textBuffer->getVertexBuffer(), vertexSize)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -482,7 +482,7 @@ BGFX_C_API bgfx_dynamic_index_buffer_handle_t bgfx_create_dynamic_index_buffer(u
|
||||||
BGFX_C_API bgfx_dynamic_index_buffer_handle_t bgfx_create_dynamic_index_buffer_mem(const bgfx_memory_t* _mem, uint16_t _flags);
|
BGFX_C_API bgfx_dynamic_index_buffer_handle_t bgfx_create_dynamic_index_buffer_mem(const bgfx_memory_t* _mem, uint16_t _flags);
|
||||||
|
|
||||||
/**/
|
/**/
|
||||||
BGFX_C_API void bgfx_update_dynamic_index_buffer(bgfx_dynamic_index_buffer_handle_t _handle, const bgfx_memory_t* _mem);
|
BGFX_C_API void bgfx_update_dynamic_index_buffer(bgfx_dynamic_index_buffer_handle_t _handle, uint32_t _startIndex, const bgfx_memory_t* _mem);
|
||||||
|
|
||||||
/**/
|
/**/
|
||||||
BGFX_C_API void bgfx_destroy_dynamic_index_buffer(bgfx_dynamic_index_buffer_handle_t _handle);
|
BGFX_C_API void bgfx_destroy_dynamic_index_buffer(bgfx_dynamic_index_buffer_handle_t _handle);
|
||||||
|
@ -494,7 +494,7 @@ BGFX_C_API bgfx_dynamic_vertex_buffer_handle_t bgfx_create_dynamic_vertex_buffer
|
||||||
BGFX_C_API bgfx_dynamic_vertex_buffer_handle_t bgfx_create_dynamic_vertex_buffer_mem(const bgfx_memory_t* _mem, const bgfx_vertex_decl_t* _decl, uint16_t _flags);
|
BGFX_C_API bgfx_dynamic_vertex_buffer_handle_t bgfx_create_dynamic_vertex_buffer_mem(const bgfx_memory_t* _mem, const bgfx_vertex_decl_t* _decl, uint16_t _flags);
|
||||||
|
|
||||||
/**/
|
/**/
|
||||||
BGFX_C_API void bgfx_update_dynamic_vertex_buffer(bgfx_dynamic_vertex_buffer_handle_t _handle, const bgfx_memory_t* _mem);
|
BGFX_C_API void bgfx_update_dynamic_vertex_buffer(bgfx_dynamic_vertex_buffer_handle_t _handle, uint32_t _startVertex, const bgfx_memory_t* _mem);
|
||||||
|
|
||||||
/**/
|
/**/
|
||||||
BGFX_C_API void bgfx_destroy_dynamic_vertex_buffer(bgfx_dynamic_vertex_buffer_handle_t _handle);
|
BGFX_C_API void bgfx_destroy_dynamic_vertex_buffer(bgfx_dynamic_vertex_buffer_handle_t _handle);
|
||||||
|
|
|
@ -776,11 +776,12 @@ namespace bgfx
|
||||||
/// Update dynamic index buffer.
|
/// Update dynamic index buffer.
|
||||||
///
|
///
|
||||||
/// @param _handle Dynamic index buffer handle.
|
/// @param _handle Dynamic index buffer handle.
|
||||||
|
/// @param _startIndex Start index.
|
||||||
/// @param _mem Index buffer data.
|
/// @param _mem Index buffer data.
|
||||||
///
|
///
|
||||||
/// @attention C99 equivalent is `bgfx_update_dynamic_index_buffer`.
|
/// @attention C99 equivalent is `bgfx_update_dynamic_index_buffer`.
|
||||||
///
|
///
|
||||||
void updateDynamicIndexBuffer(DynamicIndexBufferHandle _handle, const Memory* _mem);
|
void updateDynamicIndexBuffer(DynamicIndexBufferHandle _handle, uint32_t _startIndex, const Memory* _mem);
|
||||||
|
|
||||||
/// Destroy dynamic index buffer.
|
/// Destroy dynamic index buffer.
|
||||||
///
|
///
|
||||||
|
@ -834,9 +835,13 @@ namespace bgfx
|
||||||
|
|
||||||
/// Update dynamic vertex buffer.
|
/// Update dynamic vertex buffer.
|
||||||
///
|
///
|
||||||
|
/// @param _handle Dynamic vertex buffer handle.
|
||||||
|
/// @param _startVertex Start vertex.
|
||||||
|
/// @param _mem Vertex buffer data.
|
||||||
|
///
|
||||||
/// @attention C99 equivalent is `bgfx_update_dynamic_vertex_buffer`.
|
/// @attention C99 equivalent is `bgfx_update_dynamic_vertex_buffer`.
|
||||||
///
|
///
|
||||||
void updateDynamicVertexBuffer(DynamicVertexBufferHandle _handle, const Memory* _mem);
|
void updateDynamicVertexBuffer(DynamicVertexBufferHandle _handle, uint32_t _startVertex, const Memory* _mem);
|
||||||
|
|
||||||
/// Destroy dynamic vertex buffer.
|
/// Destroy dynamic vertex buffer.
|
||||||
///
|
///
|
||||||
|
|
16
src/bgfx.cpp
16
src/bgfx.cpp
|
@ -2220,11 +2220,11 @@ again:
|
||||||
return s_ctx->createDynamicIndexBuffer(_mem, _flags);
|
return s_ctx->createDynamicIndexBuffer(_mem, _flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
void updateDynamicIndexBuffer(DynamicIndexBufferHandle _handle, const Memory* _mem)
|
void updateDynamicIndexBuffer(DynamicIndexBufferHandle _handle, uint32_t _startIndex, const Memory* _mem)
|
||||||
{
|
{
|
||||||
BGFX_CHECK_MAIN_THREAD();
|
BGFX_CHECK_MAIN_THREAD();
|
||||||
BX_CHECK(NULL != _mem, "_mem can't be NULL");
|
BX_CHECK(NULL != _mem, "_mem can't be NULL");
|
||||||
s_ctx->updateDynamicIndexBuffer(_handle, _mem);
|
s_ctx->updateDynamicIndexBuffer(_handle, _startIndex, _mem);
|
||||||
}
|
}
|
||||||
|
|
||||||
void destroyDynamicIndexBuffer(DynamicIndexBufferHandle _handle)
|
void destroyDynamicIndexBuffer(DynamicIndexBufferHandle _handle)
|
||||||
|
@ -2248,11 +2248,11 @@ again:
|
||||||
return s_ctx->createDynamicVertexBuffer(_mem, _decl, _flags);
|
return s_ctx->createDynamicVertexBuffer(_mem, _decl, _flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
void updateDynamicVertexBuffer(DynamicVertexBufferHandle _handle, const Memory* _mem)
|
void updateDynamicVertexBuffer(DynamicVertexBufferHandle _handle, uint32_t _startVertex, const Memory* _mem)
|
||||||
{
|
{
|
||||||
BGFX_CHECK_MAIN_THREAD();
|
BGFX_CHECK_MAIN_THREAD();
|
||||||
BX_CHECK(NULL != _mem, "_mem can't be NULL");
|
BX_CHECK(NULL != _mem, "_mem can't be NULL");
|
||||||
s_ctx->updateDynamicVertexBuffer(_handle, _mem);
|
s_ctx->updateDynamicVertexBuffer(_handle, _startVertex, _mem);
|
||||||
}
|
}
|
||||||
|
|
||||||
void destroyDynamicVertexBuffer(DynamicVertexBufferHandle _handle)
|
void destroyDynamicVertexBuffer(DynamicVertexBufferHandle _handle)
|
||||||
|
@ -3342,10 +3342,10 @@ BGFX_C_API bgfx_dynamic_index_buffer_handle_t bgfx_create_dynamic_index_buffer_m
|
||||||
return handle.c;
|
return handle.c;
|
||||||
}
|
}
|
||||||
|
|
||||||
BGFX_C_API void bgfx_update_dynamic_index_buffer(bgfx_dynamic_index_buffer_handle_t _handle, const bgfx_memory_t* _mem)
|
BGFX_C_API void bgfx_update_dynamic_index_buffer(bgfx_dynamic_index_buffer_handle_t _handle, uint32_t _startIndex, const bgfx_memory_t* _mem)
|
||||||
{
|
{
|
||||||
union { bgfx_dynamic_index_buffer_handle_t c; bgfx::DynamicIndexBufferHandle cpp; } handle = { _handle };
|
union { bgfx_dynamic_index_buffer_handle_t c; bgfx::DynamicIndexBufferHandle cpp; } handle = { _handle };
|
||||||
bgfx::updateDynamicIndexBuffer(handle.cpp, (const bgfx::Memory*)_mem);
|
bgfx::updateDynamicIndexBuffer(handle.cpp, _startIndex, (const bgfx::Memory*)_mem);
|
||||||
}
|
}
|
||||||
|
|
||||||
BGFX_C_API void bgfx_destroy_dynamic_index_buffer(bgfx_dynamic_index_buffer_handle_t _handle)
|
BGFX_C_API void bgfx_destroy_dynamic_index_buffer(bgfx_dynamic_index_buffer_handle_t _handle)
|
||||||
|
@ -3370,10 +3370,10 @@ BGFX_C_API bgfx_dynamic_vertex_buffer_handle_t bgfx_create_dynamic_vertex_buffer
|
||||||
return handle.c;
|
return handle.c;
|
||||||
}
|
}
|
||||||
|
|
||||||
BGFX_C_API void bgfx_update_dynamic_vertex_buffer(bgfx_dynamic_vertex_buffer_handle_t _handle, const bgfx_memory_t* _mem)
|
BGFX_C_API void bgfx_update_dynamic_vertex_buffer(bgfx_dynamic_vertex_buffer_handle_t _handle, uint32_t _startVertex, const bgfx_memory_t* _mem)
|
||||||
{
|
{
|
||||||
union { bgfx_dynamic_vertex_buffer_handle_t c; bgfx::DynamicVertexBufferHandle cpp; } handle = { _handle };
|
union { bgfx_dynamic_vertex_buffer_handle_t c; bgfx::DynamicVertexBufferHandle cpp; } handle = { _handle };
|
||||||
bgfx::updateDynamicVertexBuffer(handle.cpp, (const bgfx::Memory*)_mem);
|
bgfx::updateDynamicVertexBuffer(handle.cpp, _startVertex, (const bgfx::Memory*)_mem);
|
||||||
}
|
}
|
||||||
|
|
||||||
BGFX_C_API void bgfx_destroy_dynamic_vertex_buffer(bgfx_dynamic_vertex_buffer_handle_t _handle)
|
BGFX_C_API void bgfx_destroy_dynamic_vertex_buffer(bgfx_dynamic_vertex_buffer_handle_t _handle)
|
||||||
|
|
16
src/bgfx_p.h
16
src/bgfx_p.h
|
@ -2159,12 +2159,12 @@ namespace bgfx
|
||||||
DynamicIndexBufferHandle handle = createDynamicIndexBuffer(_mem->size/indexSize, _flags);
|
DynamicIndexBufferHandle handle = createDynamicIndexBuffer(_mem->size/indexSize, _flags);
|
||||||
if (isValid(handle) )
|
if (isValid(handle) )
|
||||||
{
|
{
|
||||||
updateDynamicIndexBuffer(handle, _mem);
|
updateDynamicIndexBuffer(handle, 0, _mem);
|
||||||
}
|
}
|
||||||
return handle;
|
return handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
BGFX_API_FUNC(void updateDynamicIndexBuffer(DynamicIndexBufferHandle _handle, const Memory* _mem) )
|
BGFX_API_FUNC(void updateDynamicIndexBuffer(DynamicIndexBufferHandle _handle, uint32_t _startIndex, const Memory* _mem) )
|
||||||
{
|
{
|
||||||
BGFX_CHECK_HANDLE("updateDynamicIndexBuffer", m_dynamicIndexBufferHandle, _handle);
|
BGFX_CHECK_HANDLE("updateDynamicIndexBuffer", m_dynamicIndexBufferHandle, _handle);
|
||||||
|
|
||||||
|
@ -2185,8 +2185,8 @@ namespace bgfx
|
||||||
dib.m_startIndex = bx::strideAlign(dib.m_offset, indexSize)/indexSize;
|
dib.m_startIndex = bx::strideAlign(dib.m_offset, indexSize)/indexSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t offset = dib.m_startIndex*indexSize;
|
uint32_t offset = (dib.m_startIndex + _startIndex)*indexSize;
|
||||||
uint32_t size = bx::uint32_min(dib.m_size, _mem->size);
|
uint32_t size = bx::uint32_min(bx::uint32_satsub(dib.m_size, _startIndex*indexSize), _mem->size);
|
||||||
BX_CHECK(_mem->size <= size, "Truncating dynamic index buffer update (size %d, mem size %d)."
|
BX_CHECK(_mem->size <= size, "Truncating dynamic index buffer update (size %d, mem size %d)."
|
||||||
, size
|
, size
|
||||||
, _mem->size
|
, _mem->size
|
||||||
|
@ -2308,12 +2308,12 @@ namespace bgfx
|
||||||
DynamicVertexBufferHandle handle = createDynamicVertexBuffer(uint16_t(numVertices), _decl, _flags);
|
DynamicVertexBufferHandle handle = createDynamicVertexBuffer(uint16_t(numVertices), _decl, _flags);
|
||||||
if (isValid(handle) )
|
if (isValid(handle) )
|
||||||
{
|
{
|
||||||
updateDynamicVertexBuffer(handle, _mem);
|
updateDynamicVertexBuffer(handle, 0, _mem);
|
||||||
}
|
}
|
||||||
return handle;
|
return handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
BGFX_API_FUNC(void updateDynamicVertexBuffer(DynamicVertexBufferHandle _handle, const Memory* _mem) )
|
BGFX_API_FUNC(void updateDynamicVertexBuffer(DynamicVertexBufferHandle _handle, uint32_t _startVertex, const Memory* _mem) )
|
||||||
{
|
{
|
||||||
BGFX_CHECK_HANDLE("updateDynamicVertexBuffer", m_dynamicVertexBufferHandle, _handle);
|
BGFX_CHECK_HANDLE("updateDynamicVertexBuffer", m_dynamicVertexBufferHandle, _handle);
|
||||||
|
|
||||||
|
@ -2333,8 +2333,8 @@ namespace bgfx
|
||||||
dvb.m_startVertex = bx::strideAlign(dvb.m_offset, dvb.m_stride)/dvb.m_stride;
|
dvb.m_startVertex = bx::strideAlign(dvb.m_offset, dvb.m_stride)/dvb.m_stride;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t offset = dvb.m_startVertex*dvb.m_stride;
|
uint32_t offset = (dvb.m_startVertex + _startVertex)*dvb.m_stride;
|
||||||
uint32_t size = bx::uint32_min(dvb.m_size, _mem->size);
|
uint32_t size = bx::uint32_min(bx::uint32_satsub(dvb.m_size, _startVertex*dvb.m_stride), _mem->size);
|
||||||
BX_CHECK(_mem->size <= size, "Truncating dynamic vertex buffer update (size %d, mem size %d)."
|
BX_CHECK(_mem->size <= size, "Truncating dynamic vertex buffer update (size %d, mem size %d)."
|
||||||
, dvb.m_size
|
, dvb.m_size
|
||||||
, _mem->size
|
, _mem->size
|
||||||
|
|
Loading…
Reference in a new issue