Fixed handle leaks.
This commit is contained in:
parent
90daafba80
commit
fac2937a1f
107
src/bgfx_p.h
107
src/bgfx_p.h
@ -2992,7 +2992,13 @@ namespace bgfx
|
||||
{
|
||||
BGFX_MUTEX_SCOPE(m_resourceApiLock);
|
||||
|
||||
DynamicIndexBufferHandle handle = BGFX_INVALID_HANDLE;
|
||||
DynamicIndexBufferHandle handle = { m_dynamicIndexBufferHandle.alloc() };
|
||||
BX_WARN(isValid(handle), "Failed to allocate dynamic index buffer handle.");
|
||||
if (!isValid(handle) )
|
||||
{
|
||||
return handle;
|
||||
}
|
||||
|
||||
const uint32_t indexSize = 0 == (_flags & BGFX_BUFFER_INDEX32) ? 2 : 4;
|
||||
uint32_t size = BX_ALIGN_16(_num*indexSize);
|
||||
|
||||
@ -3002,7 +3008,8 @@ namespace bgfx
|
||||
IndexBufferHandle indexBufferHandle = { m_indexBufferHandle.alloc() };
|
||||
if (!isValid(indexBufferHandle) )
|
||||
{
|
||||
return handle;
|
||||
m_dynamicIndexBufferHandle.free(handle.idx);
|
||||
return BGFX_INVALID_HANDLE;
|
||||
}
|
||||
|
||||
IndexBuffer& ib = m_indexBuffers[indexBufferHandle.idx];
|
||||
@ -3020,17 +3027,11 @@ namespace bgfx
|
||||
ptr = allocDynamicIndexBuffer(size, _flags);
|
||||
if (ptr == NonLocalAllocator::kInvalidBlock)
|
||||
{
|
||||
return handle;
|
||||
m_dynamicIndexBufferHandle.free(handle.idx);
|
||||
return BGFX_INVALID_HANDLE;
|
||||
}
|
||||
}
|
||||
|
||||
handle.idx = m_dynamicIndexBufferHandle.alloc();
|
||||
BX_WARN(isValid(handle), "Failed to allocate dynamic index buffer handle.");
|
||||
if (!isValid(handle) )
|
||||
{
|
||||
return handle;
|
||||
}
|
||||
|
||||
DynamicIndexBuffer& dib = m_dynamicIndexBuffers[handle.idx];
|
||||
dib.m_handle.idx = uint16_t(ptr>>32);
|
||||
dib.m_offset = uint32_t(ptr);
|
||||
@ -3049,15 +3050,14 @@ namespace bgfx
|
||||
const uint32_t indexSize = 0 == (_flags & BGFX_BUFFER_INDEX32) ? 2 : 4;
|
||||
DynamicIndexBufferHandle handle = createDynamicIndexBuffer(_mem->size/indexSize, _flags);
|
||||
|
||||
if (isValid(handle) )
|
||||
{
|
||||
update(handle, 0, _mem);
|
||||
}
|
||||
else
|
||||
if (!isValid(handle) )
|
||||
{
|
||||
release(_mem);
|
||||
return BGFX_INVALID_HANDLE;
|
||||
}
|
||||
|
||||
update(handle, 0, _mem);
|
||||
|
||||
return handle;
|
||||
}
|
||||
|
||||
@ -3167,7 +3167,20 @@ namespace bgfx
|
||||
{
|
||||
BGFX_MUTEX_SCOPE(m_resourceApiLock);
|
||||
|
||||
DynamicVertexBufferHandle handle = BGFX_INVALID_HANDLE;
|
||||
VertexDeclHandle declHandle = findVertexDecl(_decl);
|
||||
if (!isValid(declHandle) )
|
||||
{
|
||||
BX_TRACE("WARNING: Failed to allocate vertex decl handle (BGFX_CONFIG_MAX_VERTEX_DECLS, max: %d).", BGFX_CONFIG_MAX_VERTEX_DECLS);
|
||||
return BGFX_INVALID_HANDLE;
|
||||
}
|
||||
|
||||
DynamicVertexBufferHandle handle = { m_dynamicVertexBufferHandle.alloc() };
|
||||
if (!isValid(handle) )
|
||||
{
|
||||
BX_TRACE("WARNING: Failed to allocate dynamic vertex buffer handle (BGFX_CONFIG_MAX_DYNAMIC_VERTEX_BUFFERS, max: %d).", BGFX_CONFIG_MAX_DYNAMIC_VERTEX_BUFFERS);
|
||||
return BGFX_INVALID_HANDLE;
|
||||
}
|
||||
|
||||
uint32_t size = bx::strideAlign16(_num*_decl.m_stride, _decl.m_stride);
|
||||
|
||||
uint64_t ptr = 0;
|
||||
@ -3176,8 +3189,9 @@ namespace bgfx
|
||||
VertexBufferHandle vertexBufferHandle = { m_vertexBufferHandle.alloc() };
|
||||
if (!isValid(vertexBufferHandle) )
|
||||
{
|
||||
m_dynamicVertexBufferHandle.free(handle.idx);
|
||||
BX_TRACE("WARNING: Failed to allocate vertex buffer handle (BGFX_CONFIG_MAX_VERTEX_BUFFERS, max: %d).", BGFX_CONFIG_MAX_VERTEX_BUFFERS);
|
||||
return handle;
|
||||
return BGFX_INVALID_HANDLE;
|
||||
}
|
||||
|
||||
VertexBuffer& vb = m_vertexBuffers[vertexBufferHandle.idx];
|
||||
@ -3196,24 +3210,11 @@ namespace bgfx
|
||||
ptr = allocDynamicVertexBuffer(size, _flags);
|
||||
if (ptr == NonLocalAllocator::kInvalidBlock)
|
||||
{
|
||||
return handle;
|
||||
m_dynamicVertexBufferHandle.free(handle.idx);
|
||||
return BGFX_INVALID_HANDLE;
|
||||
}
|
||||
}
|
||||
|
||||
VertexDeclHandle declHandle = findVertexDecl(_decl);
|
||||
if (!isValid(declHandle) )
|
||||
{
|
||||
BX_TRACE("WARNING: Failed to allocate vertex decl handle (BGFX_CONFIG_MAX_VERTEX_DECLS, max: %d).", BGFX_CONFIG_MAX_VERTEX_DECLS);
|
||||
return handle;
|
||||
}
|
||||
|
||||
handle.idx = m_dynamicVertexBufferHandle.alloc();
|
||||
if (!isValid(handle) )
|
||||
{
|
||||
BX_TRACE("WARNING: Failed to allocate dynamic vertex buffer handle (BGFX_CONFIG_MAX_DYNAMIC_VERTEX_BUFFERS, max: %d).", BGFX_CONFIG_MAX_DYNAMIC_VERTEX_BUFFERS);
|
||||
return handle;
|
||||
}
|
||||
|
||||
DynamicVertexBuffer& dvb = m_dynamicVertexBuffers[handle.idx];
|
||||
dvb.m_handle.idx = uint16_t(ptr>>32);
|
||||
dvb.m_offset = uint32_t(ptr);
|
||||
@ -3235,15 +3236,14 @@ namespace bgfx
|
||||
uint32_t numVertices = _mem->size/_decl.m_stride;
|
||||
DynamicVertexBufferHandle handle = createDynamicVertexBuffer(numVertices, _decl, _flags);
|
||||
|
||||
if (isValid(handle) )
|
||||
{
|
||||
update(handle, 0, _mem);
|
||||
}
|
||||
else
|
||||
if (!isValid(handle) )
|
||||
{
|
||||
release(_mem);
|
||||
return BGFX_INVALID_HANDLE;
|
||||
}
|
||||
|
||||
update(handle, 0, _mem);
|
||||
|
||||
return handle;
|
||||
}
|
||||
|
||||
@ -3899,14 +3899,22 @@ namespace bgfx
|
||||
_info->numMips = 0;
|
||||
_info->bitsPerPixel = 0;
|
||||
_info->cubeMap = false;
|
||||
|
||||
return BGFX_INVALID_HANDLE;
|
||||
}
|
||||
|
||||
TextureHandle handle = { m_textureHandle.alloc() };
|
||||
BX_WARN(isValid(handle), "Failed to allocate texture handle.");
|
||||
if (isValid(handle) )
|
||||
|
||||
if (!isValid(handle) )
|
||||
{
|
||||
release(_mem);
|
||||
return BGFX_INVALID_HANDLE;
|
||||
}
|
||||
|
||||
TextureRef& ref = m_textureRef[handle.idx];
|
||||
ref.init(_ratio
|
||||
ref.init(
|
||||
_ratio
|
||||
, _info->format
|
||||
, _info->storageSize
|
||||
, imageContainer.m_numMips
|
||||
@ -3929,11 +3937,6 @@ namespace bgfx
|
||||
cmdbuf.write(_mem);
|
||||
cmdbuf.write(_flags);
|
||||
cmdbuf.write(_skip);
|
||||
}
|
||||
else
|
||||
{
|
||||
release(_mem);
|
||||
}
|
||||
|
||||
return handle;
|
||||
}
|
||||
@ -4240,11 +4243,10 @@ namespace bgfx
|
||||
{
|
||||
BGFX_MUTEX_SCOPE(m_resourceApiLock);
|
||||
|
||||
BX_WARN(PredefinedUniform::Count == nameToPredefinedUniformEnum(_name), "%s is predefined uniform name.", _name);
|
||||
if (PredefinedUniform::Count != nameToPredefinedUniformEnum(_name) )
|
||||
{
|
||||
UniformHandle handle = BGFX_INVALID_HANDLE;
|
||||
return handle;
|
||||
BX_TRACE("%s is predefined uniform name.", _name);
|
||||
return BGFX_INVALID_HANDLE;
|
||||
}
|
||||
|
||||
_num = bx::max<uint16_t>(1, _num);
|
||||
@ -4284,8 +4286,12 @@ namespace bgfx
|
||||
|
||||
UniformHandle handle = { m_uniformHandle.alloc() };
|
||||
|
||||
if (isValid(handle) )
|
||||
if (!isValid(handle) )
|
||||
{
|
||||
BX_TRACE("Failed to allocate uniform handle.");
|
||||
return BGFX_INVALID_HANDLE;
|
||||
}
|
||||
|
||||
BX_TRACE("Creating uniform (handle %3d) %s", handle.idx, _name);
|
||||
|
||||
UniformRef& uniform = m_uniformRef[handle.idx];
|
||||
@ -4304,11 +4310,6 @@ namespace bgfx
|
||||
uint8_t len = (uint8_t)bx::strLen(_name)+1;
|
||||
cmdbuf.write(len);
|
||||
cmdbuf.write(_name, len);
|
||||
}
|
||||
else
|
||||
{
|
||||
BX_TRACE("Failed to allocate uniform handle.");
|
||||
}
|
||||
|
||||
return handle;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user