MesaFX - Driver OpenGL-

Introducción:

MESA es un proyecto de software iniciado por el programador Brian Paul hace más de 10 años, concretamente en 1993. La intención original del proyecto era desarrollar una librería gráfica con una API similar a la incipiente OpenGL de Silicon Graphics(SGI), que a su vez estaba basada en otra API anterior, IRIS GL, sobre la que Brian Paul ya tenía cierta experiencia. API significa Application Programming Interface, y en general se puede definir como un conjunto de funciones predefinidas que tienen como finalidad el estandarizar las tareas de programación en un determinado ámbito (por ejemplo, el software matemático, las aplicaciones gráficas, etc) o en un sistema operativo concreto (Windows, Linux, etc), así como permitir en la medida de lo posible la reutilización de código (fuente o binario) ya existente.

La primera versión funcional, Mesa 1.0, aparece en 1995 y es compatible con OpenGL 1.0, y al año siguiente aparece Mesa 2.0, que ya es compatible con OpenGL 1.1; cuando hablamos de la compatibilidad de Mesa con cierta versión 1.x de OpenGL, nos referimos a que la librería Mesa es capaz de ejecutar mediante software las llamadas a la API de OpenGL realizadas por una aplicación programada para dicha versión 1.x de OpenGL. Es decir, Mesa no es capaz de acelerar por sí misma mediante hardware las llamadas a la API OpenGL, simplemente define un conjunto de funciones equivalentes a las de OpenGL (una API "clónica", para entendernos) de modo que los gráficos son generados directamente por la librería Mesa. En la práctica, Mesa es una implementación completa de OpenGL, pero por motivos legales es preferible no hacer referencia a ciertos términos como "licencia" de OpenGL, y se dice simplemente que Mesa es una API "compatible" con OpenGL.

Y aquí es donde entra en escena 3dfx: en 1997 surge Mesa 2.2, acompañada de soporte de aceleración por hardware para el chipset Voodoo Graphics a través de la librería Glide, exclusiva de 3dfx. Esto significa que, en caso de poseer una tarjeta Voodoo Graphics, podíamos prescindir del renderizado por software y acelerar ciertas funciones de OpenGL por hardware, ya que en esta versión compatible con 3dfx, algunas de las funciones de Mesa incluyen llamadas a otras funciones de la API Glide, las cuales se ejecutan directamente en el chipset Voodo Graphics. En años posteriores siguen surgiendo nuevas versiones de Mesa, compatibles con los nuevos estándares de OpenGL: Mesa 3.0 compatible con OpenGL 1.2 en 1998, Mesa 4.0 compatible con OpenGL 1.3 en 2001, Mesa 5.0 compatible con OpenGL 1.4 en 2002 y Mesa 6.0 compatible con OpenGL 1.5 en 2003. Lamentablemente, el soporte del hardware 3dfx incluido en Mesa no evoluciona a la misma velocidad, y se estanca en la versión compatible con OpenGL 1.1 ya disponible en 1997, de la misma manera que tampoco los controladores de OpenGL desarrollados por la propia 3dfx superaron ese grado de compatibilidad.

Antes de seguir hablando de Mesa, quizá deberíamos recordar algunas de las limitaciones que afectaban a las primeras tarjetas de 3dfx a la hora de funcionar en el entorno de Windows. Una de las primeras implementaciones de OpenGL bajo el sistema operativo Windows fue la librería Opengl.dll de Silicon Graphics, que funcionaba enteramente mediante software, al igual que Mesa. Ambas implementaciones compartían el inconveniente de que no eran capaces por sí mismas de aprovechar las capacidades de aceleración por hardware de los dispositivos gráficos compatibles con OpenGL (es decir, las conocidas aceleradoras gráficas), salvo en el caso ya citado de Mesa y 3dfx. La librería de SGI es una implementación muy potente, que hace uso de las instrucciones MMX y en algunos casos daba resultados aceptables, pero de ninguna manera podía compararse en rendimiento a una implementación basada en hardware. Para resolver este problema, Microsoft desarrolló un modelo de controlador denominado OpenGL ICD, es decir, OpenGL Installable Client Driver, basado en una librería OpenGL32.dll capaz de desviar al controlador de la aceleradora gráfica las llamadas a aquellas funciones de la API que dicha aceleradora soporte por hardware. Esto permite a cualquier fabricante desarrollar un controlador de OpenGL con la seguridad de que funcionará sin problemas en Windows, y que cualquier aplicación OpenGL aprovechará las capacidades de su producto, siempre que éste sea compatible con las especificaciones de Microsoft.

Pero la principal limitación de las primeras Voodoo consistía en que eran tarjetas orientadas exclusivamente a aplicaciones 3D, sin soporte nativo de 2D, y una de las especificaciones de OpenGL ICD es que el controlador ha de soportar GDI, que es la API básica de Windows para el trazado de objetos 2D como los presentes en la interfaz gráfica del sistema operativo. Sin soporte de GDI, las Voodoo Graphics y Voodoo^2 resultan incompatibles con el modelo de controlador ICD, de manera que no pueden funcionar conforme al estándar desarrollado por Microsoft para el uso de OpenGL en Windows; esto significa que la librería OpenGL32.dll no puede usar el controlador de 3dfx para acelerar ninguna función por hardware, por lo que si queremos hacer uso de la aceleración, es necesario pasar las llamadas directamente al controlador de 3dfx, por ejemplo renombrándolo como OpenGL32.dll, "engañando" por así decirlo a las aplicaciones gráficas y a los juegos, haciéndolas creer que están usando un controlador ICD, cuando en realidad están usando un controlador Standalone, que funciona de manera independiente. Otra de las limitaciones de las primeras Voodoo es el conocido hecho de que no pueden dibujar gráficos en una ventana, y el motivo es el mismo, la gestión gráfica de las ventanas es tarea de la GDI, y si estas tarjetas no soportan GDI, no pueden dibujar directamente sobre una ventana.

Precisamente fue a través de un controlador Standalone como 3dfx inició la historia de los juegos OpenGL bajo Windows: Quake (1996), de id Software, es uno de los primeros juegos ambientados en un entorno totalmente tridimensional, formado exclusivamente por polígonos texturizados, aunque existen precedentes como Ultima Underworld (1992), primer juego totalmente texturizado, Doom (1993), primer juego de acción pseudo-3D totalmente texturizado, o Descent (1994), primer juego de auténtica tecnología 3D. La innovación de Quake consistió en el desarrollo de una versión acelerada por hardware, glQuake, que hacía uso de una librería miniGL consistente en un reducido subconjunto de funciones de OpenGL aceleradas por hardware mediante la API Glide, desarrollada por 3dfx en exclusiva para sus tarjetas Voodoo. Las librerías miniGL no eran controladores ICD, ni implementaciones completas de OpenGL, sólo incorporaban las funciones imprescindibles por juegos como glQuake o Quake II para representar sus entornos tridimensionales. Posteriormente surgen la librería 3dfxvgl.dll, que es otro controlador Standalone de 3dfx, pero más avanzado y compatible con juegos como Quake III, o la librería WickedGL, similar a la anterior pero desarrollada por Metabyte, con mejoras adicionales de compatibilidad y de rendimiento para juegos como Return to Castle Wolfenstein, así como auténticos controladores ICD para tarjetas Voodoo con soporte 2D/3D, como la Banshee, la Voodoo3 y las Voodoo4/5/6, pudiendo funcionar todas ellas mediante el controlador ICD 3dfxogl.dll, o mediante alguno de los controladores Standalone; en casos como el de Half-Life, la flexibilidad es tal que podemos ejecutar el juego en modo Software, en modo Direct3D, en modo OpenGL ICD, mediante el controlador miniGL o mediante WickedGL (y ahora también mediante MesaFX), nada menos que cinco o seis modos de operación, la mayoría de ellos basados en OpenGL.

Pero como ya se mencionó al hablar de la evolución de Mesa, el soporte del hardware 3dfx se había quedado estancado en las versiones compatibles con OpenGL 1.1 desde 1997 (todos los ICDs, miniGLs y Standalones posteriores son implementaciones más o menos completas de OpenGL 1.1, y ni siquiera llegan al 100% de compatibilidad), y aunque se fueron añadiendo las extensiones soportadas por los nuevos chipsets, como el VSA-100, la compañía desapareció en 2000, absorbida por Nvidia, sin haber desarrollado un controlador compatible con los estándares más recientes. Convendría aquí señalar que el hecho de que las tarjetas 3dfx no soporten transformación e iluminación por hardware (el conocido T&L), no tiene nada que ver con la actualización del soporte de OpenGL. La API de OpenGL define una serie de funciones para el cálculo de translaciones y rotaciones matriciales, así como para iluminar polígonos, que pueden estar aceleradas o no por el controlador, y en cada caso se hablaría de T&L por hardware o por software, respectivamente, pero este hecho no afecta a la versión de la API, ni a la compatibilidad del controlador. Por decirlo de alguna manera, el T&L por hardware no es un requisito de compatibilidad con ninguna versión concreta de OpenGL, y por tanto no es necesario su soporte para el desarrollo de un controlador actualizado.

Y en este punto es donde finalmente entra en juego la librería MesaFX, que es el verdadero motivo de este inacabable escrito (mi enhorabuena a los que hayan sido capaces de leer hasta aquí): al ser Mesa un proyecto de código abierto, cualquiera puede tomar su código fuente y programar una versión adaptada a otro sistema operativo, o añadir una mejora, o desarrollar un controlador específico para un hardware concreto; y este último caso es precisamente el que nos interesa, ya que aún siendo el hardware de 3dfx el primero y único en ser soportado de manera nativa por Mesa, dicho soporte seguía sin actualizar la versión de OpenGL desde 1997. Hasta hoy. Bueno, no precisamente hasta hoy, pero sí hasta hace bien poco. A finales de 2003, Daniel Borca, un estudiante de la universidad politécnica de Timisoara, lanza una versión preliminar de Mesa 5.1 con soporte por hardware de todas las tarjetas Voodoo conocidas, y el grado de compatibilidad con OpenGL abarca el 100% de OpenGL 1.1, el 80% de OpenGL 1.2 y el 55% de OpenGL 1.3, tomando como referencia los informes generados por el programa glView. Esta compilación de Mesa 5.1 para 3dfx se denomina MesaFX 0.51, y permite jugar a juegos como Call of Duty, antes inviables en cualquier tarjeta Voodoo, ya que requería de un controlador compatible con OpenGL 1.2 para funcionar. Y eso no es todo, ya que se espera próximamente el lanzamiento de MesaFX 0.6, desarrollado a partir del estándar Mesa 6.0, y que proporcionaría al hardware 3dfx de un grado de compatibilidad próximo al 100% hasta OpenGL 1.3, algo inimaginable hace apenas unos meses.

Desde aquí damos las gracias a Daniel Borca, por su bendición al hospedaje de sus archivos binarios MesaFx en nuestra web.