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


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

См. также

D3DDDIARG_COMPOSERECTS

D3DDDI_DEVICEFUNCS