如何同时使用 GTK 和 glut
How do I use GTK and glut together?
我知道为了编写一个 GTK 应用程序,我编写了一堆代码来描述主窗口中放置的内容,然后我调用:
gtk_main();
在此之后的任何代码语句都不会被执行。
现在让我们假设我希望我的 GTK 应用程序显示我用 glut 编写的内容,它本身包含一堆关于需要设置哪些图形等的语句,然后以语句结尾:
glutMainLoop();
在此之后的任何内容都不会执行。
所以我的问题是这两个陈述中的任何一个都阻止我调用另一个。
- 有没有办法在 GTK 小部件中执行 glut 主循环?
- 有没有办法编写一个代码,可以以某种方式同时调用 GTK 主循环和 glut 主循环(但从主程序调用并在单独的 X 窗口中呈现,而不是在小部件中(?我有一种感觉,这可以通过"线程"来完成......
你没有。通常没有意义。
GLUT是一个用于创建和管理OpenGL窗口的库。GTK已经有一个OpenGL窗口。如果您使用的是GTK,那么使用GLUT就没有意义了。这就像有两个向量数学库或其他东西。
您正在运行主循环。 gtk_main()
一直运行到调用gtk_quit()
。
gtk_main(( 在 GTK.org
运行主循环,直到调用
gtk_main_quit()
。您可以将调用嵌套到 gtk_main((。在这种情况下,gtk_main_quit(( 将进行主循环返回的最内层调用。
此外,glutMainLoop()
的工作方式相同,它会永远处理 GL 事件。
glutMainLoop(( at OpenGL.org
所以
glutMainLoop()
进入 GLUT 事件处理循环。此例程在 GLUT 程序中最多应调用一次。一旦调用,此例程将永远不会返回。它将根据需要调用已注册的任何回调。
,你不想同时执行这两件事(我认为它们可能会相互干扰,所以你可能会得到意想不到的结果(,那么你将需要从内部调用gtk_main_iteration()
。
gtk_main_iteration(( 在 GTK.org
运行主循环的单个迭代。如果没有事件等待处理,GTK+ 将阻塞,直到注意到下一个事件。如果您不想阻止,请先查看 gtk_main_iteration_do(( 或检查是否有任何事件挂起 gtk_events_pending((。
现在。。GLUT没有等效的gtk_main_iteration()
因此您需要注册GLUT回调。
您可以使用 GLUT 注册一个回调,该回调使用 glutIdleFunc(void (*func)(void))
运行gtk_main_iteration()
,它将为每个帧运行一个回调 - glutIdleFunc((。
或者你可以给glutTimerFunc(unsigned int msecs,
void (*func)(int value), value)
一个回调,每 200 毫秒左右调用并检查一次 gtk_main_iteration()
的返回值。
我可能会尝试两者,glutIdleFunc()
可能并不总是经常被打电话以获得良好的响应能力。
不过,推动GTK的GL支持确实值得一看。
- 如何在运行中期切换GTK CSS style_context
- 如何在GTK程序运行时禁用屏幕保护程序/电源管理/屏幕消隐
- 使用 GLUT 使用键停止动画?
- 如何使用 GTK 3 正确设置默认文本
- GLEW/GLUT:调用init并创建一个窗口后,取消初始化并重新初始化?
- Gtkmm 会不断检查 Gtk::日历上的所选日期是否发生变化
- 使用 Gtkmm 以编程方式选择 Gtk::TextView 中的文本
- 是否可以编译 Gtk+ 应用程序以同时在 Gtk 2 和 3 上运行
- GTK 最大化表单 C++
- GTK:完全摆脱系统主题/CSS
- OpenGL Glut显示功能在Mojave上显示黑屏
- GTK C++:找不到信号处理程序 您是否使用 -rdynamic 进行了编译?
- GLUT 无法获得米利斯精度的时间
- 如何从 Gtk::窗口调用派生对象的析构函数
- Gtk::带有set_icon_name的窗口图标集在 wayland 上不起作用
- GLUT 问题:重新声明 c++ 内置类型'wchar_t'时出错
- GTK 3 C++按钮中带有标签的图标
- 在macOS上编译GLEW和GLUT?
- Gtkmm:创建一个Gtk::ComboBox,其中列出Gtk::DrawingArea
- 如何同时使用 GTK 和 glut