структура DXGK_GDIARG_CLEARTYPEBLEND (d3dkmddi.h)

Структура DXGK_GDIARG_CLEARTYPEBLEND описывает характеристики операции ClearType с аппаратным ускорением GDI и сглаживания пикселей текста.

Синтаксис

typedef struct _DXGK_GDIARG_CLEARTYPEBLEND {
  [in] RECT DstRect;
       UINT TmpSurfAllocationIndex;
       UINT GammaSurfAllocationIndex;
       UINT AlphaSurfAllocationIndex;
       UINT DstAllocationIndex;
       INT  DstToAlphaOffsetX;
       INT  DstToAlphaOffsetY;
       UINT Color;
       UINT Gamma;
       UINT NumSubRects;
       RECT *pSubRects;
       UINT AlphaSurfPitch;
       UINT Color2;
} DXGK_GDIARG_CLEARTYPEBLEND;

Члены

[in] DstRect

Структура RECT , определяющая прямоугольную область для изменения. Этот прямоугольник задается в системе координат целевой поверхности и определяется двумя точками: верхней левой и нижней правой. Прямоугольник является эксклюзивным в нижнем правом углу; то есть его нижний и правый края не являются частью передачи битового блока. Две точки, определяющие прямоугольник, всегда хорошо упорядочены.

Прямоугольник назначения, определенный DstRect, может превышать границы целевой поверхности, но вложенные прямоугольники не могут. Кроме того, все вложенные прямоугольники гарантированно помещаются внутри целевой поверхности. Вложенные прямоугольники могут быть дополнительно ограничены ограничивающим прямоугольником, который меньше целевого прямоугольника.

TmpSurfAllocationIndex

[in] Индекс элемента в списке выделения, указывающий временную поверхность. Эту поверхность можно использовать для чтения назначения перед выполнением пиксельного шейдера.

GammaSurfAllocationIndex

[in] Индекс элемента в списке выделения, указывающий гамма-таблицу типа D3DKMDT_GDISURFACETYPE. Формат выделения гамма-поиска составляет 8 бит на пиксель, а разрешение — 512 x 16 пикселей. Каждая строка выделения содержит две таблицы: гамма и обратная гамма. Каждая таблица содержит 256 записей.

AlphaSurfAllocationIndex

[in] Индекс элемента в списке выделения, указывающий альфа-значения поверхности. Альфа-поверхность находится в том же пространстве координат, что и пространство поверхности назначения, ограниченное прямоугольником назначения DstRect .

DstAllocationIndex

[in] Индекс элемента в списке выделения, указывающий выделение, на которое ссылается прямоугольник назначения DstRect .

DstToAlphaOffsetX

[in] Смещение в направлении X, которое преобразует координатное пространство целевого прямоугольника в пространство координат альфа-поверхности.

DstToAlphaOffsetY

[in] Смещение в направлении y, которое преобразует пространство координат целевого прямоугольника в пространство координат альфа-поверхности.

Color

[in] Цвет переднего плана в 32-разрядном формате без знака ARGB (как определено значением D3DDDIFMT_A8R8G8B8 перечисления D3DDDIFORMAT ), исправлен для гамма.

Gamma

[in] Индекс элемента в списке выделения, задающий таблицу гамма-подстановки. Гамма-значения находятся в диапазоне [0, 15], в противном случае гамма 0xFFFFFFFF (значение D3DKM_INVALID_GAMMA_INDEX). Дополнительные сведения о том, как гамма используется в смешениях ClearType, см. в разделе Примечания.

NumSubRects

Количество вложенных прямоугольников в пространстве поверхности назначения, ограниченном прямоугольником назначения DstRect .

pSubRects

Указатель на вложенные прямоугольники в пространстве поверхности назначения, ограниченном прямоугольником назначения DstRect .

AlphaSurfPitch

Шаг (в байтах) альфа-поверхности, на которую ссылается AlphaSurfAllocationIndex.

Color2

[in] Цвет переднего плана в 32-разрядном формате без знака ARGB (как определено значением D3DDDIFMT_A8R8G8B8 перечисления D3DDDIFORMAT ), не исправлен для гамма.

Комментарии

Значение Гамма должно находиться в диапазоне [0, 15], если не задано значение 0xFFFFFFFF (значение D3DKM_INVALID_GAMMA_INDEX). Значение Гамма — это индекс строки в гамма-выделении.

Если гамма находится в диапазоне [0, 15], выполняется следующее на пиксельное наложение.

GammaTable = (BYTE*)GammaSurfaceAddress + Gamma * GammaSurfacePitch;
InverseGammaTable = (BYTE*)GammaSurfaceAddress + Gamma * GammaSurfacePitch + 256;

Tmp.r = GammaTable[D.r]; // red
Tmp.g = GammaTable[D.g]; // green
Tmp.b = GammaTable[D.b]; // blue

BlendColor.r = InverseGammaTable[round((Tmp.r + (Color.r - Tmp.r) * A.r / 255.0))]
BlendColor.g = InverseGammaTable[round((Tmp.g + (Color.g - Tmp.g) * A.g / 255.0))]
BlendColor.b = InverseGammaTable[round((Tmp.b + (Color.b - Tmp.b) * A.b / 255.0))]
OutputColor.a = D.a

OutputColor.r = (A.r == 0) ? D.r : (A.r == 255) ? Color2.r : BlendColor.r;
OutputColor.g = (A.g == 0) ? D.g : (A.g == 255) ? Color2.g : BlendColor.g;
OutputColor.b = (A.b == 0) ? D.b : (A.b == 255) ? Color2.b : BlendColor.b;

Если гамма равна 0xFFFFFFFF (значение D3DKM_INVALID_GAMMA_INDEX), выполняется следующее смешивание по пикселям.

OutputColor.a = D.a
OutputColor.r = D.r + (Color.r - D.r) * (Color.r >= D.r ? A.r : A.g) / 255.0
OutputColor.g = D.g + (Color.g - D.g) * (Color.g >= D.g ? A.r : A.g) / 255.0
OutputColor.b = D.b + (Color.b - D.b) * (Color.b >= D.b ? A.r : A.g) / 255.0

Если следующие параметры имеют формат D3DDDIFMT_A8R8G8B8, определенный в перечислении D3DDDIFORMAT :

  • Color = гамма-исправленный цвет переднего плана, как определено элементом Color
  • Color2 = цвет переднего плана, не исправленный гамма, как определено элементом Color2
  • D = цвет пикселей назначения
  • A = цвет альфа-поверхности

Драйвер мини-порта дисплея должен гарантировать, что если компонент A равен нулю, соответствующий выходной компонент совпадает с компонентом цвета фона (D).

Драйвер также должен убедиться, что при 0xFF компонента A соответствующий выходной компонент совпадает с компонентом цвета переднего плана (Color2).

Требования

Требование Значение
Минимальная версия клиента Windows 7
Верхняя часть d3dkmddi.h (включая D3dkmddi.h)

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

D3DDDIFORMAT

D3DKMDT_GDISURFACETYPE

RECT