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 actualización de plataforma ). instalado). [3]
Direct2D aprovecha la aceleración de hardware a través de la unidad de procesamiento de gráficos ( GPU ) que se encuentra en las tarjetas gráficas compatibles en computadoras personales, tabletas, teléfonos inteligentes y dispositivos gráficos modernos. Ofrece alta calidad visual y rendimiento de renderizado rápido al tiempo que mantiene la 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 se puede llamar mediante código administrado y utiliza un enfoque " COM ligero" [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 en "modo inmediato" con llamadas simples a BeginDraw/Draw/EndDraw; Direct2D no tiene el concepto de "escena" y no utiliza estructuras de árbol retenidas, y el estado de representación se conserva entre llamadas de dibujo.
Direct2D puede minimizar el uso de la CPU y utilizar la representación de hardware en una tarjeta gráfica con soporte mínimo de Direct3D Feature Level 9 con controladores WDDM 1.1 . Las aplicaciones pueden optar por usarlo exclusivamente con CPU, el llamado renderizado de software, usándolo junto con WARP10 en situaciones en las que la capacidad del hardware no está disponible, como cuando se ejecuta dentro de un dispositivo con soporte mínimo de GPU, bajo servicio de terminal , sesión de Windows. 0 , o cuando la representació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 recuentos primitivos tanto en software como en hardware.
Direct2D [6] [7] admite renderizado 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 (HDC) GDI/GDI+. Se puede utilizar eficazmente junto con Windows Imaging Component (WIC) para codificar/decodificar imágenes y con DirectWrite para formatear texto y procesar 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 período 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 la aplicación de la Plataforma universal de Windows (UWP). Win2D es un contenedor WinRT altamente eficiente de Direct2D y DirectWrite diseñado desde cero para integrarse perfectamente con el control de XAML Canvas y al mismo tiempo preservar la potencia del subsistema de gráficos subyacente.
Se lanzó una versión actualizada de Direct2D con Windows 8 en octubre de 2012. [8] También se actualizó 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 funciones a Direct2D con Windows 8.1 en octubre de 2013: [13] Realizaciones de geometría, [14] API de efectos de Direct2D, [15] [16] [17] API de lista de comandos, API de subprocesos múltiples, prioridad de representación por dispositivo, soporte para Imágenes JPEG YCbCr para reducir el uso de memoria y compatibilidad con formatos comprimidos en bloque (archivos DDS).
El lanzamiento de Windows 10 en julio de 2015 trajo actualizaciones importantes 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 fuentes, una optimización para una carga de imágenes y una representación de efectos de imagen más rápidas, y una forma más sofisticada de aplicar un pincel de degradado mediante el uso de malla 2D hecha de parches de degradado. Esta versión también introdujo una nueva extensión API para admitir tinta digital, que es altamente aprovechada por el navegador Microsoft Edge, así como por el control XAML del lienzo de tinta .
En su artículo de 2012 sobre la extensión OpenGL de renderizado de rutas NV competitivas, Mark Kilgard y Jeff Bolz explican (y critican) los aspectos internos de Direct2D de la siguiente manera: "Direct2D opera transformando rutas en la CPU y luego realizando una teselación trapezoidal restringida de cada ruta. El resultado es un conjunto de trapecios de espacio de píxeles y geometría sombreada adicional para calcular la cobertura fraccionaria de los bordes izquierdo y derecho de los trapecios. Luego, la GPU rasteriza estos trapecios y geometría sombreada. El rendimiento resultante es generalmente mejor que el de la CPU. enfoques basados y no requiere almacenamiento auxiliar para múltiples muestras o estado de plantilla ; Direct2D renderiza directamente en un framebuffer con alias con resultados correctamente suavizados. La principal desventaja de Direct2D es [que] el rendimiento final no está determinado por la GPU (haciendo una rasterización bastante trivial) sino más bien por. la CPU realiza la transformación y teselación trapezoidal de cada ruta y el trabajo de validación 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 representación geométrica en Windows 8, nos centramos en reducir el coste de CPU asociado con la teselación de dos maneras. Primero, optimizamos nuestra implementación de teselación al renderizar geometrías simples como rectángulos, líneas, rectángulos redondeados y elipses." [19] Estas optimizaciones de casos comunes afirmaban mejorar el rendimiento en el rango del 184% al 438%, dependiendo de la primitiva. La publicación continúa: "En segundo lugar, para mejorar el rendimiento al representar geometría irregular (por ejemplo, límites geográficos en un mapa), utilizamos una nueva función de hardware de gráficos llamada Target Independent Rasterization o TIR. TIR permite que Direct2D dedique menos ciclos de CPU a la teselación, por lo que puede dar instrucciones de dibujo a la GPU de manera 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 prueba comparativa que utilizó unos 15 SVG , afirmando mejoras de rendimiento en el rango del 151% al 523%. La sección concluía: "Trabajamos estrechamente con nuestros socios de hardware de gráficos para diseñar TIR. Gracias a esa asociación se lograron mejoras espectaculares. El hardware DirectX 11.1 ya está en el mercado hoy y estamos trabajando con nuestros socios para asegurarnos de que haya más TIR- Los productos capaces estarán ampliamente disponibles". [19]
La función TIR estuvo entre las que provocaron una "guerra de palabras" entre Nvidia y AMD alrededor de diciembre de 2012, porque la familia de GPU Kepler de Nvidia no la admite, 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 hardware nuevo; [21] [22] la arquitectura Maxwell 2 , introducida en septiembre de 2014, es ese tipo de hardware. [23]
En Windows 8.1 , Direct2D puede usar los teseladores de hardware Direct3D11, pero solo junto con D2D1_FILL_MODE_ALTERNATE
. Si se usa otro modo de relleno (por ejemplo D2D1_FILL_MODE_WINDING
), Direct2D recurre a la teselación en la CPU, pero aún usa TIR para suavizado (si TIR está disponible). Dado que la teselación de hardware está disponible en Direct3D11 base (no necesariamente 11.1), Microsoft afirmó mejoras significativas de rendimiento con Direct2D en Windows 8.1 (frente a 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] Se agregó compatibilidad con Direct2D en la versión alfa de Firefox 3.7, aproximadamente duplicando su velocidad de renderizado. [28] (Firefox 4 también agregó soporte DirectWrite, pero esto no fue predeterminado para algunas fuentes en Firefox 7 debido a quejas de los usuarios sobre la calidad de renderizado. [29] Google Chrome usa su propia biblioteca 2D llamada Skia , que a su vez renderiza a través de ANGLE en Windows [30] ) En Firefox 70.0, en hardware antiguo, Direct2D está desactivado en los controladores de gráficos antiguos incluidos en la lista negra si carecen de funciones y el área está bloqueada, 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 visualización y tipografía. [33]
{{cite web}}
: |author=
tiene nombre genérico ( ayuda )Mantenimiento CS1: varios nombres: lista de autores ( enlace ) Mantenimiento CS1: nombres numéricos: lista de autores ( enlace ){{cite web}}
: Mantenimiento CS1: nombres numéricos: lista de autores ( enlace )