Skip to content

Instantly share code, notes, and snippets.

@uniqx
Created July 21, 2011 02:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save uniqx/7a1f2b110c4142fa9ee7 to your computer and use it in GitHub Desktop.
Save uniqx/7a1f2b110c4142fa9ee7 to your computer and use it in GitHub Desktop.
pyside.opengles.py
# -*- coding: utf-8 -*-
#!/usr/bin/python
import sys
from PySide.QtCore import *
from PySide.QtGui import *
from PySide.QtOpenGL import *
from simple_gles_wrapper import GL # https://gist.github.com/d3b869dd3fbc428728d2
vertex_shader_source = """
attribute highp vec4 vertex;
uniform mediump mat4 matrix;
void main(void){
gl_Position = matrix * vertex;
}
"""
fragment_shader_source = """
uniform mediump vec4 color;
void main(void){
gl_FragColor = color;
}
"""
class MyGLWidget(QGLWidget):
def __init__(self, parent=None):
QGLWidget.__init__(self, parent)
self.vertices = [
QVector4D(0.5,0.0,0.0,1.0),
QVector4D(0.0,0.5,0.0,1.0),
QVector4D(0.5,0.5,0.0,1.0),
QVector4D(0.5,0.0,0.0,1.0),
QVector4D(0.5,0.5,0.0,1.0),
QVector4D(0.0,0.5,0.0,1.0)
]
self.matrix = QMatrix4x4(
1.0, 0.0, 0.0, 0.0,
0.0, 1.0, 0.0, 0.0,
0.0, 0.0, 1.0, 0.0,
0.0, 0.0, 0.0, 1.0
)
self.color = QColor(0, 255, 0, 255)
def initializeGL(self):
GL.glEnable(GL.GL_DEPTH_TEST)
GL.glEnable(GL.GL_CULL_FACE)
self.program = QGLShaderProgram(self.context())
# vertex shader
self.vertex_shader = QGLShader(QGLShader.Vertex)
self.vertex_shader.compileSourceCode(vertex_shader_source)
self.program.addShader(self.vertex_shader)
# frag shader
self.fragment_shader = QGLShader(QGLShader.Fragment)
self.fragment_shader.compileSourceCode(fragment_shader_source)
self.program.addShader(self.fragment_shader)
self.program.link()
def resizeGL(self, width, height):
side = min(width, height)
GL.glViewport((width - side) / 2, (height - side) / 2, side, side)
def paintGL(self):
# bind shader program
self.program.bind()
# set vertices for shader program
vertexLocation = self.program.attributeLocation("vertex")
self.program.setAttributeArray(vertexLocation, self.vertices)
# set matrix for shader program
matrixLocation = self.program.uniformLocation("matrix")
self.program.setUniformValue(matrixLocation, self.matrix)
# set color for shader program
colorLocation = self.program.uniformLocation("color")
self.program.setUniformValue(colorLocation, self.color)
# draw
self.program.enableAttributeArray(vertexLocation)
GL.glDrawArrays(GL.GL_TRIANGLE_FAN, 0, 6)
self.program.disableAttributeArray(vertexLocation)
# unbind shader
self.program.release()
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MyGLWidget()
window.show()
sys.exit(app.exec_())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment