2
我有一個簡單的窗口,其背景色設置在主迴路與一些全局變量:如何強制GL應用程序中的背景顏色在調用glutPostRedisplay時立即更改?
頂部的全局值:
static GLfloat redIntensity = 0.0; //values for background color
static GLfloat greenIntensity = 0.0;
static GLfloat blueIntensity = 0.0;
主要:
int main(int argc, char** argv){
...
glutDisplayFunc(display);
...
glutKeyboardFunc(keyboard); //****
glutMainLoop();
return 0;
}
的顯示實際根據全局值設置顏色:
void display(void){
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glClearColor(redIntensity, greenIntensity, blueIntensity, 0.0);
...
... //other stuff here is polygon drawn in middle of screen
glPopMatrix();
glutSwapBuffers();
}
在鍵盤功能,我有一個switch語句應該改變背景顏色取決於哪個鍵被按下,如:
...
case 'm':
{
redIntensity = 0.5;
greenIntensity = 0.0;
blueIntensity = 0.5;
bgc = MAGENTA; //another global thing to keep track of current color for other reasons...
}
...
glutPostRedisplay();
不幸的是,與glutPostRedisplay()
電話,背景顏色不會立即更改..用戶必須先點擊其他地方或按另一個鍵。我在其他地方看到glutPostRedisplay()
只是排隊重新顯示,所以我試着直接在後面添加glFlush()
。這仍然沒有工作,所以我試圖在那裏調用glutDisplayFunc(display)
。再一次,不成功。
如何在按下按鍵後強制改變顏色?主要或其他地方的訂購電話可能導致問題?嗯...
澄清:'glutDisplayFunc(display)'只將函數'display'註冊爲顯示函數,它實際上並不調用顯示函數。是的,'glutPostRedisplay()'只會將重畫添加到隊列中。不保證立即發生重新顯示。 – Derek