DXGK_GDIARG_CLEARTYPEBLEND 结构 (d3dkmddi.h)

DXGK_GDIARG_CLEARTYPEBLEND结构描述了 GDI 硬件加速 ClearType 和抗锯齿文本像素混合操作的特征。

语法

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 的伽玛表的元素的索引。 gamma 查找分配的格式为每像素 8 位,分辨率为 512 x 16 像素。 分配的每一行都包含两个表:gamma 和 inverse gamma。 每个表有 256 个条目。

AlphaSurfAllocationIndex

[in]分配列表中指定图面的 alpha 值的元素的索引。 alpha 图面与 DstRect 目标矩形边界的目标图面空间位于同一坐标空间中。

DstAllocationIndex

[in]分配列表中元素的索引,指定 DstRect 目标矩形引用的分配。

DstToAlphaOffsetX

[in]将目标矩形坐标空间转换为 alpha 表面坐标空间的 x 方向偏移量。

DstToAlphaOffsetY

[in]将目标矩形坐标空间转换为 alpha 表面坐标空间的 y 方向偏移量。

Color

[in]前景色,采用 32 位 ARGB 无符号像素格式, (由 D3DDDIFORMAT 枚举) 的D3DDDIFMT_A8R8G8B8值定义,针对伽玛进行了更正。

Gamma

[in]分配列表中指定伽玛查找表的元素的索引。 Gamma 值在 [0, 15] 的范围内,否则 gamma 0xFFFFFFFF (D3DKM_INVALID_GAMMA_INDEX) 的值。 有关如何在 ClearType 混合中使用 gamma 的详细信息,请参阅备注。

NumSubRects

目标图面空间中由 DstRect 目标矩形绑定的子矩形的数目。

pSubRects

指向目标图面空间中由 DstRect 目标矩形绑定的子矩形的指针。

AlphaSurfPitch

AlphaSurfAllocationIndex 引用的 alpha 图面的间距(以字节为单位)。

Color2

[in]前景色采用 32 位 ARGB 无符号像素格式, (由 D3DDDIFORMAT 枚举) 的D3DDDIFMT_A8R8G8B8值定义,未针对伽玛进行更正。

注解

Gamma 的值应在 [0, 15] 的范围内,除非设置为 D3DKM_INVALID_GAMMA_INDEX) 的值0xFFFFFFFF (。 Gamma 的值是 gamma 分配中某行的索引。

当 gamma 在 [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;

当 gamma 等于 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

其中,以下参数采用D3DDDIFORMAT 枚举中定义的 D3DDDIFMT_A8R8G8B8 格式:

  • Color = 经伽马修正的前景色,由 Color 成员定义
  • Color2 = 前景色,未更正伽玛,由 Color2 成员定义
  • D = 目标像素颜色
  • A = alpha 图面颜色

显示微型端口驱动程序必须确保当 A 的组件为零时,相应的输出组件与背景色分量 (D) 相同。

驱动程序还必须确保当 A 的组件0xFF时,相应的输出组件与 Color2) (前景色组件相同。

要求

要求
最低受支持的客户端 Windows 7
标头 d3dkmddi.h (包括 D3dkmddi.h)

另请参阅

D3DDDIFORMAT

D3DKMDT_GDISURFACETYPE

矩形