Microsoft DirectX 8.0 (C++) |
IDirect3DDevice8 インターフェイスには、アプリケーションからデバイス ステートの要求があったときにそのデバイス ステートをステート ブロックに記録する IDirect3DDevice8::BeginStateBlock メソッドがある。BeginStateBlock メソッドは、デバイス ステートの変更をデバイスに適用するのではなく、デバイス ステートの変更をステート ブロックに記録し始める。BeginStateBlock を呼び出した後、次のメソッドの呼び出しはすべてデバイス ステート ブロックに記録される。
ステート ブロックの記録が終了したら、IDirect3DDevice8::EndStateBlock メソッドを呼び出して記録の停止をシステムに知らせる。EndStateBlock メソッドは、ステート ブロックのハンドルを変数に格納する。この変数のアドレスは pToken パラメータに渡す。アプリケーションでは、このハンドルを使用して、必要に応じてステート ブロックをデバイスに適用したり、新しいステート データをブロックに記録したり、不要になったステート ブロックを削除することができる。
パフォーマンスに関する注意 最良の結果を得るためには、BeginStateBlock および EndStateBlock のペア間でのすべてのステート変更をグループ化する。
EndStateBlock メソッドが返すエラー コードをチェックすることが大切である。このメソッドが失敗した場合、その原因の多くはディスプレイ モードが変更されたことであると考えられる。アプリケーションのサーフェスを作成し直し、再度ステート ブロックを記録することで、このような障害からアプリケーションが回復するように設計する。