C语言 从另一个线程重绘 opengl



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

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

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

有什么想法吗?

有什么想法吗?

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

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

例如,将GLFW视为合适的替代品,它更加灵活,实际上足以供实际应用程序使用。

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

最新更新