Direct3D y OpenGL son interfaces para la programación de aplicaciones (API acrónimo del inglés Application Programing Interfaces) competitivas que pueden ser usadas en aplicaciones para representar gráficos por computadora (o también llamado computación gráfica) en 2D y 3D, tomando como ventaja de la aceleración por hardware cuando se dispone de esta. Las unidades de procesamiento gráfico (GPU acrónimo del inglés Graphics Processing Unit) modernas, pueden implementar una versión particular de una o ambas de estas interfaces.

Disponibilidad Direct3D está desarrollada con el objetivo de ser utilizada sobre plataformas de Microsoft Windows. OpenGL, por su parte, es una API estándar de uso libre, cuyas implementaciones existen para una amplia variedad de plataformas. Plataforma de Apoyo Sistema Integrado que lo Soporta Licencia OpenGL Distintas plataformas Distintas plataformas a través de OpenGL ES Libre (algunas características patentadas) Direct3D Windows Windows CE a través de Direct3D Mobile Privativa

Para más detalle, las dos APIs de computación gráfica pueden resumirse como: Direct3D: es una API privativa (o puede ser llamada también de forma errónea propietaria por una traducción textual del término en inglés) que proporciona funciones para representar gráficos en tres dimensiones, y utiliza la aceleración de hardware si esta se encuentra disponible en la tarjeta gráfica. Fue diseñado por Microsoft Corporation para su uso en la plataforma Windows. También puede ser utilizado en otros sistemas operativos a través de un software especial, como el Wine, aunque el subconjunto de funciones que ofrece no es tan completa como la implementación de original. OpenGL: es una API estándar de uso libre (también llamado estándar abierto) que ofrece una serie de funciones para representar gráficos en 2D y 3D, y está disponible en los sistemas operativos más modernos, pero no limitado solo a Windows, Mac OS X y Linux.

Tenga en cuenta que muchas extensiones de OpenGL y algunos métodos esenciales, aunque está documentados, se encuentran en realidad patentados, lo que impone serios problemas legales para su implementación (ver problemas con Mesa idr: OpenGL 3 and Mesa: OpenGL 3 and Mesa X.Org Wiki - Events/XDC2009/Notes, Retrieved 28 October 2011.).

OpenGL y Direct3D están los dos implementados sobre el controlador de pantalla. A continuación se comparan los dos APIs, estructurado el análisis en torno a diversas consideraciones en su mayoría relacionados con el desarrollo de juegos.

Portatibilidad

Direct3D esta oficialmente implementado sólo en la familia de sistemas operativos de Microsoft Windows, incluyendo las versiones integradas utilizadas en la familia de videoconsolas Xbox de Microsoft Corporation y Dreamcast de Sega. Varios puertos en su mayoría funcionales de las API de Direct3D son construidos por Wine, un proyecto para lograr APIs de Windows con puerto común en sistemas operativos de tipo Unix-Like, y Cedega, pero esto se ve obstaculizado debido a la interdependencia de DirectX en muchos otros componentes de Windows.

OpenGL tiene implementaciones disponibles en muchas plataformas, incluyendo Microsoft Windows y sistemas Unix como Mac OS X, GNU / Linux. Es un error pensar que las variantes de OpenGL se utilizan en Nintendo y las plataformas de Sony, ya que han desarrollado sus propias bibliotecas. La consola de juegos PlayStation 3 tiene una implementación de OpenGL, pero sigue sin ser utilizado por la mayoría de los desarrolladores debido a problemas de rendimiento. Un subconjunto de OpenGL fue elegido como biblioteca principal de gráficos para Android, BlackBerry, iOS y Symbian en la versión llamada OpenGLES.

El controlador de Microsoft OpenGL ofrece aceleración de hardware en Windows Vista, el soporte fue eliminado de Windows XP, no mucho después de que no pudo salir al mercado el soporte Fahrenheit de bajo nivel para una fusión OpenGL / DirectX a finales de 1990. La aceleración por hardware de OpenGL en Windows está disponible desde la primera vez que son instalados por los usuarios los controladores instalables del cliente (CIC) desarrollados por los fabricantes de GPU.9/ Windows Vista and OpenGL-the Facts, OpenGL Pipeline Newsletter, Volume 003, 20 April 2007. Estos CIC, en casi todos los casos, son incluidos en el paquete de controlador estándar del proveedor de hardware (IHV), por lo que instalar los últimos controladores de gráficos es suficiente para proporcionar compatibilidad con hardware OpenGL.http://www.opengl.org/resources/faq/technical/mswindows.htm#0040

Facilidad de uso

Direct3D La primera versión de Direct3D suscitó críticas generalizadas porque las operaciones más simples, tales como cambios de estado, requerían la creación de objetos llamados "buffers ejecutables". En contraste, la mayoría de los cambios de estado de OpenGL se podían realizar con solo llamar a una función. Por su parte el modelo de Direct3D para esto frustro a muchos programadores. Una queja muy famosa fue realizada probablemente por el alto perfil de desarrollador de juegos John D. Carmack en el archivo.plan en el cual incitó a Microsoft a abandonar Direct3D y unirse a la idea de OpenGL.John Carmack's 12/23/96 Chris Hecker hizo una petición similar en una "Carta Abierta a Microsoft "en el período abril-mayo de 1997 en la revista Game Developer. "An Open Letter to Microsoft" by Chris Hecker April–May 1997 issue of Game Developer Magazine

La Versión 5 (la segunda versión, llamada a reflejar su lanzamiento como parte de DirectX 5) sustituye los "buffers ejecutables" por la nueva API DrawPrimitive, pero todavía era considerado engorroso. En otra "Carta abierta a Microsoft" Chris Hecker se refería a DrawPrimitive como "un clon inmaduro y mal diseñado de OpenGL al que le faltan algunas de las decisiones arquitectónicas que hacen rápido a OpenGL".

A pesar de la controversia, Microsoft siguió evolucionando el API. Una historia detallada de las versiones y las características agregadas se da en las páginas web de Microsoft Direct3D.

Algunos críticos anteriores de Direct3D reconocen que ahora es tan bueno o mejor que OpenGL en términos de capacidades y facilidad de uso. En enero de 2007, John Carmack dijo que "[...] DirectX9 ha alcanzado realmente un buen nivel como API, incluso en la concepción de Direct3D de las cosas, donde sé que tienen una larga historia de gente que piensa que soy antagónico en contra. Microsoft ha hecho un muy, muy buen trabajo de sensatez que evoluciona a cada paso, no está preocupado por no romper la compatibilidad hacia atrás y es una API bastante limpia. Me gusta especialmente el trabajo que estoy haciendo en el 360, y es probablemente la mejor API gráfica en la que he trabajado".CES 2007: John Carmack And Todd Hollenshead Speak

Algunas de las características de diseño de Direct3D se han mantenido sin cambios desde la versión uno, más notablemente su dependencia del COM (acrónimo del inglés: Component Object Model) de Microsoft. Una ventaja de usar COM es que la API se puede utilizar en cualquier lenguaje COM, sobre todo Delphi y Microsoft Visual C++, C# y Visual Basic NET.

OpenGL OpenGL esta específicamente implementado en el lenguaje C, aunque se puede usar en otros lenguajes de programación. Se basa en el concepto de una máquina de estados o autómatas, aunque las versiones más recientes de OpenGL han transformado en mucho más que un sistema basado en objetos. Como toda API, OpenGL no depende de ninguna característica de lenguaje particular, y puede llamarse desde casi cualquier lenguaje de programación con los enlaces apropiados. Estos enlaces existen para Ada, BASIC (BlitzMax (a menudo utilizado para programar juegos), 'PureBasic, Visual Basic), C#, Delphi, Fortran, Haskell, Java, Lisp, Lua, Pascal, Perl, Python y Ruby por nombrar algunos.

Comparación

En general, Direct3D está diseñado para virtualizar interfaces 3D de hardware. Direct3D libera al programador de juegos de acomodar el hardware de gráficos. OpenGL, por otro lado, está diseñado para ser un sistema de representación de aceleración 3D por hardware que puede ser emulado en software. Estos dos APIs están orientadas fundamentalmente bajo dos modos diferentes de pensamiento.

Como tal, existen diferencias funcionales en la forma de trabajo de las dos APIs. Direct3D espera por la aplicación para gestionar los recursos de hardware, OpenGL hace que la implementación se encargue de esto. Este equilibrio para OpenGL disminuye la dificultad en el desarrollo de la API, mientras que al mismo tiempo aumenta la complejidad en la creación de una aplicación (o controlador) que se comporte de manera correcta. Con Direct3D, el programador debe gestionar los recursos de hardware de forma independiente. Sin embargo, la implementación es más sencilla, y los desarrolladores tienen flexibilidad para asignar recursos de la manera más eficiente posible para su aplicación.

Hasta alrededor del 2005, otra diferencia funcional entre estas dos API, era la forma en que manejaron la representación de las texturas. El método de Direct3D (SetRenderTarget ()) es conveniente, mientras que las versiones anteriores de OpenGL requieren la manipulación de buffers de píxel (P-buffers). Esto era complicado y arriesgado: si el código base del programador era diferente del previsto por el fabricante del controlador, el código estaría de nuevo ante un problema en la representación del software, causando una caída de rendimiento considerable.

Aparte de estas pocas diferencias funcionales que, en su mayoría han sido abordados a través de los años, las dos APIs proporcionan casi el mismo nivel de funcionamiento. Los fabricantes de hardware y software en general responden rápidamente a los cambios en DirectX, por ejemplo, el procesador de pixel shader y los requerimientos de shader en DirectX 9 o los procesadores de flujo en DirectX 10, mientras que las nuevas funciones de OpenGL se realizan principalmente por primera vez por los vendedores y después se aplican con carácter retroactivo a los estándares.

Rendimiento Poco después del establecimiento de las dos APIs, Direct3D y OpenGL como librerías gráficas viables (cerca de 1995), Microsoft y SGI (del acrónimo en inglés Silicon Graphics Inc) se dedican a lo que se ha denominado la «Guerra de las API». Gran parte de la discusión giró en torno a cual ofrece un rendimiento superior. Esta pregunta es pertinente debido al alto costo que tenían los aceleradores de gráficos durante este tiempo, lo que significa que el mercado de los consumidores estaba usando renderizadores de software implementados por Microsoft, tanto para Direct3D como para OpenGL.

Debate inicial

DOS es un software empresarial, como AutoCAD y los juegos de DOS tales como Doom, distribuido por la empresa id-Software, originalmente tenían que ser optimizados para funcionar en muchos chipsets gráficos diferentes. Cuando los fabricantes de hardware como 3Dlabs (miembro del OpenGL Architecture Review Board) hicieron aceleradores de gráficos OpenGL compatibles (por ejemplo, el GLint chip ), los desarrolladores como John Carmack de id-Software optimizaron sus productos para OpenGL. En entornos multitarea, como Microsoft Windows en el PC y el sistema X Window (X11) en sistemas tipo Unix-Like llegó a ser un factor dominante, por lo que la relevancia de este hardware se desvaneció.