Compartir a través de


Efectos especiales en controladores de pantalla

Las versiones del sistema operativo Windows 2000 y versiones posteriores admiten los siguientes efectos especiales:

  • Si el hardware de pantalla admite la combinación alfa, el controlador de pantalla puede implementar DrvAlphaBlend.

  • Si el hardware de pantalla admite rellenos degradados, el controlador de pantalla debe implementar DrvGradientFill.

Combinación alfa

El Shell de Microsoft Windows 2000 (y versiones posteriores) usa la combinación alfa ampliamente para realizar operaciones como animaciones de mezcla y de combinación y cursores alfa. Dado que las operaciones de combinación alfa requieren lectura de las superficies de origen y destino, es muy lento puntar a GDI cuando el origen o el destino están en memoria de vídeo. Por lo tanto, las aceleraciones de hardware en el controlador producirán animaciones visiblemente más suaves y mejorarán el rendimiento general del sistema.

Los controladores deben implementar DrvAlphaBlend para transferencias de bloques de bits de mapas de bits compatibles mediante un alfa constante y desde superficies de memoria del sistema BGRA de 32 bpp con valores alfa por píxel. DrvAlphaBlend se puede implementar mediante rellenos de textura de triángulo, siempre que no haya ninguna costura visible.

El peor de los errores producidos por DrvAlphaBlend no debe superar uno (1) por canal de color. Cuando se realiza el ajuste, el origen debe ser COLORONCOLOR extendido (consulte la documentación de Windows SDK) antes de combinar; el error en el peor de los casos no debe superar uno (1) por canal de color combinado con el error de extensión en el peor de los casos.

En los casos en los que la combinación alfa se combina con el ajuste, hay pruebas en el WDK que evalúan la implementación de un controlador de pantalla de DrvAlphaBlend de la siguiente manera:

  1. La prueba llama al drvAlphaBlend del controlador de pantalla, lo que genera un rectángulo extendido y combinado alfa.

  2. La prueba genera un rectángulo de destino, utilizando el mismo rectángulo de origen que se usó en la llamada a DrvAlphaBlend.

  3. Para cada píxel P en el rectángulo de destino del paso 2, la prueba simula un ajuste inverso para determinar el píxel correspondiente en el rectángulo de origen, antes de estirarse. La prueba aplica un valor de tolerancia al ajuste inverso para adaptarse a las distintas implementaciones de stretch por parte de los controladores. A continuación, la prueba calcula la combinación alfa que se debe aplicar a ese píxel.

    Dado que cualquiera de cuatro píxeles posibles (las esquinas del cuadrado de 3 X 3 píxeles centrados en el píxel P) en el rectángulo de origen se podrían estirar para generar píxeles P en el rectángulo de destino, la prueba debe comparar el valor de color de cada píxel de esquina con el del píxel en la posición correspondiente en el rectángulo generado por DrvAlphaBlend.

El error de ampliación en el peor de los casos es la mayor diferencia en el valor de color entre cualquier par de píxeles de esquina correspondientes, donde uno de ellos está en el rectángulo producido por DrvAlphaBlend y el otro está en el rectángulo de origen producido por la prueba.

Rellenos degradados

El Shell de Windows 2000 (y versiones posteriores) usa rellenos de degradado en todas las barras subtítulo.

Los resultados generados por DrvGradientFill dependen del número de bits por píxel y deben cumplir las siguientes directrices:

Superficies de 24 bpp o 32 bpp

  • Los valores deben aumentar o disminuir de forma monotónica en todas las direcciones degradadas.

  • Para degradados rectangulares: cuando ulMode == GRADIENT_FILL_RECT_H, cada barra vertical debe ser de un solo color. Cuando ulMode == GRADIENT_FILL_RECT_V, cada barra horizontal debe ser de un solo color.

  • El error en el peor de los casos en cualquier canal no puede superar ±1.

  • Los puntos de conexión de la región deben ser coincidencias exactas.

Superficies de 15 bpp o 16 bpp

El peor de los errores en cualquier canal no puede superar ±15.

Superficies de 1 bpp a 8 bpp

No se permite ningún error en rellenos degradados para cualquiera de estas superficies. Para una superficie de 8 bpp, GDI no llama a la función DrvGradientFill del controlador.

Tenga en cuenta que, en todas las superficies, el recorte no afecta a los resultados.