共用方式為


D3DHAL_DP2TEXBLT結構 (d3dhal.h)

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

語法

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

成員

dwDDDestSurface

指定目的地紋理的句柄。

dwDDSrcSurface

指定來源紋理的句柄。

pDest

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

rSrc

指定要在來源紋理中點亮的矩形,也就是來源介面中的來源矩形(dwDDSrcSurface) 中要從中選取。

dwFlags

保留供系統使用。

言論

D3dCreateSurfaceEx 回呼會建立紋理的小整數句柄,這些紋理可用來做為紋理的來源和目的地紋理。

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

請注意,針對 MIP 對應的紋理,只會將一個D3DDP2OP_TEXBLT指令插入 D3dDrawPrimitives2 命令數據流中。 在此情況下,驅動程式預期會在紋理中布建所有 MIP 地圖層級。 在 MIP 地圖子層級中複製的區域可以透過在每個層級除以 rSrcpDest 2 來取得。

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

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

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

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

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

範例

下列虛擬程式代碼示範如何計算連續 MIP 層級的子群組,以從 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