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 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 una alta calidad visual y un rendimiento de renderizado rápido a la vez 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]
Descripción general
Direct2D es una API de código nativo basada en C ++ que se puede llamar mediante código administrado y utiliza un enfoque de " 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 representación 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 representación se conserva entre las llamadas de dibujo.
Direct2D puede minimizar el uso de la CPU y utilizar la representació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 usarlo exclusivamente con CPU, el llamado renderizado de software usá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 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 la memoria se 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:
- Representación de texto de subpíxeles de alta calidad a través de DirectWrite para la técnica de escala de grises y ClearType
- Antialiasing per primitivo
- Dibujar y rellenar geometría Bézier
- Operaciones de geometría enriquecida (por ejemplo , operaciones booleanas , ensanchamiento de ruta, delimitación, etc.)
- Capas compuestas
- Modos de mezcla primitivos (por ejemplo, fuente sobre, copia de fuente, mezclas mínimas, etc.)
- Efectos de imagen incorporados y personalizados para ajuste de fotos, transformación gráfica y de color
- Cepillo degradado y malla
- Lista de comandos para el almacenamiento en búfer e impresión de comandos
- Trazo de tinta escalable
- Lote de Sprite para el desarrollo de juegos
Direct2D permite la interoperabilidad total con GDI, GDI + y permite la representació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. Dicha 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 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 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 sin problemas con el control XAML Canvas mientras se preserva la potencia del subsistema de gráficos subyacente.
Versiones posteriores
Direct2D 1.1
Una versión actualizada de Direct2D fue lanzada con Windows 8 en octubre de 2012. [8] También fue retroportada 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 los componentes Direct3D, que se pueden mezclar todos 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 representación por dispositivo, soporte para Imágenes JPEG YCbCr para una menor huella de memoria y compatibilidad con formatos comprimidos en bloque (archivos DDS).
Direct2D 1.3
El lanzamiento de Windows 10 en julio de 2015 trajo importantes actualizaciones y nuevas funciones a 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 de la nube a pedido sin requerir el paso de instalación de la fuente, una optimización para una carga de imagen más rápida y una 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 extensión de API completamente nueva para admitir tinta digital, que es altamente aprovechada por el nuevo navegador Microsoft Edge , así como por el nuevo control XAML de lienzo de tinta .
Implementación
En su artículo de 2012 sobre la extensión de OpenGL de representación de rutas NV de la competencia, 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 trapezoides de espacio de píxeles y geometría sombreada adicional para calcular la cobertura fraccional de los bordes izquierdo y derecho de los trapezoides. Estos trapecios y geometría sombreada luego son rasterizados por la GPU. El rendimiento resultante es generalmente mejor que el de la CPU completa enfoques basados en y no requiere almacenamiento auxiliar para multimuestra o estado de la plantilla ; Direct2D se renderiza directamente en un framebuffer con alias con resultados correctamente antialias. La principal desventaja de Direct2D es [que] el rendimiento final no está determinado por la GPU (haciendo una rasterización bastante trivial) sino por la CPU realiza la transformación y la teselación trapezoidal de cada ruta y la validación de Direct3D n trabajo ". [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 enfocamos en reducir el costo de CPU asociado con la teselación de dos maneras. Primero, optimizamos nuestra implementación de la teselación. al renderizar geometrías simples como rectángulos, líneas, rectángulos redondeados y elipses ". [19] Estas optimizaciones de caso común afirmaron mejorar el rendimiento en el rango de 184% a 438%, dependiendo de la primitiva. La publicación continuó: "En segundo lugar, para mejorar el rendimiento al representar geometría irregular (por ejemplo, fronteras geográficas en un mapa), utilizamos una nueva función de hardware de gráficos llamada Rasterización independiente de destino o TIR. TIR permite que Direct2D gaste menos ciclos de CPU en 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ó un índice de referencia que utilizó unos 15 SVG , que afirmaban mejoras de rendimiento en el rango del 151% al 523%. La sección concluía: "Trabajamos en estrecha colaboración con nuestros socios de hardware de gráficos para diseñar TIR. Gracias a esa asociación, se hicieron posibles mejoras dramáticas. El hardware DirectX 11.1 ya está en el mercado hoy y estamos trabajando con nuestros socios para asegurarnos de que más TIR- los productos capaces estarán ampliamente disponibles ". [19]
La función TIR estuvo entre las que causaron 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 ese tipo de hardware. [23]
En Windows 8.1 , Direct2D puede usar tesselators 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 en el rendimiento con Direct2D en Windows 8.1 (frente a Windows 8) en hardware que no es TIR. [24]
Usos y rendimiento
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, duplicando aproximadamente su velocidad de renderizado. [28] (Firefox 4 también agregó soporte para DirectWrite, pero esto no fue 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 renderiza a través de ANGLE en Windows. [30] ) En Firefox 70.0, en hardware antiguo, Direct2D está deshabilitado en 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 usan Direct2D". [32]
Microsoft Office 2013 admite Direct2D + DirectWrite o GDI + Uniscribe para la representación de pantalla y la tipografía. [33]
Ver también
- DirectX
- Direct3D
- El Cairo : una biblioteca de gráficos vectoriales multiplataforma
- OpenVG
- Biblioteca multimedia simple y rápida
- Marco de Starling
- Cuarzo 2D
Referencias
- ^ https://msdn.microsoft.com/en-us/library/windows/desktop/dd370990(v=vs.85).aspx
- ^ "Novedades de Direct2D y DirectWrite para Windows 10 (canal 9)" . Canal 9 . Consultado el 3 de diciembre de 2015 .
- ^ "Direct2D actualizado en marzo DirectX SDK - Blog de Tom - Página principal del sitio - Blogs de TechNet" . blogs.technet.com. 2009-03-24 . Consultado el 26 de diciembre de 2011 .
- ^ "Direct2D" . MSDN . Consultado el 26 de diciembre de 2011 .
- ^ https://stackoverflow.com/questions/38174095/what-exactly-is-lightweight-com
- ^ https://msdn.microsoft.com/en-us/library/windows/desktop/ff729481(v=vs.85).aspx
- ^ https://msdn.microsoft.com/en-us/library/windows/desktop/dd756766(v=vs.85).aspx
- ^ https://msdn.microsoft.com/en-us/library/windows/hardware/dn653328(v=vs.85).aspx#tir
- ^ a b "Windows con C ++ - Introducción a Direct2D 1.1" . Msdn.microsoft.com. 2014-05-02 . 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). Programación de juegos DirectX 11.1 . Packt Publishing Ltd. pág. 45. ISBN 978-1-84969-481-0.
- ^ http://blogs.msdn.com/b/windowsappdev/archive/2012/03/15/combining-xaml-and-directx.aspx
- ^ https://msdn.microsoft.com/en-us/library/windows/desktop/hh802478(v=vs.85).aspx
- ^ https://msdn.microsoft.com/en-us/library/windows/desktop/dn363632(v=vs.85).aspx
- ^ https://msdn.microsoft.com/en-us/library/windows/desktop/hh973240(v=vs.85).aspx
- ^ https://msdn.microsoft.com/en-us/library/windows/desktop/hh706316(v=vs.85).aspx
- ^ https://msdn.microsoft.com/en-us/library/windows/desktop/hh973241(v=vs.85).aspx
- ^ Kilgard, Mark J. (2012). "Representación de ruta acelerada por GPU". Transacciones ACM en gráficos . 31 (6): 1–10. doi : 10.1145 / 2366145.2366191 .
- ^ a b c Rob Copeland, con contribuciones de Sriram Subramanian, Dan McLachlan, Kam VedBrat, Steve Lim y Jianye Lu, e introducción de Steven Sinofsky Hardware acelerando todo: gráficos de Windows 8
- ^ "Continúa la guerra de palabras entre NVIDIA y AMD sobre DirectX 11.1" . Canucks de hardware. 2012-12-17 . Consultado el 9 de agosto de 2014 .
- ^ https://forums.geforce.com/default/topic/511499/geforce-drivers/give-us-dx11-1-driver-support-on-dx11-cards-no-new-hardware-is-required-for -dx11-1 / post / 3642626 / # 3642626
- ^ http://nvidia.custhelp.com/app/answers/detail/a_id/3196/~/fermi-and-kepler-directx-api-support
- ^ http://www.anandtech.com/show/8526/nvidia-geforce-gtx-980-review/4
- ^ http://channel9.msdn.com/Events/Build/2013/3-191 19:00 a 20:00 y 55:00 a 56:30
- ^ tim, el 11 de agosto de 2010 Siga a tim en Twitter (2010-08-11). "Firefox 4 tan psicodélico como IE9 con Direct2D habilitado« ITWriting de Tim Anderson " . Itwriting.com . Consultado el 6 de agosto de 2014 .CS1 maint: varios nombres: lista de autores ( enlace )
- ^ Shankland, Stephen (25 de marzo de 2014). "Firefox 4 beta 4 agrega aceleración de hardware" . CNET . Consultado el 6 de agosto de 2014 .
- ^ Mozilla arroja a Roc a la nueva dureza de Microsoft • The Register
- ^ Publicado el 27 de noviembre de 2009 por Gareth Halfacree (27-11-2009). "Firefox 3.7 es compatible con Direct2D" . bit-tech.net . Consultado el 9 de agosto de 2014 .
- ^ "Bits gráficos» Archivo del blog »Representación de texto de DirectWrite en Firefox 6" . Blog.mozilla.org. 2011-08-11. Archivado desde el original el 10 de agosto de 2014 . Consultado el 9 de agosto de 2014 .
- ^ "Composición acelerada por GPU en Chrome - Los proyectos de Chromium" . Consultado el 6 de agosto de 2014 .
- ^ Buckler, Craig (20 de diciembre de 2011). "Cómo habilitar WebGL para tarjetas gráficas bloqueadas en Firefox" . Consultado el 21 de octubre de 2019 .
- ^ Bright, Peter (24 de julio de 2012). "Aceleración de GPU de Windows 8: buenas noticias para Metro" . Ars Technica . Consultado el 9 de agosto de 2014 .
- ^ "Office adopta la nueva tecnología de visualización de Windows - Murray Sargent: matemáticas en Office - Inicio del sitio - Blogs de MSDN" . Blogs.msdn.com. 2012-07-29 . 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 PDC 2008
- Paquete de código de API de Windows para Microsoft .NET Framework : permite desarrollar aplicaciones Direct2D en código administrado
- Presentación de Direct2D : edición de junio de 2009 de MSDN Magazine
- Dibujar con Direct2D - Edición de septiembre de 2009 de MSDN Magazine
- API de Direct2D para Microsoft .Net Framework 4 - API de Direct2D para Microsoft .Net Framework 4
- Aplicación de 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 tiene varios artículos sobre Direct2D que van desde los introductorios como Triángulos y teselación o Geometrías Direct2D y sus manipulaciones hasta otros más avanzados como Pintar con los dedos con geometrías Direct2D , Un portal 2D en un mundo 3D , etc.