SDL consume demasiados recursos

Tratamos sobre el manejo de APIs frecuentemente utilizadas en el desarrollo de videojuegos, como SDL, pygame o SFML.

SDL consume demasiados recursos

Notapor fernandoc » Mié Oct 24, 2007 3:45 pm

Hola, tengo una pregunta sobre la SDL.

Estoy haciendo una aplicacion (en Visual C++) que dibuja figuras geometricas, uso superficies SDL_HWSURFACE para cada figura y el comando SDL_BlitSurface para enviar la superficie con la figura dibujada a pantalla.

El problema es que cuando ejecuto la aplicacion, y veo el monitor de recursos de XP, el uso de CPU está casi al 60%, y luego de cerrar la aplicacion, al 1% (como normalmente siempre está)

La PC donde estoy corriendo la aplicación es un Pentium IV, 3.0 GHZ con 512 mb de RAM, asique no creo que sea un problema de rendimiento de la PC.

La idea de esta aplicacion es hacer algunas cosas más que dibujar figuras, pero si cuando estoy dibujando, ya está el procesador al 60%, no quiero pensar que va a pasar cuando haga algo más!

Me da la impresión de que debo estar haciendo algo mal con la SDL, pero no entiendo que.

Agradezco cualquier ayuda. Muchas gracias.
fernandoc
 
Mensajes: 2
Registrado: Mié Oct 24, 2007 3:36 pm

Notapor Juan Carlos » Jue Oct 25, 2007 1:02 am

Hola, probablemente no estes haciendo nada mal. SDL suele consumir mucha CPU (yo llego al 100%). :(
Si tu programa resulta muy complicado, y realmente es inusable debido a la lentitud; te sugiero que cambies de API como OpenGL, que es muchisimo mas rapido.

Saludos
Juan Carlos
 
Mensajes: 97
Registrado: Sab Jul 07, 2007 1:05 pm

Notapor rcaf » Jue Oct 25, 2007 4:34 am

En realidad no es problema de SDL, lo que sucede es que tu aplicación se está llevando toda la atención por parte del procesador. Recuerda que tu aplicación corre en un ambiente multitarea y el procesador debe atender otros procesos.

La solución es usar la función SDL_Delay() y esperar un cantidad x de ms, para así dejar "respirar" a la CPU. De esta manera puede atender al resto de procesos que se encuentran en la cola.

Solo para probar, en una primera etapa, coloca lo siguiente al final de tu Game Loop, y verás la diferencia en el administrador de procesos.

Código: Seleccionar todo
SDL_Delay(1);


Aunque esta no es la forma correcta, ya que estarías limitando el framerate de tu juego. Cuando sea usa framerate fijo, se suele esperar una cantidad x de ms (la cual es variable).

Más detalles sobre la implementación de framerate fijo, lo puedes ver en un articulo que escribí hace un par de meses atrás. Te daré la dirección exacta:

http://www.blogrcaf.com/wiki/doku.php?i ... erate_fijo

Ojo, que existen mas formas de abordar la solución de este problema.

Por último, puedes probar a calcular los FPS (en el mismo artículo explico como hacerlo) que obtienes en tu máquina. Es claro que usando OpenGL los FPS aumentan considerablemente.

http://www.blogrcaf.com/wiki/doku.php?i ... or_segundo

Saludos y Suerte!
Roberto Albornoz Figueroa
Mi Blog
Wiki
Avatar de Usuario
rcaf
 
Mensajes: 71
Registrado: Jue Ago 10, 2006 4:35 am
Ubicación: Concepción, Octava Región. Chile

Notapor fernandoc » Jue Oct 25, 2007 4:09 pm

Muchisimas gracias por la respuesta! es impresionante como cambio la aplicacion despues de agregar el SDL_Delay(1);

En un principio voy a usar esto, pero el link que me pasaste es muy interesante. Cuando la aplicacion este un poco mas desarrollada, seguramente use lo del Framerate fijo.

Nuevamente, muchas gracias por la respuesta.


Saludos
fernandoc
 
Mensajes: 2
Registrado: Mié Oct 24, 2007 3:36 pm


Volver a Sobre las bibliotecas multimedia

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados

cron