PDA

Ver la versión completa : SDL Linux vs Windows



miq01
16/11/2005, 22:35
Hola. La primera versión de mi primer juego programado en SDL está lista y mi objetivo es que pueda jugar en la GP2X. Lo he programado desde Windows utilizando el entorno Code::Blocks y MinGW como compilador, y ayer instalé Mandriva Linux en mi ordenador para compilarlo en Linux, y usé KDevelop para ello.

Después de unos cuantos dolores de cabeza (igual es porque yo venía de Visual Studio, pero Code::Blocks me parece bastante más intuitivo que KDevelop) conseguí que compilara y se ejecutara. ¡Bien!

Comparando los dos ejecutables, el de Windows tira a una media de 230 fps (el juego no necesita grandes cálculos) mientras que el de Linux llega a unos 100. Eso sin tocar absolutamente nada del código. Ya sé que lo de la velocidad depende de muchos factores, pero ¿hay algo que deba tener en cuenta cuando programo usando las SDL en Linux? Cuando tenga la consola y el SDK con las SDL quiero recompilarlo a ver qué tal funciona, y me imagino que lo que es aplicable para Linux en mi PC també lo será para Linux en la GP2X.

Y otra pregunta: ¿será imprescindible compilar desde Linux o podré instalar el SDK también en Windows? En ese caso, ¿cómo generará un ejecutable que funcione en Linux?
Editar/Borrar Mensaje

Uncanny
16/11/2005, 23:20
Como tu mismo dices, siempre puede ser una combinación de varios factores. Lo más probable es que sea debido al driver gráfico, sobre todo con tarjetas ATI o NVIDIA, esto no es cosa de Linux o Windows (de hecho si en Windows se usa un driver generico "VGA" hasta desplazar una ventana parece que pega saltos, hasta que uno le instala los drivers del fabricante...). Si es una de estas te recomiendo que cambies al driver propietario que provee aceleración 2D/3D mayor (aunque se está desarrollando en un proyecto para conseguir driver libre con aceleración 3D para ATI igual o más competente que el oficial) y de no tener una de estas asegurate de que el driver que está usando el servidor gráfico no es "vesa", que es el que se usa de forma generica en Linux (al estilo de VGA en Windows), porque no aprovechará la aceleración gráfica (2D supongo, para tu juego) de tu tarjeta.

Respecto al SDK, creo que se dijo que se podría usar en Windows con Cygwin.

P.D: Si te gusta más Code::Blocks también puedes usarlo en Linux si quieres.

miq01
16/11/2005, 23:32
Gracias Uncanny. Mi tarjeta es una nVidia GeForce 3, pero ayer mismo instalé los drivers para Linux que hay colgados en su página así que, aunque no he probado ninguna aplicación GL para comprobar si la cosa mejora o no, ese no debería ser "el problema".

Respecto a lo de Code::Blocks, lo único que encontré en su página para Linux era el código fuente, y al empezar a compilar me dio un montón de errores y a pesar de que intenté solucionarlo (faltaban algunas librerías) y me tiré un buen rato no hubo manera. Busqué también algún RPM con el código ya compilado pero no hubo suerte (está para alguna otra distribución, pero no para Mandriva). Además, me pierdo con los configures i los Makefiles... Algún día debería aprender bien cómo funcionan...

Uncanny
17/11/2005, 00:21
Gracias Uncanny. Mi tarjeta es una nVidia GeForce 3, pero ayer mismo instalé los drivers para Linux que hay colgados en su página así que, aunque no he probado ninguna aplicación GL para comprobar si la cosa mejora o no, ese no debería ser "el problema".Cuando dices en su pagina supongo que te refieres a la de NVIDIA, habrás seguido el procedimiento de asegurarte de que en el archivo /etc/X11/xorg.conf está bajo comentarios o borrada (sección Modules) el Load "dri" y añadir Load "glx" como también (en la sección "Device") que el driver "nv" este cambiado por "nvidia", además de que (sección Screen) esté la profundidad de color a 16 o 24 bits (te recomiendo DefaultDepth 16). Respecto a esto último, asegurate (si tienes la información correcta a mano) de los rangos de frecuencia de tu monitor, a ver si son iguales a los que ha detectado y configurado Mandriva para el servidor gráfico. Si has hecho algún cambio, guardarlos y reinicia el servidor gráfico a ver si ahora obtienes más fps.
Respecto a lo de Code::Blocks, lo único que encontré en su página para Linux era el código fuente, y al empezar a compilar me dio un montón de errores y a pesar de que intenté solucionarlo (faltaban algunas librerías) y me tiré un buen rato no hubo manera. Busqué también algún RPM con el código ya compilado pero no hubo suerte (está para alguna otra distribución, pero no para Mandriva). Además, me pierdo con los configures i los Makefiles... Algún día debería aprender bien cómo funcionan...Puedes probar bajandote el source rpm de la pagina de codeblocks y crear un rpm con los binarios, para luego instalarlo, aquí (http://wiki.codeblocks.org/index.php/Compiling_Code::Blocks_in_RPM_based_distributions) tienes las intrucciones de como hacerlo. Los Makefiles son un coñazo si tienes que hacerlos tu mismo, aunque siempre puedes partir de una plantilla o de otro Makefile ya hecho.

efegea
17/11/2005, 00:34
Si quieres comprobar si has instalado bien los drivers, abre un terminal de consola (Konsole) y pon "glxinfo | grep rendering" te debería decir "direct rendering: Yes"

Luego pon "glxgears" te debería salir una ventana 3D con unos engranajes. Si la dejas un rato sin tocar nada en la ventana de terminal te debería salir los frames por segundo a los que iba.

Uncanny
17/11/2005, 00:52
Luego pon "glxgears" te debería salir una ventana 3D con unos engranajes. Si la dejas un rato sin tocar nada en la ventana de terminal te debería salir los frames por segundo a los que iba.Poco me fio yo del glxgears (aunque el glxinfo es util como bien has indicado), en mi opinión para probar la aceleración 3D lo mejor es poner un juego 3D y darle caña (¿apetece una partida al UT? :D)

miq01
17/11/2005, 00:56
J0der, soys unos cracks... :)

Uncanny, he instalado un juego que usa GL (Tuxkart, una especie de Mario Kart) y iba terriblemente lento a pesar de que los gráficos no eran espectaculares. He mirado el archivo /etc/X11/xorg.conf y efectivamente tenía comentada la línea Load "glx". Lo he cambiado, he reiniciado las X y... ¡mucho mejor!. Además, cada vez que arranco hay un proceso de KDE (kded) que está contínuamente accediendo a disco y consumiendo bastante CPU y nunca acaba. Lo he medio solucionado matándo el
proceso pero cada vez que arranco Linux pasa lo mismo. Ya investigaré por qué sucede. En cualquier caso, ahora el programa va a unos ¡200 fps!

Respecto a lo de Code::Blocks, muchas gracias: ya lo miraré.

Efegea, ahora sí devuelve "direct rendering: Yes" y "glxgears" funciona perfectamente.

¡Gracias a los dos!

miq01
17/11/2005, 01:07
Puedes probar bajandote el source rpm de la pagina de codeblocks y crear un rpm con los binarios, para luego instalarlo, aquí (http://wiki.codeblocks.org/index.php/Compiling_Code::Blocks_in_RPM_based_distributions) tienes las intrucciones de como hacerlo. Los Makefiles son un coñazo si tienes que hacerlos tu mismo, aunque siempre puedes partir de una plantilla o de otro Makefile ya hecho.
Esto lo probé ayer, y ahora lo acabo de hacer otra vez. Me da uno de esos mensajes que me superan:


configure.in:61: error: possibly undefined macro: AM_OPTIONS_WXCONFIG
If this token and others are legitimate, please use m4_pattern_allow.
See the Autoconf documentation.
configure.in:62: error: possibly undefined macro: AM_PATH_WXCONFIG
error: Bad exit status from /var/tmp/rpm-tmp.94353 (%build)

RPM build errors:
user daniel does not exist - using root
user daniel does not exist - using root
Bad exit status from /var/tmp/rpm-tmp.94353 (%build)
¿"User daniel does not exist"? Por supuesto que no... ¡No he creado ningún usuario "daniel"! Sólo tengo el que crea Mandriva (root) y el mío...

Y lo de "AM_XXX_WXCONFIG" veo que es cosa de wxWidgets. A ver si Google sabe algo del tema.

Uncanny
17/11/2005, 03:22
Además, cada vez que arranco hay un proceso de KDE (kded) que está contínuamente accediendo a disco y consumiendo bastante CPU y nunca acaba. Lo he medio solucionado matándo el
proceso pero cada vez que arranco Linux pasa lo mismo. Ya investigaré por qué sucede.Ese proceso, kded, corresponde al demonio/daemon/servicio que se encarga de inicializar las actualizaciones a la BB.DD. Sycoca (Sycoca -> KDE's System Configuration Cache). Estas actualizaciones se realizan en determinados periodos de tiempo para que el servicio kded haga su trabajo de actualizar la BB.DD. Pero has dicho que usas Mandriva y he leido de problemas con kded antes (no uso Mandriva, por eso no puedo comprobarlo), y decían algunos usuarios que podía ser ser debido que se tenga instalada la aplicación Kat (http://kat.mandriva.com/), que le sirve a las aplicaciones de KDE para indexar información (creo que al estilo de Beagle) y creo que hace uso del servicio kded (por lo de la BB.DD Sycoca), prueba ir al Centro de Control de KDE y ver si en Componentes de KDE -> Administrador de Servicios (o quizás desde Mandrake Control Center) encuentras los servicios referidos a Kat y desactivarlos. En un mal caso puedes probar desinstalando la aplicación Kat.
¿"User daniel does not exist"? Por supuesto que no... ¡No he creado ningún usuario "daniel"! Sólo tengo el que crea Mandriva (root) y el mío...

Y lo de "AM_XXX_WXCONFIG" veo que es cosa de wxWidgets. A ver si Google sabe algo del tema.Respecto a esto, me da que es por el archivo SPEC, (el usuario daniel tiene algo que ver seguro con el tal Daniel Orb, del ejemplo del enlace que te di antes del Wiki de Code::Blocks). Puede que la solución sea esta (http://forums.codeblocks.org/index.php/topic,1084.0.html) que dan en el foro de Code::Blocks.

miq01
17/11/2005, 03:40
Sí tengo el Kat instalado. Probaré lo que dices. Ahora vuelvo a estar en Windows, así que si puedo le echaré un vistazo más tarde.

Respecto a Code::Blocks he conseguido reinstalar (recompilar) wxWidgets i entonces Code::Blocks me ha dado otros errores por lo que, de momento, lo dejo por imposible. Es lo que me jode de Linux: dos horas de intentos y ningún resultado. Y no soy pro-Microsoft, que conste.

Bueno, gracias por la ayuda. Seguiré informando... :)

hectorblanco
17/11/2005, 04:02
Prueba el eclipse 3.1 con el plugin CDT. Yo lo uso como IDE C/C++ en ubuntu.
No es una maravilla, pero deja bastantes libertades a la hora de trabajar.

miq01
17/11/2005, 05:03
Prueba el eclipse 3.1 con el plugin CDT. Yo lo uso como IDE C/C++ en ubuntu.
No es una maravilla, pero deja bastantes libertades a la hora de trabajar.

Ostras, gracias por la idea, pero recuerdo que hace cosa de un año ya instalé Eclipse en Windows y me costó lo suyo añadirle el CDT y que pudiera compilar C. Igual era incompetencia mía, o igual no y ahora todo es más sencillo. ¿Sabes qué pasa? Que ya he perdido demasiado tiempo con el intento de instalación de Code::Blocks en Linux y al fin y al cabo ahora ya tengo KDevelop en marcha con el proyecto hecho, y además creo que seguiré programando en Windows y cuando tenga que cambiar a Linux, con que sustituya ficheros tengo suficiente. Prefiero esperar a que alguien haga un RPM para Mandriva, que supongo que un día u otro pasará.

hectorblanco
17/11/2005, 06:17
A mí me pasa al revés.
Me he acostumbrado a trabajar con el Eclipse, y hago todo el desarrollo en linux, y luego en Windows monto el proyecto sobre Dev-C++ y compilo para el port Win32.

Seguramente lo haré igual para cuando tenga el engine/API N2X para la consola.