DirectX 9.0c en GNU/Linux
6 02 2009Hoy 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);mientras que en D3D serÃa algo como esto
glVertex (0,0,0);
glVertex (1,1,0);
glVertex (2,0,0);
glEnd ();
(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:
Happy Linux Gamming!!!
Extraido y traducido de: wine-reviews
Datos comparativa OpenGL vs Direct3D: Paul Hsieh
Categorias : 3D, Consejos, FLOSS, aplicaciones, comprobados, wine






























Los Pingüinos comentan