次の方法で共有


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 とパラメーターに情報を提供できます。 ランタイムは、pData によって指定されたD3DDDIARG_DRAWRECTPATCH構造体の Flags メンバーにフラグを設定して、このオプションの情報を提供するかどうかを示します。

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

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

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

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

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

要件

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

こちらもご覧ください

D3DDDIARG_DRAWRECTPATCH

D3DDDI_DEVICEFUNCS