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 en Windows Vista y Windows Server 2008 (con Platform Update instalado). [ 3 ]
Direct2D aprovecha la aceleración por hardware mediante la unidad de procesamiento gráfico ( GPU ) presente en las tarjetas gráficas compatibles de ordenadores personales, tabletas, teléfonos inteligentes y dispositivos gráficos modernos. Ofrece una alta calidad visual y un rendimiento de renderizado rápido, manteniendo una total interoperabilidad con las API gráficas clásicas de Win32 , como GDI /GDI+, y las API gráficas modernas, como Direct3D . [ 4 ]
Descripción general
Direct2D es una API de código nativo basada en C++ que puede ser llamada por 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 forma similar a GDI/GDI+, Direct2D es una API de renderizado en "modo inmediato" con simples llamadas 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 por 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 la CPU, la llamada renderización por software, utilizándolo junto con WARP10 en situaciones donde la capacidad de hardware no está disponible, como cuando se ejecuta en un dispositivo con soporte mínimo de GPU, bajo un 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 y el uso de memoria de Direct2D escalan linealmente con la cantidad de primitivas tanto en software como en hardware.
Direct2D [ 6 ] [ 7 ] admite renderizado de alta calidad con las siguientes características clave:
- Renderizado de texto subpíxel de alta calidad mediante DirectWrite para técnicas tanto en escala de grises como ClearType.
- Antialiasing por primitiva
- Dibujo y relleno de geometría Bézier
- Operaciones geométricas avanzadas (por ejemplo, operaciones booleanas , ensanchamiento de trazados, delineado, etc.).
- Capas compuestas
- Modos de mezcla primitivos (por ejemplo, fuente superpuesta, fuente copiada, mezclas mínimas, etc.)
- Efectos de imagen integrados y personalizados para ajuste de fotos, transformación gráfica y de color.
- Pincel y malla de degradado
- Lista de comandos para el almacenamiento en búfer y la impresión de comandos.
- Trazo de tinta escalable
- Sprite batch para desarrollo de juegos
Direct2D permite una interoperabilidad total con GDI y GDI+, y permite la renderización desde y hacia una superficie Direct3D, así como desde y hacia un contexto de dispositivo (HDC) GDI/GDI+. Se puede usar eficazmente junto con el Componente de imágenes de Windows (WIC) para la codificación/descodificació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 rutas de código críticas con código Direct2D sin necesidad de modificar todo su código fuente. Durante el desarrollo de Windows 10, Microsoft creó 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 envoltorio WinRT altamente eficiente de Direct2D y DirectWrite, diseñado desde cero para integrarse a la perfección con el control Canvas de XAML, conservando al mismo tiempo la potencia del subsistema gráfico subyacente.
Versiones posteriores
Direct2D 1.1
Una versión actualizada de Direct2D se lanzó con Windows 8 en octubre de 2012. [ 8 ] También se adaptó a Windows 7 SP1 (pero no a Windows Vista) mediante la actualización de la plataforma de Windows 7. [ 9 ] [ 10 ] [ 11 ] La versión original de Direct2D estaba vinculada a DirectX 11 (en hardware, se utiliza hasta Direct3D 10.1), mientras que esta versión de Direct2D se integra con DirectX 11.1. [ 9 ] Windows 8 también añadió interoperabilidad entre XAML y Direct2D junto con componentes de Direct3D, que pueden combinarse en una aplicación. [ 12 ]
Direct2D 1.2
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 subprocesos múltiples, prioridad de renderizado por dispositivo, compatibilidad con imágenes JPEG YCbCr para un menor consumo de memoria y compatibilidad con formatos comprimidos por bloques (archivos DDS).
Direct2D 1.3
El lanzamiento de Windows 10 en julio de 2015 trajo consigo importantes actualizaciones y nuevas funciones para Direct2D, como la mejora del rendimiento en la representación de texto escalable sin rasterización de fuentes , la posibilidad de descargar las fuentes necesarias desde la nube bajo demanda sin necesidad de instalarlas, 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 pinceles de degradado mediante el uso de mallas 2D compuestas por parches de degradado. Esta versión también introdujo una extensión de API completamente nueva para admitir tinta digital, que es ampliamente utilizada por el navegador Microsoft Edge , así como por el control XAML Ink Canvas .
Implementación
En su artículo de 2012 sobre la extensión OpenGL de renderizado de rutas NV, Mark Kilgard y Jeff Bolz explican (y critican) el funcionamiento interno 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 en el espacio de píxeles y geometría sombreada adicional para calcular la cobertura fraccional de los bordes izquierdo y derecho de los trapecios. Estos trapecios y la geometría sombreada son luego rasterizados por la GPU. El rendimiento resultante es generalmente mejor que los enfoques basados completamente en la CPU y no requiere almacenamiento auxiliar para el estado de multisample o stencil ; Direct2D renderiza directamente en un framebuffer con aliasing y resultados con suavizado de bordes adecuado. La principal desventaja de Direct2D es que el rendimiento final no está determinado por la GPU (que realiza una rasterización bastante trivial), sino por 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 geométrica en Windows 8, nos centramos en reducir el coste de la CPU asociado a la teselación de dos maneras. Primero, 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 comunes afirmaban mejorar el rendimiento entre un 184 % y un 438 %, dependiendo de la primitiva. La publicación continuaba: «Segundo, para mejorar el rendimiento al representar geometría irregular (por ejemplo, fronteras geográficas en un mapa), utilizamos una nueva característica de hardware gráfico llamada Rasterización Independiente del Objetivo , o TIR. TIR permite que Direct2D dedique menos ciclos de CPU a la teselación, de modo 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 continuación, se realizó una prueba de rendimiento con unos 15 SVG , que arrojó mejoras de rendimiento de entre el 151 % y el 523 %. La sección concluía: «Trabajamos estrechamente con nuestros socios de hardware gráfico para diseñar TIR. Gracias a esta colaboración, se lograron mejoras drásticas. El hardware DirectX 11.1 ya está disponible en el mercado y estamos colaborando con nuestros socios para garantizar que haya más productos compatibles con TIR ampliamente disponibles». [ 19 ]
La función TIR fue una de las que provocó 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 nuevo hardware; [ 21 ] [ 22 ] la arquitectura Maxwell 2 , presentada en septiembre de 2014, es dicho hardware. [ 23 ]
En Windows 8.1 , Direct2D puede usar los teseladores de hardware de Direct3D11, pero solo en conjunto 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 sigue usando TIR para el suavizado de bordes (si TIR está disponible). Dado que la teselación de hardware está disponible en Direct3D11 base (no necesariamente en 11.1), Microsoft afirmó mejoras de rendimiento significativas con Direct2D en Windows 8.1 (en comparación con Windows 8) en hardware sin TIR. [ 24 ]
Adopción y rendimiento
Peter Bright de Ars Technica señaló en el verano de 2012 que "la mayoría de las aplicaciones de escritorio no usan Direct2D". [ 25 ]
navegadores web
Internet Explorer 9 y versiones posteriores utilizan Direct2D y DirectWrite para mejorar el rendimiento y la calidad visual. [ 26 ] [ 27 ] [ 28 ]
Google Chrome nunca adoptó el uso de Direct2D y desde entonces utiliza su propia biblioteca 2D llamada Skia , que a su vez renderiza a través de ANGLE en Windows. [ 29 ] Esto se aplica a todos los navegadores que posteriormente se bifurcaron del proyecto de código abierto Chromium de Google , por ejemplo, Opera, Vivaldi y Microsoft Edge.
Sin embargo, Mozilla Firefox adoptó el uso de Direct2D con la versión 3.7, duplicando aproximadamente su velocidad de renderizado en comparación con versiones anteriores. [ 30 ] (Firefox 4 también agregó soporte para DirectWrite, pero esto se hizo no predeterminado para algunas fuentes en Firefox 7 debido a quejas de los usuarios sobre la calidad de renderizado. [ 31 ] ) En Firefox 70.0, en hardware antiguo, Direct2D está deshabilitado en controladores gráficos antiguos en la lista negra si carecen de características y el área se oscurece, por ejemplo en Google Maps . [ 32 ] En 2025, con Firefox versión 146.0, el soporte para Direct2D se eliminó por completo de la aplicación. Mozilla ya había cambiado al soporte para Skia en versiones anteriores. [ 33 ]
Microsoft Office
Microsoft Office 2013 admite Direct2D+DirectWrite o GDI+ Uniscribe para la representación de pantalla y la tipografía. [ 34 ]
Véase también
- DirectX
- Direct3D
- Cairo : una biblioteca de gráficos vectoriales multiplataforma.
- OpenVG
- Biblioteca multimedia sencilla y rápida
- Marco de trabajo Starling
- Cuarzo 2D
Referencias
- ↑ "Direct2D - Aplicaciones Win32" . 26 de mayo de 2022.
- ↑ "Novedades de Direct2D y DirectWrite para Windows 10 (Channel 9)" . Channel 9. Consultado el 3 de diciembre de 2015 .
- ↑ "Direct2D actualizado en el SDK de DirectX de marzo - Blog de Tom - Página principal - Blogs de TechNet" . blogs.technet.com. 24 de marzo de 2009. Archivado del original el 28 de marzo de 2009. Consultado el 26 de diciembre de 2011 .
- ↑ "Direct2D" . MSDN . Consultado el 26 de diciembre de 2011 .
- ↑ ".net - ¿Qué es exactamente "COM ligero"?" . Stack Overflow .
- ↑ "Renderizado de texto con Direct2D y DirectWrite - Aplicaciones Win32" . 19 de agosto de 2020.
- ↑ "Formatos de píxeles y modos alfa compatibles - Aplicaciones Win32" . 20 de octubre de 2020.
- ↑ "Mejoras en las funciones de DirectX en Windows 8 - Controladores de Windows" . 15 de diciembre de 2021.
- 1 2 "Windows con C++ - Introducción a Direct2D 1.1" . Msdn.microsoft.com. 2 de mayo de 2014. Consultado el 9 de agosto de 2014 .
- ↑ "Actualización de plataforma para Windows 7 (Windows)" . Msdn.microsoft.com . Consultado el 9 de agosto de 2014 .
- ↑ Pooya Eimandar (2013). DirectX 11.1 Game Programming . Packt Publishing Ltd. pág. 45. ISBN 978-1-84969-481-0.
- ↑ "Blogs de desarrolladores" .
- ↑ "Novedades de Direct2D - Aplicaciones Win32" . 19 de agosto de 2020.
- ↑ "Descripción general de las implementaciones geométricas - Aplicaciones Win32" . 19 de agosto de 2020.
- ↑ "Efectos (Direct2D) - Aplicaciones Win32" . 19 de agosto de 2020.
- ↑ "Efectos integrados - Aplicaciones Win32" . 18 de septiembre de 2021.
- ↑ "Cómo aplicar efectos a primitivas - Aplicaciones Win32" . 19 de agosto de 2020.
- ↑ Kilgard, Mark J. (2012). "GPU-accelerated path rendering". ACM Transactions on Graphics . 31 (6): 1– 10. doi : 10.1145/2366145.2366191 . S2CID 12967014 .
- 1 2 3 Rob Copeland, con contribuciones de Sriram Subramanian, Dan McLachlan, Kam VedBrat, Steve Lim y Jianye Lu, e introducción de Steven Sinofsky. El hardware lo acelera todo: gráficos de Windows 8.
- ↑ "Continúa la guerra de palabras entre NVIDIA y AMD sobre la compatibilidad con DirectX 11.1" . Hardware Canucks. 17 de diciembre de 2012. Archivado del original el 10 de febrero de 2015. Consultado el 9 de agosto de 2014 .
- ↑ "Danos soporte para controladores DX11.1 en tarjetas DX11. No se requiere hardware nuevo para dx11.1" . NVIDIA .
- ↑ "Compatibilidad con la API DirectX de Fermi y Kepler | NVIDIA" . nvidia.custhelp.com .
- ↑ Smith, Ryan. "Análisis de la NVIDIA GeForce GTX 980: Maxwell Mark 2" . www.anandtech.com . Archivado del original el 22 de septiembre de 2014.
- ↑ http://channel9.msdn.com/Events/Build/2013/3-191 19:00 a 20:00 y 55:00 a 56:30
- ↑ Bright, Peter (24 de julio de 2012). "Aceleración de GPU en Windows 8: buenas noticias para Metro" . Ars Technica . Consultado el 9 de agosto de 2014 .
- ↑ onlyconnect (11 de agosto de 2010). "Firefox 4 tan psicodélico como IE9 con Direct2D habilitado" . Tim Anderson's IT Writing . Consultado el 3 de febrero de 2026 .
- ↑ Shankland, Stephen (25 de marzo de 2014). "Firefox 4 beta 4 añade aceleración por hardware" . CNET . Consultado el 6 de agosto de 2014 .
- ↑ "Mozilla lanza Roc contra la nueva dureza de Microsoft • The Register" . www.theregister.com .
- ↑ "Composición acelerada por GPU en Chrome - The Chromium Projects" . Archivado del original el 12 de septiembre de 2010. Consultado el 6 de agosto de 2014 .
- ↑ Halfacree, Gareth (27-11-2009). "Firefox 3.7 obtiene soporte para Direct2D" . bit-tech.net . Consultado el 3-02-2026 .
- ↑ "Gráficos » Archivo del blog » Renderizado de texto DirectWrite en Firefox 6" . Blog.mozilla.org. 11 de agosto de 2011. Archivado del original el 10 de agosto de 2014. Consultado el 9 de agosto de 2014 .
- ↑ Buckler, Craig (2011-12-20). "Cómo habilitar WebGL para tarjetas gráficas bloqueadas en Firefox" . Recuperado el 2019-10-21 .
- ↑ "Firefox 146.0, vea todas las nuevas funciones, actualizaciones y correcciones" . Firefox . Consultado el 12 de diciembre de 2025 .
- ↑ "Office adopta la nueva tecnología de visualización de Windows - Murray Sargent: Matemáticas en Office - Página principal - Blogs de MSDN" . Blogs.msdn.com. 29 de julio de 2012. Consultado el 9 de agosto de 2014 .
Enlaces externos
- Página principal de Direct2D en MSDN con enlaces a la guía de programación , nuevas funciones en Windows 8.1 , interoperabilidad con Direct3D , etc.
- Blog del desarrollador principal de Direct2D, Thomas Olsen
- Blog del desarrollador de Direct2D, Tom Mulcahy
- Windows 7: Presentación de Direct2D y DirectWrite - Vídeo de la PDC 2008
- Paquete de código de la API de Windows para Microsoft .NET Framework : permite desarrollar aplicaciones Direct2D en código administrado.
- Presentación de Direct2D - Número de junio de 2009 de la revista MSDN
- Dibujando con Direct2D - Número de septiembre de 2009 de la revista MSDN
- API Direct2D para Microsoft .Net Framework 4 Archivada el 8 de julio de 2011 en Wayback Machine - API Direct2D para Microsoft .Net Framework 4
- Solicitud ante la USPTO para la rasterización independiente del objetivo.
- Guía de migración de Direct2D 1.1 para desarrolladores de Windows 7
- La columna de Charles Petzold sobre DirectX incluye varios artículos sobre Direct2D, desde temas introductorios como Triángulos y teselación o Geometrías Direct2D y sus manipulaciones, hasta otros más avanzados como Pintando con los dedos con geometrías Direct2D , Un portal 2D a un mundo 3D , etc.
- DirectX
- Bibliotecas gráficas