次の方法で共有


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 ドキュメントで説明されています。

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

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

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

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

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

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

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

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

要件

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

こちらもご覧ください

D3DDP2OP_DRAWTRIPATCH

D3DHAL_DP2COMMAND

D3DHAL_DP2DRAWRECTPATCH

D3DRS_DELETERTPATCH

D3dDrawPrimitives2