
Untitled
By: a guest on
Feb 16th, 2012 | syntax:
Python | size: 1.93 KB | hits: 93 | expires: Never
from OpenGL.GL import *
from OpenGL.arrays import vbo
from OpenGL.GL import shaders
import wx
import wx.glcanvas
class MyCanvas(wx.glcanvas.GLCanvas):
def __init__(self, parent):
wx.glcanvas.GLCanvas.__init__(self, parent)
VERTEX_SHADER = shaders.compileShader("""#version 330
void main() {
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}""", GL_VERTEX_SHADER)
FRAGMENT_SHADER = shaders.compileShader("""#version 330
void main() {
gl_FragColor = vec4( 0, 1, 0, 1 );
}""", GL_FRAGMENT_SHADER)
self.shader = shaders.compileProgram(VERTEX_SHADER,FRAGMENT_SHADER)
self.vbo = vbo.VBO(
array( [
[ 0, 1, 0 ],
[ -1,-1, 0 ],
[ 1,-1, 0 ],
[ 2,-1, 0 ],
[ 4,-1, 0 ],
[ 4, 1, 0 ],
[ 2,-1, 0 ],
[ 4, 1, 0 ],
[ 2, 1, 0 ],
],'f')
)
wx.EVT_PAINT(self, self.OnPaint)
self.haveInited = False
self.context = wx.glcanvas.GLContext(self)
def OnPaint( self, mode):
if not self.haveInited:
self.SetCurrent(self.context)
glClearColor(.3, .3, .3, 0)
self.haveInited = True
shaders.glUseProgram(self.shader)
try:
self.vbo.bind()
try:
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointerf( self.vbo )
glDrawArrays(GL_TRIANGLES, 0, 9)
finally:
self.vbo.unbind()
glDisableClientState(GL_VERTEX_ARRAY);
finally:
shaders.glUseProgram( 0 )
class MyApp(wx.App):
def OnInit(self):
frame = wx.Frame(None)
canvas = MyCanvas(frame)
frame.Show()
return True
MyApp(redirect = False).MainLoop()