|
|
@@ -3483,8 +3483,7 @@ namespace bgfx
|
|
|
if (dib.m_size < _mem->size
|
|
|
&& 0 != (dib.m_flags & BGFX_BUFFER_ALLOW_RESIZE) )
|
|
|
{
|
|
|
- m_dynIndexBufferAllocator.free(uint64_t(dib.m_handle.idx)<<32 | dib.m_offset);
|
|
|
- m_dynIndexBufferAllocator.compact();
|
|
|
+ destroy(dib);
|
|
|
|
|
|
const uint64_t ptr = (0 != (dib.m_flags & BGFX_BUFFER_COMPUTE_READ) )
|
|
|
? allocIndexBuffer(_mem->size, dib.m_flags)
|
|
|
@@ -3522,27 +3521,30 @@ namespace bgfx
|
|
|
m_freeDynamicIndexBufferHandle[m_numFreeDynamicIndexBufferHandles++] = _handle;
|
|
|
}
|
|
|
|
|
|
- void destroyDynamicIndexBufferInternal(DynamicIndexBufferHandle _handle)
|
|
|
+ void destroy(const DynamicIndexBuffer& _dib)
|
|
|
{
|
|
|
- DynamicIndexBuffer& dib = m_dynamicIndexBuffers[_handle.idx];
|
|
|
-
|
|
|
- if (0 != (dib.m_flags & BGFX_BUFFER_COMPUTE_READ_WRITE) )
|
|
|
+ if (0 != (_dib.m_flags & BGFX_BUFFER_COMPUTE_READ_WRITE))
|
|
|
{
|
|
|
- destroyIndexBuffer(dib.m_handle);
|
|
|
+ destroyIndexBuffer(_dib.m_handle);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- m_dynIndexBufferAllocator.free(uint64_t(dib.m_handle.idx)<<32 | dib.m_offset);
|
|
|
- if (m_dynIndexBufferAllocator.compact() )
|
|
|
+ m_dynIndexBufferAllocator.free(uint64_t(_dib.m_handle.idx) << 32 | _dib.m_offset);
|
|
|
+ if (m_dynIndexBufferAllocator.compact())
|
|
|
{
|
|
|
- for (uint64_t ptr = m_dynIndexBufferAllocator.remove(); 0 != ptr; ptr = m_dynIndexBufferAllocator.remove() )
|
|
|
+ for (uint64_t ptr = m_dynIndexBufferAllocator.remove(); 0 != ptr; ptr = m_dynIndexBufferAllocator.remove())
|
|
|
{
|
|
|
- IndexBufferHandle handle = { uint16_t(ptr>>32) };
|
|
|
+ IndexBufferHandle handle = { uint16_t(ptr >> 32) };
|
|
|
destroyIndexBuffer(handle);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
+ void destroyDynamicIndexBufferInternal(DynamicIndexBufferHandle _handle)
|
|
|
+ {
|
|
|
+ DynamicIndexBuffer& dib = m_dynamicIndexBuffers[_handle.idx];
|
|
|
+ destroy(dib);
|
|
|
m_dynamicIndexBufferHandle.free(_handle.idx);
|
|
|
}
|
|
|
|
|
|
@@ -3675,8 +3677,7 @@ namespace bgfx
|
|
|
if (dvb.m_size < _mem->size
|
|
|
&& 0 != (dvb.m_flags & BGFX_BUFFER_ALLOW_RESIZE) )
|
|
|
{
|
|
|
- m_dynVertexBufferAllocator.free(uint64_t(dvb.m_handle.idx)<<32 | dvb.m_offset);
|
|
|
- m_dynVertexBufferAllocator.compact();
|
|
|
+ destroy(dvb);
|
|
|
|
|
|
const uint32_t size = bx::strideAlign<16>(_mem->size, dvb.m_stride)+dvb.m_stride;
|
|
|
|
|
|
@@ -3718,6 +3719,26 @@ namespace bgfx
|
|
|
m_freeDynamicVertexBufferHandle[m_numFreeDynamicVertexBufferHandles++] = _handle;
|
|
|
}
|
|
|
|
|
|
+ void destroy(const DynamicVertexBuffer& _dvb)
|
|
|
+ {
|
|
|
+ if (0 != (_dvb.m_flags & BGFX_BUFFER_COMPUTE_READ_WRITE))
|
|
|
+ {
|
|
|
+ destroyVertexBuffer(_dvb.m_handle);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ m_dynVertexBufferAllocator.free(uint64_t(_dvb.m_handle.idx) << 32 | _dvb.m_offset);
|
|
|
+ if (m_dynVertexBufferAllocator.compact())
|
|
|
+ {
|
|
|
+ for (uint64_t ptr = m_dynVertexBufferAllocator.remove(); 0 != ptr; ptr = m_dynVertexBufferAllocator.remove())
|
|
|
+ {
|
|
|
+ VertexBufferHandle handle = { uint16_t(ptr >> 32) };
|
|
|
+ destroyVertexBuffer(handle);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
void destroyDynamicVertexBufferInternal(DynamicVertexBufferHandle _handle)
|
|
|
{
|
|
|
VertexLayoutHandle layoutHandle = m_vertexLayoutRef.release(_handle);
|
|
|
@@ -3731,24 +3752,7 @@ namespace bgfx
|
|
|
}
|
|
|
|
|
|
DynamicVertexBuffer& dvb = m_dynamicVertexBuffers[_handle.idx];
|
|
|
-
|
|
|
- if (0 != (dvb.m_flags & BGFX_BUFFER_COMPUTE_READ_WRITE) )
|
|
|
- {
|
|
|
- destroyVertexBuffer(dvb.m_handle);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- m_dynVertexBufferAllocator.free(uint64_t(dvb.m_handle.idx)<<32 | dvb.m_offset);
|
|
|
- if (m_dynVertexBufferAllocator.compact() )
|
|
|
- {
|
|
|
- for (uint64_t ptr = m_dynVertexBufferAllocator.remove(); 0 != ptr; ptr = m_dynVertexBufferAllocator.remove() )
|
|
|
- {
|
|
|
- VertexBufferHandle handle = { uint16_t(ptr>>32) };
|
|
|
- destroyVertexBuffer(handle);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
+ destroy(dvb);
|
|
|
m_dynamicVertexBufferHandle.free(_handle.idx);
|
|
|
}
|
|
|
|