функция обратного вызова 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) при их создании.
- В сборке отладки среда выполнения 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 (include D3dumddi.h) |