glutPostRedisplay 标记当前窗口需要重新绘制。通过glutMainLoop下一次循环时,窗口显示将被回调以重新显示窗口的正常面板。多次调用glutPostRedisplay,在下一个显示回调只产生单一的重新显示回调。
为了便于理解,用下面的例子来说明:
假设有绘制代码:
glutDisplayFunc(display);
// opengl drawing goes here
glutTimerFunc(30, drive, -1);
// physics, movement equations here
glutMainLoop();
另外有代码如下:
void drive (int data)
{
glutTimerFunc(30, drive, -1);
// call drive() again in 30 milliseconds
/*callback function moves the car. .... move x, y, z, etc
前面的代码不用理解,就是移动了物体,绘制的画面改变了*/
glutPostRedisplay();
}
如果有glutpostredisplay,mianloop运行的过程会像下面这样:
drive (-1);
display();
drive (-1);
display();
drive (-1);
display();
...
如果没有glutpostredisplay,mianloop运行的过程会像下面这样:
drive (-1);
drive (-1);
drive (-1);
...