diff options
author | Jere Tuliniemi <jere.tuliniemi@qt.io> | 2019-06-05 12:01:11 +0300 |
---|---|---|
committer | Jere Tuliniemi <jere.tuliniemi@qt.io> | 2019-06-05 13:44:12 +0300 |
commit | 5be91208103aed64b2478c996ebeb40e60a41e5b (patch) | |
tree | b930a0ec8892f28613d0df17ebf814d77daa98af | |
parent | 6478ebedb1dd28d48dd73cbb9f8b99d2a83f02c7 (diff) |
Fix memory leak in OpenGL runtime
glDeleteVertexArrays was never called by the runtime causing the buffers
referenced by the vertex array object to never be removed from memory.
Task-number: QT3DS-3617
Change-Id: Ifd437fb5790823096121b6f18c9a500252a31017
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
4 files changed, 22 insertions, 0 deletions
diff --git a/src/Runtime/ogl-runtime/src/render/backends/gl/Q3DSRenderBackendGLES2.cpp b/src/Runtime/ogl-runtime/src/render/backends/gl/Q3DSRenderBackendGLES2.cpp index b06c80f8..ac5b9924 100644 --- a/src/Runtime/ogl-runtime/src/render/backends/gl/Q3DSRenderBackendGLES2.cpp +++ b/src/Runtime/ogl-runtime/src/render/backends/gl/Q3DSRenderBackendGLES2.cpp @@ -501,6 +501,15 @@ bool NVRenderBackendGLES2Impl::SetInputAssembler(NVRenderBackendInputAssemblerOb return true; } +void NVRenderBackendGLES2Impl::ReleaseInputAssembler( + NVRenderBackend::NVRenderBackendInputAssemblerObject iao) +{ + NVRenderBackendInputAssemblerGL *inputAssembler = (NVRenderBackendInputAssemblerGL *)iao; + if (inputAssembler->m_VaoID) + GL_CALL_EXTENSION_FUNCTION(glDeleteVertexArraysOES(1, &inputAssembler->m_VaoID)); + NVDelete(m_Foundation.getAllocator(), inputAssembler); +} + void NVRenderBackendGLES2Impl::SetDrawBuffers(NVRenderBackendRenderTargetObject rto, NVConstDataRef<QT3DSI32> inDrawBufferSet) { diff --git a/src/Runtime/ogl-runtime/src/render/backends/gl/Q3DSRenderBackendGLES2.h b/src/Runtime/ogl-runtime/src/render/backends/gl/Q3DSRenderBackendGLES2.h index 4890de0e..2c7a355f 100644 --- a/src/Runtime/ogl-runtime/src/render/backends/gl/Q3DSRenderBackendGLES2.h +++ b/src/Runtime/ogl-runtime/src/render/backends/gl/Q3DSRenderBackendGLES2.h @@ -108,6 +108,8 @@ namespace render { bool SetInputAssembler(NVRenderBackendInputAssemblerObject iao, NVRenderBackendShaderProgramObject po) override; + void ReleaseInputAssembler(NVRenderBackendInputAssemblerObject iao) override; + void SetDrawBuffers(NVRenderBackendRenderTargetObject rto, NVConstDataRef<QT3DSI32> inDrawBufferSet) override; void SetReadBuffer(NVRenderBackendRenderTargetObject rto, diff --git a/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderBackendGL3.cpp b/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderBackendGL3.cpp index 061151ed..c4d8b640 100644 --- a/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderBackendGL3.cpp +++ b/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderBackendGL3.cpp @@ -506,6 +506,15 @@ namespace render { return true; } + void NVRenderBackendGL3Impl::ReleaseInputAssembler( + NVRenderBackend::NVRenderBackendInputAssemblerObject iao) + { + NVRenderBackendInputAssemblerGL *inputAssembler = (NVRenderBackendInputAssemblerGL *)iao; + if (inputAssembler->m_VaoID) + GL_CALL_EXTRA_FUNCTION(glDeleteVertexArrays(1, &inputAssembler->m_VaoID)); + NVDelete(m_Foundation.getAllocator(), inputAssembler); + } + void NVRenderBackendGL3Impl::SetDrawBuffers(NVRenderBackendRenderTargetObject rto, NVConstDataRef<QT3DSI32> inDrawBufferSet) { diff --git a/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderBackendGL3.h b/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderBackendGL3.h index 7147b341..ea772700 100644 --- a/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderBackendGL3.h +++ b/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderBackendGL3.h @@ -105,6 +105,8 @@ namespace render { bool SetInputAssembler(NVRenderBackendInputAssemblerObject iao, NVRenderBackendShaderProgramObject po) override; + void ReleaseInputAssembler(NVRenderBackendInputAssemblerObject iao) override; + void SetDrawBuffers(NVRenderBackendRenderTargetObject rto, NVConstDataRef<QT3DSI32> inDrawBufferSet) override; void SetReadBuffer(NVRenderBackendRenderTargetObject rto, |