import pygame
import numpy
import ctypes
import sys
from OpenGL.GL import *
from OpenGL.GLU import *
pygame.display.init()
pygame.display.set_mode((640, 480), pygame.OPENGL|pygame.DOUBLEBUF)
glViewport(0, 0, 640, 480)
glClearColor(0.0, 0.0, 0.0, 1.0)
triangle_verticies = numpy.array([-20.0, -20.0, 0.0,
20.0, -20.0, 0.0,
0.0, 20.0, 0.0], dtype=numpy.float32)
projection_matrix = numpy.array([1.0, 0.0, 0.0, 0.0,
0.0, 1.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 1.0], dtype=numpy.float32)
view_matrix = numpy.array([1.0, 0.0, 0.0, 320.0,
0.0, 1.0, 0.0, 240.0,
0.0, 0.0, 1.0, 0.0,
0.0, 0.0, 0.0, 1.0], dtype=numpy.float32)
mvp_matrix = projection_matrix * view_matrix
triangle_buffer_handle = glGenBuffers(1)
glBindBuffer(GL_ARRAY_BUFFER, triangle_buffer_handle)
glBufferData(GL_ARRAY_BUFFER, triangle_verticies, GL_STATIC_DRAW)
v_shader_source = "attribute vec4 v_position;\n" +\
"uniform mat4 uMVPMatrix;\n" +\
"void main()\n" +\
"{\n"+\
" gl_Position = uMVPMatrix * v_position;\n" +\
"}\n"
f_shader_source = "void main()\n" +\
"{\n" +\
" gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n" +\
"}\n"
v_shader_handle = glCreateShader(GL_VERTEX_SHADER)
glShaderSource(v_shader_handle, v_shader_source)
glCompileShader(v_shader_handle)
vs_compile_status = ctypes.c_int(-24)
glGetShaderiv(v_shader_handle, GL_COMPILE_STATUS, vs_compile_status)
if vs_compile_status.value == 0:
print glGetShaderInfoLog(v_shader_handle)
sys.exit(0)
f_shader_handle = glCreateShader(GL_FRAGMENT_SHADER)
glShaderSource(f_shader_handle, f_shader_source)
glCompileShader(f_shader_handle)
s_program_handle = glCreateProgram()
glAttachShader(s_program_handle, v_shader_handle)
glAttachShader(s_program_handle, f_shader_handle)
glLinkProgram(s_program_handle)
link_status = ctypes.c_int(-24)
glGetProgramiv(s_program_handle, GL_LINK_STATUS, link_status)
glUseProgram(s_program_handle)
v_position_handle = glGetAttribLocation(s_program_handle, "v_position")
mvp_matrix_handle = glGetUniformLocation(s_program_handle, "uMVPMatrix")
clock = pygame.time.Clock()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
clock.tick(40)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glVertexAttribPointer(v_position_handle, 3, GL_FLOAT, GL_FALSE, 0,
triangle_verticies)
glEnableVertexAttribArray(v_position_handle)
glUniformMatrix4fv(mvp_matrix_handle, 1, GL_FALSE, mvp_matrix)
glDrawArrays(GL_TRIANGLES, 0, 3)
pygame.display.flip()