0

OpenGL と Motif を組み合わせたアプリがあります。OpenGL を含む大きなメイン ウィンドウは正常に再描画されます。しかし、その上にあるサブウィンドウはすべて黒くなります。具体的には、メイン ウィンドウの真上にあるサブウィンドウの部分だけです。これらのサブウィンドウにはすべて Motif コードしかありません (1 つを除く)。

アプリがフリーズしたり、コアをダンプしたりしません。データはまだ流れており、さまざまなサブウィンドウのテキスト フィールドなどが更新されると、それらの部分が再描画されます。ウィンドウを互いにドラッグしたり、最小化/最小化を解除したりすると、再描画もトリガーされます。「ブラックアウト」のタイミングはランダムです。毎回同じ 1 時間のデータセットを実行すると、実行の 5 分後に停電が発生したり、30 分後に停電が発生したりすることがあります。

問題が解決するまで、コードのセクションをオフにするプロセスを実行しました。ますます絞り込み、深度バッファの使用に関係していることがわかりました。つまり、 をコメントアウトするglEnable(GL_ENABLE_DEPTH_TEST)と、問題は解決します。したがって、問題は深度バッファの使用に関係しているようです。

私が知る限り、深度バッファは再描画が行われる前にクリアされています。glClear呼び出しの周りにif文があるので、そこにメッセージを入れglClearて、ブラックアウトが発生してもデプスバッファが実際に発生していることを確認しました。また、glGetError何も返しませんでした。

UPDATE 6/30/2014 これを見ている人がまだ少なくとも 1 人いるようです (ありがとう、UltraJoe)。私の記憶が正しければ、最初にバック バッファーを定義して何も描画せずにバッファーをスワップしていたことが判明しました。とても長いルーチンなので、以前はわかりませんでした。他にも片付けなければならない小さなことがいくつかありましたが、それが主な原因だったと思います。

4

2 に答える 2

1

OpenGLウィンドウ/コンテキストをどのように作成しましたか。MotifメインウィンドウのX11ウィンドウハンドルを取得し、その上にOpenGLコンテキストを作成しましたか?または、OpenGLのMotifウィンドウ内に独自のサブウィンドウを作成しましたか?

これがOpenGL専用のウィジェットでない限り、ツールキットによって管理されるウィンドウを直接使用しないでください。その理由は、ほとんどのツールキットは、要素ごとに独自のサブウィンドウを作成せず、グラフィックリソースの一部を再利用するためです。

したがって、OpenGL用に独自のサブウィンドウを作成する必要があります。また、glXCreateWindowを使用してさらにサブウィンドウを作成する必要があります。

于 2012-11-01T07:08:21.630 に答える