我有一个主窗口,它在屏幕的前10%中都有过剩的UI,而在屏幕的最下方90%都有openGL世界。每次我的光标开始悬停在GLUT部分上时,openGL渲染将冻结。仅当光标退出GLUT区域时才会恢复。
这是因为只要光标悬停在GLUT区域上,就可能从未调用glutIdleFunc,因为过剩不是“空闲”,因此不会渲染openGL内容。
我已经尝试制作一个新的不相关的线程,只调用显示代码和/或glutPostRedisplay,但我的帧速率高达20 fps而不是正常方式的100+ fps。我不知道为什么。 (在这个测试中我也禁用了glutIdleFunc,因此没有空闲的func,只是调用显示器的单独线程)
如何解决这个问题(除了“停止使用过剩”,我将来可能会这样做,但现在我想要一个临时解决方案)?
答案 0 :(得分:2)
我知道这是一个老问题,但我遇到了类似的问题,想分享我是如何解决的。
基本上,在空闲功能中,您应该手动将窗口设置为正常的窗口ID。感谢Joel Davis' HexPlanet代码(https://github.com/joeld42/hexplanet/)用于演示:
void glut_Idle( void )
{
// According to the GLUT specification, the current window is
// undefined during an idle callback. So we need to explicitly change
// it if necessary
if ( glutGetWindow() != g_glutMainWin )
{
glutSetWindow(g_glutMainWin);
}
...
}
答案 1 :(得分:0)
为被动运动功能创建回调:
void passiveMouseFunc(int,int){
glutPostRedisplay();
}
使用以下方式注册:
glutPassiveMotionFunc(passiveMouseFunc);