2

Linux で GLX を使用して OpenGL アプリケーションを作成しました。glXSwapBuffers によるダブル バッファリングと、NVIDIA X サーバー設定で設定された VBlank への同期を使用します。私は Compiz を使用していますが、ウィンドウの移動はスムーズでティアリングはありません (Compiz 設定で VBlank への同期が有効になっています)。しかし、私が

  1. OpenGL ウィンドウの移動またはサイズ変更を試みるか、

  2. OpenGL ウィンドウが占めている領域を介して他のウィンドウを移動します

システムが途切れ、3 ~ 4 秒間フリーズします。OpenGL ウィンドウが占める領域の外に他のウィンドウを移動することは、いつものようにスムーズです。さらに、この問題は、OpenGL アプリケーションがアニメーションのフレームを生成するループにある場合にのみ発生し、バッファを交換します。コンテンツが静的で、アプリケーションがバッファをスワップしていない場合、問題はなく、さまざまなウィンドウの移動はスムーズです。アプリケーションと Compiz 間の同期の問題でしょうか?

4

1 に答える 1

2

数年前と同じ形かどうかはわかりませんが…</p>

あなたの説明は、Compiz SNAFU と非常によく一致します。ウィンドウのサイズを変更するたびに、ウィンドウの内容を受け取るテクスチャの再作成がトリガーされます。テクスチャの作成はコストのかかる操作であるため、避ける必要があります。残念ながら、Compiz の開発者は、この問題に対する明らかな解決策があることに気づいていないため、最も優秀な開発者ではないようです。Compizウィンドウマネージャです。

では、なぜ Compiz は、サイズ変更しようとしているウィンドウの親を変更し、そこから一定サイズのウィンドウ テクスチャを取得し、サイズ変更操作の終了後にウィンドウを装飾フレームに親変更するデスクトップ サイズのウィンドウを保持しないのでしょうか?

なぜそうなのかはわかりません。いずれにせよ、Compiz が行ういくつかのことはあまりスマートではありません。

これを修正したい場合は、まあ: Compiz はオープン ソースであり、何をすべきかを説明しました。

于 2013-01-03T00:31:15.350 に答える