D3DHAL_DP2DRAWRECTPATCH 構造体 (d3dhal.h)

DirectX 8.0 以降のバージョンのみ。

D3DHAL_DRAWRECTPATCHは、D3DHAL_DP2COMMAND構造体のbCommand メンバーが D3DDP2OP_DRAWRECTPATCH に設定され、四角形のパッチをレンダリングするために使用されるときに、D3dDrawPrimitives2 コールバックによってコマンド バッファーから解析されます。

構文

typedef struct _D3DHAL_DP2DRAWRECTPATCH {
  DWORD Handle;
  DWORD Flags;
} D3DHAL_DP2DRAWRECTPATCH;

メンバー

Handle

サーフェスに関連付けられているハンドルを指定します。

Flags

DP2 ストリーム内のD3DHAL_DP2DRAWRECTPATCHデータ構造に続く追加情報がある場合に指定します。

注釈

Handle メンバーは、サーフェスをハンドルに関連付けるために使用されるため、次回このサーフェスを描画する際に、このパッチのD3DRECTPATCH_INFOデータ構造を再指定する必要はありません。 これにより、ドライバーが前方差分係数や他の情報を事前に計算してキャッシュできるようになります。これにより、同じハンドルを使用して後続のD3DDP2OP_DRAWRECTPATCH トークンをより効率的に実行できるようになります。 D3DRECTPATCH_INFOについては、最新の DirectX SDK ドキュメントを参照してください。

Handle の実際の値はアプリケーションによって決定され、実行時の制御下にありません。 したがって、ドライバーは、DWORD で指定できる任意の値に対応するように準備する必要があります。 特殊なハンドル値 0 は、パッチが動的であり、このパッチの情報を事前計算またはキャッシュするポイントがないことを意味します。 Handle のサブゼロ値は、パッチが静的 (または低頻度で更新) され、事前計算とキャッシュが可能であることを意味します。

Flags メンバーは、DP2 ストリームのD3DHAL_DP2DRAWRECTPATCHデータ構造に続く追加情報がある場合に、その情報を伝達するために使用されます。 RTPATCHFLAG_HASSEGSが指定されている場合は、DP2 ストリームのD3DHAL_DP2DRAWRECTPATCHに従って 4 つの浮動小数点値が続きます。 これらのフロートは、四角形パッチの 4 つのエッジごとにセグメント数を与え、レンダリング状態の値をオーバーライドD3DRS_PATCHSEGMENTS。 RTPATCHFLAG_HASINFOが指定されている場合は、DP2 ストリームにD3DRECTPATCH_INFOデータ構造が続きます。 両方のフラグが指定されている場合、セグメント数を指定する 4 つの float はD3DHAL_DP2DRAWRECTPATCHに従い、D3DRECTPATCH_INFO構造体は浮動小数点値に従います。

D3DDP2OP_DRAWRECTPATCHの処理時にドライバーが処理する必要があるシナリオは 4 つあります。

Handle が 0 の場合、パッチは動的であり、事前計算やキャッシュを実行する必要はありません。 この場合、DP2 ストリームのD3DHAL_DP2DRAWRECTPATCHに続くD3DRECTPATCH_INFO (およびフラグ RTPATCHFLAG_HASINFOは、D3DRECTPATCH_INFOデータ構造の存在を示すように設定されます)。 必要に応じて、RTPATCHFLAG_HASSEGSセグメント情報の存在を示すように設定することもできます。 ただし、これを省略した場合は、代わりにレンダリング状態D3DRS_PATCHSEGMENTSの値を使用する必要があります。

Handle がサブゼロで、ハンドル値が以前のD3DDP2OP_DRAWRECTPATCHで指定されていない場合、これは新しいキャッシュ可能なパッチが描画されていることを示します。 ドライバーは、キャッシュされたデータを格納するメモリを割り当て、そのパッチ ハンドル テーブルにこのデータを追加する必要があります。 このパッチは以前に表示されていないため、RTPATCHFLAG_HASINFO フラグを設定し、DP2 ストリームでD3DRECTPATCH_INFO構造に従う必要があります。 ただし、ランタイムはこれを保証しません。ドライバーは フラグをテストしてパッチ情報の存在を確認する必要があります。 情報が指定されていない場合は、このトークンを無視し、ドライバーのパッチ ハンドル テーブルにハンドルを割り当てない必要があります。 必要に応じて、RTPATCHFLAG_HASSEGSセグメント情報の存在を示すように設定することもできます。 ただし、これを省略した場合は、代わりにレンダリング状態D3DRS_PATCHSEGMENTSの値を使用する必要があります。

Handle が subzero の場合、ハンドル値は以前のD3DDP2OP_DRAWRECTPATCH トークンによって指定されており、[フラグ] フィールドにRTPATCHFLAG_HASINFOが含まれている場合、パッチの定義が更新されます。 D3DRECTPATCH_INFO データ構造は DP2 ストリームに続き、ドライバーは、これを使用してパッチ情報を再計算して再キャッシュする必要があります。 必要に応じて、RTPATCHFLAG_HASSEGSセグメント情報の存在を示すように設定することもできます。 ただし、これを省略した場合は、代わりにレンダリング状態D3DRS_PATCHSEGMENTSの値を使用する必要があります。

Handle が subzero の場合、ハンドル値は以前のD3DDP2OP_DRAWRECTPATCH トークンで指定されており、[フラグ] フィールドにRTPATCHFLAG_HASINFOが含まれていない場合は、キャッシュされた情報を使用してパッチを描画する必要があります。 この場合、現在の頂点ストリームは無視されます。代わりに、キャッシュされた情報を使用する必要があります。 ただし、この場合も、新しいセグメント情報を指定することはできます。 そのため、ドライバーは、キャッシュされたパッチを使用している場合でも、フラグRTPATCHFLAG_HASSEGSをチェックし、指定されたセグメント情報を処理する必要があります。

ドライバーは、キャッシュされたパッチ情報がレンダリング状態D3DRS_DELETERTPATCHを介して解放されるという通知を受け取ります。 このレンダリング状態の値は、削除するパッチです。

要件

要件
Header d3dhal.h (D3dhal.h を含む)

こちらもご覧ください

D3DDP2OP_DRAWRECTPATCH

D3DHAL_DP2COMMAND

D3DHAL_DP2DRAWTRIPATCH

D3DRS_DELETERTPATCH

D3dDrawPrimitives2