Direct2D [1] es una interfaz de programación de aplicaciones (API) de gráficos vectoriales 2D diseñada por Microsoft e implementada en Windows 10 , [2] Windows 8 , Windows 7 y Windows Server 2008 R2 , y también Windows Vista y Windows Server 2008 (con Platform Update instalado). [3]
Direct2D aprovecha la aceleración de hardware a través de la unidad de procesamiento gráfico ( GPU ) que se encuentra en las tarjetas gráficas compatibles en computadoras personales, tabletas, teléfonos inteligentes y dispositivos gráficos modernos. Ofrece una alta calidad visual y un rendimiento de renderizado rápido, al mismo tiempo que mantiene una interoperabilidad total con las API de gráficos Win32 clásicas , como GDI /GDI+, y las API de gráficos modernas, como Direct3D . [4]
Direct2D es una API de código nativo basada en C++ que puede ser invocada por código administrado y utiliza un enfoque " COM liviano" [5] al igual que Direct3D , con una cantidad mínima de abstracción. Sin embargo, a diferencia de WPF y de manera similar a GDI/GDI+, Direct2D es una API de renderizado de "modo inmediato" con llamadas simples BeginDraw/Draw/EndDraw; Direct2D no tiene el concepto de "escena" y no utiliza estructuras de árbol retenidas, y el estado de renderizado se conserva entre llamadas de dibujo.
Direct2D puede minimizar el uso de la CPU y utilizar la renderización de hardware en una tarjeta gráfica con un soporte mínimo de Direct3D Feature Level 9 con controladores WDDM 1.1 . Las aplicaciones pueden optar por utilizarlo exclusivamente con CPU, la denominada renderización de software, utilizándolo junto con WARP10 en situaciones en las que la capacidad de hardware no está disponible, como cuando se ejecuta dentro de un dispositivo con un soporte mínimo de GPU, bajo el servicio de terminal , sesión 0 de Windows o cuando la renderización de gráficos se realiza en un servidor remoto y el resultado gráfico se envía de vuelta al dispositivo cliente. El rendimiento de Direct2D y el uso de memoria escalan linealmente con los recuentos primitivos tanto en el software como en el hardware.
Direct2D [6] [7] admite la renderización de alta calidad con las siguientes características clave:
Direct2D permite una interoperabilidad total con GDI, GDI+ y permite la renderización hacia y desde una superficie Direct3D, así como hacia y desde un contexto de dispositivo GDI/GDI+ (HDC). Se puede utilizar de forma eficaz junto con Windows Imaging Component (WIC) para la codificación/decodificación de imágenes, y con DirectWrite para el formato de texto y el procesamiento de fuentes. Esta interoperabilidad permite a los desarrolladores reemplazar gradualmente las rutas de código críticas con código Direct2D sin la necesidad de revisar todo su código fuente. En el marco de tiempo de Windows 10, Microsoft desarrolló un proyecto de código abierto llamado Win2D para simplificar aún más el uso de Direct2D y DirectWrite en aplicaciones de la Plataforma universal de Windows (UWP). Win2D es un contenedor WinRT altamente eficiente de Direct2D y DirectWrite diseñado desde cero para integrarse sin problemas con el control XAML Canvas, al tiempo que preserva la potencia del subsistema de gráficos subyacente.
Una versión actualizada de Direct2D se lanzó con Windows 8 en octubre de 2012. [8] También se incorporó a Windows 7 SP1 (pero no a Windows Vista) a través de la actualización de la plataforma Windows 7. [ 9] [10] [11] La versión original de Direct2D estaba vinculada a DirectX 11 (en hardware, se usa hasta Direct3D 10.1), mientras que esta versión de Direct2D se integra con DirectX 11.1. [9] Windows 8 también agregó interoperabilidad entre XAML y Direct2D junto con componentes Direct3D, que se pueden mezclar en una aplicación. [12]
Se agregaron nuevas características a Direct2D con Windows 8.1 en octubre de 2013: [13] Realizaciones de geometría, [14] API de efectos Direct2D, [15] [16] [17] API de lista de comandos, API de subprocesamiento múltiple, prioridad de renderizado por dispositivo, soporte para imágenes JPEG YCbCr para un menor consumo de memoria y soporte para formatos comprimidos en bloque (archivos DDS).
El lanzamiento de Windows 10 en julio de 2015 trajo consigo importantes actualizaciones y nuevas características para Direct2D, como la mejora del rendimiento de la representación de texto escalable sin rasterización de fuentes , la capacidad de descargar la fuente necesaria desde la nube a pedido sin requerir el paso de instalación de la fuente, una optimización para una carga de imágenes más rápida y la representación de efectos de imagen, y una forma más sofisticada de aplicar un pincel de degradado mediante el uso de una malla 2D hecha de parches de degradado. Esta versión también introdujo una nueva extensión de API para admitir tinta digital, que es muy aprovechada por el navegador Microsoft Edge, así como por el control XAML de lienzo de tinta .
En su artículo de 2012 sobre la extensión de OpenGL para renderizado de rutas NV, Mark Kilgard y Jeff Bolz explican (y critican) los aspectos internos de Direct2D de la siguiente manera: "Direct2D funciona transformando rutas en la CPU y luego realizando una teselación trapezoidal restringida de cada ruta. El resultado es un conjunto de trapezoides en el espacio de píxeles y geometría sombreada adicional para calcular la cobertura fraccionaria de los bordes izquierdo y derecho de los trapezoides. Luego, la GPU rasteriza estos trapezoides y la geometría sombreada. El rendimiento resultante es generalmente mejor que los enfoques basados completamente en la CPU y no requiere almacenamiento auxiliar para el estado de multimuestra o de plantilla ; Direct2D renderiza directamente en un búfer de cuadros con alias con resultados antialiaseado correctamente. La principal desventaja de Direct2D es [que] el rendimiento final no lo determina la GPU (que realiza una rasterización bastante trivial), sino la CPU que realiza la transformación y la teselación trapezoidal de cada ruta y el trabajo de validación de Direct3D". [18]
En julio de 2012, el equipo de Windows 8 publicó lo siguiente en el blog de Steven Sinofsky : "Para mejorar el rendimiento de la representación de geometría en Windows 8, nos centramos en reducir el coste de CPU asociado a la teselación de dos formas. En primer lugar, optimizamos nuestra implementación de la teselación al representar geometrías simples como rectángulos, líneas, rectángulos redondeados y elipses". [19] Estas optimizaciones de caso común afirmaban mejorar el rendimiento en el rango de 184% a 438%, dependiendo de la primitiva. La publicación continuaba: "En segundo lugar, para mejorar el rendimiento al representar geometría irregular (por ejemplo, fronteras geográficas en un mapa), utilizamos una nueva característica de hardware de gráficos llamada Target Independent Rasterization o TIR. TIR permite que Direct2D gaste menos ciclos de CPU en la teselación, por lo que puede dar instrucciones de dibujo a la GPU de forma más rápida y eficiente, sin sacrificar la calidad visual. TIR está disponible en el nuevo hardware de GPU diseñado para Windows 8 que admite DirectX 11.1". [19] A esto le siguió una evaluación comparativa que utilizó unos 15 SVG , en la que se afirmaban mejoras de rendimiento en el rango de 151% a 523%. La sección concluía: "Trabajamos en estrecha colaboración con nuestros socios de hardware gráfico para diseñar TIR. Se lograron mejoras espectaculares gracias a esa asociación. El hardware DirectX 11.1 ya está en el mercado hoy y estamos trabajando con nuestros socios para asegurarnos de que haya más productos compatibles con TIR disponibles de forma amplia". [19]
La característica TIR fue una de las que causó una "guerra de palabras" entre Nvidia y AMD alrededor de diciembre de 2012, porque la familia de GPU Kepler de Nvidia no la soporta, mientras que la GCN de AMD sí. [20] En respuesta a las demandas de los clientes, un miembro del personal de soporte de Nvidia publicó que TIR no se puede implementar simplemente a nivel de controlador, sino que requiere nuevo hardware; [21] [22] la arquitectura Maxwell 2 , presentada en septiembre de 2014, es dicho hardware. [23]
En Windows 8.1 , Direct2D puede utilizar los teseladores de hardware de Direct3D11, pero solo junto con D2D1_FILL_MODE_ALTERNATE
. Si se utiliza otro modo de relleno (por ejemplo D2D1_FILL_MODE_WINDING
, ), Direct2D vuelve a la teselación en la CPU, pero sigue utilizando TIR para el anti-aliasing (si TIR está disponible). Dado que la teselación de hardware está disponible en Direct3D11 básico (no necesariamente 11.1), Microsoft afirmó que hubo mejoras de rendimiento significativas con Direct2D en Windows 8.1 (en comparación con Windows 8) en hardware que no es TIR. [24]
Internet Explorer 9 y versiones posteriores utilizan Direct2D y DirectWrite para mejorar el rendimiento y la calidad visual. [25] [26] [27] La compatibilidad con Direct2D se agregó en la versión alfa de Firefox 3.7, duplicando aproximadamente su velocidad de renderizado. [28] (Firefox 4 también agregó compatibilidad con DirectWrite, pero esto se hizo no predeterminado para algunas fuentes en Firefox 7 debido a las quejas de los usuarios sobre la calidad de renderizado. [29] Google Chrome usa su propia biblioteca 2D llamada Skia , que a su vez se renderiza a través de ANGLE en Windows. [30] ) En Firefox 70.0, en hardware antiguo, Direct2D está deshabilitado en los controladores de gráficos antiguos incluidos en la lista negra si carecen de funciones y el área está en negro, por ejemplo, en Google Maps . [31]
Peter Bright de Ars Technica señaló en el verano de 2012 que "la mayoría de las aplicaciones de escritorio no utilizan Direct2D". [32]
Microsoft Office 2013 admite Direct2D+DirectWrite o GDI+ Uniscribe para renderizado de pantalla y tipografía. [33]
{{cite web}}
: |author=
tiene nombre genérico ( ayuda )Mantenimiento CS1: nombres múltiples: lista de autores ( enlace ) Mantenimiento CS1: nombres numéricos: lista de autores ( enlace ){{cite web}}
: CS1 maint: nombres numéricos: lista de autores ( enlace )