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 成员中设置。 可以在 DXGK_GDIARG_ALPHABLEND 和 DXGK_GDIARG_TRANSPARENTBLT 结构中设置 COLORONCOLOR 模式。
将子矩形转换为源图面空间时,保证结果在源图面内。 子矩形在目标图面中的坐标到源图面中的坐标的转换由以下公式定义,其中
- (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) |