Render: Fix memory leak, use after free :^)
This commit is contained in:
@@ -424,10 +424,11 @@ void VertexArray::addVertexBuffer(std::shared_ptr<VertexBuffer> vertexBuffer)
|
||||
|
||||
index++;
|
||||
}
|
||||
m_vertexBuffers.push_back(std::move(vertexBuffer));
|
||||
|
||||
unbind();
|
||||
vertexBuffer->unbind();
|
||||
|
||||
m_vertexBuffers.push_back(std::move(vertexBuffer));
|
||||
}
|
||||
|
||||
void VertexArray::setIndexBuffer(std::shared_ptr<IndexBuffer> indexBuffer)
|
||||
@@ -435,10 +436,10 @@ void VertexArray::setIndexBuffer(std::shared_ptr<IndexBuffer> indexBuffer)
|
||||
bind();
|
||||
indexBuffer->bind();
|
||||
|
||||
m_indexBuffer = std::move(indexBuffer);
|
||||
|
||||
unbind();
|
||||
indexBuffer->unbind();
|
||||
|
||||
m_indexBuffer = std::move(indexBuffer);
|
||||
}
|
||||
|
||||
} // namespace Inferno
|
||||
|
||||
@@ -550,20 +550,20 @@ void Renderer3D::createElementBuffer()
|
||||
// CPU
|
||||
|
||||
// Create array for storing quads vertices
|
||||
m_elementBufferBase = new uint32_t[maxElements];
|
||||
m_elementBufferPtr = m_elementBufferBase;
|
||||
m_elementBufferBase = std::make_unique<uint32_t[]>(maxElements);
|
||||
m_elementBufferPtr = m_elementBufferBase.get();
|
||||
|
||||
// ---------------------------------
|
||||
// GPU
|
||||
|
||||
// Create index buffer
|
||||
auto indexBuffer = std::make_shared<IndexBuffer>(m_elementBufferBase, sizeof(uint32_t) * maxElements);
|
||||
auto indexBuffer = std::make_shared<IndexBuffer>(m_elementBufferBase.get(), sizeof(uint32_t) * maxElements);
|
||||
m_vertexArray->setIndexBuffer(indexBuffer);
|
||||
}
|
||||
|
||||
void Renderer3D::uploadElementBuffer()
|
||||
{
|
||||
m_vertexArray->indexBuffer()->uploadData(m_elementBufferBase, m_elementIndex * sizeof(uint32_t));
|
||||
m_vertexArray->indexBuffer()->uploadData(m_elementBufferBase.get(), m_elementIndex * sizeof(uint32_t));
|
||||
}
|
||||
|
||||
void Renderer3D::loadShader()
|
||||
@@ -574,7 +574,7 @@ void Renderer3D::loadShader()
|
||||
void Renderer3D::startBatch()
|
||||
{
|
||||
Renderer<Vertex>::startBatch();
|
||||
m_elementBufferPtr = m_elementBufferBase;
|
||||
m_elementBufferPtr = m_elementBufferBase.get();
|
||||
}
|
||||
|
||||
// -----------------------------------------
|
||||
|
||||
@@ -222,7 +222,7 @@ private:
|
||||
|
||||
private:
|
||||
// CPU element vertices
|
||||
uint32_t* m_elementBufferBase { nullptr };
|
||||
std::unique_ptr<uint32_t[]> m_elementBufferBase { nullptr };
|
||||
uint32_t* m_elementBufferPtr { nullptr };
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user