viernes, 24 de septiembre de 2010

Mejoran soporte de Direct3D en Linux

unigine_city1

Unigine Demo

Luca Barbieri, uno de los desarrolladores de la arquitectura gráfica Gallium3D, publicó el código necesario para disponer de Direct3D 10/11 en Linux sin pasar por ningún tipo de intermediario, accediendo directamente a los drivers de video.

Hasta la fecha, el soporte de Direct3D en Linux era limitado: básicamente se trataba de una capa construida sobre OpenGL, el sistema gráfico 3D nativo en Linux, lo que tenía el problema de que cada operación sobre Direct3D necesitaba convertirse en operaciones equivalentes de OpenGL, para recién llegar a los drivers y luego al hardware. Si bien en la práctica esto no significa degradar el rendimiento de una forma notoria, tenía la complejidad de cualquier tipo de traducción de este tipo, en donde no hay una equivalencia uno a uno, lo que significa mantener miles de líneas de código y aplicar un considerable esfuerzo para implementar cada versión del API.

Gallium3D busca la independencia de los distintos actores de un sistema gráfico, estos son las aplicaciones, API’s como OpenGL y Direct3D, Sistemas de Ventanas (X o Windows), drivers y finalmente hardware. En la actualidad todos estos componentes están fuertemente ligados y por ejemplo en Windows prácticamente no hay alternativas viables entre usar OpenGL o Direct3D, y en el caso de Linux lo único garantizado hasta el momento era el soporte de OpenGL.

Con Gallium3D no hay que casarse con ninguna tecnología en particular, y el trabajo de Luca justamente apunta a convertir a Direct3D en una gráfica API nativa en Linux, al mismo nivel de lo que hoy en día es OpenGL. Es más, según los entendidos, el diseño de Direct3D 11 es superior en cuanto a potencia y simplicidad el compararse con OpenGL, lo que significará una alternativa de primer nivel para los desarrolladores de aplicaciones gráficas sobre sistemas no-Windows:

El tercer objetivo es proveer una alternativa para programación gráfica superior a OpenGL en sistemas no-Windows, particularmente en Linux y otros sistemas abiertos. Gracias a un limpio diseño planteado desde cero, las APIs Direct3D 10/11 son superiores a OpenGL y pueden ser soportadas por menos código y tiempo de desarrollo, tal como se puede ver al comparar las lineas de código de esta implementación (Direct3D sobre Linux) respecto a la implementación actual de OpenGL a través de Mesa. Finalmente, una implementación madura de Direct3D 10/11 va a ser intrínsecamente más rápida y confiable que las implementaciones de OpenGL, gracias a un API significativamente más pequeña y la forma en que se divide el trabajo entre el API y las aplicaciones.

En el caso de los drivers de código cerrado de ATI y NVIDIA no se cuenta con acceso directo a las funciones de aceleración sin antes pasar por OpenGL, pero aún así la situación de Gallium3D es muy superior al estado actual de las traducciones ente Direct3D y OpenGL, esto debido a que la implementación de Direct3D sólo depende de Gallium3D y es éste quien usará en forma nativa los servicios del hardware a través de un API basado en OpenGL, sin forzar una traducción entre API’s.

¿Qué significa para los juegos en Linux?

La implementación de Direct3D es una parte del problema, también se encuentra el desafío de tener API’s adecuadas para sonido y manejo de dispositivos de entrada, realidad que ha mejorado bastante en los últimos años. Pero esto es sólo si pensamos en juegos nativos para Linux usando Direct3D, porque en realidad los primeros beneficiados con este avance son las implementaciones del API de Windows en Linux, como es el caso de wine y productos derivados como Cedega.

Tanto wine como sus derivados usan el actual mecanismo de transformación de invocaciones desde Direct3D a OpenGL, y con un gran esfuerzo se había logrado implementar hasta Direct3D 10. Con Gallium3D se podrá optar por usar Direc3D 11 directamente, sin pasar por OpenGL y es cosa de tiempo de que esta alternativa se encuentre disponible para todo el mundo.

No hay comentarios: