PFND3DDDI_DRAWTRIPATCH コールバック関数 (d3dumddi.h)

DrawTriPatch 関数は、新しい三角形パッチまたはキャッシュされた三角形パッチを描画するか、以前に定義したパッチの仕様を更新します。

構文

PFND3DDDI_DRAWTRIPATCH Pfnd3dddiDrawtripatch;

HRESULT Pfnd3dddiDrawtripatch(
  [in] HANDLE hDevice,
       const D3DDDIARG_DRAWTRIPATCH *unnamedParam2,
       const D3DDDITRIPATCH_INFO *unnamedParam3,
       const FLOAT *unnamedParam4
)
{...}

パラメーター

[in] hDevice

ディスプレイ デバイス (グラフィックス コンテキスト) へのハンドル。

unnamedParam2

pData [in]

描画する三角形のパッチを記述する D3DDDIARG_DRAWTRIPATCH 構造体へのポインター。

unnamedParam3

pInfo [in]

省略可能。 三角形パッチに関する情報を記述するD3DDDITRIPATCH_INFO構造体へのポインター。

unnamedParam4

pPatch [in]

省略可能。 三角形パッチの 3 つのエッジごとにセグメント数を提供する 3 つの浮動小数点値 (D3DFLOAT[3]) を含むバッファーへのポインター。

戻り値

DrawTriPatch は、三角形のパッチが正常に描画されない場合は、S_OKまたは適切なエラー結果を返します。

注釈

Microsoft Direct3D ランタイムは、ユーザー モードディスプレイ ドライバーの DrawTriPatch 関数を呼び出すときに、必要に応じて pInfo パラメーターと pPatch パラメーターに情報を提供できます。 ランタイムは、pData によって指定されたD3DDDIARG_DRAWTRIPATCH構造体の Flags メンバーにフラグを設定して、このオプションの情報を提供するかどうかを示します。

ランタイムは、パッチサーフェイスを参照するために、D3DDDIARG_DRAWTRIPATCHの Handle メンバーに UINT 値を提供します。 ランタイムはパッチ サーフェスを再描画するたびにパッチ ハンドル値を渡し、パッチ サーフェスのD3DDDITRIPATCH_INFOデータ構造を再指定する必要はありません。 ユーザー モード ディスプレイ ドライバーは、前方差分係数とその他の情報を事前計算してキャッシュできます。 そのため、同じパッチ ハンドル値を使用するドライバーの DrawTriPatch 関数の後続の呼び出しは、より効率的に実行されます。

Handle の実際の値はアプリケーションによって決定され、ランタイム制御下にありません。 したがって、ドライバーは UINT で指定できる任意の値を処理する必要があります。

特殊な Handle 値 0 は、パッチが動的であることを示します。そのため、ドライバーはパッチの情報を事前計算したりキャッシュしたりすることはできません。 Handle の 0 以外の値は、パッチが静的 (または低頻度で更新) であることを示します。そのため、ドライバーはパッチの情報を事前計算してキャッシュできます。

ドライバーは、 DrawTriPatch 関数で次のシナリオを処理する必要があります。

  • Handle メンバーが 0 の場合、パッチは動的です。 ドライバーは、パッチの情報を事前計算したりキャッシュしたりしないでください。 この状況では、ランタイムは pInfo パラメーター内のD3DDDITRIPATCH_INFO構造体へのポインターを渡し、D3DDDIARG_DRAWTRIPATCH構造体の Flags メンバーのRTPATCHFLAG_HASINFO フラグを設定して、 pInfo にD3DDDITRIPATCH_INFO構造体が存在することを示します。 必要に応じて、ランタイムは Flags で RTPATCHFLAG_HASSEGS フラグを設定して、 pPatch パラメーターを指定したセグメント情報が存在することを示すこともできます。 ただし、ランタイムが pPatch でセグメント情報を提供しない場合は、代わりにD3DRS_PATCHSEGMENTSレンダリング状態の値を使用する必要があります。
  • ドライバーの DrawTriPatch 関数の以前の呼び出しで 0 以外の Handle 値が以前に指定されていない場合、ランタイムは新しいキャッシュ可能なパッチを描画します。 ドライバーは、キャッシュされたデータを格納するためにメモリを割り当てる必要があり、そのパッチ ハンドル テーブルにこのデータを追加する必要があります。 ランタイムは以前にこのパッチを描画していないため、ランタイムは RTPATCHFLAG_HASINFO フラグを設定し、 pInfo パラメーターでD3DDDIRECTPATCH_INFO構造体へのポインターを渡す必要があります。 ドライバーは、パッチ情報の存在を確認するために、RTPATCHFLAG_HASINFO フラグをチェックする必要があります。 パッチ情報が指定されていない場合、ドライバーは DrawTriPatch 呼び出しを無視し、パッチ ハンドル テーブルにキャッシュされたデータのメモリを割り当てないようにする必要があります。 必要に応じて、ランタイムはセグメント情報の存在を示す RTPATCHFLAG_HASSEGS フラグを設定できます。 ただし、ランタイムが pPatch でセグメント情報を提供しない場合は、代わりにD3DRS_PATCHSEGMENTSレンダリング状態の値を使用する必要があります。
  • ドライバーの DrawTriPatch 関数の以前の呼び出しで 0 以外の Handle 値が指定されていて、RTPATCHFLAG_HASINFO フラグが設定されている場合、ランタイムはパッチの定義を更新します。 ランタイムは pInfo パラメーターのD3DDDITRIPATCH_INFO構造体へのポインターを渡し、ドライバーはパッチ情報を再計算して再キャッシュする必要があります。 必要に応じて、ランタイムはセグメント情報の存在を示す RTPATCHFLAG_HASSEGS フラグを設定できます。 ただし、ランタイムが pPatch でセグメント情報を提供しない場合は、代わりにD3DRS_PATCHSEGMENTSレンダリング状態の値を使用する必要があります。
  • ドライバーの DrawTriPatch 関数の以前の呼び出しで 0 以外の Handle 値が指定されていて、RTPATCHFLAG_HASINFO フラグが設定されていない場合、ランタイムはパッチを再描画します。 ドライバーは、キャッシュされた情報を使用してパッチを描画する必要があります。 この状況では、ドライバーは現在の頂点ストリームを無視し、キャッシュされた情報が代わりに使用されます。 ただし、ランタイムは引き続き新しいセグメント情報を指定できます。そのため、ドライバーは、キャッシュされたパッチを使用する場合でも、RTPATCHFLAG_HASSEGS フラグをチェックし、指定されたセグメント情報を処理する必要があります。
ドライバーは、D3DRS_DELETERTPATCHレンダリング状態を通じてキャッシュされたパッチ情報を解放する通知を受け取ります。 このレンダリング状態の値は、削除するパッチです。

要件

要件
サポートされている最小のクライアント Windows Vista 以降のバージョンの Windows オペレーティング システムで使用できます。
対象プラットフォーム デスクトップ
Header d3dumddi.h (D3dumddi.h を含む)

こちらもご覧ください

D3DDDIARG_DRAWTRIPATCH

D3DDDI_DEVICEFUNCS