Microsoft DirectX es una colección de interfaces de programación de aplicaciones (API) para manejar tareas relacionadas con multimedia , especialmente programación de juegos y vídeo, en plataformas Microsoft . Originalmente, todos los nombres de estas API comenzaban con "Direct", como Direct3D , DirectDraw , DirectMusic , DirectPlay , DirectSound , etc. El nombre DirectX se acuñó como un término abreviado para todas estas API (la X representa los nombres de API particulares) y pronto se convirtió en el nombre de la colección. Cuando Microsoft se propuso desarrollar una consola de juegos, la X se utilizó como base del nombre Xbox para indicar que la consola se basaba en la tecnología DirectX. [3] La inicial X se ha mantenido en la denominación de las API diseñadas para Xbox, como XInput y la herramienta de creación de audio multiplataforma (XACT), mientras que el patrón DirectX se ha continuado para las API de Windows como Direct2D y DirectWrite .
Direct3D (la API de gráficos 3D dentro de DirectX) se utiliza ampliamente en el desarrollo de videojuegos para Microsoft Windows y la línea de consolas Xbox . Direct3D también lo utilizan otras aplicaciones de software para tareas de visualización y gráficos, como la ingeniería CAD/CAM. Como Direct3D es el componente de DirectX más publicitado, es común ver los nombres "DirectX" y "Direct3D" usados indistintamente.
El kit de desarrollo de software (SDK) de DirectX consta de bibliotecas de tiempo de ejecución en formato binario redistribuible, junto con documentación y encabezados adjuntos para su uso en la codificación. Originalmente, los tiempos de ejecución sólo los instalaban los juegos o explícitamente el usuario. Windows 95 no se inició con DirectX, pero DirectX se incluyó con Windows 95 OEM Service Release 2. [4] Windows 98 y Windows NT 4.0 se enviaron con DirectX, al igual que todas las versiones de Windows lanzadas desde entonces. El SDK está disponible como descarga gratuita. Si bien los tiempos de ejecución son software propietario de código cerrado, se proporciona código fuente para la mayoría de las muestras del SDK. A partir del lanzamiento de Windows 8 Developer Preview, DirectX SDK se ha integrado en Windows SDK. [5]
A finales de 1994, Microsoft estaba listo para lanzar Windows 95 , su próximo sistema operativo . Un factor importante en el valor que los consumidores le darían serían los programas que podrían ejecutarse en él. Alex St. John , empleado de Microsoft, había estado en conversaciones con varios desarrolladores de juegos preguntándoles qué probabilidades había de que llevaran sus juegos de MS-DOS a Windows 95, y encontró que las respuestas eran en su mayoría negativas; Los programadores habían descubierto que el entorno de Windows no proporcionaba las funciones necesarias que estaban disponibles en MS-DOS mediante rutinas de BIOS o acceso directo al hardware. [6] También había fuertes temores de compatibilidad; Un caso notable de esto fue el del libro de cuentos animados de Disney: El Rey León , que se basó en la interfaz de programación WinG . [7] Debido a numerosos controladores de gráficos incompatibles de las nuevas computadoras Compaq que no fueron probadas con la interfaz WinG que venía incluida con el juego, fallaba con tanta frecuencia en muchos sistemas de escritorio que los padres inundaron las líneas de ayuda de Disney . [8] [9]
St. John reconoció que las resistencias para el desarrollo de juegos en Windows serían una limitación y reclutó a dos ingenieros adicionales, Craig Eisler y Eric Engstrom , para desarrollar una mejor solución para lograr que más programadores desarrollaran juegos para Windows. El proyecto recibió el nombre en código de Proyecto Manhattan, al igual que el proyecto del mismo nombre de la Segunda Guerra Mundial , y la idea era desplazar las consolas de videojuegos desarrolladas en Japón por ordenadores personales con el sistema operativo de Microsoft. [8] Inicialmente había utilizado el símbolo de radiación como logotipo, pero Microsoft le pidió al equipo que cambiara el logotipo. [8] La gerencia no estuvo de acuerdo con el proyecto porque ya estaban descartando Windows como plataforma de juegos, pero los tres se comprometieron con el desarrollo de este proyecto. [9] Su naturaleza rebelde llevó a Brad Silverberg , vicepresidente senior de productos de oficina de Microsoft, a nombrar al trío los "Beastie Boys". [10]
La mayor parte del trabajo de los tres se realizó entre otros proyectos asignados que comenzaron cerca de finales de 1994. [9] En cuatro meses y con el aporte de varios fabricantes de hardware, el equipo había desarrollado el primer conjunto de interfaces de programación de aplicaciones (API) que presentado en la Conferencia de Desarrolladores de Juegos de 1995 . [9] El SDK incluía bibliotecas que implementaban DirectDraw para gráficos de mapa de bits, [11] DirectSound para audio, [12] y DirectPlay para comunicación entre reproductores a través de una red. [13] Además, una API de joystick extendida ya presente en Windows 95 fue documentada por primera vez como DirectInput, [14] mientras que una descripción de cómo implementar el inicio inmediato del procedimiento de instalación de un título de software después de insertar su CD-ROM , una función llamada Reproducción automática, también formaba parte del SDK. [15] La parte "Directa" de la biblioteca recibió ese nombre porque estas rutinas omitían las rutinas centrales existentes de Windows 95 y accedían al hardware de la computadora sólo a través de una capa de abstracción de hardware (HAL). [16] Aunque el equipo lo había llamado "Game SDK" ( kit de desarrollo de software ), el nombre "DirectX" vino de un periodista que se había burlado del esquema de nombres de las distintas bibliotecas. El equipo optó por seguir usando ese esquema de nombres y llamar al proyecto DirectX. [8]
La primera versión de DirectX se lanzó en septiembre de 1995 como SDK de juegos de Windows. Su componente DirectDraw fue el reemplazo de Win32 para las API DCI [17] y WinG para Windows 3.1 . [18] DirectX permitió que todas las versiones de Microsoft Windows, comenzando con Windows 95, incorporaran multimedia de alto rendimiento. Eisler escribió sobre el frenesí por construir DirectX 1 a 5 en su blog. [19]
Para conseguir que más desarrolladores se unieran a DirectX, Microsoft se acercó a John Carmack de id Software y le ofreció portar Doom y Doom 2 de MS-DOS a DirectX, de forma gratuita, conservando id todos los derechos de publicación del juego. Carmack estuvo de acuerdo y Gabe Newell de Microsoft dirigió el proyecto de portabilidad. El primer juego fue lanzado como Doom 95 en agosto de 1996, el primer juego DirectX publicado. Microsoft promocionó mucho el juego y Bill Gates apareció en los anuncios del título. [8]
DirectX 2.0 se convirtió en un componente del propio Windows con los lanzamientos de Windows 95 OSR2 y Windows NT 4.0 a mediados de 1996. Dado que Windows 95 todavía era nuevo y se habían lanzado pocos juegos para él, Microsoft participó en una intensa promoción de DirectX entre los desarrolladores que generalmente desconfiaban de la capacidad de Microsoft para construir una plataforma de juegos en Windows. Alex St. John, el evangelista de DirectX, organizó un elaborado evento en la Conferencia de Desarrolladores de Juegos de Computadora de 1996 que el desarrollador de juegos Jay Barnson describió como un tema romano , que incluía leones reales , togas y algo parecido a un carnaval cubierto. [20] Fue en este evento que Microsoft presentó por primera vez Direct3D y demostró que MechWarrior 2 multijugador se puede jugar a través de Internet.
El equipo de DirectX enfrentó la difícil tarea de probar cada versión de DirectX con una variedad de hardware y software . Con cada versión beta y final se probaron una variedad de diferentes tarjetas gráficas, tarjetas de audio, placas base, CPU, dispositivos de entrada, juegos y otras aplicaciones multimedia. El equipo de DirectX también creó y distribuyó pruebas que permitieron a la industria del hardware confirmar que los nuevos diseños de hardware y versiones de controladores serían compatibles con DirectX.
Antes de DirectX, Microsoft había agregado OpenGL a su plataforma Windows NT . [21] OpenGL había sido diseñado como una interfaz de software multiplataforma independiente del sistema de ventanas para hardware de gráficos por Silicon Graphics, Inc. para llevar la programación de gráficos 3D a la corriente principal de la programación de aplicaciones. Además, también podía usarse para gráficos e imágenes 2D y estaba controlado por la Junta de Revisión Arquitectónica (ARB), que incluía a Microsoft. [22] [23] Direct3D estaba destinado a ser una alternativa controlada por Microsoft a OpenGL, centrada inicialmente en el uso de juegos. A medida que los juegos 3D crecieron, los desarrolladores de juegos descubrieron que OpenGL podía usarse de manera efectiva para el desarrollo de juegos. [24] En ese momento comenzó una "batalla" entre los partidarios del OpenGL multiplataforma y el Direct3D exclusivo para Windows. [25] Por cierto, OpenGL fue apoyado en Microsoft por el equipo DirectX. Si un desarrollador optaba por utilizar la API de gráficos 3D de OpenGL en juegos de computadora , las otras API de DirectX además de Direct3D a menudo se combinaban con OpenGL porque OpenGL no incluye todas las funciones de DirectX (como soporte de sonido o joystick).
En una versión específica de la consola, DirectX se utilizó como base para la API de las consolas Xbox , Xbox 360 y Xbox One de Microsoft . La API fue desarrollada conjuntamente entre Microsoft y Nvidia , que desarrolló el hardware de gráficos personalizado utilizado por la Xbox original. La API de Xbox era similar a la versión 8.1 de DirectX, pero no se puede actualizar como otras tecnologías de consola. La Xbox tenía el nombre en código DirectXbox, pero se redujo a Xbox por su nombre comercial. [26]
En 2002, Microsoft lanzó DirectX 9 con soporte para el uso de programas de sombreado mucho más largos que antes con la versión 2.0 del sombreador de píxeles y vértices. Microsoft ha seguido actualizando la suite DirectX desde entonces, introduciendo Shader Model 3.0 en DirectX 9.0c, lanzado en agosto de 2004.
En abril de 2005, DirectShow se eliminó de DirectX y se trasladó al SDK de la plataforma Microsoft .
Se ha confirmado que DirectX está presente en Windows Phone 8 de Microsoft . [27]
El trazado de rayos en tiempo real se anunció como DXR en 2018. El mismo año también se agregó soporte para compilar HLSL a SPIR-V en DirectX Shader Compiler. [28]
DirectX se compone de varias API:
Microsoft ha dejado de utilizar los siguientes componentes:
La funcionalidad DirectX se proporciona en forma de objetos e interfaces de estilo COM . Además, aunque no son componentes de DirectX en sí, los objetos administrados se han creado sobre algunas partes de DirectX, como Managed Direct3D [31] y la biblioteca de gráficos XNA [32] sobre Direct3D 9.
Microsoft distribuye una herramienta de depuración para DirectX llamada "PIX". [33]
DirectX 9 se lanzó en 2002 para Windows 98, Me, 2000 y XP, y actualmente [ ¿cuándo? ] es compatible con todas las versiones posteriores. Microsoft continúa realizando cambios en DirectX 9.0c, lo que provoca que se elimine el soporte para algunos de los sistemas operativos antes mencionados. A partir de enero de 2007, se requiere Windows 2000 o XP. Esto también introdujo Shader Model 2.0 que contiene Pixel Shader 2.0 y Vertex Shader 2.0. Windows XP SP2 y posteriores incluyen DirectX 9.0c, [34] pero pueden requerir una instalación redistribuible de tiempo de ejecución de DirectX más reciente para aplicaciones DirectX 9.0c compiladas con el SDK de DirectX 9.0 de febrero de 2005 o posterior.
DirectX 10, una actualización importante de la API de DirectX, se incluye y sólo está disponible con Windows Vista (lanzado a finales de 2006) y versiones posteriores. Las versiones anteriores de Windows, como Windows XP, no pueden ejecutar aplicaciones exclusivas de DirectX 10. Más bien, los programas que se ejecutan en un sistema Windows XP con hardware DirectX 10 simplemente recurren a la ruta del código DirectX 9.0c, la última disponible para computadoras con Windows XP. [35]
Los cambios para DirectX 10 fueron extensos. Muchas partes anteriores de DirectX API quedaron obsoletas en el último SDK de DirectX y se conservan solo por compatibilidad: DirectInput quedó obsoleto en favor de XInput , DirectSound quedó obsoleto en favor del sistema de herramientas de creación de audio multiplataforma (XACT) y, además, perdió soporte para audio acelerado por hardware, ya que la pila de audio de Vista reproduce el sonido en el software de la CPU. DirectPlay DPLAY.DLL también se eliminó y se reemplazó con dplayx.dll; Los juegos que dependen de esta DLL deben duplicarla y cambiarle el nombre a dplay.dll.
Para lograr compatibilidad con versiones anteriores, DirectX en Windows Vista contiene varias versiones de Direct3D: [36]
Direct3D 10.1 es una actualización incremental de Direct3D 10.0 que se incluía con Windows Vista Service Pack 1 y lo requería, que se lanzó en febrero de 2008. [37] Esta versión establece principalmente algunos estándares más de calidad de imagen para los proveedores de gráficos, al tiempo que brinda a los desarrolladores más control sobre la calidad de la imagen. [38] También agrega soporte para matrices de mapas de cubos, modos de fusión separados por MRT, exportación de máscara de cobertura desde un sombreador de píxeles, capacidad de ejecutar sombreador de píxeles por muestra, acceso a buffers de profundidad de múltiples muestras [39] y requiere que el video La tarjeta admite Shader Model 4.1 o superior y operaciones de punto flotante de 32 bits. Direct3D 10.1 todavía es totalmente compatible con el hardware Direct3D 10, pero para utilizar todas las funciones nuevas, se requiere hardware actualizado. [40]
Microsoft presentó DirectX 11 en el evento Gamefest 08 en Seattle. La actualización final de la plataforma se lanzó para Windows Vista el 27 de octubre de 2009, una semana después del lanzamiento inicial de Windows 7 , que se lanzó con Direct3D 11 como estándar base.
Principales funciones programadas que incluyen compatibilidad con GPGPU ( DirectCompute ) y Direct3D 11 con compatibilidad con teselación [41] [42] y compatibilidad mejorada con subprocesos múltiples para ayudar a los desarrolladores de videojuegos a desarrollar juegos que utilicen mejor los procesadores multinúcleo . [43] Partes de la nueva API, como el manejo de recursos multiproceso, pueden ser compatibles con hardware de clase Direct3D 9/10/10.1. La teselación de hardware y Shader Model 5.0 requieren hardware compatible con Direct3D 11. [44] Desde entonces, Microsoft ha lanzado la vista previa técnica de Direct3D 11. [45] Direct3D 11 es un superconjunto estricto de Direct3D 10.1: todas las funciones de hardware y API de la versión 10.1 se conservan y se agregan nuevas funciones solo cuando es necesario para exponer nuevas funciones. Esto ayuda a mantener la compatibilidad con versiones anteriores de DirectX.
Se lanzaron cuatro actualizaciones para DirectX 11:
DirectX 12 fue anunciado por Microsoft en GDC el 20 de marzo de 2014 y se lanzó oficialmente junto con Windows 10 el 29 de julio de 2015.
La característica principal destacada de la nueva versión de DirectX fue la introducción de API de programación avanzadas de bajo nivel para Direct3D 12 que pueden reducir la sobrecarga del controlador. Los desarrolladores ahora pueden implementar sus propias listas de comandos y buffers en la GPU, lo que permite una utilización más eficiente de los recursos a través de la computación paralela . El desarrollador principal, Max McMullen, afirmó que el objetivo principal de Direct3D 12 es lograr "eficiencia a nivel de consola en teléfonos, tabletas y PC". [55] El lanzamiento de Direct3D 12 viene junto con otras iniciativas para API de gráficos de bajo costo, incluido Mantle de AMD para tarjetas gráficas AMD, Metal de Apple para iOS y macOS y Vulkan multiplataforma de Khronos Group .
La compatibilidad con múltiples adaptadores se incluirá en DirectX 12, lo que permitirá a los desarrolladores utilizar varias GPU en un sistema simultáneamente; La compatibilidad con múltiples GPU anteriormente dependía de implementaciones de proveedores como AMD CrossFireX o NVIDIA SLI . [56] [57] [58] [59]
DirectX 12 es compatible con todas las GPU Fermi y posteriores de Nvidia, en los chips basados en GCN de AMD y en las unidades gráficas de procesadores Intel Haswell y posteriores. [60]
En SIGGRAPH 2014, Intel lanzó una demostración que muestra un campo de asteroides generado por computadora , en el que se afirmaba que DirectX 12 era entre un 50% y un 70% más eficiente que DirectX 11 en velocidad de renderizado y consumo de energía de la CPU. [61] [62]
Ashes of the Singularity fue el primer juego disponible públicamente que utilizó DirectX 12. Las pruebas realizadas por Ars Technica en agosto de 2015 revelaron ligeras regresiones de rendimiento en el modo DirectX 12 sobre DirectX 11 para la Nvidia GeForce 980 Ti , mientras que la AMD Radeon R9 290x logró mejoras de rendimiento consistentes. de hasta un 70% con DirectX 12 y, en algunos escenarios, AMD superó a la más potente Nvidia con DirectX 12. Las discrepancias de rendimiento pueden deberse a optimizaciones deficientes del controlador Nvidia para DirectX 12 o incluso a limitaciones de hardware de la tarjeta optimizada para DirectX 12. Ejecución en serie de DirectX 11; sin embargo, la causa exacta aún no está clara. [63]
Las mejoras de rendimiento de DirectX 12 en Xbox no son tan sustanciales como en PC. [64]
En marzo de 2018, se anunció DirectX Raytracing (DXR), capaz de realizar trazado de rayos en tiempo real en hardware compatible, [65] y se agregó la API DXR en la actualización de Windows 10 de octubre de 2018.
En 2019 Microsoft anunció la llegada de DirectX 12 a Windows 7 pero sólo como complemento para determinados títulos de juegos. [66]
Microsoft reveló DirectX 12 Ultimate en marzo de 2020. DirectX 12 Ultimate se unificará en una biblioteca común tanto en computadoras con Windows 10 como en Xbox Series X y otras consolas Xbox de novena generación. Entre las nuevas características de Ultimate se incluyen DirectX Raytracing 1.1 , Variable Rate Shading, que brinda a los programadores control sobre el nivel de detalle del sombreado dependiendo de las opciones de diseño, Mesh Shaders y Sampler Feedback. [67] [68]
El número de versión informado por la herramienta DxDiag de Microsoft (versión 4.09.0000.0900 y superior) utiliza el formato x.xx.xxxx.xxxx para los números de versión. Sin embargo, la página MSDN de DirectX y Windows XP afirma que el registro siempre ha estado en el formato x.xx.xx.xxxx. Por lo tanto, cuando la tabla anterior enumera una versión como '4.09.00.0904', la herramienta DxDiag de Microsoft puede tenerla como '4.09.0000.0904'. [93]
Varias versiones de Windows han incluido y admitido varias versiones de DirectX, lo que permite que las versiones más nuevas del sistema operativo continúen ejecutando aplicaciones diseñadas para versiones anteriores de DirectX hasta que esas versiones puedan eliminarse gradualmente en favor de API, controladores y hardware más nuevos. [94]
Las API como Direct3D y DirectSound necesitan interactuar con el hardware y lo hacen a través de un controlador de dispositivo . Los fabricantes de hardware deben escribir estos controladores para la interfaz del controlador de dispositivo (o DDI) de una versión particular de DirectX y probar cada pieza individual de hardware para que sean compatibles con DirectX. Algunos dispositivos de hardware sólo tienen controladores compatibles con DirectX (en otras palabras, es necesario instalar DirectX para poder utilizar ese hardware). Las primeras versiones de DirectX incluían una biblioteca actualizada de todos los controladores compatibles con DirectX disponibles actualmente. Sin embargo, esta práctica se detuvo en favor del sistema de actualización de controladores Windows Update basado en la web , que permitía a los usuarios descargar sólo los controladores relevantes para su hardware, en lugar de toda la biblioteca.
Antes de DirectX 10, el tiempo de ejecución de DirectX se diseñó para ser compatible con controladores anteriores, lo que significa que las versiones más nuevas de las API se diseñaron para interoperar con controladores más antiguos escritos en el DDI de una versión anterior. El programador de aplicaciones tenía que consultar las capacidades de hardware disponibles utilizando un complejo sistema de "bits de tapa", cada uno vinculado a una característica de hardware particular. Direct3D 7 y versiones anteriores funcionarían en cualquier versión de DDI, Direct3D 8 requiere un nivel de DDI mínimo de 6 y Direct3D 9 requiere un nivel de DDI mínimo de 7. [95] Sin embargo, el tiempo de ejecución de Direct3D 10 en Windows Vista no puede ejecutarse en hardware más antiguo. controladores debido al DDI significativamente actualizado, que requiere un conjunto de funciones unificado y abandona el uso de "bits de tapa".
Direct3D 10.1 presenta los " niveles de funciones " 10_0 y 10_1, que permiten el uso únicamente de las funciones de hardware definidas en la versión especificada de la API de Direct3D. Direct3D 11 agrega el nivel 11_0 y "10 Nivel 9", un subconjunto de la API de Direct3D 10 diseñado para ejecutarse en hardware Direct3D 9, que tiene tres niveles de funciones (9_1, 9_2 y 9_3) agrupados por capacidades comunes de "bajo", "medio". " y tarjetas de video de "alta gama"; el tiempo de ejecución utiliza directamente Direct3D 9 DDI proporcionado en todos los controladores WDDM. El nivel de característica 11_1 se introdujo con Direct3D 11.1 .
En 2002, Microsoft lanzó una versión de DirectX compatible con Microsoft .NET Framework , lo que permitió a los programadores aprovechar la funcionalidad DirectX desde aplicaciones .NET utilizando lenguajes compatibles como C++ administrado o el uso del lenguaje de programación C# . Esta API se conocía como " DirectX administrado " (o MDX para abreviar) y afirmaba funcionar al 98% del rendimiento de las API DirectX nativas subyacentes. En diciembre de 2005, febrero de 2006, abril de 2006 y agosto de 2006, Microsoft lanzó sucesivas actualizaciones de esta biblioteca, que culminaron en una versión beta llamada Managed DirectX 2.0. Si bien Managed DirectX 2.0 consolidó la funcionalidad que anteriormente se había distribuido en múltiples ensamblados en un solo ensamblado, simplificando así las dependencias para los desarrolladores de software, el desarrollo de esta versión se suspendió posteriormente y ya no es compatible. La biblioteca Managed DirectX 2.0 expiró el 5 de octubre de 2006.
Durante la GDC 2006, Microsoft presentó XNA Framework , una nueva versión administrada de DirectX (similar pero no idéntica a Managed DirectX) cuyo objetivo es ayudar al desarrollo de juegos al facilitar la integración de DirectX, HLSL y otras herramientas en un solo paquete. También admite la ejecución de código administrado en Xbox 360. XNA Game Studio Express RTM estuvo disponible el 11 de diciembre de 2006 como descarga gratuita para Windows XP. A diferencia del tiempo de ejecución de DirectX, Managed DirectX , XNA Framework o las API de Xbox 360 (XInput, XACT, etc.) no se incluyen como parte de Windows. Se espera que los desarrolladores redistribuyan los componentes del tiempo de ejecución junto con sus juegos o aplicaciones.
Ningún producto de Microsoft, incluidas las últimas versiones de XNA, proporciona compatibilidad con DirectX 10 para .NET Framework.
El otro enfoque para DirectX en lenguajes administrados es utilizar bibliotecas de terceros como:
Existen alternativas a la familia DirectX de API , siendo OpenGL , su sucesor Vulkan , Metal y Mantle los que tienen la mayor cantidad de características comparables a Direct3D . Ejemplos de otras API incluyen SDL , Allegro , OpenMAX , OpenML, OpenAL , OpenCL , FMOD , SFML , etc. Muchas de estas bibliotecas son multiplataforma o tienen bases de código abiertas. También existen implementaciones alternativas que tienen como objetivo proporcionar la misma API, como la de Wine . Además, los desarrolladores de ReactOS están intentando reimplementar DirectX bajo el nombre "ReactX".
Windows necesita soporte;
... – Cambio de página – Sincronización vertical en blanco – Mezcla de sonido ajustada – Sincronización estricta de eventos de sonido y vídeo – Rendimiento de blting sin procesar – Capacidad de configurar el modo gráfico...
El software Lion King, por ejemplo, es una aplicación WinToon.
... Al igual que WinToon, este ejemplo utiliza WinG para dibujar en el DIB.
Las DMO han sido reemplazadas por Media Foundation Transforms (MFT).