функция обратного вызова 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 (включая D3dumddi.h) |