您正在运行主循环。gtk_main()
运行直到gtk_quit()
被调用。
GTK.org 上的 gtk_main()
运行主循环,直到gtk_main_quit()
被调用。您可以嵌套调用 gtk_main()。在这种情况下, gtk_main_quit() 将使主循环的最内层调用返回。
此外,glutMainLoop()
工作方式相同,它永远处理 GL 事件。
OpenGL.org 上的 glutMainLoop()
glutMainLoop()
进入 GLUT 事件处理循环。该例程在 GLUT 程序中最多应调用一次。一旦被调用,这个例程将永远不会返回。它将根据需要调用已注册的任何回调。
所以,你不想同时执行这两件事(我认为它们可能会相互干扰,所以你可能会得到意想不到的结果)然后你需要gtk_main_iteration()
从内部过剩调用。
GTK.org 上的 gtk_main_iteration()
运行主循环的单次迭代。如果没有事件等待处理,GTK+ 将阻塞直到注意到下一个事件。如果您不想阻止查看 gtk_main_iteration_do() 或首先使用 gtk_events_pending() 检查是否有任何事件未决。
现在.. GLUT 没有等效项,gtk_main_iteration()
因此您将需要注册 GLUT 回调。
您可以使用 GLUT 注册一个回调,该回调gtk_main_iteration()
使用 glutIdleFunc(void (*func)(void))
它将为每一帧运行一个回调 - glutIdleFunc() ..
或者你可以给一个回调来调用并检查每 200 毫秒左右glutTimerFunc(unsigned int msecs,
void (*func)(int value), value)
的返回值。gtk_main_iteration()
我可能会同时尝试这两种方法,glutIdleFunc()
可能并不总是经常被调用以获得良好的响应能力。
不过,推动GTK 的 GL 支持确实值得一看。