DXGK_GDIARG_STRETCHBLT結構 (d3dkmddi.h)
DXGK_GDIARG_STRETCHBLT結構描述 GDI 硬體加速延展位區塊傳輸 (bitblt) 作業的特性。
語法
typedef struct _DXGK_GDIARG_STRETCHBLT {
[in] RECT SrcRect;
[in] RECT DstRect;
[in] UINT DstAllocationIndex;
[in] UINT SrcAllocationIndex;
UINT NumSubRects;
[in] RECT *pSubRects;
union {
struct {
UINT Mode : 16;
UINT MirrorX : 1;
UINT MirrorY : 1;
};
[in] UINT Flags;
};
[in] UINT SrcPitch;
} DXGK_GDIARG_STRETCHBLT;
成員
[in] SrcRect
RECT 結構,定義要複製的矩形區域。 這個矩形是在來源介面的座標系統中指定,並由兩個點定義:左上方和右下角。 定義矩形的兩個點一律會妥善排序。
來源矩形永遠不會超過來源表面的界限,因此它永遠不會過度停留來源表面。
此矩形會對應至 DstRect 所定義的目的地矩形。
如需詳細資訊,請參閱<備註>一節。
[in] DstRect
RECT 結構,定義要修改的矩形區域。 這個矩形是在目的地介面的座標系統中指定,並由兩個點定義:左上方和右下角。 矩形的右下角是獨佔的;也就是說,其下邊緣和右邊緣不是位區塊傳輸的一部分。 定義矩形的兩個點一律會妥善排序。
DstRect 所定義的目的地矩形可以超過目的介面的界限,但子矩形不能。 此外,保證所有子矩形都符合目的地表面。 子矩形可以透過小於目的矩形的周框進一步限制。
如需詳細資訊,請參閱<備註>一節。
[in] DstAllocationIndex
配置清單中的專案索引,指定 DstRect 目的地矩形所參考的配置。
[in] SrcAllocationIndex
配置清單中的專案索引,指定 SrcRect 來源矩形所參考的配置。
NumSubRects
目的地介面空間中由 DstRect 目的矩形系結的子矩形數目。
[in] pSubRects
目的地介面空間中受 DstRect 目的矩形所系結之子矩形的指標。
[in] Mode
指定如何結合來源圖元,以根據 是否已設定 Wingdi.h 中定義的下列值來產生輸出圖元:
值 | 意義 |
---|---|
BLACKONWHITE | 在壓縮位區塊傳輸上,圖元應該與布爾值 AND 作業結合。 在延展位區塊傳輸上,應該復寫圖元。 |
WHITEONBLACK | 在壓縮位區塊傳輸上,圖元應該與布爾值 OR 作業結合。 在延展位區塊傳輸上,應該復寫圖元。 |
只有在驅動程式已在 DXGK_PRESENTATIONCAPS 結構中設定 SupportMonoStretchBltModes 成員時,才會處理這種類型的作業。
[in] MirrorX
指定是否要在 xdirection 的鏡像模式中執行延展位區塊傳輸。 只有在 MirrorX 的值為非零且驅動程式已在 DXGK_PRESENTATIONCAPS 結構中設定 SupportMirrorStretchBlt 成員時,才會處理這種類型的作業。
[in] MirrorY
指定是否要在 Y 方向的鏡像模式中執行延展位區塊傳輸。 只有在 MirrorY 的值為非零且驅動程式已在 DXGK_PRESENTATIONCAPS 結構中設定 SupportMirrorStretchBlt 成員時,才會處理這種類型的作業。
[in] Flags
選擇性 UINT 值,可用來偵錯驅動程式程式代碼。
[in] SrcPitch
來源表面的音調,以位元組為單位。
備註
x 和 y 延展比例會分別計算為 DstRect 和 SrcRect 成員之 x 和 y 大小的比率。
在 Wingdi.h 中定義的 HALFTONE 模式和STRETCH_HALFTONE模式永遠不會在 Mode 成員中設定。 COLORONCOLOR 模式可以在 DXGK_GDIARG_ALPHABLEND 和 DXGK_GDIARG_TRANSPARENTBLT 結構中設定。
當子矩形轉換成來源介面空間時,結果保證會位於來源介面內。 下列公式會定義子矩形在目的地介面中將座標轉換成來源介面中的座標,其中
- (Xd,Yd) 是子矩形內的點
- (Xs,Ys) 是來源矩形內的點
float Ws = SrcRect.right - SrcRect.left;
float Wd = DstRect.right - DstRect.left;
int Xs = round((Xd - DstRect.left + 0.5) * Ws/Wd + SrcRect.left - 0.5)
OR
int Xs = truncate((Xd - DstRect.left + 0.5) * Ws/Wd + SrcRect.left)
float Hs = SrcRect.bottom - SrcRect.top;
float Hd = DstRect.bottom - DstRect.top;
int Ys = round((Yd - DstRect.top + 0.5) * Hs/Hd + SrcRect.top - 0.5)
OR
int Ys = truncate((Yd - DstRect.top + 0.5) * Hs/Hd + SrcRect.top)
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 7 |
標頭 | d3dkmddi.h (包含 D3dkmddi.h) |