2010-12-20 3 views

答えて

0

... MSDN

から

... DXGIは、フロントのサイズを変更します新たに選択されたフルスクリーンに一致するバッファアプリケーションにWM_SIZEメッセージを送信します。ウィンドウ境界線がドラッグされた場合と同じように、アプリケーションは再びResizeBuffersを呼び出します。

上記の説明の方法論は、非常に特定の経路に従います。 DXGIはデフォルトでフルスクリーン解像度をデスクトップ解像度に設定します。ただし、多くのアプリケーションでは、フルスクリーン解像度を推奨しています。そのような場合、DXGIはIDXGISwapChain :: ResizeTargetを提供します。これは、SetFullscreenStateを呼び出す前に呼び出す必要があります。これらのメソッドは逆の順序(SetFullscreenState、ResizeTargetの順)で呼び出すことができますが、余分なWM_SIZEメッセージがアプリケーションに送信されます。 DXGIは2つのモード変更を強制することができるので、ちらつきを引き起こす可能性があります。SetFullscreenStateを呼び出した後、RefreshRateメンバをゼロにしてResizeTargetを再度呼び出すことをお勧めします。これはDXGIの操作なし命令になりますが、リフレッシュレートの問題を回避することができます。これについては次に説明します。

フルスクリーンモードでは、デスクトップウィンドウマネージャが無効になります。 DXGIは、ウィンドウモードで実行するblitを実行する代わりに、バックバッファの内容を表示するためにflipを実行できます。ただし、特定の要件が満たされない場合、このパフォーマンスの向上は取り消すことができます。 DXGIがblitではなくflipを行うためには、フロントバッファとバックバッファのサイズを同じにする必要があります。アプリケーションがWM_SIZEメッセージを正しく処理する場合は、問題ではありません。また、形式は同一でなければなりません。

ほとんどのアプリケーションの問題は、リフレッシュレートです。 ResizeTargetの呼び出しで指定されたリフレッシュレートは、スワップチェーンが使用しているIDXGIOutputオブジェクトによって列挙されるリフレッシュレートでなければなりません。 DXGIは、アプリケーションがResizeTargetに渡されるDXGI_MODE_DESCのRefreshRateメンバーをゼロにする場合、この値を自動的に計算できます。 ...

関連する問題