gl_engine: fix memory out of bounds error in GlGpuBuffer

If buffer data is larger than memory alignment, need to make sure there
is enough memory in current stage buffer
This commit is contained in:
RuiwenTang 2023-11-02 16:46:21 +08:00 committed by Hermet Park
parent b9504ca9c2
commit f3a155bce8
2 changed files with 5 additions and 5 deletions

View file

@ -87,7 +87,7 @@ GlStageBuffer::~GlStageBuffer()
uint32_t GlStageBuffer::push(void *data, uint32_t size, bool alignGpuOffset)
{
if (alignGpuOffset) alignOffset();
if (alignGpuOffset) alignOffset(size);
uint32_t offset = mStageBuffer.count;
@ -135,7 +135,7 @@ GLuint GlStageBuffer::getBufferId()
return mGpuBuffer->getBufferId();
}
void GlStageBuffer::alignOffset()
void GlStageBuffer::alignOffset(uint32_t size)
{
uint32_t alignment = _getGpuBufferAlign();
@ -145,8 +145,8 @@ void GlStageBuffer::alignOffset()
uint32_t offset = alignment - mStageBuffer.count % alignment;
if (mStageBuffer.count + offset > mStageBuffer.reserved) {
mStageBuffer.grow(max(alignment, mStageBuffer.reserved));
if (mStageBuffer.count + offset + size > mStageBuffer.reserved) {
mStageBuffer.grow(max(offset + size, mStageBuffer.reserved));
}
mStageBuffer.count += offset;

View file

@ -64,7 +64,7 @@ public:
GLuint getBufferId();
private:
void alignOffset();
void alignOffset(uint32_t size);
private:
GLuint mVao = 0;
unique_ptr<GlGpuBuffer> mGpuBuffer = {};