stringtranslate.com

Direct2D

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]

Descripción general

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.

Versiones posteriores

Direct2D 1.1

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]

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 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).

Direct2D 1.3

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 .

Implementación

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]

Usos y rendimiento

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]

Véase también

Referencias

  1. ^ "Direct2D - Aplicaciones Win32".
  2. ^ "Novedades de Direct2D y DirectWrite para Windows 10 (canal 9)". Canal 9. Consultado el 3 de diciembre de 2015 .
  3. ^ "Direct2D actualizado en marzo DirectX SDK - Blog de Tom - Página principal del sitio - Blogs de TechNet". blogs.technet.com. 2009-03-24. Archivado desde el original el 2009-03-28 . Consultado el 2011-12-26 .
  4. ^ "Direct2D". MSDN . Consultado el 26 de diciembre de 2011 .
  5. ^ ".net - ¿Qué es exactamente "COM ligero"?". Desbordamiento de pila .
  6. ^ "Representación de texto con Direct2D y DirectWrite - Aplicaciones Win32".
  7. ^ "Formatos de píxeles y modos alfa compatibles: aplicaciones Win32".
  8. ^ "Mejoras de las funciones de DirectX en Windows 8 - Controladores de Windows".
  9. ^ ab "Windows con C++: presentación de Direct2D 1.1". Msdn.microsoft.com. 2014-05-02 . Consultado el 2014-08-09 .
  10. ^ "Actualización de plataforma para Windows 7 (Windows)". Msdn.microsoft.com . Consultado el 9 de agosto de 2014 .
  11. ^ Pooya Eimandar (2013). Programación de juegos con DirectX 11.1 . Packt Publishing Ltd. pág. 45. ISBN 978-1-84969-481-0.
  12. ^ "Blogs de desarrollo".
  13. ^ "Novedades en Direct2D - Aplicaciones Win32".
  14. ^ "Descripción general de las realizaciones de geometría: aplicaciones Win32".
  15. ^ "Efectos (Direct2D) - Aplicaciones Win32".
  16. ^ "Efectos integrados - Aplicaciones Win32".
  17. ^ "Cómo aplicar efectos a primitivas - Aplicaciones Win32".
  18. ^ Kilgard, Mark J. (2012). "Renderizado de ruta acelerado por GPU". ACM Transactions on Graphics . 31 (6): 1–10. doi :10.1145/2366145.2366191. S2CID  12967014.
  19. ^ abc Rob Copeland, con contribuciones de Sriram Subramanian, Dan McLachlan, Kam VedBrat, Steve Lim y Jianye Lu, e introducción de Steven Sinofsky El hardware acelera todo: gráficos de Windows 8
  20. ^ "Continúa la guerra verbal entre NVIDIA y AMD por la compatibilidad con DirectX 11.1". Hardware Canucks. 17 de diciembre de 2012. Consultado el 9 de agosto de 2014 .
  21. ^ "Danos soporte para el controlador DX11.1 en tarjetas DX11. No se requiere hardware nuevo para dx11.1". NVIDIA .
  22. ^ "Compatibilidad con API DirectX de Fermi y Kepler | NVIDIA". nvidia.custhelp.com .
  23. ^ Smith, Ryan. "Revisión de la NVIDIA GeForce GTX 980: Maxwell Mark 2". www.anandtech.com .
  24. ^ http://channel9.msdn.com/Events/Build/2013/3-191 19:00 a 20:00 y 55:00 a 56:30
  25. ^ tim, el 11 de agosto de 2010 Sigue a tim en Twitter (11/08/2010). "Firefox 4 tan psicodélico como IE9 con Direct2D habilitado « ITWriting de Tim Anderson". Itwriting.com . Consultado el 6/08/2014 . {{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 )
  26. ^ Shankland, Stephen (25 de marzo de 2014). "Firefox 4 beta 4 agrega aceleración de hardware". CNET . Consultado el 6 de agosto de 2014 .
  27. ^ "Mozilla critica a Roc por la nueva dureza de Microsoft • The Register". www.theregister.com .
  28. ^ Publicado el 27 de noviembre de 2009 por Gareth Halfacree (27 de noviembre de 2009). "Firefox 3.7 obtiene compatibilidad con Direct2D". bit-tech.net . Consultado el 9 de agosto de 2014 .{{cite web}}: CS1 maint: nombres numéricos: lista de autores ( enlace )
  29. ^ "Bits gráficos » Blog Archive » Representación de texto con DirectWrite en Firefox 6". Blog.mozilla.org. 2011-08-11. Archivado desde el original el 2014-08-10 . Consultado el 2014-08-09 .
  30. ^ "Composición acelerada por GPU en Chrome: los proyectos de Chromium" . Consultado el 6 de agosto de 2014 .
  31. ^ Buckler, Craig (2011-12-20). "Cómo habilitar WebGL para tarjetas gráficas bloqueadas en Firefox" . Consultado el 21 de octubre de 2019 .
  32. ^ 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 .
  33. ^ "Office adopta la nueva tecnología de visualización de Windows - Murray Sargent: Matemáticas en Office - Página principal del sitio - Blogs de MSDN". Blogs.msdn.com. 2012-07-29 . Consultado el 2014-08-09 .

Enlaces externos