viernes, 16 de octubre de 2009

Breve historia de las APIs gráficas

Aunque en un principio era habitual que en una aplicación accediera directamente al hardware gráfico, según aumentó su complejidad se comenzaron a utilizar APIs que cumplieran con un estándar para abstraer al programador de la tarjeta gráfica. De esta manera se evitaba el esfuerzo que suponía escribir código específico para cada modelo de hardware gráfico.

El desarrollo del primer estándar comenzó en 1972 cuando el ACM SIGGRAPH (Association for Computing Machinery's Special Interest Group on Computer Graphics and Interactive Techniques) formó el grupo Graphics Standards Planning Committee. Del trabajo de este grupo surgió "Core" en 1977, que se trata del primer estándar gráfico que sirvió de base a las que serían las primeras APIs. La primera de ellas fue GKS (Graphic Kernel System) que se estandarizó al principio de los 80 y es el conjunto de la propuesta del instituto DIN con algunas modificaciones tomadas de "Core". Aunque "Core" tenía en cuante los gráficos en 3D, GKS solo contemplaba gráficos vectoriales en 2D. Para superar esta limitación se propuso utilizar un estándar diferente llamado PHIGS (y su posterior ampliación PHIGS+) o utilizar GKS-3D, que es un superset que permite especificar y generar gráficos en 3D. Finalmente ambos coexistieron.

Por otra parte, en esta época (principios de los 90), Silicon Graphics era la empresa lider en la informática gráfica y había creado su propio API propietario para sus productos. Este se llamaba IRIS GL, que se consideraba muy superior a los estándares mencionados anteriormente, aunque solo disponible para los clientes de Silicon Graphics. La llegada y crecimiento de la competencia, que utilizaba PHIGS y extensiones de esta API, hizo que la compañía se replanteara su estrategia y surgió OpenGL como un estándar gráfico independiente del resto del sistema operativo, sistema de ventanas, etc... De esta manera cualquier fabricante podia escribir un driver y permitir al desarrollador utilizar OpenGL. Finalmente en 1992 se constituyó el ARB (architectural review board), un grupo formado por varias empresas que mantiene y expande la especificación. De esta manera, si uno o varios fabricantes añaden una nueva funcionalidad al hardware, puede proponer una extensión a la API que permita hacer uso de esta mejora.




Las tarjetas gráficas con GPU comienzan a llegar a los ordenadores domésticos en la última mitad de los 90, principalmente de la mano de 3dfx. Estas tarjetas tienen que tener un precio moderado por lo que no pueden tener toda la funcionalidad de una estación de silicon graphics utilizando OpenGL. La estrategia que siguieron es la de utilizar un API con una cantidad limitadad de llamadas, totalmente implementada en el hardware. A este API le llamaron Glide y durante varios años fue el que dominó este sector del mercado. Un hito especialmente importante fue MiniGL, que consistía en un driver que implementaba el subconjunto de llamada de OpenGL que utilizaba la versión de quake con soporte para esta API. Más adelante salieron más versiones de este driver que incluían más y más llamadas. De esta manera OpenGL apuntaba como una posible API para las tarjetas gráficas de consumo y Glide se fue abandonando en favor de esta según la competencia de 3dfx (principalmente ATI y nVidia) mejoraba sus productos y los superaba en rendimiento y en ventas.

Por esta época, Microsoft que formaba parte de los fundadores del ARB de OpenGL decide impulsar su propia API, llamada Direct3D, que competiría con Glide (en un primer momento) y OpenGL. Las primeras versiones fueron muy impopulares entre los programadores, que preferían utilizar OpenGL y aunque hubo un primer intento por unificar OpenGL y Direct3D en un único API, este fracasó y Microsoft continuó evolucionando su API propietaria.

Desde el final de los 90, OpenGL es la API mayoritaria excepto en el campo de los juegos para plataformas Windows donde coexiste con Direct3D y para Xbox, donde tan solo se utiliza Direct3D. Ambas APIs han evolucionado en estos años de distintas maneras.

Tal y como hemos visto, las decisiones acerca de OpenGL los toma un comité en el que están implicadas varias empresas. Una empresa puede proponer una extensión a la API y utilizarla. Más adelante el ARB si lo considera oportuno la aceptará, modificandola o incluso mezclandola con otras extensiones de otros fabricantes que tengan una funcionalidad parecida. Con el paso del tiempo, se han publicado versiones nuevas de OpenGL que incluyen al nucleo de la API lo que en su momento eran extensiones. Estas modificaciones pueden ser desde nuevos tipos de texturas hasta llamadas que permiten usar la memoria gráfica para almacenar vertices. Una de las modificaciones más importantes fue la inclusión de GLSL en la versión 2.0, en Septiembre del 2004. Esto consiste en un lenguaje con el que se pueden programar las GPUs que por la época comienzan a incluir este tipo de funcionalidades. La última versión es la 3.2 que fue publicada en Agosto del 2009. También existen versiones reducidas del estándar bajo el nombre OpenGL ES. Las versiones de OpenGL ES son subsets del conjunto completo de llamadas de la API completa y están pensadas para dispositivos móviles o con recursos limitados.

Por su parte Microsoft ha públicado 6 versiones diferentes de Direct3D hasta la época. Durante este tiempo, además de incluir funcionalidades según el hardware evolucionaba, han cambiado partes de la API. Por ejemplo se eliminaron los criticados execution buffer de las primeras versiones, se incluyó la funcionalidad otra API llamada DirectDraw en Direct3D y se hicieron más cambios para hacerlo más sencillo para los desarrolladores, pasando a ser una buena API en la que se han corregido los errores iniciales. La última versión se lanzó junto con el sistema operativo Windows Vista, mientras que la siguientes (Direct3D 11) ha sido anunciada como parte de Windows 7, de próxima publicación.

Existen y han existido más APIs gráficas, pero consideramos que estas son las más importantes por cuota de mercado o por importancia histórica y especialmente OpenGL y Direct3D serán las que más se usen en el futuro cercano. El ámbito de cada una en los próximos años parece estar claro, mientras que Direct3D se utiliza en la mayoría de los juegos para Windows y en todos los de la consola Xbox360, OpenGL está presente en algunos juegos para PC, en gran cantidad de software profesional y en las demás consolas, como Playstation 3, psp, Wii y Nintendo DS, por lo que parece claro que estos 2 APIs van a seguir cubriendo la mayor parte del mercado.

Patxi Astiz

No hay comentarios:

Publicar un comentario