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]

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

傳回值

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

備註

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

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

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

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

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

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

規格需求

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

另請參閱

D3DDDIARG_DRAWTRIPATCH

D3DDDI_DEVICEFUNCS