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 函式時,可以選擇性地在 pInfo 和 pPatch 參數中提供資訊。 運行時間會在 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旗標,並處理指定的區段資訊,即使它使用快取的修補程式也一樣。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 可在 Windows Vista 和更新版本的 Windows 作業系統中使用。 |
目標平台 | 桌面 |
標頭 | d3dumddi.h (include D3dumddi.h) |