I'd advise that first of all you get rid of that single-buffered context. I'd honestly love to see all GLUT tutorials that create a single-buffered context being consumed by a very large, very hot fire. You'd almost think that using double-buffered was in some way an advanced topic, but it's not - it's two lines of code.

Change this:
Code :
glutInitDisplayMode (GLUT_RGB | GLUT_DEPTH);
To this:
Code :
glutInitDisplayMode (GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);

And at the end of your OnDisplay function, instead of glFlush or glFinish, use this:
Code :
glutSwapBuffers ();

Now you've got a nice double-buffered context that will work better with the way your GPU is designed to work, so try things out and see what happens from there.