Microsoft DirectX 8.0 (C++)

ステート ブロックの記録

IDirect3DDevice8 インターフェイスには、アプリケーションからデバイス ステートの要求があったときにそのデバイス ステートをステート ブロックに記録する IDirect3DDevice8::BeginStateBlock メソッドがある。BeginStateBlock メソッドは、デバイス ステートの変更をデバイスに適用するのではなく、デバイス ステートの変更をステート ブロックに記録し始める。BeginStateBlock を呼び出した後、次のメソッドの呼び出しはすべてデバイス ステート ブロックに記録される。

ステート ブロックの記録が終了したら、IDirect3DDevice8::EndStateBlock メソッドを呼び出して記録の停止をシステムに知らせる。EndStateBlock メソッドは、ステート ブロックのハンドルを変数に格納する。この変数のアドレスは pToken パラメータに渡す。アプリケーションでは、このハンドルを使用して、必要に応じてステート ブロックをデバイスに適用したり、新しいステート データをブロックに記録したり、不要になったステート ブロックを削除することができる。

パフォーマンスに関する注意  最良の結果を得るためには、BeginStateBlock および EndStateBlock のペア間でのすべてのステート変更をグループ化する。

EndStateBlock メソッドが返すエラー コードをチェックすることが大切である。このメソッドが失敗した場合、その原因の多くはディスプレイ モードが変更されたことであると考えられる。アプリケーションのサーフェスを作成し直し、再度ステート ブロックを記録することで、このような障害からアプリケーションが回復するように設計する。