From: daid Date: Thu, 20 Jun 2013 07:39:58 +0000 (+0200) Subject: Small fix in AMF save. Change the way shaders are made, the helper code contains... X-Git-Tag: 13.06.3~6 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=c36582b609dbe8f1ca65eb16463c9ce749d84873;p=cura.git Small fix in AMF save. Change the way shaders are made, the helper code contains a bug when the OpenGL drivers are returning large integers for shader program numbers. --- diff --git a/Cura/gui/util/opengl.py b/Cura/gui/util/opengl.py index ce833b35..36213b54 100644 --- a/Cura/gui/util/opengl.py +++ b/Cura/gui/util/opengl.py @@ -44,9 +44,23 @@ class GLShader(GLReferenceCounter): self._vertexString = vertexProgram self._fragmentString = fragmentProgram try: - self._vertexProgram = shaders.compileShader(vertexProgram, GL_VERTEX_SHADER) - self._fragmentProgram = shaders.compileShader(fragmentProgram, GL_FRAGMENT_SHADER) - self._program = shaders.compileProgram(self._vertexProgram, self._fragmentProgram) + vertexShader = shaders.compileShader(vertexProgram, GL_VERTEX_SHADER) + fragmentShader = shaders.compileShader(fragmentProgram, GL_FRAGMENT_SHADER) + + #shader.compileProgram tries to return the shader program as a overloaded int. But the return value of a shader does not always fit in a int (needs to be a long). So we do raw OpenGL calls. + # self._program = shaders.compileProgram(self._vertexProgram, self._fragmentProgram) + self._program = glCreateProgram() + glAttachShader(self._program, vertexShader) + glAttachShader(self._program, fragmentShader) + glLinkProgram(self._program) + # Validation has to occur *after* linking + glValidateProgram(self._program) + if glGetProgramiv(self._program, GL_VALIDATE_STATUS) == GL_FALSE: + raise RuntimeError("Validation failure: %s"%(glGetProgramInfoLog(self._program))) + if glGetProgramiv(self._program, GL_LINK_STATUS) == GL_FALSE: + raise RuntimeError("Link failure: %s" % (glGetProgramInfoLog(self._program))) + glDeleteShader(vertexShader) + glDeleteShader(fragmentShader) except RuntimeError, e: print str(e) self._program = None @@ -60,8 +74,6 @@ class GLShader(GLReferenceCounter): def release(self): if self._program is not None: - shaders.glDeleteShader(self._vertexProgram) - shaders.glDeleteShader(self._fragmentProgram) glDeleteProgram(self._program) self._program = None diff --git a/Cura/util/meshLoaders/amf.py b/Cura/util/meshLoaders/amf.py index dbc56ebd..f2b407b4 100644 --- a/Cura/util/meshLoaders/amf.py +++ b/Cura/util/meshLoaders/amf.py @@ -109,8 +109,8 @@ def saveScene(filename, objects): xml.write(' %i\n' % (idx + idxOffset + 2)) xml.write(' \n') xml.write(' \n') - xml.write(' \n') idxOffset += len(m.vertexes) + xml.write(' \n') xml.write(' \n') n += 1