Instance counter for OPENGL_GAL to avoid double freeing.
This commit is contained in:
parent
dbff9ad786
commit
c0465e5519
|
@ -42,7 +42,9 @@ using namespace KIGFX;
|
||||||
|
|
||||||
static void InitTesselatorCallbacks( GLUtesselator* aTesselator );
|
static void InitTesselatorCallbacks( GLUtesselator* aTesselator );
|
||||||
static const int glAttributes[] = { WX_GL_RGBA, WX_GL_DOUBLEBUFFER, WX_GL_DEPTH_SIZE, 8, 0 };
|
static const int glAttributes[] = { WX_GL_RGBA, WX_GL_DOUBLEBUFFER, WX_GL_DEPTH_SIZE, 8, 0 };
|
||||||
|
|
||||||
wxGLContext* OPENGL_GAL::glContext = NULL;
|
wxGLContext* OPENGL_GAL::glContext = NULL;
|
||||||
|
int OPENGL_GAL::instanceCounter = 0;
|
||||||
|
|
||||||
OPENGL_GAL::OPENGL_GAL( wxWindow* aParent, wxEvtHandler* aMouseListener,
|
OPENGL_GAL::OPENGL_GAL( wxWindow* aParent, wxEvtHandler* aMouseListener,
|
||||||
wxEvtHandler* aPaintListener, const wxString& aName ) :
|
wxEvtHandler* aPaintListener, const wxString& aName ) :
|
||||||
|
@ -59,6 +61,7 @@ OPENGL_GAL::OPENGL_GAL( wxWindow* aParent, wxEvtHandler* aMouseListener,
|
||||||
|
|
||||||
// Check if OpenGL requirements are met
|
// Check if OpenGL requirements are met
|
||||||
runTest();
|
runTest();
|
||||||
|
++instanceCounter;
|
||||||
|
|
||||||
// Make VBOs use shaders
|
// Make VBOs use shaders
|
||||||
cachedManager.SetShader( shader );
|
cachedManager.SetShader( shader );
|
||||||
|
@ -119,6 +122,11 @@ OPENGL_GAL::~OPENGL_GAL()
|
||||||
{
|
{
|
||||||
glFlush();
|
glFlush();
|
||||||
|
|
||||||
|
if( --instanceCounter == 0 )
|
||||||
|
{
|
||||||
|
delete OPENGL_GAL::glContext;
|
||||||
|
}
|
||||||
|
|
||||||
gluDeleteTess( tesselator );
|
gluDeleteTess( tesselator );
|
||||||
ClearCache();
|
ClearCache();
|
||||||
}
|
}
|
||||||
|
|
|
@ -261,6 +261,7 @@ private:
|
||||||
static wxGLContext* glContext; ///< OpenGL context of wxWidgets
|
static wxGLContext* glContext; ///< OpenGL context of wxWidgets
|
||||||
wxEvtHandler* mouseListener;
|
wxEvtHandler* mouseListener;
|
||||||
wxEvtHandler* paintListener;
|
wxEvtHandler* paintListener;
|
||||||
|
static int instanceCounter;
|
||||||
|
|
||||||
// Vertex buffer objects related fields
|
// Vertex buffer objects related fields
|
||||||
typedef std::map< unsigned int, boost::shared_ptr<VERTEX_ITEM> > GROUPS_MAP;
|
typedef std::map< unsigned int, boost::shared_ptr<VERTEX_ITEM> > GROUPS_MAP;
|
||||||
|
|
Loading…
Reference in New Issue