共用方式為


D3DHAL_DP2TEXBLT 結構 (d3dhal.h)

當 D3dDrawPrimitives2 回應D3DDP2OP_TEXBLT命令令牌時,D3DHAL_DP2TEXBLT結構會用於紋理 blts。

語法

typedef struct _D3DHAL_DP2TEXBLT {
  DWORD dwDDDestSurface;
  DWORD dwDDSrcSurface;
  POINT pDest;
  RECTL rSrc;
  DWORD dwFlags;
} D3DHAL_DP2TEXBLT;

成員

dwDDDestSurface

指定目的地紋理的句柄。

dwDDSrcSurface

指定來源紋理的句柄。

pDest

指定應該執行blt的目的地點,也就是目的地介面中的點 (dwDDDestSurface) 開始blt。 POINT 結構的這些 xy 成員是在螢幕座標中指定。

rSrc

指定要在來源紋理中 Blitted 的矩形,也就是來源介面中的來源矩形, (dwDDSrcSurface) 至 blt from。

dwFlags

保留供系統使用。

備註

D3dCreateSurfaceEx 回呼會建立小型整數句柄,以作為紋理 blts 的來源和目的地紋理。

D3DHAL_DP2TEXBLT結構會與D3DDP2OP_TEXBLT命令數據流令牌搭配使用,以通知驅動程式從來源紋理到目的地紋理執行 blt 作業。 紋理也可以是立方體環境地圖。 驅動程式應該將來源紋理中 rSrc 所指定的矩形複製到目的地紋理中 pDest 所指定的位置。 目的地和來源紋理是由驅動程式在紋理建立期間收到通知的句柄所識別。 如果驅動程式能夠管理紋理,則目的地句柄可能是 0。 這表示驅動程式應該將紋理預先載入視訊記憶體 (,或無論硬體有效率地從) 紋理到何處。 在此情況下,驅動程式可以忽略 rSrcpDest

請注意,對於 MIP 對應的紋理,只會將一個D3DDP2OP_TEXBLT指令插入 D3dDrawPrimitives2 命令數據流中。 在此情況下,驅動程式應該會讓紋理中出現的所有 MIP 地圖層級。 若要在 MIP 地圖子層級中複製的區域,可以藉由在每個層級將 rSrcpDest 除以 2 來取得。

來源和目的地紋理可能包含不同數目的 MIP 地圖層級。 在此情況下,驅動程式應該會滲透一般層級。 例如,如果 256x256 來源紋理有 8 個 MIP 地圖層級,而如果目的地是具有 6 個層級的 64x64 紋理,則驅動程式應該從來源中篩選 6 個對應的層級。 驅動程式可以預期目的地紋理最上層 MIP 層級的維度一律小於或等於來源紋理上層 MIP 層級的維度。

請注意,來源和目的地句柄一律會參考最上層表面,且永遠不會參考任何 MIP 地圖子層級。 由於應用程式中發生錯誤,目的地紋理可能包含額外的 MIP 地圖層級。 例如,來源 256x256 紋理可能包含五個層級,但目的地 256x256 紋理可能包含八個層級。 驅動程式預期可以安全地處理這種情況,但並非預期會產生正確的結果。 由於舊版應用程式相容性問題,Direct3D 不會防止這類來源/目的地紋理配對傳遞至驅動程式。

驅動程式可以預期來源和目的地紋理的圖元格式相同,而且一般而言,指定的blt可以安全地執行。 除了上述單一案例之外,驅動程式不應預期會呈現任何無法執行blt的情況。

如果驅動程式想要從系統記憶體執行異步 blts 到視訊記憶體,則應該實作 DirectDraw HAL 呼叫 GetSysmemBltStatus,否則可能會發生不一致的情況。

使用 TexBlt 時,驅動程式不需要執行任何同步處理,因為 TexBlts 一律會以適當的順序發出,以及轉譯命令。 在這之前,驅動程式必須正確地處理 DirectDraw blt 修改任何 Direct3D 內容中轉譯命令所參考的任何紋理時,才能夠正確處理這種情況。 當有多個內容存在時,Direct3D 不會發出 TexBlts。 這表示驅動程式寫入器可以在 TexBlt 程式代碼路徑中省略同步處理程式碼 (,但仍需要同步處理 blts) 。

範例

下列虛擬程式代碼示範如何計算連續 MIP 層級的子專案angle,以從 MIP 層級 i 移至 MIP 層級 i + 1:

rect.left >>= 1; 
rect.top >>= 1; 
DWORD right = (rect.right + 1) >> 1; 
DWORD bottom = (rect.bottom + 1) >> 1; 
rect.right = ((right - rect.left) < 1) ? 
    (rect.left + 1) : (right); 
rect.bottom = ((bottom - rect.top ) < 1) ? 
    (rect.top + 1) : (bottom);

規格需求

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

另請參閱

D3DDP2OP_TEXBLT

D3dCreateSurfaceEx

D3dDrawPrimitives2