summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJere Tuliniemi <jere.tuliniemi@qt.io>2019-06-05 12:01:11 +0300
committerJere Tuliniemi <jere.tuliniemi@qt.io>2019-06-05 13:44:12 +0300
commit5be91208103aed64b2478c996ebeb40e60a41e5b (patch)
treeb930a0ec8892f28613d0df17ebf814d77daa98af
parent6478ebedb1dd28d48dd73cbb9f8b99d2a83f02c7 (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>
-rw-r--r--src/Runtime/ogl-runtime/src/render/backends/gl/Q3DSRenderBackendGLES2.cpp9
-rw-r--r--src/Runtime/ogl-runtime/src/render/backends/gl/Q3DSRenderBackendGLES2.h2
-rw-r--r--src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderBackendGL3.cpp9
-rw-r--r--src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderBackendGL3.h2
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,