次の方法で共有


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

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

構文

PFND3DDDI_DRAWRECTPATCH Pfnd3dddiDrawrectpatch;

HRESULT Pfnd3dddiDrawrectpatch(
  [in] HANDLE hDevice,
       const D3DDDIARG_DRAWRECTPATCH *unnamedParam2,
       const D3DDDIRECTPATCH_INFO *unnamedParam3,
       const FLOAT *unnamedParam4
)
{...}

パラメーター

[in] hDevice

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

unnamedParam2

pData [in]

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

unnamedParam3

pInfo [in]

随意。 四角形のパッチに関する情報を記述するD3DDDIRECTPATCH_INFO構造体へのポインター。

unnamedParam4

pPatch [in] を する

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

戻り値

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

備考

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

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

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

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

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

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

必要条件

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

関連項目

D3DDDIARG_DRAWRECTPATCH

D3DDDI_DEVICEFUNCS