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を見てください。GLFWはより柔軟で、実際のアプリケーションで使用するには十分です。

次に、タイトルではスレッドについて言及していますが、質問の本文では言及していないため、実際にスレッドを使用しているかどうかは少し不明です。もしそうなら、スレッドセーフな通信を調べる必要があります。GTK+ が構築されている glib ライブラリには、このための API がいくつかあります。それらを確認してください。スレッドを使用していない場合は、いくつかの直接関数呼び出しと、OpenGL の状態を無効にして再描画するだけで済む可能性があります。

于 2012-10-08T11:32:22.400 に答える