chiark / gitweb /
Small fix in AMF save. Change the way shaders are made, the helper code contains...
authordaid <daid303@gmail.com>
Thu, 20 Jun 2013 07:39:58 +0000 (09:39 +0200)
committerdaid <daid303@gmail.com>
Thu, 20 Jun 2013 07:39:58 +0000 (09:39 +0200)
Cura/gui/util/opengl.py
Cura/util/meshLoaders/amf.py

index ce833b351ef8263e8974a1dc68628e522a0ea82d..36213b5448f0f44d8ff7c856b103f71de236d05a 100644 (file)
@@ -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
 
index dbc56ebde7bd6336f6e4afdc3dba5fca50faca77..f2b407b429aa6a5cc606186dff331228ff193edc 100644 (file)
@@ -109,8 +109,8 @@ def saveScene(filename, objects):
                                xml.write('          <v3>%i</v3>\n' % (idx + idxOffset + 2))
                                xml.write('        </triangle>\n')
                        xml.write('      </volume>\n')
-                       xml.write('    </mesh>\n')
                        idxOffset += len(m.vertexes)
+               xml.write('    </mesh>\n')
                xml.write('  </object>\n')
 
        n += 1