From 1205ac94dd57ba85b3d16b93383479ab2cf4241f Mon Sep 17 00:00:00 2001 From: daid303 Date: Fri, 22 Mar 2013 12:09:12 +0100 Subject: [PATCH] Fix crash bug. --- Cura/gui/mainWindow.py | 1 + Cura/gui/sceneView.py | 4 ++-- Cura/gui/util/opengl.py | 15 ++++++--------- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/Cura/gui/mainWindow.py b/Cura/gui/mainWindow.py index 890d83ce..cdfd2c23 100644 --- a/Cura/gui/mainWindow.py +++ b/Cura/gui/mainWindow.py @@ -521,6 +521,7 @@ class mainWindow(wx.Frame): profile.putPreference('window_normal_sash', self.normalSashPos) #HACK: Set the paint function of the glCanvas to nothing so it won't keep refreshing. Which keeps wxWidgets from quiting. + print "Closing down" self.scene.OnPaint = lambda e : e self.Destroy() diff --git a/Cura/gui/sceneView.py b/Cura/gui/sceneView.py index cb1916e6..d6259589 100644 --- a/Cura/gui/sceneView.py +++ b/Cura/gui/sceneView.py @@ -107,7 +107,7 @@ class SceneView(openglGui.glGuiPanel): def OnPaint(self,e): if self._objectShader is None: - self._objectShader = opengl.GLShader(self, """ + self._objectShader = opengl.GLShader(""" uniform float cameraDistance; varying float light_amount; @@ -175,6 +175,6 @@ void main(void) glTranslate(-offset[0], -offset[1], -obj.getMinimum()[2]) for m in obj._meshList: if m.vbo is None: - m.vbo = opengl.GLVBO(self, m.vertexes, m.normal) + m.vbo = opengl.GLVBO(m.vertexes, m.normal) m.vbo.render() glPopMatrix() diff --git a/Cura/gui/util/opengl.py b/Cura/gui/util/opengl.py index 98da72c8..c46a8940 100644 --- a/Cura/gui/util/opengl.py +++ b/Cura/gui/util/opengl.py @@ -23,8 +23,7 @@ glutInit() platformMesh = None class GLShader(object): - def __init__(self, owner, vertexProgram, fragmentProgram): - self._owner = owner + def __init__(self, vertexProgram, fragmentProgram): try: self._vertexProgram = shaders.compileShader(vertexProgram, GL_VERTEX_SHADER) self._fragmentProgram = shaders.compileShader(fragmentProgram, GL_FRAGMENT_SHADER) @@ -42,7 +41,7 @@ class GLShader(object): shaders.glUseProgram(0) def release(self): - if self._program != None: + if self._program is not None: shaders.glDeleteShader(self._vertexProgram) shaders.glDeleteShader(self._fragmentProgram) glDeleteProgram(self._program) @@ -54,14 +53,12 @@ class GLShader(object): def __del__(self): if self._program is not None and bool(glDeleteProgram): - print "OpenGL shader was not properly cleaned, trying to clean it up now." - self._owner.glReleaseList.append(self) + print "Shader was not properly released!" class GLVBO(object): - def __init__(self, owner, vertexArray, normalArray): + def __init__(self, vertexArray, normalArray): self._buffer = glGenBuffers(1) self._size = len(vertexArray) - self._owner = owner glBindBuffer(GL_ARRAY_BUFFER, self._buffer) glBufferData(GL_ARRAY_BUFFER, numpy.concatenate((vertexArray, normalArray), 1), GL_STATIC_DRAW) glBindBuffer(GL_ARRAY_BUFFER, 0) @@ -86,12 +83,12 @@ class GLVBO(object): def release(self): if self._buffer is not None: - glDeleteBuffers(self._buffer, 1) + glDeleteBuffers(1, [self._buffer]) self._buffer = None def __del__(self): if self._buffer is not None and bool(glDeleteBuffers): - self._owner.glReleaseList.append(self) + print "VBO was not properly released!" def DrawMachine(machineSize): glDisable(GL_LIGHTING) -- 2.30.2