D3DHAL_DP2DRAWTRIPATCH構造体 (d3dhal.h)
DirectX 8.0 以降のバージョンのみ。
D3DHAL_DRAWTRIPATCHは、D3DHAL_DP2COMMAND 構造体の bCommand メンバーがD3DDP2OP_DRAWTRIPATCHに設定され、三角形のパッチをレンダリングするために使用されるときに、D3dDrawPrimitives2 コールバックによってコマンド バッファーから解析されます。
構文
typedef struct _D3DHAL_DP2DRAWTRIPATCH {
DWORD Handle;
DWORD Flags;
} D3DHAL_DP2DRAWTRIPATCH;
メンバーズ
Handle
サーフェスに関連付けられているハンドルを指定します。
Flags
DP2 ストリームのD3DHAL_DP2DRAWTRIPATCHデータ構造に続く追加情報がある場合に指定します。
備考
Handle メンバーは、サーフェスをハンドルに関連付けるために使用されるため、次回このサーフェスを描画する際に、このパッチのD3DTRIPATCH_INFOデータ構造を再指定する必要はありません。 これにより、ドライバーが前方差分係数やその他の情報を事前計算してキャッシュすることが可能になります。これにより、同じハンドルを使用して後続のD3DDP2OP_DRAWTRIPATCH トークンをより効率的に実行できるようになります。 D3DTRIPATCH_INFOは、最新の DirectX SDK ドキュメントで説明されています。
ハンドル の実際の値は、アプリケーションによって決定され、ランタイム制御下にありません。 したがって、ドライバーは、DWORD によって指定可能な任意の値に対処する準備をする必要があります。 特殊ハンドル値 0 は、パッチが動的であり、このパッチの情報を事前計算またはキャッシュするポイントがないことを意味します。 Handle のサブゼロ値は、パッチが静的 (または低頻度で更新) され、事前計算とキャッシュが可能であることを意味します。
Flags メンバーは、DP2 ストリームのD3DHAL_DP2DRAWTRIPATCHデータ構造に続く追加情報 (ある場合) を伝えるために使用されます。 RTPATCHFLAG_HASSEGSを指定した場合、DP2 ストリームのD3DHAL_DP2DRAWTRIPATCH 3 つの浮動小数点値が続きます。 これらの浮動小数点数は、三角形パッチの 3 つのエッジごとにセグメント数を与え、レンダー状態D3DRS_PATCHSEGMENTSの値をオーバーライドします。 RTPATCHFLAG_HASINFOが指定されている場合は、DP2 ストリームにD3DTRIPATCH_INFOデータ構造が続きます。 両方のフラグが指定されている場合、セグメント数を指定する 3 つの浮動小数点はD3DHAL_DP2DRAWTRIPATCHに従い、D3DTRIPATCH_INFO構造体は浮動小数点値に従います。
D3DDP2OP_DRAWTRIPATCHの処理時にドライバーが処理する必要があるシナリオは 4 つあります。
ハンドル が 0 の場合、パッチは動的であり、事前計算やキャッシュを実行する必要はありません。 この場合、D3DTRIPATCH_INFOは DP2 ストリーム内のD3DHAL_DP2DRAWTRIPATCHに従います (また、D3DTRIPATCH_INFOデータ構造の存在を示すフラグRTPATCHFLAG_HASINFOが設定されます)。 必要に応じて、RTPATCHFLAG_HASSEGSセグメント情報の存在を示すように設定することもできます。 ただし、これを省略した場合は、代わりにレンダリング状態D3DRS_PATCHSEGMENTSの値を使用する必要があります。
ハンドル がサブゼロで、ハンドル値が以前のD3DDP2OP_DRAWTRIPATCHで指定されていない場合は、新しいキャッシュ可能なパッチが描画されていることを示します。 ドライバーは、キャッシュされたデータを格納するメモリを割り当て、そのパッチ ハンドル テーブルにこのデータを追加する必要があります。 このパッチはこれまで見たことがないため、RTPATCHFLAG_HASINFO フラグを設定し、DP2 ストリームでD3DTRIPATCH_INFO構造に従う必要があります。 ただし、ランタイムはこれを保証しません。ドライバーはフラグをテストしてパッチ情報の存在を確認する必要があります。 情報が指定されていない場合は、このトークンを無視し、ドライバーのパッチ ハンドル テーブルにハンドルを割り当てる必要はありません。 必要に応じて、RTPATCHFLAG_HASSEGSセグメント情報の存在を示すように設定することもできます。 ただし、これを省略した場合は、代わりにレンダリング状態D3DRS_PATCHSEGMENTSの値を使用する必要があります。
Handle がサブゼロの場合、ハンドル値は以前のD3DDP2OP_DRAWTRIPATCH トークンによって指定されており、Flags フィールドにRTPATCHFLAG_HASINFOが含まれている場合は、パッチの定義が更新されます。 D3DTRIPATCH_INFOデータ構造は DP2 ストリームに続き、ドライバーは、修正プログラムの情報を再計算および再キャッシュするためにこれを使用する必要があります。 必要に応じて、RTPATCHFLAG_HASSEGSセグメント情報の存在を示すように設定することもできます。 ただし、これを省略した場合は、代わりにレンダリング状態D3DRS_PATCHSEGMENTSの値を使用する必要があります。
Handle がサブゼロの場合、ハンドル値は以前のD3DDP2OP_DRAWTRIPATCH トークンによって指定されており、Flags フィールドにRTPATCHFLAG_HASINFOが含まれていない場合は、キャッシュされた情報を使用してパッチを描画する必要があります。 この場合、現在の頂点ストリームは無視されます。代わりにキャッシュされた情報を使用する必要があります。 ただし、この場合も、新しいセグメント情報を指定することはできます。 そのため、ドライバーはフラグRTPATCHFLAG_HASSEGSを確認し、キャッシュされたパッチを使用している場合でも、指定されたセグメント情報を処理する必要があります。
ドライバーは、キャッシュされたパッチ情報がレンダー状態D3DRS_DELETERTPATCHを介して解放されるという通知を受け取ります。 このレンダリング状態の値は、削除するパッチです。
必要条件
要件 | 価値 |
---|---|
ヘッダー | d3dhal.h (D3dhal.h を含む) |
関連項目
D3DDP2OP_DRAWTRIPATCH
D3DRS_DELETERTPATCH
D3dDrawPrimitives2 の