структура DXGK_GDIARG_TRANSPARENTBLT (d3dkmddi.h)
Структура DXGK_GDIARG_TRANSPARENTBLT описывает характеристики операции передачи битовых блоков GDI с аппаратным ускорением (bitblt) с прозрачностью.
Синтаксис
typedef struct _DXGK_GDIARG_TRANSPARENTBLT {
[in] RECT SrcRect;
[in] RECT DstRect;
UINT SrcAllocationIndex;
UINT DstAllocationIndex;
UINT Color;
UINT NumSubRects;
RECT *pSubRects;
D3DKM_TRANSPARENTBLTFLAGS Flags;
UINT SrcPitch;
} DXGK_GDIARG_TRANSPARENTBLT;
Члены
[in] SrcRect
Структура RECT, которая определяет прямоугольную область для копирования. Этот прямоугольник указывается в системе координат исходной поверхности и определяется двумя точками: верхним левым и нижним правым. Два пункта, определяющие прямоугольник, всегда хорошо упорядочены.
Дополнительные сведения см. в разделе "Примечания".
[in] DstRect
Структура RECT, которая определяет прямоугольную область для изменения. Этот прямоугольник указывается в системе координат целевой поверхности и определяется двумя точками: верхним левым и нижним правым. Прямоугольник является правым нижним правом; То есть его нижние и правые края не являются частью передачи битового блока. Два пункта, определяющие прямоугольник, всегда хорошо упорядочены.
Прямоугольник назначения, определенный DstRect, может превышать границы конечной поверхности, но вложенные прямоугольники не могут. Кроме того, все вложенные прямоугольники гарантированно помещаются внутри целевой поверхности. Вложенные прямоугольники могут быть ограничены дополнительно ограничивающим прямоугольником, который меньше, чем прямоугольник назначения.
Дополнительные сведения см. в разделе "Примечания".
SrcAllocationIndex
[in] Индекс элемента в списке выделения, указывающий выделение, на которое ссылается прямоугольник SrcRect исходного прямоугольника.
DstAllocationIndex
[in] Индекс элемента в списке выделения, указывающий выделение, на которое ссылается прямоугольник назначения DstRect назначения.
Color
[in] Задает физический прозрачный цвет в исходной поверхности в 32-разрядном формате ARGB без знака (как определено значением D3DDDIFMT_A8R8G8B8 перечисления D3DDDIFORMAT). Все пиксели на исходной поверхности, которые соответствуют прозрачному цвету, указанному Color, не копируются.
NumSubRects
[in] Количество вложенных прямоугольников в пространстве конечной поверхности, ограничивающегося прямоугольником DstRect целевом прямоугольнике.
pSubRects
[in] Указатель на вложенные прямоугольники в целевом пространстве поверхности.
Flags
[in] Структура D3DKM_TRANSPARENTBLTFLAGS, указывающая возможности передачи прозрачного битового блока с аппаратным ускорением адаптера дисплея.
SrcPitch
[in] Шаг исходной поверхности в байтах.
Замечания
Прямоугольники, указанные SrcRect и DstRect, члены привязаны ко всем вложенным прямоугольникам в исходных и конечных пространствах соответственно. Подсистема ядра графики Microsoft DirectX никогда не запрашивает прозрачной передачи битовых блоков, если исходные и конечные прямоугольники перекрываются на одной поверхности.
Чтобы завершить прозрачную операцию передачи битовых блоков, цвет каждого пикселя в DstRect должен быть вычислен с помощью следующей формулы:
typedef DXGK_GDIARG_TRANSPARENTBLT tblt;
if (tblt.Flags.HonorAlpha)
{
if (SourceColor != tblt.Color)
{
DestinationColor = SourceColor;
}
}
else
{
if ((SourceColor & 0x00FFFFFF) != tblt.Color)
{
DestinationColor = SourceColor;
}
}
В этом случае значение 0x00FFFFFF в формате ARGB указывает альфа = 0, поэтому альфа-смесь не реализуется.
Если требуется операция передачи растянутых битовых блоков, коэффициенты растягивания x и y вычисляются соответственно в виде соотношений размеров DstRect и SrcRect. Кроме того, операция растяжения будет продолжаться, как если задано значение COLORONCOLOR в Wingdi.h. При уменьшении передачи битового блока достаточно пикселей следует игнорировать, чтобы пиксели не должны объединяться. При перемещении растянутого битового блока пиксели должны реплицироваться.
Дополнительные сведения о прозрачной передаче битовых блоков см. в копирования растровых карт.
Когда вложенные прямоугольники преобразуются в исходное пространство поверхности, результат гарантированно находится в исходной поверхности. Преобразование координат вложенного прямоугольника в конечной поверхности в координаты исходной поверхности определяется следующими формулами:
- (Xd, Yd) — это точка внутри подстановки
- (Xs, Ys) — это точка внутри исходного прямоугольника
float Ws = SrcRect.right - SrcRect.left;
float Wd = DstRect.right - DstRect.left;
int Xs = round((Xd - DstRect.left + 0.5) * Ws/Wd + SrcRect.left - 0.5)
OR
int Xs = truncate((Xd - DstRect.left + 0.5) * Ws/Wd + SrcRect.left)
float Hs = SrcRect.bottom - SrcRect.top;
float Hd = DstRect.bottom - DstRect.top;
int Ys = round((Yd - DstRect.top + 0.5) * Hs/Hd + SrcRect.top - 0.5)
OR
int Ys = truncate((Yd - DstRect.top + 0.5) * Hs/Hd + SrcRect.top)
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows 7 |
заголовка | d3dkmddi.h (include D3dkmddi.h) |