fix polyvox memory leak

This commit is contained in:
Seth Alves 2016-11-16 14:10:50 -08:00
parent 44b2b090df
commit d097fa7982
3 changed files with 18 additions and 8 deletions

View file

@ -1139,8 +1139,8 @@ void RenderablePolyVoxEntityItem::getMesh() {
auto indexBuffer = std::make_shared<gpu::Buffer>(vecIndices.size() * sizeof(uint32_t),
(gpu::Byte*)vecIndices.data());
auto indexBufferPtr = gpu::BufferPointer(indexBuffer);
auto indexBufferView = new gpu::BufferView(indexBufferPtr, gpu::Element(gpu::SCALAR, gpu::UINT32, gpu::RAW));
mesh->setIndexBuffer(*indexBufferView);
gpu::BufferView indexBufferView(indexBufferPtr, gpu::Element(gpu::SCALAR, gpu::UINT32, gpu::RAW));
mesh->setIndexBuffer(indexBufferView);
const std::vector<PolyVox::PositionMaterialNormal>& vecVertices = polyVoxMesh.getVertices();
auto vertexBuffer = std::make_shared<gpu::Buffer>(vecVertices.size() * sizeof(PolyVox::PositionMaterialNormal),
@ -1150,10 +1150,10 @@ void RenderablePolyVoxEntityItem::getMesh() {
if (vertexBufferPtr->getSize() > sizeof(float) * 3) {
vertexBufferSize = vertexBufferPtr->getSize() - sizeof(float) * 3;
}
auto vertexBufferView = new gpu::BufferView(vertexBufferPtr, 0, vertexBufferSize,
sizeof(PolyVox::PositionMaterialNormal),
gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::RAW));
mesh->setVertexBuffer(*vertexBufferView);
gpu::BufferView vertexBufferView(vertexBufferPtr, 0, vertexBufferSize,
sizeof(PolyVox::PositionMaterialNormal),
gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::RAW));
mesh->setVertexBuffer(vertexBufferView);
mesh->addAttribute(gpu::Stream::NORMAL,
gpu::BufferView(vertexBufferPtr,
sizeof(float) * 3,

View file

@ -25,6 +25,14 @@ void Buffer::updateBufferCPUMemoryUsage(Size prevObjectSize, Size newObjectSize)
}
}
void Buffer::incrementBufferCPUCount() {
_bufferCPUCount++;
}
void Buffer::decrementBufferCPUCount() {
_bufferCPUCount--;
}
uint32_t Buffer::getBufferCPUCount() {
return _bufferCPUCount.load();
}
@ -43,7 +51,7 @@ Buffer::Size Buffer::getBufferGPUMemoryUsage() {
Buffer::Buffer(Size pageSize) :
_renderPages(pageSize), _pages(pageSize) {
_bufferCPUCount++;
Buffer::incrementBufferCPUCount();
}
Buffer::Buffer(Size size, const Byte* bytes, Size pageSize) : Buffer(pageSize) {
@ -61,7 +69,7 @@ Buffer& Buffer::operator=(const Buffer& buf) {
}
Buffer::~Buffer() {
_bufferCPUCount--;
Buffer::decrementBufferCPUCount();
Buffer::updateBufferCPUMemoryUsage(_sysmem.getSize(), 0);
}

View file

@ -27,6 +27,8 @@ class Buffer : public Resource {
static std::atomic<uint32_t> _bufferCPUCount;
static std::atomic<Size> _bufferCPUMemoryUsage;
static void updateBufferCPUMemoryUsage(Size prevObjectSize, Size newObjectSize);
static void incrementBufferCPUCount();
static void decrementBufferCPUCount();
public:
using Flag = PageManager::Flag;