0

我正在做一个项目,我有一个 opengl 窗口和一个 gtk 窗口,现在我希望能够从 gtk 控制 opengl。

在 Gtk 窗口中,我有一个调用图像生成器的按钮,在此之后我想重绘 opengl 窗口以便我可以看到结果,但是如果我从按钮单击回调调用显示函数,则没有任何反应。到目前为止唯一可行的想法是当我将 glutIdleFunc 设置为我的显示函数时,opengl 窗口会不断重绘,但在我看来,必须有更好的方法。我还尝试了 glutTimerFunc 来检查条件变量,但还有更好的方法。

我的想法是能够直接告诉/信号/调用 opengl 显示函数或强制 glutMainLoop 进行迭代,每当我单击按钮时,但我真的不知道该怎么做。

有任何想法吗?

4

2 回答 2

1

有任何想法吗?

不要使用 GLUT 或 GLFW 或任何其他 OpenGL 框架。您正在使用 GTK+,所以坚持下去。GTK+ 有一个 OpenGL 小部件。用那个。由于您的 OpenGL 代码与 GTK+ 很好地集成在一起,因此您可以使用 GLib(由 GTK+ 使用)的正常信号事件机制,无需多言。

于 2012-10-08T12:40:19.500 回答
0

首先,我真的建议你停止使用普通的 GLUT。一旦您的应用程序发展为您描述的那种需求(多窗口、GTK+、...),GLUT 就不够灵活,无法成为可行的解决方案。

看看,例如GLFW作为一个合适的替代品,它更灵活,实际上足以让实际应用程序使用。

其次,你在标题中提到了线程,但在问题正文中没有提到,所以你是否真的在使用线程有点不清楚。如果是,那么您需要研究线程安全通信。GTK+ 所基于的 glib 库为此提供了一些 API,请查看它们。如果不使用线程,您可能会通过一些直接的函数调用而侥幸逃脱,只是使 OpenGL 状态无效,以便重新绘制。

于 2012-10-08T11:32:22.400 回答