背景色がいくつかのグローバル変数を使用してメインループに設定されている単純なウィンドウがあります。
上部のグローバル値:
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)
代わりにそこに電話をかけてみました。もう一度、失敗。
キーを押した直後に強制的に色を変更するにはどうすればよいですか? おそらく、メインまたは他の場所での順序付け呼び出しが問題を引き起こしているのでしょうか? うーん...