int main(int argc,char * argv[]){
srand(time(NULL));
glutInit(&argc,argv);
// Setup GLUT
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH | GLUT_STENCIL);
glutInitWindowSize (window_width,window_height);
glutCreateWindow (window_title);
graphics_init ();
// Initialize Runtime variables
initialize();
// callbacks
glutReshapeFunc(&reshape);
glutDisplayFunc(&display);
glutMouseFunc(&mouse);
glutMainLoop();
return 0;
}
void mouse(int button, int state, int x, int y ){
if(state == GLUT_DOWN){
draw_method_two(); // draw objects here using method 2
glFlush();
}else{
current_point_i = -1;
}
}
void display(){
// Clear Viewport
glClearColor(0.0f,0.0f,0.0f,1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
draw_method_one(); ///// using method 1 to draw objects
glFlush();
glutSwapBuffers();
}
Существует два способа рисования объектов. в mouse()
, draw_objects_two
используется для рисования объектов при щелчке мышью. Тем не менее, объекты, показанные в окне, по-прежнему создаются draw_method_one
. Я использую glFlush
в функции mouse()
. но почему это не отображается на экране?
Обновление:
из этой ссылки написано:
The function you pass to glutDisplayFunc is only called it is needed: that means when the window is resized, or when an another window has hidden it. If you use glutMouseFunc, for instance, you perhaps want to update (redraw) your window content according to that clic. Also, if you draw animations, you need to call glutPostRedisplay from your idle function.
Так почему glutDisplayFunc()
вызывается в этом случае?