画面上の刺激の提示時間の測定に最大の精度が必要なアプリケーションを更新しています。これは現在、かなり前に放牧された DirectDraw で作成されており、グラフィック ライブラリを更新する必要があります。
プレゼンテーション時間を測定する方法は、垂直ブランク期間の終了を検出することを利用しています。具体的には、プライマリ サーフェスにフリップされたもの (またはスワップ チェーンで提示されたもの) が実際に画面によって描画されているときに、可能な限り正確に知る必要があります。スキャン ラインを検出すると、その測定の確実性を高めることができますが、Flip または Present が呼び出された直後に垂直空白期間が終了した時点を検出するだけで作業できます。
Direct 3D 9 にはIDirect3DDevice9::GetRasterStatus メソッドがあります。このメソッドは、デバイスが垂直ブランクにあるかどうか、および現在のスキャン ラインを記述する InVBlank ブール値を含む D3DRASTER_STATUS 構造体を返します。DirectDraw にも同様の機能があります ( IDirectDraw::GetVerticalBlankStatus、また、垂直ブランク中に DDERR_VERTICALBLANKINPROGRESS を返す IDirectDraw::GetScanLine を使用して VB を検出できます)。
ただし、Direct3D11 で同様の機能を見つけることができませんでした。この機能が Direct3D9 と Direct3D11 の間で移動または削除されたかどうか、後者の場合はその理由を知っている人はいますか?