From 4364a3fcae6b7994f3ee92811ce8d000dcb785ce Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Mon, 17 Mar 2014 18:18:28 +0300 Subject: Fix memory leak on window resize. --- src/render/mobileopenglgraphics.cpp | 12 ++++++++---- src/render/normalopenglgraphics.cpp | 18 ++++++++++++------ src/render/nullopenglgraphics.cpp | 9 ++++++--- 3 files changed, 26 insertions(+), 13 deletions(-) (limited to 'src/render') diff --git a/src/render/mobileopenglgraphics.cpp b/src/render/mobileopenglgraphics.cpp index 86707fac8..c815d096d 100644 --- a/src/render/mobileopenglgraphics.cpp +++ b/src/render/mobileopenglgraphics.cpp @@ -113,10 +113,14 @@ void MobileOpenGLGraphics::initArrays() // need alocate small size, after if limit reached reallocate to double size const int sz = mMaxVertices * 4 + 30; vertexBufSize = mMaxVertices; - mFloatTexArray = new GLfloat[sz]; - mShortVertArray = new GLshort[sz]; - mFloatTexArrayCached = new GLfloat[sz]; - mShortVertArrayCached = new GLshort[sz]; + if (!mFloatTexArray) + mFloatTexArray = new GLfloat[sz]; + if (!mShortVertArray) + mShortVertArray = new GLshort[sz]; + if (!mFloatTexArrayCached) + mFloatTexArrayCached = new GLfloat[sz]; + if (!mShortVertArrayCached) + mShortVertArrayCached = new GLshort[sz]; } bool MobileOpenGLGraphics::setVideoMode(const int w, const int h, diff --git a/src/render/normalopenglgraphics.cpp b/src/render/normalopenglgraphics.cpp index 6bc25be32..ebac68e1b 100644 --- a/src/render/normalopenglgraphics.cpp +++ b/src/render/normalopenglgraphics.cpp @@ -131,12 +131,18 @@ void NormalOpenGLGraphics::initArrays() // need alocate small size, after if limit reached reallocate to double size vertexBufSize = mMaxVertices; const int sz = mMaxVertices * 4 + 30; - mFloatTexArray = new GLfloat[sz]; - mIntTexArray = new GLint[sz]; - mIntVertArray = new GLint[sz]; - mFloatTexArrayCached = new GLfloat[sz]; - mIntTexArrayCached = new GLint[sz]; - mIntVertArrayCached = new GLint[sz]; + if (!mFloatTexArray) + mFloatTexArray = new GLfloat[sz]; + if (!mIntTexArray) + mIntTexArray = new GLint[sz]; + if (!mIntVertArray) + mIntVertArray = new GLint[sz]; + if (!mFloatTexArrayCached) + mFloatTexArrayCached = new GLfloat[sz]; + if (!mIntTexArrayCached) + mIntTexArrayCached = new GLint[sz]; + if (!mIntVertArrayCached) + mIntVertArrayCached = new GLint[sz]; } bool NormalOpenGLGraphics::setVideoMode(const int w, const int h, diff --git a/src/render/nullopenglgraphics.cpp b/src/render/nullopenglgraphics.cpp index d09d7b13b..8782c9573 100644 --- a/src/render/nullopenglgraphics.cpp +++ b/src/render/nullopenglgraphics.cpp @@ -77,9 +77,12 @@ void NullOpenGLGraphics::initArrays() // need alocate small size, after if limit reached reallocate to double size vertexBufSize = mMaxVertices; const int sz = mMaxVertices * 4 + 30; - mFloatTexArray = new GLfloat[sz]; - mIntTexArray = new GLint[sz]; - mIntVertArray = new GLint[sz]; + if (!mFloatTexArray) + mFloatTexArray = new GLfloat[sz]; + if (!mIntTexArray) + mIntTexArray = new GLint[sz]; + if (!mIntVertArray) + mIntVertArray = new GLint[sz]; } bool NullOpenGLGraphics::setVideoMode(const int w, const int h, -- cgit v1.2.3-70-g09d2