我有一个程序可以监视文本文件的更改,并且在检测到更改后,用户可以选择根据该文本文件的内容重新显示屏幕。我的问题是,当请求新屏幕时,前一个屏幕的内容会保留,而新内容会与它重叠。我希望在将新数据放在屏幕上之前清除屏幕。
这是我所拥有的:
void keyboard(unsigned char key, int x, int y){
if(key == 'c'){
c_pressed++;
cout<<"c pressed: "<<c_pressed<<"sound.txt cleared..."<<endl;
clear_file();
}
if(key=='v'){
v_pressed++;
cout<<"v pressed: "<<v_pressed<<"displaying new configuration..."<<endl;
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glutPostRedisplay();
}
}
当按下“c”键时,文本文件被清除。我已经验证这可以正常工作。然后在一个单独的程序将新数据加载到文本文件中之后,用户按“v”来加载这些新指令。我尝试将 clear 函数放在“v”语句中,以及在 display 函数中......
void display(void){
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
read_in_sound();
cout<<"Number of sound events: "<<numLines<<endl;
for(int j=0; j<numLines; j++){
if(data[0+j*4]==1){
circle(0,0,200,50);
}
if(data[1+j*4]==1){
circle(0,400,200,50);
}
if(data[2+j*4]==1){
circle(400,400,200,50);
}
if(data[3+j*4]==1){
circle(400,0,200,50);
}
}
glFlush();
glutSwapBuffers();
}
但是当我调用 redisplay 时,旧屏幕和新屏幕都会显示。