0

Windows (XP、Vista、7、8) 用のウィンドウ化された (フルスクリーンではない) OpenGL アプリケーションに取り組んでおり、VSync と GPU フレームのキューイングが非常に顕著な (そして悪い) 入力遅延を引き起こします。wglSwapBufferEXT を使用して VSync を無効にし、SwapBuffers の後に glFinish を使用してフレームのキューイングを防止しました。

問題は、Aero が有効になっている Windows のバージョンでは、入力遅延がまだ存在することです。Aero を無効にすると問題は解決しますが、ユーザーに強制することは望んでいません。Aero がアプリケーションで VSync を強制しないようにしたり、アプリケーションだけで Aero を無効にしたりする方法はありますか?

4

2 に答える 2

0

Aeroはウィンドウ合成システムです。コンポジターは、その性質上、レンダリングラグを導入します。これは、2フレーム周期の長さでさえある可能性があります。これを克服する唯一の方法は、まあ、コンポジターを無効にすることです。


約2年前、私はX11コンポジットベースのシステムの同期スキームの概要を説明しました。各プログラムは、レンダリング時間に関する「ラップタイム」を提供します。基本的に、フレームのレンダリングにかかる​​時間よりもラグを短くすることはできません。ただし、フレームのレンダリングの開始を可能な限り遅らせることができれば、ユーザー入力をレンダリングの開始まで統合することで、可能な限り最短のラグを得ることができます。

アイデアは、コンポジターにタイミング統計、ウィンドウの合成にかかる時間、および各プログラムがフレームをレンダリングするのにかかる時間を収集させることでした。次に、コンポジターは各プログラムに「今すぐレンダリングを開始」信号を送り、V-Syncの直前にコンポジションを実行するのにちょうど間に合うようにレンダリングが終了するようにします。

ただし、これまではまだ実装していません。

于 2013-01-11T02:30:15.050 に答える
0

You can disable Aero while your application is running, using the DwmEnableComposition function. I'm not sure if that's exactly what you meant by "disable Aero just for our application".

于 2013-01-11T02:36:52.007 に答える