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