我知道,为了编写GTK应用程序,我编写了一堆代码来描述放置在主窗口中的内容,然后调用:

gtk_main();

此后的任何代码语句均不会执行。

现在,假设我希望我的GTK应用程序显示我用glut编写的内容,它本身包含了一堆关于需要设置哪些图形的语句,等等,然后以该语句结尾:
glutMainLoop();

此后的任何内容都不会执行。

所以我的问题是,这两个语句中的任何一个都阻止我调用另一个。
  • 是否可以在GTK小部件内执行glut主循环?
  • 是否有办法编写可以同时调用GTK主循环和glut主循环的代码(但从主程序调用并在单独的X窗​​口中呈现,而不是在窗口小部件中呈现)?我觉得可以用“线程”完成...
  • 最佳答案

    您正在运行主循环。 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

    09-25 20:43