def get_shader_program(name, version): """ Returns a QGLShaderProgram for a specific version. Bound and linked. """ print "name", name, "version", version vert = get_shader_code(name, version, "vert") frag = get_shader_code(name, version, "frag") geom = get_shader_code(name, version, "geom") program = QGLShaderProgram() if frag: print("Frag shader init") fshader = QGLShader(QGLShader.Fragment) fshader.compileSourceCode(frag) program.addShader(fshader) if vert: print("Vert shader init") vshader = QGLShader(QGLShader.Vertex) vshader.compileSourceCode(vert) program.addShader(vshader) if geom: gshader = QGLShader(QGLShader.Geometry) gshader.compileSourceCode(geom) program.addShader(gshader) program.link() return program
def initializeGL(self): self.vertex_shader = QGLShader(QGLShader.Vertex) self.vertex_shader.compileSourceCode(vertex_shader_code) self.fragment_shader = QGLShader(QGLShader.Fragment) self.fragment_shader.compileSourceCode(frag_shader_code) self.program = QGLShaderProgram() self.program.addShader(self.vertex_shader) self.program.addShader(self.fragment_shader) self.program.link() self.texture_location = self.program.uniformLocation('image') self.offset = self.program.uniformLocation('image') # Set up the texture stream # Arguments are (size, gl_format, gl_type, gl_internal_format) self.texture_stream = TextureStream2D((512,512), GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, GL.GL_RGBA, texture_unit=GL.GL_TEXTURE0) self.switch_image() GL.glClearColor(0.0,0.0,0.0,0.0)
def drawBackground(self, painter, rect): if not (painter.paintEngine().type() == QtGui.QPaintEngine.OpenGL or painter.paintEngine().type() == QtGui.QPaintEngine.OpenGL2): QtCore.qWarning('OpenGLScene: drawBackground needs a QGLWidget '\ +'to be set as viewport on the '\ +'graphics view') return painter.beginNativePainting() if not self.initialised: self.vertex_shader = QGLShader(QGLShader.Vertex) self.vertex_shader.compileSourceCode(vertex_shader_code) self.fragment_shader = QGLShader(QGLShader.Fragment) self.fragment_shader.compileSourceCode(frag_shader_code) self.program = QGLShaderProgram(self.context) self.program.addShader(self.vertex_shader) self.program.addShader(self.fragment_shader) self.program.link() print 'initialising' self.tex = self.loadImage('test.jpg') self.textureLocation = self.program.uniformLocation("image") self.initialised = True GL.glMatrixMode(GL.GL_PROJECTION) GL.glPushMatrix() GL.glMatrixMode(GL.GL_MODELVIEW) GL.glPushMatrix() GL.glBindTexture(GL.GL_TEXTURE_2D, self.tex) self.model.render() self.program.bind() GL.glTexParameterf(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR) GL.glTexParameterf(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR) GL.glTexEnvf(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, GL.GL_REPLACE) GL.glEnableClientState(GL.GL_VERTEX_ARRAY) GL.glVertexPointer(3, GL.GL_FLOAT, 0, triangle_vertices) GL.glDrawArrays(GL.GL_TRIANGLES, 0, len(triangle_vertices) / 3) GL.glDisableClientState(GL.GL_VERTEX_ARRAY) self.program.release() GL.glMatrixMode(GL.GL_MODELVIEW) GL.glPopMatrix() GL.glMatrixMode(GL.GL_PROJECTION) GL.glPopMatrix() painter.endNativePainting()