Editado a 1 de Marzo del 2012: Visto el gran número de visitas que sigue recibiendo esta entrada, hoy en día un poco desfasada, os pongo a continuación como instalar DirectX9/10/11 en Linux con un solo comando:
$ winetricks d3dx9_36
Con lo que nos instala las dlls necesarias para la mayoría de aplicaciones que requieren DirectX. Si no funcionara, se puede instalar al completo con el comando
$ winetricks directx9
Para Directx10 y DirectX11, como a dia de hoy no son estándares, sino que vienen con los propios juegos que instalamos, tan solo hay que aceptar el instalarlo cuando el juego nos lo pida.
Si aún así sois de los que os gusta hacer las cosas a mano, pues ahí va toda la parrafada de como hacerlo a la antigua usanza 😉
Hoy no os voy a presentar ningún juego en concreto. El tema que hoy traemos entre manos será la instalación de M$ DirectX9.0c bajo GNU/Linux. Como supongo que sabréis, DirectX es un API desarrollada por Hasecorp para el desarrollo de aplicaciones multimedia, en especial de videojuegos, para la plataforma de Redmond.
Un poco de historia…
Las capacidades 3D de DirectX las incluye la librería Direct3D (D3D), cuyo objetivo es facilitar el manejo y trazado de entidades gráficas elementales, como líneas, polígonos y texturas, en cualquier aplicación que despliegue gráficos en 3D, así como efectuar de forma transparente transformaciones geométricas sobre dichas entidades. Vendría a ser como OpenGL pero en cutre, pues mientras la interfaz de OpenGL es procedural, la de D3D es ejecutada mediante buffers. De tal forma, para dibujar un triángulo en OpenGL sería tan sencillo como
glBegin (GL_TRIANGLES); glVertex (0,0,0); glVertex (1,1,0); glVertex (2,0,0); glEnd ();
mientras que en D3D sería algo como esto
(pseudocódigo incompleto)
v = &buffer.vertexes[0]; v->x = 0; v->y = 0; v->z = 0; v++; v->x = 1; v->y = 1; v->z = 0; v++; v->x = 2; v->y = 0; v->z = 0; c = &buffer.commands; c->operation = DRAW_TRIANGLE; c->vertexes[0] = 0; c->vertexes[1] = 1; c->vertexes[2] = 2; IssueExecuteBuffer (buffer);
Vamos, una “joyita” de la programación, a gigantic pain-in-the-ass, como decía John Carnack en el ’97, el creador de juegos como Doom, Enemy Territory, Wolf3D, y un largo etcétera, en los grupos de noticias de USENET rec.games.programmer y comp.graphics.algorithms.
Hasecorp, tras ver la flame war que inició el famoso desarrollador de videojuegos de Id Software, hizo un intento en el ’98 junto a SGI (creadores de OpenGL) y Hewlett-Packard, de fusionar Direct3D con OpenGL para crear un estándar. Intento fallido que desencadenó en lo que la compañía de Redmond se le da estupendamente cuando se enfrenta ante un enemigo al que no puede vencer: en 1998 empezó una campaña de FUD contra OpenGL y retiró el soporte al mismo que venía dando desde Windows 95, obligando así a que los desarrolladores de aplicaciones 3D no independientes tuvieran que usar necesariamente D3D.
Pero todo eso queda muy atrás, pues de hecho, cuando todos los programadores ya habían desarrollado aptitudes en el desarrollo de aplicaciones basadas en D3D, la comunidad independiente de OpenGL hizo que fuera compatible con los sistemas NT. Así pues, entre lo uno y lo otro, Hasecorp volvió a dar sop0rte a OpenGL. Pero la batalla ya la había ganado, pues D3D ya era oficialmente la API de desarrollo de videojuegos para la plataforma de los videojuegos.
Cómo instalar DirectX9.0c en GNU/Linux
Como muchos de vosotros sabéis, ya exite DirectX10 e incluso DirectX11, pero son para Windows Vista y superior, así pues, muchos de los usuarios de Hasefroch no pueden tener las ventajas que tienen ambas colecciones de APIs frente a DirectX9.0c, y bien que pueden jugar a todos los juegos que hay para ese sistema operativo.
Desde que Wine es capaz de instalar DirectX, se ha abierto una miríada de posibilidades para poder ejecutar videojuegos diseñados específicamente para Windows. Es estupendo, ¿verdad? Pues como todo en esta vida, no hay nada ni perfecto ni de color de rosa, a la vez que abre muchas posibilidades, estaremos haciendo un poco más inestable nuestra instalación de wine, así que es recomendable que hagáis varios perfiles para emular según qué aplicaciones, para que no os fallen las que funcionan con las APIs que proporciona wine.
Para poder instalar efectivamente DirectX9.0c en Linux, deberemos emular un Windows 2000 y no un XP, y emular un escritorio virtual de 1024×768 a través de la herramienta de configuración winecfg
Paso 1: Configurar winecfg en una instalación “limpia” de wine
$winecfg
Si es una instalación “limpia” de wine, tendrá que recrear toda la estructura de directorios en ~/.wine, así que tardará un poquito más de lo normal. En la pestaña Applications seleccionamos Windows 2000
La pestaña Graphics la dejamos como muestro
Y sería un buen momento para seleccionar algún sistema de sonido como ALSA
El siguiente paso, tras Aplicar winecfg, sería copiar a ~/.wine/drive_c/windows/system32, las siguientes dlls, desde un sistema Windows: mscoree.dll y streamci.dll.
Ahora tendremos que hacer nativas un gran número de dlls, os pongo el listado a continuación :
“d3d8″=”builtin”
“d3d9″=”builtin”
“d3dim”=”native”
“d3drm”=”native”
“d3dx8″=”native”
“d3dx9_24″=”native”
“d3dx9_25″=”native”
“d3dx9_26″=”native”
“d3dx9_27″=”native”
“d3dx9_28″=”native”
“d3dx9_29″=”native”
“d3dx9_30″=”native”
“d3dx9_31″=”native”
“d3dx9_32″=”native”
“d3dx9_33″=”native”
“d3dx9_34″=”native”
“d3dx9_35″=”native”
“d3dx9_36″=”native”
“d3dxof”=”native”
“dciman32″=”native”
“ddrawex”=”native”
“devenum”=”native”
“dinput”=”builtin”
“dinput8″=”builtin”
“dmband”=”native”
“dmcompos”=”native”
“dmime”=”native”
“dmloader”=”native”
“dmscript”=”native”
“dmstyle”=”native”
“dmsynth”=”native”
“dmusic”=”native”
“dmusic32″=”native”
“dnsapi”=”native”
“dplay”=”native”
“dplayx”=”native”
“dpnaddr”=”native”
“dpnet”=”native”
“dpnhpast”=”native”
“dpnlobby”=”native”
“dsound”=”builtin”
“dswave”=”native”
“dxdiagn”=”native”
“mscoree”=”native”
“msdmo”=”native”
“qcap”=”native”
“quartz”=”native”
“streamci”=”native”
Para ello, seleccionaremos una a una cada una de las librerias, las añadiremos y la editaremos para que ponga “native” o “builtin” como en la figura anterior.
Paso 2: Descargar e instalar DirectX
Puedes descargar DirectX9 desde aquí. El instalador se descomprimirá en un directorio de tu elección.
malevolent@malevolo ~ $ wine directx_nov2008_redist.exe
fixme:advapi:DecryptFileA "Z:\\home\\malevolent\\dx\\" 00000000
malevolent@malevolo ~ $
Ahora vamos al directorio donde hemos elegido extraer el instalador de DirectX y ejecutamos DXSETUP.EXE.
malevolent@malevolo ~ $ cd /home/malevolent/dx
malevolent@malevolo ~/dx $ wine DXSETUP.exe
Lo siguiente que necesitaremos será instalar gm.dls para poder probar DirectMusic, este driver lo copiaremos en ~/.wine/drive_c/windows/system32/drivers
Paso 3: Vemos que todo funciona
Ejecutaremos pues, dxdiag.exe
malevolent@malevolo~ $ cd /home/malevolent/.wine/drive_c/windows/system32
malevolent@malevolo ~/.wine/drive_c/windows/system32 $ wine dxdiag.exe
fixme:advapi:SetEntriesInAclA 1 0x33f79c (nil) 0x33f7d4
fixme:advapi:SetSecurityInfo stub
Observarás que en system32 están ahora desde d3dx9_24.dll hasta d3dx9_36.dll, esto realmente ayudará cuando juegues a un juego que necesite estas DLLs adicionales de DirectX.
Ahora ya podrás ejecutar la mayoria de las DLLs de DirectX en modo native o builtin, por ejempo, si tuvieras un juego que se cuelga o no funciona con la dll de Wine quartz.dll en modo builtin, puedes probar el juego en el modo DLL native de Windows para ver si la situación mejora.
Recuerda por eso, que d3d8, d3d9 y ddraw solo funcionarán en modo builtin, y en la mayoría de los casos deberías tratar de usar dsound y dinput en modo builtin. La razón de por qué esas DLLs tienen que ser usadas en modo builtin es por la necesidad de tener acceso directo a tu hardware. En la mayoría de ocasiones se puede usar DirectMusic y DirectPlay en modo nativo de windows.
Y este es el resultado:
[youtube]http://www.youtube.com/watch?v=qhOmL-1NCHw[/youtube]
Happy Linux Gamming!!! 😀
Extraido y traducido de: wine-reviews
Datos comparativa OpenGL vs Direct3D: Paul Hsieh
1 Comment
etolini
6 February 2009 at 5:41 pm😈 no veas si le va collada la prueba del cubo del directX 😈