我知道,为了编写GTK应用程序,我编写了一堆代码来描述放置在主窗口中的内容,然后调用:
gtk_main();
此后的任何代码语句均不会执行。
现在,假设我希望我的GTK应用程序显示我用glut编写的内容,它本身包含了一堆关于需要设置哪些图形的语句,等等,然后以该语句结尾:
glutMainLoop();
此后的任何内容都不会执行。
所以我的问题是,这两个语句中的任何一个都阻止我调用另一个。
最佳答案
您正在运行主循环。 gtk_main()
运行,直到调用gtk_quit()
。
gtk_main() at GTK.org
同样,glutMainLoop()
以相同的方式工作,它永远处理GL事件。
glutMainLoop() at OpenGL.org
因此,您不希望同时执行这两项操作(我认为它们可能会相互干扰,因此您可能会得到意想不到的结果),那么您将需要从glut内部调用gtk_main_iteration()
。
gtk_main_iteration() at GTK.org
现在,。GLUT没有与gtk_main_iteration()
等效的文件,因此您将需要注册GLUT回调。
您可以使用gtk_main_iteration()
向运行glutIdleFunc(void (*func)(void))
的GLUT注册一个回调,该回调将为每个帧-glutIdleFunc()运行一个回调。
或者您可以给glutTimerFunc(unsigned int msecs, void (*func)(int value), value)
一个回调以每200毫秒左右一次调用并检查gtk_main_iteration()
的返回值。
我可能会同时尝试这两种方法,glutIdleFunc()
可能不会总是被足够规律地调用以获得良好的响应性。
确实值得考虑驾驶GTK's GL support。