我正在开发一个项目,我有一个opengl窗口和一个gtk窗口,现在我希望能够从gtk控制opengl。
在Gtk窗口中,我有一个调用图像生成器的按钮,之后我想重新绘制opengl窗口以便我可以看到结果,但如果我从按钮调用显示功能,则单击回调没有任何反应。到目前为止唯一有效的想法是当我将glutIdleFunc设置为我的显示功能时,那样opengl窗口不断被重绘,但在我看来,必须有更好的方法。我还尝试使用glutTimerFunc来检查条件变量,但是还有更好的方法。
我的想法是能够告诉/ signal /直接调用opengl显示函数或强制glutMainLoop进行迭代,每当我点击按钮时,我真的不知道该怎么做。
有什么想法吗?
答案 0 :(得分:1)
有什么想法吗?
不要使用GLUT或GLFW或任何其他OpenGL框架。你正在使用GTK +所以坚持下去。 GTK +有一个OpenGL小部件。用那个。由于您的OpenGL代码与GTK +很好地集成,因此您可以使用GLib的正常信号事件机制(由GTK +使用),而无需使用。
答案 1 :(得分:0)
首先,我建议您使用普通GLUT 停止。一旦您的应用程序变得满足您描述的需求(多个窗口,GTK +,......),GLUT就不够灵活,无法成为可行的解决方案。
请注意,例如GLFW作为合适的替代品,它更灵活,实际上足以供实际应用程序使用。
其次,你在标题中提到了线程,但在你的问题体中没有提到,所以如果你真的使用线程有点不清楚。如果你是,那么你需要研究线程安全的通信。构建GTK +的glib库有一些API,请查看它们。如果不使用线程,你可以通过一些直接的函数调用来逃避,只是使OpenGL状态无效,以便重新绘制。