デスクトップコンポジションを無効にする

サンプル

ソースコードはへっぽこ氏提供のものです。


描画遅延を回避する

垂直同期を行うと3フレームの遅延が発生してしまいますが、
以下の二つの方法のどちらかで垂直同期を使いながら遅延を回避できます。

クエリを利用する場合
DirectX9.0c版
DirectX10版

プログラム側から垂直同期を行う場合
D3DRASTER_STATUS DRS;
do{
    if( FAILED(pD3DDevice->GetRasterStatus(0,&DRS)) ){ break; }
}while( DRS.ScanLine!=0 );
do{
    Sleep(1);
    if( FAILED(pD3DDevice->GetRasterStatus(0,&DRS)) ){ break; }
}while( DRS.ScanLine==0 );


両方ともソースコードは魯鈍ジョン氏提供のものです。

クエリとプログラム側からの垂直同期はそれぞれ利用ができない環境が存在します。
クエリはその作成に失敗した場合、
プログラム側からの垂直同期はD3DCAPS9のCaps中のD3DCAPS_READ_SCANLINEフラグが偽の場合に
それぞれ使用不可だと分かるので、フルスクリーンモードの場合は

クエリを使用して垂直同期使用
 →不可ならプログラム側からの垂直同期を利用
  →不可なら垂直同期不使用(ティアリングあり) / クエリ無しで垂直同期使用(遅延あり)

とするのがおすすめです。
ウィンドウモードの場合は画面の周波数を設定できず、
垂直同期を使用すると動作速度が意図したものに固定できないので
垂直同期を不使用にするのが良いと思います。


戻る