在GLUT UI中使用OpenGL渲染光标

时间:2011-07-28 19:59:36

标签: opengl interface render glut

我有一个主窗口,它在屏幕的前10%中都有过剩的UI,而在屏幕的最下方90%都有openGL世界。每次我的光标开始悬停在GLUT部分上时,openGL渲染将冻结。仅当光标退出GLUT区域时才会恢复。

这是因为只要光标悬停在GLUT区域上,就可能从未调用glutIdleFunc,因为过剩不是“空闲”,因此不会渲染openGL内容。

我已经尝试制作一个新的不相关的线程,只调用显示代码和/或glutPostRedisplay,但我的帧速率高达20 fps而不是正常方式的100+ fps。我不知道为什么。 (在这个测试中我也禁用了glutIdleFunc,因此没有空闲的func,只是调用显示器的单独线程)

如何解决这个问题(除了“停止使用过剩”,我将来可能会这样做,但现在我想要一个临时解决方案)?

2 个答案:

答案 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);