I'm getting started with OpenGL and shaders using GLUT and PyOpenGL. I can draw a basic scene but for some reason I can't get it to update. E.g. any changes I make during idle(), display(), or reshape() are not reflected.
Here are the methods:
def display(self):
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT )
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
glUseProgram(self.shader_program)
self.m_vbo.bind()
glEnableClientState( GL_VERTEX_ARRAY )
glVertexPointerf(self.m_vbo)
glDrawArrays(GL_TRIANGLES, 0, len(self.m_vbo))
glutSwapBuffers()
glutReportErrors()
def idle(self):
test_change += .1
self.m_vbo = vbo.VBO(
array([
[ test_change, 1, 0 ], # triangle
[ -1,-1, 0 ],
[ 1,-1, 0 ],
[ 2,-1, 0 ], # square
[ 4,-1, 0 ],
[ 4, 1, 0 ],
[ 2,-1, 0 ],
[ 4, 1, 0 ],
[ 2, 1, 0 ],
],'f')
)
glutPostRedisplay()
def begin(self):
glutInit()
glutInitWindowSize(400, 400)
glutCreateWindow("Simple OpenGL")
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB)
glutDisplayFunc(self.display)
glutReshapeFunc(self.reshape)
glutMouseFunc(self.mouse)
glutMotionFunc(self.motion)
glutIdleFunc(self.idle)
self.define_shaders()
glutMainLoop()
I'd like to implement a time step in idle() but even basic changes to the vertices or tranlastions and rotations on the MODELVIEW matrix don't display. It just puts up the initial state and does not update. Am I missing something?