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]

選擇性。 緩衝區的指標,其中包含四個浮點值 (D3DFLOAT[4]) ,提供矩形修補程式四個邊緣的區段計數。

傳回值

如果矩形修補程式未成功繪製,DrawRectPatch 會傳回S_OK或適當的錯誤結果。

備註

當 Microsoft Direct3D 執行時間呼叫pPatch 時,使用者模式顯示驅動程式的 DrawRectPatch 函式可以選擇性地提供 pInfo 和參數中的資訊。 運行時間會在 pData 所指定之 D3DDDIARG_DRAWRECTPATCH 結構的 Flags 成員中設定旗標,以指出它是否提供這項選擇性資訊。

運行時間會在 D3DDDIARG_DRAWRECTPATCH 的 Handle 成員中提供 UINT 值,以參考修補程式介面。 每當運行時間重新繪製修補程式介面時,它會傳遞修補程式句柄值,而且不需要重新指定修補程式介面的D3DDDIRECTPATCH_INFO數據結構。 使用者模式顯示驅動程式可以預先計算和快取正向差異係數和任何其他資訊。 因此,後續呼叫使用相同修補程式句柄值的驅動程式 DrawRectPatch 函式會更有效率地執行。

Handle 中的實際值是由應用程式所決定,而且不在運行時間控制之下。 因此,驅動程式必須處理可由 UINT 指定的任何值。

特殊 Handle 值為零表示修補程式是動態的;因此,驅動程式無法預先計算或快取修補程序的資訊。 Handle 的非零值表示修補程式是靜態 (或以低頻率更新) ;因此,驅動程式可以預先計算和快取修補程序的資訊。

驅動程式必須在 其 DrawRectPatch 函式中處理下列案例:

  • 如果 Handle 成員為零,則修補程式是動態的。 驅動程式不應該預先計算或快取修補程序的資訊。 在此情況下,運行時間會將指標傳遞至 pInfo 參數中的D3DDDIRECTPATCH_INFO結構,並在 D3DDDIARG_DRAWRECTPATCH 結構的 Flags 成員中設定RTPATCHFLAG_HASINFO旗標,以指出 pInfo 上存在D3DDDIRECTPATCH_INFO結構。 或者,運行時間也可以在 Flags 中設定RTPATCHFLAG_HASSEGS旗標,以指出 pPatch 參數所指定的區段資訊是否存在。 不過,如果運行時間未在 pPatch 提供區段資訊,則運行時間應該改用D3DRS_PATCHSEGMENTS轉譯狀態值。
  • 如果先前呼叫驅動程式的 DrawRectPatch 函式時未指定非零 Handle 值,運行時間就會繪製新的可快取修補程式。 驅動程式應該配置記憶體來儲存快取的數據,而且應該將此數據新增至其修補程式句柄數據表。 因為運行時間先前尚未繪製此修補程式,所以運行時間應該設定 RTPATCHFLAG_HASINFO 旗標,並將指標傳遞至 pInfo 參數中的D3DDDIRECTPATCH_INFO結構。 驅動程式必須檢查RTPATCHFLAG_HASINFO旗標,以確認修補程序資訊是否存在。 如果未指定任何修補程式資訊,驅動程式應該忽略 DrawRectPatch 呼叫,而且不應該為其修補程式句柄數據表中的快取數據配置記憶體。 或者,運行時間可以設定 RTPATCHFLAG_HASSEGS 旗標,以指出區段資訊是否存在。 不過,如果運行時間未在 pPatch 提供區段資訊,則運行時間應該改用D3DRS_PATCHSEGMENTS轉譯狀態值。
  • 如果在先前呼叫驅動程式的 DrawRectPatch 函式中指定了非零 Handle 值,且已設定 RTPATCHFLAG_HASINFO 旗標,運行時間會更新修補程式的定義。 運行時間會將指標傳遞至 pInfo 參數中的D3DDDIRECTPATCH_INFO結構,而且驅動程式必須重新計算並修復修補程式資訊。 或者,運行時間可以設定 RTPATCHFLAG_HASSEGS 旗標,以指出區段資訊是否存在。 不過,如果運行時間未在 pPatch 提供區段資訊,則運行時間應該改用D3DRS_PATCHSEGMENTS轉譯狀態值。
  • 如果在先前呼叫驅動程式的 DrawRectPatch 函式中指定了非零的 Handle 值,而且未設定RTPATCHFLAG_HASINFO旗標,運行時間會重新繪製修補程式。 驅動程式應該使用快取的信息來繪製修補程式。 在此情況下,驅動程式會忽略目前的頂點數據流,並改用快取的資訊。 不過,運行時間仍然可以指定新的區段資訊;因此,驅動程式應該檢查RTPATCHFLAG_HASSEGS旗標,並處理指定的區段資訊,即使它使用快取的修補程式也一樣。
驅動程式會收到通知,以透過D3DRS_DELETERTPATCH轉譯狀態釋放快取的修補程序資訊。 這個轉譯狀態的值是要刪除的修補程式。

規格需求

需求
最低支援的用戶端 可在 Windows Vista 和更新版本的 Windows 作業系統中使用。
目標平台 桌面
標頭 d3dumddi.h (包含 D3dumddi.h)

另請參閱

D3DDDIARG_DRAWRECTPATCH

D3DDDI_DEVICEFUNCS