Exemplo n.º 1
0
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
Exemplo n.º 2
0
    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()