Поделиться через


функция обратного вызова 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, чтобы предотвратить внутреннее переполнение во время математических операций.
  • Буферы поверхностей и вершин должны создаваться с помощью одного устройства отображения (графического контекста).
  • Для области назначения следует указать локальную память дисплея.
В следующем примере кода показана операция, выполняемая ComposeRects :
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)

См. также раздел

D3DDDIARG_COMPOSERECTS

D3DDDI_DEVICEFUNCS