我注意到如果弹出菜单处于活动状态,渲染过程将被冻结,直到我点击菜单。我已经搜索了这个问题并提出了这个功能
void glutMenuStatusFunc(void (*func)(int status, int x, int y);
使用这些标志GLUT_MENU_IN_USE or GLUT_MENU_NOT_IN_USE
,我可以判断菜单是否处于活动状态。我尝试做的是在菜单处于活动状态时强制渲染。这就是我所做的
int main(int argc, char **argv)
{
...
glutDisplayFunc(render);
glutIdleFunc(glutIdle);
glutMenuStatusFunc(MenuStatus);
glutMainLoop();
return 0;
}
而MenuStatus
是
void MenuStatus(int status,int x, int y)
{
if ( status == GLUT_MENU_IN_USE )
glutPostRedisplay();
}
使用此解决方案glutPostRedisplay()
会触发一次。如果我运行while()
,应用程序将冻结。有关如何在弹出菜单处于活动状态时连续强制渲染的任何建议吗?