Compartir a través de


API de gráficos en Windows

Windows Vista incluye compatibilidad con un modelo de controlador de pantalla completamente nuevo que representa una revisión importante en el diseño de controladores de vídeo desde la introducción del modelo de controladores de Windows (WDM) para Windows 98. Este modelo rediseñado refleja la evolución del hardware de vídeo del mundo de las operaciones ráster 2D y las aplicaciones GDI a la de los juegos 3D con hardware gráfico de función fija y, por último, a la de la moderna unidad de procesamiento de gráficos programables (GPU) que admite una amplia gama de aplicaciones gráficas de alto rendimiento. Windows 7 y Windows 8 se basan en la infraestructura de gráficos de Windows Vista proporcionando características y API de gráficos adicionales. En este artículo se describen las características y las API de gráficos de Windows.

Fondo

La API principal para programar gráficos desde los primeros días de Windows ha sido la interfaz gráfica de dispositivo (GDI). Esta API se diseñó para controlar numerosos dispositivos de salida 2D y formó la base para la experiencia de la interfaz de usuario de Windows. DirectDraw y Direct3D se introdujeron como API alternativas para admitir juegos de pantalla completa y representación 3D como extensiones para el hardware existente del tiempo. Las interacciones con GDI eran complicadas. La mezcla eficaz de elementos GDI tradicionales con elementos Direct3D se ha visto limitada por este diseño. La versión de Windows XP de WDM, conocida como XPDM, refleja la naturaleza en paralelo de GDI y Direct3D (vea la figura 1).

Figura 1. API de gráficos en Windows XP

xpdm

A lo largo de los años, la potencia de las tarjetas de vídeo 3D ha crecido drásticamente hasta el punto en que la gran mayoría de hardware está dedicada a esta función. Un nuevo modelo de controlador, modelo de controlador de pantalla de Windows (WDDM), lleva la GPU y Direct3D a la vanguardia, lo que permite la creación de una experiencia completamente nueva, el escritorio 3D, que combina perfectamente el mundo 2D de GDI con la potencia de las GPU programables modernas. Con WDDM, el hardware de vídeo se controla completamente mediante Direct3D y todas las demás interfaces gráficas se comunican con el hardware de vídeo a través del nuevo modelo de controladores centrados en Direct3D (consulte la figura 2).

Ilustración 2. API de gráficos en Windows Vista

wddm

Para obtener más información sobre WDDM, consulte la Guía de diseño del modelo de controlador de pantalla de Windows Vista (WDDM).

Direct3D 9

La versión 9 de DirectX se lanzó por primera vez para Windows en 2002, con actualizaciones posteriores en 2003 y 2004. Esta API representa una década de evolución de las tecnologías DirectX, la introducción de modelos de programación de sombreador más eficaces para Direct3D y una madurez respaldada por miles de títulos de envío. Direct3D 9 es la interfaz gráfica principal en Windows Vista. Sigue siendo la API ideal para escribir juegos y aplicaciones 3D que necesitan ejecutarse en la amplia gama de versiones existentes de hardware y Windows. Los detalles del nuevo modelo de controladores están ocultos de las aplicaciones que usan las interfaces de Direct3D 9, pero en segundo plano el sistema operativo aprovecha al máximo las nuevas funcionalidades para proporcionar una verdadera multitarea de la GPU, una administración de recursos más eficaz y un rendimiento sólido.

Para garantizar la compatibilidad completa con versiones anteriores de Windows, algunas peculiaridades del modelo de controlador antiguo deben emularse incluso con el nuevo modelo de controlador de pantalla de Windows Vista. Por ejemplo, cuando una aplicación de pantalla completa pierde el foco, debe suponer que ha perdido todos los recursos de la memoria de vídeo (VRAM) y volver a cargar los que creó como recursos no administrados aunque el nuevo modelo de controlador controle los recursos de forma transparente sin expulsarlos del contexto del dispositivo. Incluso el concepto de un tipo de recurso administrado frente al predeterminado es específico del modelo de controlador anterior. Otro ejemplo es la expectativa de error al asignar recursos no administrados (grupo predeterminado) en exceso de la cantidad de VRAM disponible, aunque el nuevo modelo de controlador puede proporcionar una cantidad casi ilimitada de memoria de vídeo virtual. Debido a estos requisitos, las aplicaciones de Direct3D que se ejecutan en Windows Vista seguirán recibiendo estas condiciones de error. Por lo tanto, están limitados en su capacidad de usar las interfaces básicas de Direct3D 9 para usar completamente algunas características del nuevo modelo de controlador.

Aunque los nuevos sistemas que se envían con Windows Vista incluirán tarjetas de vídeo con controladores WDDM y los nuevos controladores para una serie de tarjetas de vídeo populares se incluyen de serie, Windows Vista sigue admitiendo la capacidad de usar controladores XPDM más antiguos para actualizaciones y ediciones corporativas. En los sistemas que usan el modelo de controlador antiguo, se deben usar Direct3D 9 e interfaces anteriores, y el funcionamiento del sistema gráfico es muy similar al de Windows XP (figura 1). WDDM es necesario para que las aplicaciones usen Direct3D 9Ex, Direct3D 10 y versiones posteriores.

Direct3D 9Ex

La interfaz Direct3D 9Ex proporciona acceso a una ligera extensión de la API estándar de Direct3D 9 que expone la asignación de recursos virtualizado, la nueva semántica de dispositivos perdidos y otras características nuevas disponibles mientras se ejecuta en Windows Vista. Al crear este objeto extendido, la API de Direct3D 9 usa la nueva semántica y, por tanto, requiere que la aplicación use una lógica diferente (y, por tanto, rutas de acceso de código diferentes) para la creación, administración y control de errores de recursos para nuevos tipos de condiciones. Esta API solo está disponible en Windows Vista y requiere controladores WDDM. Dado que Direct3D 9Ex usa una ruta de acceso de código de controlador y API independiente que Direct3D 9, la compatibilidad con esta API requiere casos de prueba adicionales para la aplicación.

La razón principal para crear la nueva API de Direct3D 9Ex era permitir el acceso total a las nuevas funcionalidades de WDDM a la vez que se mantiene la compatibilidad con las aplicaciones de Direct3D existentes. El nuevo escritorio 3D y muchas aplicaciones específicas de Windows Vista usan esta versión de Direct3D 9, pero no son funcionales cuando se ejecutan en controladores XPDM anteriores. Dado que la API de Direct3D 9Ex nunca aparecerá en versiones anteriores de Windows debido a la falta de compatibilidad con WDDM, las interfaces estándar de Direct3D 9 cubren un conjunto mucho más amplio de sistemas. En el caso de las aplicaciones de alto rendimiento que pueden aprovechar la próxima generación de hardware de vídeo, la nueva versión 10 de Direct3D proporciona muchas nuevas funcionalidades no expuestas por Direct3D 9Ex. Como resultado, para juegos y la mayoría de otras aplicaciones, Direct3D 9 o Direct3D 10 es la API recomendada.

Nota:

El SDK de DirectX no proporciona ejemplos, encabezados ni bibliotecas para la interfaz Direct3D 9Ex. Para obtener más información sobre Direct3D 9Ex, consulte DirectX para Windows Vista.

Direct3D 10

Para comprender completamente el potencial del nuevo modelo de controlador de Windows Vista y el hardware de próxima generación, se ha creado una versión completamente nueva de la API de Direct3D. Aunque WDDM elimina algunas de las limitaciones de rendimiento en el sistema gráfico existente, Direct3D 10 va más allá quitando cuellos de botella de diseño en la API de Direct3D existente y simplifica en gran medida la tarea de programar la GPU.

La nueva API elimina por completo todos los aspectos de función fija, y los reemplaza por construcciones programables y simplifica considerablemente la implementación interna. Los cientos de bits de funcionalidad de las versiones anteriores de Direct3D se han eliminado completamente y reemplazado por un conjunto bien definido e inclusivo de funcionalidad que tiene solo algunos escenarios de uso opcionales para formatos de recursos específicos. La creación y validación de recursos intensivos de CPU ahora tienen semántica explícita en la nueva API. Esto permite un comportamiento de rendimiento mucho más predecible y reduce considerablemente la sobrecarga por dibujo. Los recursos se pueden volver a configurar en varios formularios para permitir un uso eficaz en varias fases y el conjunto de características impone muchas menos restricciones en escenarios de uso para formatos. También hay nuevos formatos de textura de mapa normal comprimidos en bloques.

En la nueva API, las constantes del sombreador y el estado del dispositivo son recursos explícitos, lo que permite un almacenamiento en caché mucho más eficaz en el hardware y una validación de controladores muy simplificada. El modelo de sombreador programable se ha unificado tanto en sombreadores de vértices como en píxeles, y ha sido más expresivo con un modelo computacional y un conjunto de operadores bien definidos. Además, se ha agregado una nueva fase del sombreador de geometría para operar en primitivos después de la fase del sombreador de vértices. Los resultados del trabajo de la GPU en las fases del sombreador de vértices y geometría de la canalización se pueden transmitir a la RAM de vídeo para su reutilización, lo que permite la posibilidad de operaciones de GPU de paso múltiple extremadamente complejas con una interacción mínima de CPU.

Todas estas mejoras permiten la tecnología de gráficos de última generación y amplían la capacidad de las aplicaciones para descargar trabajo de la GPU. La descarga permite una máscara de caracteres más compleja basada en GPU, técnicas de transformación aceleradas, generación y extrusión de volumen de sombras, sistemas de partículas y físicas totalmente basados en GPU, más materiales complejos combinados en lotes de gran tamaño eficientes, detalles de procedimientos, asignación de desplazamiento de seguimiento de rayos en tiempo real, generación de mapas de cubos de paso único y muchas más técnicas, todo ello al liberar recursos de CPU para aplicaciones más complejas.

Para proporcionar este nivel de innovación en Direct3D 10, el hardware anterior no se puede expresar como una implementación parcial de una nueva interfaz. O bien una tarjeta de vídeo es compatible con todas las nuevas funciones, o bien no es compatible con Direct3D 10. Por lo tanto, aunque Direct3D 9 podría impulsar el hardware de la era DirectX7 con muchos bits de funcionalidad ausentes y limitaciones de uso, Direct3D 10 solo funciona en una nueva generación de tarjetas de vídeo. Para que una aplicación admita hardware de vídeo anterior, también debe admitir las interfaces de Direct3D 9. Las versiones futuras de Direct3D se compilarán en la versión 10, extendiéndola a nuevas versiones de la API, a la vez que garantiza un superconjunto estricto de la funcionalidad de Direct3D 10.

Para obtener más información sobre Direct3D 10, consulte Direct3D 10.

Direct3D 10.1

Windows Vista Service Pack 1 amplía la API de Direct3D 10 con Direct3D 10.1, que agrega interfaces opcionales y un modelo de sombreador adicional para admitir nuevas características de hardware de tarjetas de vídeo que admiten Direct3D 10.1. Todo el hardware que es capaz de admitir Direct3D 10.1 también es totalmente compatible con todas las características de Direct3D 10, y los desarrolladores de juegos pueden usar las características adicionales de Direct3D 10.1, cuando esté disponible.

Nota:

Direct3D 10.1 es la API de gráficos que usa el escritorio de Windows 7.

 

Nota:

Windows 7 y la actualización de Windows Vista agregan compatibilidad con los niveles de características DXGI 1.1, 10level9 y el dispositivo WARP10 a la API de Direct3D 10.1 existente.

 

Direct3D 11

Windows 7 admite una nueva revisión de Direct3D, Direct3D 11, basada en el diseño de la API de Direct3D 10.1. Las nuevas características de la API incluyen la representación multiproceso y la creación de recursos, el sombreador de proceso, la compatibilidad con niveles de características de 10level9 y el dispositivo de representación de software WARP10, y nuevas características de hardware de clase Direct3D 11, como teselación mediante sombreadores de casco y dominio, formatos de compresión de textura BC6H y BC7, Modelo de sombreador 5.0 y Vinculación dinámica del sombreador. La nueva API puede usar tarjetas de vídeo de clase Direct3D 10 y 10.1 existentes, algunas tarjetas direct3D 9 a través de los niveles de características de 10level9 con compatibilidad limitada con características y las tarjetas de vídeo de clase Direct3D 11 de última generación.

Además de la API de Direct3D 11, Windows 7 incluye DXGI 1.1, Direct2D, DirectWrite y compatibilidad con controladores WDDM 1.1.

Nota:

Las API relacionadas y Direct3D 11 también están disponibles como una actualización de Windows Vista (consulte Cómo instalar la versión más reciente de DirectX).

 

Direct3D 11.1

Windows 8 amplía la API de Direct3D 11 con Direct3D 11.1. Direct3D 11.1 admite todo el hardware existente que cuenta con niveles 11, 10_x y 9_x support, así como un nuevo nivel de características 11_1.

Además de la API de Direct3D 11.1, Windows 8 incluye DXGI 1.2, contextos de dispositivos Direct2D y compatibilidad con controladores WDDM 1.2.

Nota:

Si desea que sus aplicaciones de la Tienda Windows programen gráficos 3D con DirectX, puede usar la API de Direct3D 11.1. Para obtener más información sobre la programación de gráficos 3D con DirectX, consulte Introducción a los gráficos 3D con DirectX.

 

Actualización de la plataforma para Windows 7: la compatibilidad parcial está disponible para la API de Direct3D 11.1 en Windows 7 o Windows Server 2008 R2 con la actualización de plataforma para Windows 7 instalada. Para obtener más información sobre la actualización de plataforma para Windows 7, consulte Actualización de plataforma para Windows 7.

OpenGL

Windows Vista, Windows 7 y Windows 8 proporcionan la misma compatibilidad que Windows XP para OpenGL, que permite a los fabricantes de tarjetas de vídeo proporcionar un controlador cliente instalable (ICD) para OpenGL que proporciona compatibilidad acelerada por hardware. Tenga en cuenta que las versiones más recientes de estos ICD son necesarias para admitir completamente Windows Vista, Windows 7 o Windows 8. Si no se instala ningún ICD, el sistema volverá a la capa de software de OpenGL v1.1 en la mayoría de los casos.

Compatibilidad de aplicaciones, GDI y versiones anteriores de Direct3D

Los sistemas de gráficos Windows Vista, Windows 7 y Windows 8 están diseñados para admitir una amplia gama de escenarios de hardware y uso para habilitar la nueva tecnología mientras continúa admitiendo sistemas existentes. Las interfaces gráficas existentes, como GDI, GDI+, y versiones anteriores de Direct3D, siguen funcionando en Windows Vista y Windows 7, pero se reasignan internamente siempre que sea posible. Esto significa que la mayoría de las aplicaciones de Windows existentes seguirán funcionando.

Windows Vista, Windows 7 y Windows 8 siguen siendo compatibles con las mismas interfaces Direct3D y DirectDraw que Windows XP, desde la versión 3 de DirectX (con la excepción del Modo Retenido de Direct3D, que se ha eliminado). Al igual que con Windows XP Professional x64 Edition, las aplicaciones nativas de 64 bits en versiones más recientes de Windows se limitan a Direct3D9, DirectDraw7 o interfaces más recientes. Las aplicaciones de alto rendimiento deben usar Direct3D 9 o posterior para asegurarse de que tienen la coincidencia más cercana a las funcionalidades de hardware.

Recomendaciones

Tenga en cuenta las siguientes recomendaciones al seleccionar una API para la aplicación de gráficos:

  • Use Direct3D 9 si la aplicación debe admitir Windows XP o una versión anterior de Windows.
  • Usa Direct3D 9 si desea admitir Windows Vista o Windows 7 con controladores XPDM. Para los sistemas Windows Vista o Windows 7 que carecen de hardware de vídeo de Direct3D 10 o superior, puede elegir usar la ruta de acceso de código de Windows XP Direct3D 9 existente o usar los niveles de características de 10level9 a través de la API direct3D 10.1 o Direct3D 11.
  • Use Direct3D 11 para aprovechar la próxima generación de hardware de vídeo en Windows Vista, Windows 7 y Windows 8. Las aplicaciones de la Tienda Windows deben usar Direct3D 11 o posterior.