OpenGL と Motif を組み合わせたアプリがあります。OpenGL を含む大きなメイン ウィンドウは正常に再描画されます。しかし、その上にあるサブウィンドウはすべて黒くなります。具体的には、メイン ウィンドウの真上にあるサブウィンドウの部分だけです。これらのサブウィンドウにはすべて Motif コードしかありません (1 つを除く)。
アプリがフリーズしたり、コアをダンプしたりしません。データはまだ流れており、さまざまなサブウィンドウのテキスト フィールドなどが更新されると、それらの部分が再描画されます。ウィンドウを互いにドラッグしたり、最小化/最小化を解除したりすると、再描画もトリガーされます。「ブラックアウト」のタイミングはランダムです。毎回同じ 1 時間のデータセットを実行すると、実行の 5 分後に停電が発生したり、30 分後に停電が発生したりすることがあります。
問題が解決するまで、コードのセクションをオフにするプロセスを実行しました。ますます絞り込み、深度バッファの使用に関係していることがわかりました。つまり、 をコメントアウトするglEnable(GL_ENABLE_DEPTH_TEST)
と、問題は解決します。したがって、問題は深度バッファの使用に関係しているようです。
私が知る限り、深度バッファは再描画が行われる前にクリアされています。glClear
呼び出しの周りにif文があるので、そこにメッセージを入れglClear
て、ブラックアウトが発生してもデプスバッファが実際に発生していることを確認しました。また、glGetError
何も返しませんでした。
UPDATE 6/30/2014 これを見ている人がまだ少なくとも 1 人いるようです (ありがとう、UltraJoe)。私の記憶が正しければ、最初にバック バッファーを定義して何も描画せずにバッファーをスワップしていたことが判明しました。とても長いルーチンなので、以前はわかりませんでした。他にも片付けなければならない小さなことがいくつかありましたが、それが主な原因だったと思います。