A la hora de crear un entorno tridimensional, los programadores deben decidir entre DirectX u OpenGL. En esta breve reseña detallaremos los aspectos más importantes de cada plataforma, su historia y haremos una comparación punto por punto, para ver cuál es la más conveniente para implementar. Seguramente habrán oído muchas veces estas dos palabras. Si bien una de las dos –OpenGL– ha perdido terreno en los últimos años (por lo menos en lo que se refiere a videojuegos), continúa presentándose como la competencia más dura de DirectX. La API de Microsoft se convirtió en la preferida de los programadores a la hora de diseñar complejos entornos gráficos interactivos en tres dimensiones y utilizar los conocidos shaders.

Pero, un momento... ¿qué es una API? Su sigla proviene de Application Programming Interface, lo que en castellano sería Interfaz de Programación de Aplicaciones. Se trata de un conjunto de técnicas, funciones y métodos utilizados para establecer una comunicación entre los diferentes niveles o capas de un software. Una API permite una abstracción en la programación entre las capas inferiores (bajo nivel) y las superiores (alto nivel), de forma tal de poder interactuar casi directamente con el hardware a través de funciones nativas del sistema operativo o mediante una aplicación específicamente diseñada con ese propósito.

Tanto DirectX como OpenGL son APIs que se valen de librerías para cumplir con su objetivo. Los diseñadores de software escogen la que mejor se adapte a los requerimientos del producto y comienzan a programar en base a ella. La elección correcta depende de varios factores, los cuales intentaremos detallar en las próximas líneas. Antes de ello, conozcamos un poco más sobre el pasado y el presente de estas dos APIs.

DirectX y OpenGL: las dos API más importantes del mercado gráfico
La sección de DirectX dentro de la página de Microsoft es el lugar más indicado para conseguir las librerias
DirectX y OpenGL: las dos API más importantes del mercado gráfico
OpenGL es, junto con DirectX, una de las dos API que más se utilizan para el desarrollo de escenas 3D
DirectX y OpenGL: las dos API más importantes del mercado gráfico
DirectX es la más utilizada en la programación de videojuegos

DirectX: historia y evolución

El conjunto de librerías de Microsoft nació allá por 1995, cuando en una importante exposición se presentó lo que por ese entonces se conocía como GamesSDK v1. Al ser una API encargada de varios aspectos (gráficos, sonido, música, comunicaciones, etc.), estaba estructurada en varios componentes: DDraw, DSound, DPlay y DInput. Cada uno de estos controlaba un aspecto en particular; en el caso de los gráficos 2D, DDraw era la responsable. Estas herramientas de desarrollo estuvieron disponibles en octubre de ese año, un par de meses después de que Windows 95 saliera a la venta.

El próximo paso fue incorporar Direct3D –para gráficos tridimensionales– al conjunto, algo que se lograría recién en la tercera versión (DX 3.0). Los sucesores no tardaron en aparecer, ya que DirectX 4 llegó en diciembre del 96 y DirectX 5 en junio del año siguiente. En realidad, la cuarta edición fue una modificación de la tercera que venía preparada para ser compatible con el primer gran chip que llevaría la bandera de la aceleración 3D: el Voodoo Graphics.

Al ser compatible hacia atrás, cada nueva versión de DirectX podía ejecutar, también, software preparado para las versiones previas. Fue por eso que el crecimiento en potencia y posibilidades de esta API fue muy marcado en los años siguientes. El resto de la historia ya lo conocemos: DirectX 7 nos trajo el Transform & Lighting; DX 8 amplió los horizontes de los programadores con la inclusión de los shaders; DX 9 hizo mucho más extenso dicho horizonte, y lo más reciente –DX 10– está, por ahora, en sus primeras etapas de implementación y con un futuro enorme.

DirectX y OpenGL: las dos API más importantes del mercado gráfico
La herramienta de diagnóstico de DirectX nos permite conocer más en detalle las librerias de esta API
DirectX y OpenGL: las dos API más importantes del mercado gráfico
La herramienta de diseño 3DS Max saca provecho de las posibilidades de DirectX
DirectX y OpenGL: las dos API más importantes del mercado gráfico
Counter-Strike: Source, corriendo en el modo OpenGL

OpenGL: historia y evolución

Si se le pregunta a un gamer, automáticamente relaciona OpenGL con Quake. Es que John Carmack, el mentor de esta saga, fue –y es– una de las personas que mayor apoyo brindó a esta API, programando todos los títulos de su compañía Id Software utilizándola como base.

La responsable de Open Graphics Library –su denominación completa– es Silicon Graphics Incorporated (SGI), la misma que en la década de los 90 fuera la propietaria de la API IrisGL, la antecesora de OpenGL. La diferencia radical entre ambas es que la segunda no estaba ligada a ninguna licencia de uso y modificación. Por eso, en 1992, SGI comenzaría la creación de OpenGL, con el objetivo de que fuera abierta a la comunidad de programadores. Gracias a esta característica, junto a su escalabilidad y condición multiplataforma, OpenGL pudo mantener una especificación de uso actualizada en los años subsiguientes.

A partir de la versión 2.0, concebida por 3DLabs, la API tomó un nuevo rumbo. Además de una gran cantidad de modificaciones internas, se adoptó el lenguaje GLSL para el uso de los antes mencionados shaders. Esto significa que se reemplazaron las funciones fijas por unas mucho más versátiles, posibilitando los efectos gráficos que vemos, por ejemplo, en Quake 4, Doom 3 y, el más reciente, Prey.

OpenGL 2.1 apareció en agosto de 2006, expandiendo ligeramente las funcionalidades de su antecesor y actualizando diversos aspectos, principalmente el lenguaje GLSL.

DirectX y OpenGL: las dos API más importantes del mercado gráfico
El lenguaje GLSL es el utilizado para implementar los shaders en OpenGL
DirectX y OpenGL: las dos API más importantes del mercado gráfico
El manejo de luces es uno de los grandes puntos fuertes de esta API
DirectX y OpenGL: las dos API más importantes del mercado gráfico
Para las películas de animación, OpenGL es la plataforma preferida

Comparación punto por punto

Como decíamos al comienzo, la elección de una u otra API depende de varios factores, como la portabilidad, facilidad de uso, el rendimiento, los usuarios a los cuales está destinada la aplicación y la extensibilidad, entre otros. En este caso, vamos a comparar las librerías de DirectX dedicadas al procesamiento de gráficos (Direct3D) con OpenGL.

Portabilidad

Si nos guiamos por la portabilidad, DirectX difícilmente supere a OpenGL, dada su gran dependencia con Windows y sus componentes. Fuera de este sistema operativo, solamente se encuentra implementada en la consola Xbox. En cambio, OpenGL es compatible no sólo con Windows, sino que se utiliza en sistemas Unix, Linux, Mac y hasta en consolas como PlayStation 3 y Nintendo Wii. En resumen: exceptuando Windows y Xbox, todos los sistemas que proveen soporte para aceleración 3D han escogido a OpenGL para esa tarea. Por algo será, ¿no?

Hablando del sistema operativo de Microsoft, este incorpora un driver de la API de SGI, pero sin funcionalidad de aceleración por hardware o agregado de extensiones. Algo curiosa es la manera de Vista para manejar OpenGL: la mínima integración de esta API –en su versión 1.4– hace que, para que funcione correctamente, se traduzcan las instrucciones de esta a DirectX, aunque con algunas limitaciones. Claro que, utilizando el driver de video provisto por el fabricante del chip, este proceso no es requerido.

Facilidad de uso

En sus comienzos, varios programadores se agarraban la cabeza cuando tenían que trabajar con DirectX, debido a lo complejo de su utilización. Con el correr de las versiones, la balanza se fue equilibrando y, hoy en día, a pesar de que sigue un paradigma completamente distinto a OpenGL (inspirado en el modelo COM), ya no es tan complicado de usar. Lenguajes como Visual Basic o Visual Basic Script son un ejemplo de los que trabajan con este modelo.

Por el lado de OpenGL, al estar basado en el lenguaje de programación C, es bastante más comprensible y puede ser adaptado a cualquier otro lenguaje sin demasiadas complicaciones.

La diferencia principal es que DirectX es una API cuya plataforma se basa en lo que el hardware es capaz de realizar, mientras que OpenGL es un tanto más independiente. A su vez, de su implementación depende la administración de los recursos, algo que en DirectX corre por cuenta de la aplicación. Este detalle permite un desarrollo de software más sencillo, pero es más propenso a sufrir los tan temidos errores de programación (mejor conocidos como bugs).

Performance

El rendimiento del software creado por medio de una u otra API sigue siendo un parámetro muy debatido. Dado que DirectX implementa los drivers a nivel del núcleo en el sistema operativo y de nivel usuario con un runtime provisto por Microsoft, existe la necesidad de hacer un cambio entre un modo y otro en las llamadas a la API. Como consecuencia, la CPU utiliza valiosos microsegundos en completar la operación, quedando inutilizada para otra tarea.

En cambio, OpenGL, a través de una técnica conocida como marshalling, evita ese inconveniente y obtiene una valiosa ventaja en la performance final. Recién a partir de Windows Vista, DirectX podrá sortear esta deficiencia mediante este mismo procedimiento, ya que los drivers estarán funcionando más a nivel de usuario que del kernel del sistema operativo.

Extensibilidad

OpenGL incluye una propiedad que le posibilita extender sus capacidades a través de un driver, añadiendo nuevas funcionalidades. Pero esto puede conducir a generar una gran cantidad de variantes de la API, provocando cierta confusión entre los programadores.

Por el lado de DirectX, Microsoft se encarga de mejorarla pero con menos regularidad. No obstante, desde hace un par de años las actualizaciones aparecen cada vez más seguido. Depende de la empresa conducida por Bill Gates la incorporación de características en la API que aprovechen las novedosas funciones de las GPU más modernas.

Usuarios

La ventaja en el ámbito profesional está del lado de OpenGL. Incluso la propia Microsoft admite la superioridad de esta en estos campos. De hecho, muchas de las placas profesionales sólo soportan esta API, lo que es un decir. Los films animados por computadora son desarrollados en base a OpenGL, dado su carácter de plataforma de propósitos generales.

La situación cambia cuando lo miramos desde el punto de vista del mercado de los videojuegos. DirectX no requiere de la implementación completa que demanda OpenGL para funcionar (incluyendo funciones no soportadas por el hardware), por lo que se torna más sencillo de utilizar. Para hacerlo simple, podemos decir que Direct3D es un acceso directo de bajo nivel a los registros disponibles. Además, posee un mecanismo que determina si una funcionalidad está o no presente en el dispositivo, evitando la implementación obligatoria y dejando a elección del diseñador del videojuego su incorporación en el software. Por este detalle importante es que vemos muchos más juegos de ordenador programados en DirectX que en OpenGL.

DirectX y OpenGL: las dos API más importantes del mercado gráfico
La dependencia de DirectX con Windows es uno de los puntos más flacos de esta API
DirectX y OpenGL: las dos API más importantes del mercado gráfico
OpenGL también es aplicado en el mundo de las consolas, como es el caso del Nintendo Wii
DirectX y OpenGL: las dos API más importantes del mercado gráfico
John Carmack, un ícono de OpenGL

Conclusión

Más allá de todo lo que hemos relatado, hay que aclarar que las diferencias son mucho más pronunciadas, y que sólo pueden percibirse por completo habiendo tratado con una y con otra desde el lugar de programador. Como simples usuarios, no queda otra alternativa que esperar una buena optimización por parte de las compañías responsables, de forma tal que el producto software final aproveche lo mejor posible el hardware instalado en nuestro ordenador.

Estas épocas lo ubican a DirectX en la delantera en el sector que concentra la mayor cantidad de público: el mercado de los videojuegos. John Carmack es uno de los pocos que aún apoya la utilización de OpenGL en los juegos de ordenador, pero no hay que olvidarse de que su competencia no es más ni menos que la mismísima Microsoft.

El futuro nos depara cosas prometedoras. DirectX 10, la versión más sofisticada y poderosa de esta API, es una de ellas. En tanto que OpenGL continuará evolucionando poco a poco gracias a su extensibilidad, manteniéndose a la misma altura –en cuanto a capacidades– que su rival.

DirectX y OpenGL: las dos API más importantes del mercado gráfico
Con DirectX 10 se pueden lograr escenas tan realistas como éstas del título Crysis. Adivinen cuál es real y cuál pertenece al videojuego.

Más información Más información

DirectX y OpenGL: las dos API más importantes del mercado gráfico
DirectX y OpenGL: las dos API más importantes del mercado gráfico