D3DHAL_DP2DRAWTRIPATCH 結構 (d3dhal.h)

僅限 DirectX 8.0 和更新版本。

當D3DHAL_DP2COMMAND結構的 bCommand 成員設定為 D3DDP2OP_DRAWTRIPATCH,並使用 轉譯三角形修補程式時,D3dDrawPrimitives2 回呼會從命令緩衝區剖析D3DHAL_DRAWTRIPATCH

語法

typedef struct _D3DHAL_DP2DRAWTRIPATCH {
  DWORD Handle;
  DWORD Flags;
} D3DHAL_DP2DRAWTRIPATCH;

成員

Handle

指定與表面相關聯的句柄。

Flags

指定 DP2 資料流中D3DHAL_DP2DRAWTRIPATCH數據結構之後的其他資訊。

備註

Handle 成員是用來將表面與句柄產生關聯,因此下次繪製此表面時,就不需要重新指定此修補程式的D3DTRIPATCH_INFO數據結構。 這可讓驅動程式預先計算和快取正向差異係數和/或任何其他資訊,進而允許使用相同句柄的後續D3DDP2OP_DRAWTRIPATCH令牌更有效率地執行。 最新的 DirectX SDK 檔會說明D3DTRIPATCH_INFO。

Handle 的實際值是由應用程式所決定,而且不在運行時間控制之下。 因此,驅動程式應該準備好處理 DWORD 可指定的任何值。 特殊句柄值為零表示修補程式是動態的,而且沒有此修補程式的預先計算或快取資訊。 Handle 的子零值表示修補程式是靜態 (或以低頻率更新) ,而且可以預先計算和快取。

Flags 成員可用來傳達 DP2 數據流中D3DHAL_DP2DRAWTRIPATCH數據結構之後的其他資訊。 如果指定RTPATCHFLAG_HASSEGS,則三個浮點值會遵循 DP2 數據流中的D3DHAL_DP2DRAWTRIPATCH。 這些浮點數會為三角形修補程式的每個邊緣提供區段計數,並覆寫轉譯狀態D3DRS_PATCHSEGMENTS的值。 如果指定RTPATCHFLAG_HASINFO,則 DP2 數據流中會遵循D3DTRIPATCH_INFO數據結構。 如果同時指定這兩個旗標,則指定區段計數的三個浮點數會遵循D3DHAL_DP2DRAWTRIPATCH,而D3DTRIPATCH_INFO結構則遵循浮點值。

驅動程式在處理D3DDP2OP_DRAWTRIPATCH時必須處理的案例有四種。

如果 Handle 為零,則修補程式是動態的,而且不應該執行預先計算或快取。 在此情況下,D3DTRIPATCH_INFO遵循 DP2 數據流 (中的D3DHAL_DP2DRAWTRIPATCH,而旗標RTPATCHFLAG_HASINFO會設定為表示D3DTRIPATCH_INFO數據結構) 是否存在。 您也可以選擇性地設定RTPATCHFLAG_HASSEGS,以指出區段資訊是否存在。 不過,如果省略這個值,則應該改用轉譯狀態D3DRS_PATCHSEGMENTS的值。

如果 Handle 是子零,而且先前的D3DDP2OP_DRAWTRIPATCH尚未指定句柄值,這表示正在繪製新的可快取修補程式。 驅動程式應該配置記憶體來儲存快取的數據,並將此數據新增至其修補程式句柄數據表。 因為之前尚未看到此修補程式,所以應該設定RTPATCHFLAG_HASINFO旗標,而且 DP2 數據流中應該遵循D3DTRIPATCH_INFO結構。 不過,運行時間不保證這樣,驅動程式應該藉由測試 旗標來驗證修補程式資訊是否存在。 如果未指定任何資訊,則應該忽略此令牌,而且驅動程式的修補程式句柄數據表中不應配置任何句柄。 您也可以選擇性地設定RTPATCHFLAG_HASSEGS,以指出區段資訊是否存在。 不過,如果省略這個值,則應該改用轉譯狀態D3DRS_PATCHSEGMENTS的值。

如果 Handle 是子零,則句柄值已由先前的D3DDP2OP_DRAWTRIPATCH標記指定,而 Flags 字段包含RTPATCHFLAG_HASINFO,則會更新修補程式的定義。 D3DTRIPATCH_INFO數據結構會遵循 DP2 數據流,驅動程式應該使用該結構來重新計算和重新快取修補程序資訊。 您也可以選擇性地設定RTPATCHFLAG_HASSEGS,以指出區段資訊是否存在。 不過,如果省略這個值,則應該改用轉譯狀態D3DRS_PATCHSEGMENTS的值。

如果 Handle 是子零,則句柄值已由先前的D3DDP2OP_DRAWTRIPATCH標記指定,而 Flags 字段不包含RTPATCHFLAG_HASINFO,則應該使用快取的資訊來繪製修補程式。 在此情況下,會忽略目前的頂點數據流;應該改用快取的資訊。 不過,在此情況下,仍然可以指定新的區段資訊。 因此,即使使用快取的修補程式,驅動程式也應該檢查旗標RTPATCHFLAG_HASSEGS並處理指定的區段資訊。

驅動程式會收到通知,指出快取的修補程式資訊會透過轉譯狀態D3DRS_DELETERTPATCH釋出。 此轉譯狀態的值是要刪除的修補程式。

規格需求

需求
標頭 d3dhal.h (包含 D3dhal.h)

另請參閱

D3DDP2OP_DRAWTRIPATCH

D3DHAL_DP2COMMAND

D3DHAL_DP2DRAWRECTPATCH

D3DRS_DELETERTPATCH

D3dDrawPrimitives2