DXGK_GDIARG_CLEARTYPEBLEND-Struktur (d3dkmddi.h)

Die DXGK_GDIARG_CLEARTYPEBLEND-Struktur beschreibt die Merkmale eines GDI-hardwarebeschleunigten ClearType- und Antialiased-Textpixelmischvorgangs.

Syntax

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;

Member

[in] DstRect

Eine RECT-Struktur , die den zu ändernden rechteckigen Bereich definiert. Dieses Rechteck wird im Koordinatensystem der Zieloberfläche angegeben und durch zwei Punkte definiert: links oben und unten rechts. Das Rechteck ist unten rechts exklusiv; Das heißt, die unteren und rechten Ränder sind kein Teil der Bitblockübertragung. Die beiden Punkte, die das Rechteck definieren, sind immer gut sortiert.

Das durch DstRect definierte Zielrechteck kann die Grenzen der Zieloberfläche überschreiten, subrechtecke können jedoch nicht verwendet werden. Darüber hinaus passen alle Unterrechtecke garantiert in die Zieloberfläche. Unterrechtecke können durch ein umgebendes Rechteck, das kleiner als das Zielrechteck ist, weiter eingeschränkt werden.

TmpSurfAllocationIndex

[in] Ein Index des Elements in der Zuordnungsliste, der eine temporäre Oberfläche angibt. Diese Oberfläche kann verwendet werden, um das Ziel vor dem Ausführen eines Pixelshaders zu lesen.

GammaSurfAllocationIndex

[in] Ein Index des Elements in der Zuordnungsliste, der eine Gammatabelle vom Typ D3DKMDT_GDISURFACETYPE angibt. Das Format der Gamma-Nachschlagezuordnung beträgt 8 Bit pro Pixel, und die Auflösung beträgt 512 x 16 Pixel. Jede Zeile der Zuordnung enthält zwei Tabellen: gamma und inverse Gamma. Jede Tabelle enthält 256 Einträge.

AlphaSurfAllocationIndex

[in] Ein Index des Elements in der Zuordnungsliste, der Alphawerte einer Oberfläche angibt. Die Alphaoberfläche befindet sich im gleichen Koordinatenbereich wie der Zieloberflächenbereich, der durch das DstRect-Zielrechteck begrenzt wird.

DstAllocationIndex

[in] Ein Index des Elements in der Zuordnungsliste, der die Zuordnung angibt, auf die vom DstRect-Zielrechteck verwiesen wird.

DstToAlphaOffsetX

[in] Ein Offset in x-Richtung, der den Koordinatenbereich des Zielrechtecks in den Koordinatenraum der Alphaoberfläche transformiert.

DstToAlphaOffsetY

[in] Ein Offset in y-Richtung, der den Koordinatenbereich des Zielrechtecks in den Koordinatenraum der Alphaoberfläche transformiert.

Color

[in] Die Vordergrundfarbe im 32-Bit-ARGB-Pixelformat ohne Vorzeichen (wie durch den D3DDDIFMT_A8R8G8B8-Wert der D3DDDIFORMAT-Enumeration definiert), korrigiert für Gamma.

Gamma

[in] Ein Index des Elements in der Zuordnungsliste, der die Gamma-Nachschlagetabelle angibt. Gammawerte liegen im Bereich von [0, 15], andernfalls ist Gamma 0xFFFFFFFF (der Wert von D3DKM_INVALID_GAMMA_INDEX). Weitere Informationen zur Verwendung von Gamma bei der ClearType-Mischung finden Sie unter Hinweise.

NumSubRects

Die Anzahl der Teilrechtecke im Zieloberflächenbereich, der durch das DstRect-Zielrechteck begrenzt wird.

pSubRects

Ein Zeiger auf die Unterrechtecke im Zieloberflächenbereich, der durch das DstRect-Zielrechteck begrenzt wird.

AlphaSurfPitch

Die Tonhöhe der Alphaoberfläche in Bytes, auf die von AlphaSurfAllocationIndex verwiesen wird.

Color2

[in] Die Vordergrundfarbe im 32-Bit-ARGB-Pixelformat ohne Vorzeichen (wie durch den D3DDDIFMT_A8R8G8B8-Wert der D3DDDIFORMAT-Enumeration definiert), wurde für Gamma nicht korrigiert.

Hinweise

Der Wert von Gamma sollte im Bereich von [0, 15] liegen, sofern nicht auf 0xFFFFFFFF (der Wert von D3DKM_INVALID_GAMMA_INDEX) festgelegt ist. Der Wert von Gamma ist der Index einer Zeile in der Gammazuordnung.

Wenn gamma im Bereich von [0, 15] liegt, wird die folgende Pixelmischung ausgeführt.

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;

Wenn gamma gleich 0xFFFFFFFF ist (der Wert von D3DKM_INVALID_GAMMA_INDEX), wird die folgende Pixelmischung ausgeführt.

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

Dabei befinden sich die folgenden Parameter im D3DDDIFMT_A8R8G8B8 Format, das in der D3DDDIFORMAT-Enumeration definiert ist:

  • Farbe = gammakorrierte Vordergrundfarbe, wie vom Color-Element definiert
  • Color2 = Vordergrundfarbe, keine Gammakorrektur, wie vom Color2-Element definiert
  • D = Zielpixelfarbe
  • A = Farbe der Alphaoberfläche

Der Anzeige-Miniporttreiber muss sicherstellen, dass die entsprechende Ausgabekomponente mit der Hintergrundfarbkomponente (D) identisch ist, wenn eine Komponente von A null ist.

Der Treiber muss außerdem sicherstellen, dass die entsprechende Ausgabekomponente mit der Vordergrundfarbkomponente (Color2) identisch ist, wenn eine Komponente von A 0xFF ist.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 7
Kopfzeile d3dkmddi.h (einschließlich D3dkmddi.h)

Weitere Informationen

D3DDDIFORMAT

D3DKMDT_GDISURFACETYPE

RECT