Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
The ComposeRects function composes two-dimensional areas from a source surface to a destination surface.
Syntax
PFND3DDDI_COMPOSERECTS Pfnd3dddiComposerects;
HRESULT Pfnd3dddiComposerects(
HANDLE hDevice,
const D3DDDIARG_COMPOSERECTS *unnamedParam2
)
{...}
Parameters
hDevice
A handle to the display device (graphics context).
unnamedParam2
pData [in]
A pointer to a D3DDDIARG_COMPOSERECTS structure that specifies the parameters that are used to compose rectangular areas.
Return value
ComposeRects returns one of the following values:
| Return code | Description |
|---|---|
| S_OK | The rectangular areas were successfully composed. |
| E_OUTOFMEMORY | ComposeRects could not allocate the required memory for it to complete. |
Remarks
The following constraints and validations apply to the ComposeRects function:
- The driver should ignore the source rectangular areas that are not completely inside the source surface.
- The destination rectangular areas--after applying offsets--can be partially or completely outside the destination surface. The destination rectangular areas are clipped if partially outside and rejected or completely clipped if completely outside.
- The same surface cannot be specified for the source and the destination.
- Surfaces and vertex buffers that are used with ComposeRects should not be locked.
- The source and destination surfaces are formatted as one bit per pixel (D3DDDIFMT_A1) when they are created.
- In the debug build, the Microsoft Direct3D runtime validates that a source rectangular area description exists for each index in the destination rectangular area description. In the retail build, ComposeRects returns an error if an invalid index exists.
- The number of rectangular areas should be less than 0xFFFF to prevent internal overflow during math operations.
- Surfaces and vertex buffers should be created by using the same display device (graphics context).
- Local display memory should be specified for the destination surface.
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;
}
Requirements
| Requirement | Value |
|---|---|
| Minimum supported client | Available in Windows Vista and later versions of the Windows operating systems. |
| Target Platform | Desktop |
| Header | d3dumddi.h (include D3dumddi.h) |