PFND3DDDI_COMPOSERECTS回调函数 (d3dumddi.h)
ComposeRects 函数将二维区域从源图面组合到目标图面。
语法
PFND3DDDI_COMPOSERECTS Pfnd3dddiComposerects;
HRESULT Pfnd3dddiComposerects(
HANDLE hDevice,
const D3DDDIARG_COMPOSERECTS *unnamedParam2
)
{...}
参数
hDevice
显示设备的句柄 (图形上下文) 。
unnamedParam2
pData [in]
指向 D3DDDIARG_COMPOSERECTS 结构的指针,该结构指定用于组合矩形区域的参数。
返回值
ComposeRects 返回以下值之一:
返回代码 | 说明 |
---|---|
S_OK | 已成功组合矩形区域。 |
E_OUTOFMEMORY | ComposeRects 无法分配完成所需的内存。 |
注解
以下约束和验证适用于 ComposeRects 函数:
- 驱动程序应忽略未完全位于源图面内的源矩形区域。
- 在应用偏移后,目标矩形区域可以部分或完全位于目标图面之外。 如果部分位于外部,则对目标矩形区域进行剪裁,如果完全在外部,则已拒绝或完全剪裁。
- 无法为源和目标指定相同的图面。
- 不应锁定与 ComposeRects 一起使用的图面和顶点缓冲区。
- 创建源图面和目标图面时, (D3DDDIFMT_A1) 每像素格式化为 1 位。
- 在调试版本中,Microsoft Direct3D 运行时验证目标矩形区域说明中每个索引是否存在源矩形区域说明。 在零售版本中,如果存在无效索引, ComposeRects 将返回错误。
- 矩形区域的数量应小于 0xFFFF,以防止在数学运算期间发生内部溢出。
- 应使用相同的显示设备 (图形上下文) 创建图面和顶点缓冲区。
- 应为目标图面指定本地显示内存。
for (UINT i=0; i < COMPOSERECTS.NumDstRects; i++) {
if (i >= Size(VertexBuffer(hDstRectDescsVB)) / sizeof(D3DCOMPOSERECTDSTDESC))
Ignore the rectangle;
if (VertexBuffer(hDstRectDescsVB)[i].RectDescIndex >= Size(VertexBuffer(hSrcRectDescsVB)) / sizeof(D3DCOMPOSERECTSRCDESC))
Ignore the rectangle;
SourceRectangle = VertexBuffer(hSrcResource)[VertexBuffer(hDstRectDescsVB)[i].RectDescIndex];
DestinationRectangle.X = {VertexBuffer(hDstRectDescsVB)[i].X + COMPOSERECTS.Xoffset;
DestinationRectangle.Y = {VertexBuffer(hDstRectDescsVB)[i].Y + COMPOSERECTS.Yoffset;
DestinationRectangle.Width = SourceRectangle.Width;
DestinationRectangle.Height = SourceRectangle.Height;
Perform COMPOSERECTS.Operation for each pixel;
}
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 在 Windows Vista 和更高版本的 Windows 操作系统中可用。 |
目标平台 | 桌面 |
标头 | d3dumddi.h (包括 D3dumddi.h) |