Share via


Spezialeffekte in Anzeigetreibern

Windows 2000 und höhere Betriebssystemversionen unterstützen die folgenden Spezialeffekte:

  • Wenn die Anzeigehardware alpha-Blending unterstützt, kann der Anzeigetreiber DrvAlphaBlend implementieren.

  • Wenn die Anzeigehardware Farbverlaufsfüllungen unterstützt, sollte der Anzeigetreiber DrvGradientFill implementieren.

Alpha-Blending

Die Microsoft Windows 2000-Shell (und höher) verwendet die Alpha-Überblendung ausführlich, um Vorgänge wie Ein- undAusblendenanimationen und Alphacursor auszuführen. Da Alpha-Blend-Vorgänge sowohl das Lesen von der Quell- als auch von der Zieloberfläche erfordern, ist es sehr langsam, zu GDI zu wechseln, wenn sich entweder die Quelle oder das Ziel im Videospeicher befindet. Folglich führen Hardwarebeschleunigungen im Treiber zu sichtbar reibungsloseren Animationen und verbessern die Gesamtleistung des Systems.

Treiber sollten DrvAlphaBlend für Bitblockübertragungen von kompatiblen Bitmaps mit einer konstanten Alpha und von 32 bpp BGRA-Systemspeicheroberflächen mit Alphawerten pro Pixel implementieren. DrvAlphaBlend kann mithilfe von Dreieckstexturfüllungen implementiert werden, sofern keine Naht sichtbar ist.

Der von DrvAlphaBlend verursachte Fehler sollte im schlimmsten Fall ein (1) pro Farbkanal nicht überschreiten. Wenn dehnungsbezogen ist, sollte die Quelle vor dem Mischen COLORONCOLOR-stretched (siehe Windows SDK-Dokumentation) sein. der schlechteste Fehler sollte nicht ein (1) pro Farbkanal in Kombination mit dem schlimmsten Dehnungsfehler überschreiten.

In Fällen, in denen Alpha-Blending mit Stretching kombiniert wird, gibt es Tests im WDK, die die Implementierung von DrvAlphaBlend durch einen Anzeigetreiber wie folgt bewerten:

  1. Der Test ruft den DrvAlphaBlend des Anzeigetreibers auf, wodurch ein alphagemischtes und gestrecktes Rechteck erzeugt wird.

  2. Der Test generiert ein Zielrechteck unter Verwendung des gleichen Quellrechtecks, das beim Aufruf von DrvAlphaBlend verwendet wurde.

  3. Für jedes Pixel P im Zielrechteck von Schritt 2 simuliert der Test eine umgekehrte Dehnung, um das entsprechende Pixel im Quellrechteck vor dem Dehnungsverlauf zu bestimmen. Der Test wendet einen Toleranzwert auf die umgekehrte Strecke an, um die unterschiedlichen Stretchimplementierungen nach Treibern zu berücksichtigen. Der Test berechnet dann die Alphamischung, die auf dieses Pixel angewendet werden soll.

    Da jeder von vier möglichen Pixeln (die Ecken des Quadrats 3 x 3 Pixel, die auf Pixel P zentriert sind) im Quellrechteck gedehnt werden kann, um Pixel P im Zielrechteck zu erzeugen, muss der Test den Farbwert jedes Eckpixels mit dem des Pixels an der entsprechenden Position im von DrvAlphaBlend erzeugten Rechteck vergleichen.

Der schlechteste Dehnungsfehler ist der größte Farbunterschied zwischen einem beliebigen Paar entsprechender Eckpixel, wobei sich einer von ihnen auf dem von DrvAlphaBlend erzeugten Rechteck befindet, und der andere auf dem testprodzierten Quellrechteck.

Farbverlaufsfüllungen

Die Windows 2000-Shell (und höher) verwendet Farbverlaufsfüllungen auf allen Untertitel Balken.

Die von DrvGradientFill erzeugten Ergebnisse hängen von der Anzahl der Bits pro Pixel ab und müssen die folgenden Richtlinien erfüllen:

24-bpp- oder 32-bpp-Oberflächen

  • Werte müssen monoton in allen abgestuften Richtungen erhöht oder verringert werden.

  • Für rechteckige Farbverläufe: Wenn ulMode == GRADIENT_FILL_RECT_H, muss jeder vertikale Balken eine einzelne Farbe aufweisen. Wenn ulMode == GRADIENT_FILL_RECT_V, muss jeder horizontale Balken eine einzelne Farbe aufweisen.

  • Der schlechteste Fehler in einem Kanal darf â±1 nicht überschreiten.

  • Die Endpunkte der Region müssen genaue Übereinstimmungen sein.

15-bpp- oder 16-bpp-Oberflächen

Der schlechteste Fehler in einem Kanal darf â±15 nicht überschreiten.

1-bpp- bis 8-bpp-Oberflächen

Bei Farbverlaufsfüllungen für eine dieser Oberflächen ist kein Fehler zulässig. Bei einer 8-Bpp-Oberfläche ruft GDI die DrvGradientFill-Funktion des Treibers nicht auf.

Beachten Sie, dass das Ausschneiden auf allen Oberflächen keine Auswirkungen auf die Ergebnisse hat.