在GLUT中,应用程序通过回调函数处理事件。例如,首先可以打开一个窗口,并注册特定事件的回调函数。然后可以创建一个不会退出的主循环。在这个循环中,如果发生了相应的事件,它所注册的回调函数就会执行。在回调函数执行完成之后,程序的控制流程就返回到主循环。
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize (500, 500);
glutInitWindowPosition (100, 100);
glutCreateWindow (argv[0]);
init ();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}
上面的代码,是Opengl处理的一般过程。在打开窗口之前,必须指定窗口的特征。它是单缓冲还是双缓冲?它把颜色存储为RGBA值还是颜色索引值?它应该出现在屏幕的什么位置?为了在应用程序中指定这些问题的答案,在使用glutCreateWindow()函数之前,分别调用了glutInit(),glutInitDisplayMode(),glutInitWindowSize(),glutInitWindowPosition()函数。
然后调用glutCreateWindow()函数创建指定的窗口。
处理窗口和输入事件:
在窗口创建之后,但是在进入主循环之前(glutMainLoop()),应该注册相关的回调函数。如glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard);
进入GLUT事件处理循环,它永远不会返回。当对应的事件发生时,为该事件注册的回调函数就会调用。如当窗口的内容需要进行重绘时将要调用reshape()函数。