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 las ú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.
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 un 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 éstos 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 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 para 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.
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 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.
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, éste incorpora un driver de la API de SIG, pero que 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 ésta 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 tenian 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 nucleo 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 que 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 ésta 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 (incluyo 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.
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 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.