Microsoft DirectX 8.0 (C++)

ステート ブロックの取得

IDirect3DDevice8::CaptureStateBlock メソッドは、既存のステート ブロック内の値を更新してデバイスの現在のステートに反映する。このメソッドは、Token パラメータを 1 つだけ受け取る。このパラメータは、呼び出しが成功した場合にデバイスの現在のステートの取り込み先となるステート ブロックを識別する。

アプリケーションで記録済みのステート ブロックを更新して若干異なるステート設定を含める場合は、CaptureStateBlock メソッドが特に便利である。これを行うには、次のサンプル コードのように、既存のステート ブロックを適用し、必要な設定変更を行い、システムのステートをステート ブロックに取り込む。

// 変数 token には、以前に記録されたデバイス ステート セットの
// デバイス ステート ブロックへのハンドルが格納されている。

// 現在のステート ブロックを設定する。
d3dDevice->ApplyStateBlock(token);

// 必要に応じてデバイス ステート を変更する。
.
.
.

// 修正したデバイス ステート データを既存のブロックに取り込む。
d3dDevice->CaptureStateBlock(token);

CaptureStateBlock メソッドは、デバイスのステート全体を取り込むのではなく、ステート ブロック内の既存のステート値を更新するのみである。たとえば、次のコード例のように、2 つの処理が記録されたステート ブロックがあるとする。

d3dDevice->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD);
d3dDevice->SetTexture(0, pTexture);
 

ステート ブロックが初めに記録されて以降、2 つの設定のいずれかを変更した場合、CaptureStateBlock メソッドは、ブロック内で変更されたステートのみ新しい値に更新する。