DXGK_GDIARG_TRANSPARENTBLT Struktur (d3dkmddi.h)

Die DXGK_GDIARG_TRANSPARENTBLT-Struktur beschreibt die Merkmale eines GDI-Bitblockübertragungsvorgangs (Bitblt) mit Transparenz.

Syntax

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;

Member

[in] SrcRect

Eine RECT-Struktur , die den zu kopierenden rechteckigen Bereich definiert. Dieses Rechteck wird im Koordinatensystem der Quelloberfläche angegeben und durch zwei Punkte definiert: links oben und unten rechts. Die beiden Punkte, die das Rechteck definieren, sind immer gut sortiert.

Weitere Informationen finden Sie im Abschnitt mit Hinweisen.

[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, subrechtlich aber nicht. Darüber hinaus wird garantiert, dass alle Untergeordneten Rechtecke in die Zieloberfläche passen. Unterrechtecke können durch ein umgebendes Rechteck, das kleiner als das Zielrechteck ist, weiter eingeschränkt werden.

Weitere Informationen finden Sie im Abschnitt mit Hinweisen.

SrcAllocationIndex

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

DstAllocationIndex

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

Color

[in] Gibt die physische transparente Farbe auf der Quelloberfläche im 32-Bit-ARGB-Pixelformat ohne Vorzeichen an (wie durch den D3DDDIFMT_A8R8G8B8 Wert der D3DDDIFORMAT-Enumeration definiert). Alle Pixel auf der Quelloberfläche, die der durch Farbe angegebenen transparenten Farbe entsprechen, werden nicht kopiert.

NumSubRects

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

pSubRects

[in] Ein Zeiger auf die Unterrechtecke im Zieloberflächenbereich.

Flags

[in] Eine D3DKM_TRANSPARENTBLTFLAGS-Struktur , die die hardwarebeschleunigten transparenten Bitblockübertragungsfunktionen der Grafikkarte angibt.

SrcPitch

[in] Der Pitch der Quelloberfläche in Bytes.

Hinweise

Die Rechtecke, die von den SrcRect - und DstRect-Membern angegeben werden, binden alle Teilrechtecke im Quell- bzw. Zielflächenbereich. Das Microsoft DirectX-Grafikkernsubsystem fordert niemals eine transparente Bitblockübertragung an, wenn sich die Quell- und Zielrechtecke auf derselben Oberfläche überlappen.

Um den Vorgang für die transparente Bitblockübertragung abzuschließen, sollte die Farbe der einzelnen Pixel in DstRect mithilfe der folgenden Formel berechnet werden:

typedef DXGK_GDIARG_TRANSPARENTBLT tblt;
if (tblt.Flags.HonorAlpha)
{
  if (SourceColor != tblt.Color)
 {
  DestinationColor = SourceColor; 
 }
}
else
{
 if ((SourceColor & 0x00FFFFFF) != tblt.Color)
 {
  DestinationColor = SourceColor; 
 }
}

In diesem Fall gibt ein Wert von 0x00FFFFFF im ARGB-Format alpha = 0 an, daher wird keine Alphamischung implementiert.

Wenn ein Stretch-Bit-Block-Übertragungsvorgang erforderlich ist, werden die Stretchverhältnisse x und y als das Verhältnis der x- und y-Größen von DstRect und SrcRect berechnet. Darüber hinaus wird der Stretch-Vorgang so fortgesetzt, als ob der COLORONCOLOR-Wert in Wingdi.h festgelegt ist. Bei einer verkleinernden Bitblockübertragung sollten genügend Pixel ignoriert werden, damit Pixel nicht kombiniert werden müssen. Bei einer gestreckten Bitblockübertragung sollten Pixel repliziert werden.

Weitere Informationen zu transparenten Bitblockübertragungen finden Sie unter Kopieren von Bitmaps.

Wenn Unterrechtecke in den Quelloberflächenraum transformiert werden, wird das Ergebnis garantiert innerhalb der Quelloberfläche angezeigt. Die Transformation der Koordinaten eines Unterrechtecks auf der Zieloberfläche in Koordinaten auf der Quelloberfläche wird durch die folgenden Formeln definiert:

  • (Xd, Yd) ist ein Punkt innerhalb des Unterrechtecks
  • (Xs, Ys) ist ein Punkt innerhalb des Quellrechtecks
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)

Anforderungen

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

Weitere Informationen

D3DDDIFORMAT

D3DKM_TRANSPARENTBLTFLAGS

DXGK_RENDERKM_COMMAND

RECT