D3DHAL_DRAWPRIMITIVES2DATA 結構 (d3dhal.h)

D3DHAL_DRAWPRIMITIVES2DATA 結構包含 D3dDrawPrimitives2 函式轉譯基本類型所需的資訊。

語法

typedef struct _D3DHAL_DRAWPRIMITIVES2DATA {
  ULONG_PTR                 dwhContext;
  DWORD                     dwFlags;
  DWORD                     dwVertexType;
  LPDDRAWI_DDRAWSURFACE_LCL lpDDCommands;
  DWORD                     dwCommandOffset;
  DWORD                     dwCommandLength;
  union {
    LPDDRAWI_DDRAWSURFACE_LCL lpDDVertex;
    LPVOID                    lpVertices;
  };
  DWORD                     dwVertexOffset;
  DWORD                     dwVertexLength;
  DWORD                     dwReqVertexBufSize;
  DWORD                     dwReqCommandBufSize;
  LPDWORD                   lpdwRStates;
  union {
    DWORD   dwVertexSize;
    HRESULT ddrval;
  };
  DWORD                     dwErrorOffset;
} D3DHAL_DRAWPRIMITIVES2DATA;

成員

dwhContext

指定 Direct3D 裝置的內容句柄。

dwFlags

指定旗標,提供驅動程式的其他指示,或從驅動程式提供資訊。 這個成員可以是下列值的位 OR:

意義
D3DHALDP2_EXECUTEBUFFER 命令和頂點緩衝區是在系統記憶體中建立的。 驅動程式應該更新 lpdwRStates 指向的狀態陣列。 此旗標僅由 Direct3D 設定。
D3DHALDP2_REQCOMMANDBUFSIZE 驅動程式必須能夠至少增加 dwReqCommandBufSize 中指定的大小,以增加目前的命令緩衝區。 不支援多重緩衝處理命令緩衝區的驅動程式可以忽略此旗標。 此旗標僅由 Direct3D 設定。
D3DHALDP2_REQVERTEXBUFSIZE 驅動程式必須能夠配置至少在 dwReqCommandBufSize 中指定的大小的頂點緩衝區。 不支援多緩衝處理頂點緩衝區的驅動程式可以忽略此旗標。 此旗標僅由 Direct3D 設定。
D3DHALDP2_SWAPCOMMANDBUFFER 驅動程式可以使用新的命令緩衝區交換 lpDDCommands 指向的緩衝區,並在 Direct3D 填滿新的命令緩衝區時,以異步方式處理原始緩衝區。 不支援多重緩衝處理命令緩衝區的驅動程式可以忽略此旗標。 此旗標僅由 Direct3D 設定。
D3DHALDP2_SWAPVERTEXBUFFER 驅動程式可以使用新的頂點緩衝區交換 lpDDVertex 或 lpVertices 指向的緩衝區,並在 Direct3D 填滿新的頂點緩衝區時以異步方式傳回原始緩衝區。 不支援多緩衝處理頂點緩衝區的驅動程式可以忽略此旗標。 此旗標僅由 Direct3D 設定。
D3DHALDP2_USERMEMVERTICES lpVertices 成員有效,因此驅動程式應該從 lpVertices 指向的使用者配置記憶體中取得頂點數據。 此旗標僅由 Direct3D 設定。
D3DHALDP2_VIDMEMCOMMANDBUF 驅動程式配置為交換緩衝區的命令緩衝區不在系統記憶體中。 此旗標可由支援命令緩衝區多重緩衝處理的驅動程序設定。
D3DHALDP2_VIDMEMVERTEXBUF 驅動程式配置作為交換緩衝區的頂點緩衝區不在系統記憶體中。 此旗標可由支援頂點緩衝區多重緩衝處理的驅動程序設定。

dwVertexType

識別頂點緩衝區中數據的 FVF ;也就是說, dwVertexType 會指定頂點數據欄位存在於 lpDDVertexlpVertices 指向的頂點緩衝區中。 這個成員可以是下表中值的位 OR。 只會設定其中一個 D3DFVF_TEXx 旗標。

意義
D3DFVF_DIFFUSE 每個頂點都有擴散色彩。
D3DFVF_SPECULAR 每個頂點都有反射色彩。
D3DFVF_TEX0 頂點數據不提供紋理座標。
D3DFVF_TEX1 每個頂點都有一組紋理座標。
D3DFVF_TEX2 每個頂點都有兩組紋理座標。
D3DFVF_TEX3 每個頂點都有三組紋理座標。
D3DFVF_TEX4 每個頂點都有四組紋理座標。
D3DFVF_TEX5 每個頂點都有五組紋理座標。
D3DFVF_TEX6 每個頂點都有六組紋理座標。
D3DFVF_TEX7 每個頂點都有七組紋理座標。
D3DFVF_TEX8 每個頂點都有八組紋理座標。
D3DFVF_XYZRHW 每個頂點都有 x、y、z 和 w 座標。 一定會設定這個旗標。

lpDDCommands

dwCommandOffset

dwCommandLength

指定 介面中 lpDDCommands 指向從 dwCommandOffset 開始的有效命令數據位元組數目。

lpDDVertex

指向DD_SURFACE_LOCAL結構,當 dwFlags 中未設定D3DHALDP2_USERMEMVERTICES旗標時,識別包含頂點數據的 DirectDraw 表面。 使用 lpVertices 形成等位。

lpVertices

指向在 dwFlags 中設定D3DHALDP2_USERMEMVERTICES旗標時,包含頂點數據的使用者模式記憶體區塊。

dwVertexOffset

指定頂點數據啟動時 lpDDVertexlpVertices 所指向表面的位元組數目。

dwVertexLength

指定 lpDDVertexlpVertices 所指向表面中有效數據的頂點數目。 此有效數據從 dwVertexOffset 開始。

dwReqVertexBufSize

指定驅動程式必須配置給交換頂點緩衝區的最小位元組數目。 只有在設定D3DHALDP2_REQVERTEXBUFSIZE旗標時,此成員才有效。 不支援多緩衝處理頂點緩衝區的驅動程序應該忽略這個成員。

dwReqCommandBufSize

指定驅動程序必須增加交換命令緩衝區的最小位元節數目。 只有在設定D3DHALDP2_REQCOMMANDBUFSIZE旗標時,這個成員才有效。 不支援多重緩衝處理命令緩衝區的驅動程序應該忽略這個成員。

lpdwRStates

指向驅動程式從命令緩衝區剖析轉譯狀態命令時應該更新的轉譯狀態陣列。 只有在 dwFlags 中設定D3DHALDP2_EXECUTEBUFFER旗標時,驅動程式才應該更新此陣列。 驅動程式應該使用 D3DRENDERSTATETYPE 列舉型別來更新轉譯狀態陣列的適當元素。

dwVertexSize

指定每個頂點的大小,以位元組為單位。 此成員會形成具有 ddrval 的聯集。

ddrval

指定驅動程式寫入 D3dDrawPrimitives2 傳回值的位置。 D3D_OK表示成功。 否則,驅動程式應該傳回適當的D3DERR_Xxx 錯誤碼。 如需詳細資訊,請參閱 Direct3D 驅動程式回呼的傳回碼

意義
D3D_OK 作業已成功完成。
D3DERR_COMMAND_UNPARSED 驅動程式需要 Direct3D 執行時間來剖析執行緩衝區。

dwErrorOffset

每個D3DHAL_DP2RESPONSEQUERY後面接著下列與查詢相關的數據:

  • BOOL for D3DQUERYTYPE_EVENT
  • DWORD for D3DQUERYTYPE_OCCLUSION
  • D3DQUERYTYPE_VCACHE的 D3DDEVINFO_VCACHE 結構

備註

請注意, dwVertexOffset 成員會以位元組為單位指定值; dwVertexLength 成員會指定頂點中的值。

若要計算存在於 lpDDVertexlpVertices 表面的有效數據,請將 dwVertexLength 中的值乘以 dwVertexSize 中的值。

規格需求

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

另請參閱

D3DHAL_DP2COMMAND

D3DRENDERSTATETYPE

D3dDrawPrimitives2

DD_SURFACE_GLOBAL

DD_SURFACE_LOCAL