Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from OpenGL.GL import *
- from OpenGL.GLUT import *
- def _make_shader(stype, src):
- shader = glCreateShader(stype)
- glShaderSource(shader, src)
- glCompileShader(shader)
- if not glGetShaderiv(shader, GL_COMPILE_STATUS):
- err = glGetShaderInfoLog(shader)
- glDeleteShader(shader)
- raise Exception(err)
- return shader
- verts = (GLfloat*8)()
- for i, v in enumerate([-1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 1.0, 1.0]):
- verts[i] = v
- polys = (GLushort*6)()
- for i, v in enumerate([0,1,3,1,2,3]):
- polys[i] = v
- def init_gl():
- global program, posidx, vbuf, ebuf
- glEnable(GL_BLEND)
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
- glClearColor(0.5,0.5,0.5,1)
- glClearDepth(1.0)
- glDepthFunc(GL_LESS)
- glEnable(GL_DEPTH_TEST)
- glEnable(GL_TEXTURE_2D)
- glViewport(0,0,800,600)
- ######################################
- # Make the shaders and programs
- ######################################
- vshade = _make_shader(GL_VERTEX_SHADER, open("stupid.v.glsl").read())
- fshade = _make_shader(GL_FRAGMENT_SHADER, open("stupid.f.glsl").read())
- program = glCreateProgram()
- glAttachShader(program, vshade)
- glAttachShader(program, fshade)
- glLinkProgram(program)
- #######################################
- # Fetch positions, push poly to card
- #######################################
- posidx = glGetAttribLocation(program, "position")
- vbuf = glGenBuffers(1)
- ebuf = glGenBuffers(1)
- glBindBuffer(GL_ARRAY_BUFFER, vbuf)
- glBufferData(GL_ARRAY_BUFFER, verts, GL_STATIC_DRAW)
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebuf)
- glBufferData(GL_ELEMENT_ARRAY_BUFFER, polys, GL_STATIC_DRAW)
- #####################################
- # Enter main drawing loop!
- #####################################
- def render():
- global program, posidx, vbuf, ebuf
- # Clear the screen
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
- glUseProgram(program)
- # Enable the position attribute
- glEnableVertexAttribArray(posidx)
- glBindBuffer(GL_ARRAY_BUFFER, vbuf)
- glVertexAttribPointer( posidx, 2, GL_FLOAT, GL_FALSE, 4*2, 0)
- # Draw the two triangles
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebuf);
- glDrawElements(
- GL_TRIANGLES, # mode
- 6, # count
- GL_UNSIGNED_SHORT, # type
- 0 # element array buffer offset
- )
- glDisableVertexAttribArray(posidx)
- glutSwapBuffers()
- def main():
- glutInit()
- glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
- glutInitWindowSize(800, 600);
- glutCreateWindow("Flag");
- glutDisplayFunc(render);
- init_gl();
- glutMainLoop();
- if __name__ == "__main__":
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement