Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Nuevas Librerías Para Sdl

Iniciado por javiel, 12 de Noviembre de 2004, 10:10:49 AM

« anterior - próximo »

javiel

 Desde hace unos meses estoy haciendo un video juego. Hace un tiempo, hablando con los que los estamos haciendo, llegamos a la conclusión de que queríamos hacer intros para el. Entre fase y fase poner diferentes animaciones. Por ello me puse a trabajar en unas librerías, que he escrito independientemente del juego, para poder crear animaciones con SDL. Podéis ver el resultado aqui:

http://sdl-animation.software-libre.org/

Aunque en un principio estaba pensado para videojuegos, posiblemente se pueda adaptar a otras cosas como multimedias simples. Lo mas interesante del proyecto es que toda la animación, crear textos, imágenes, objetos, animaciones, sonidos, se hace desde un archivo XML que cargas desde el juego. Luego a estos objetos los puedes mover, hacer rotaciones, hacer zoom, etc... Se pueden hacer fundidos, trabajar con fondos, etc... La verdad que creo que me ha quedado bastante simpático.

En la web os podéis bajar una demo de Bilo y Nano para poder ver las posibilidades que tiene la librería.

Aunque estoy contento con el resultado, no estoy contento con el rendimiento. Las animaciones en muchos ordenadores no muy antiguos van demasiado lentas. Yo tengo un 1550 AMD y me va bien, pero según me han dicho en un AMD 14000, a una persona que lo había probado le va lento, y no digo a ordenadores mas pequeños.

A partir de ahora voy a empezar a trabajar a mejorar el rendimiento de las librerías, pero me gustaría que si a algunos os interesa el proyecto, me dijéseis algunas mejoras en el código, algunas ideas para poder implementarlas. Una puede ser el uso de OpenGL para mejorar el rendimiento. También tengo pensado hacer varios cosas para mejorar la estructura del código y trabajar con un número de elementos variables (ahora lo hago con un array de objetos fijo).

Lo que mas me preocupa es el rendimiento, si me podéis dar consejos os lo agradezco. No soy un gran programador, llevo poco tiempo desarrollando videojuegos, pocos meses, así que tengo muchas cosas que mejorar. Creo que por aquí no hay mucha gente interesada en juegos en 2D, pero a lo mejor me podríais ayudar con vuestros consejos.

Muchas gracias a todos y un saludo
uper-Tirititran: el superhéroe gaditano (http://www.super-tirititran.com)

sés

 2D al poder ^_^

No lo he visto mucho, pero creo que creas superficies con un RGB que eliges tú. Tendrías que crear superficies con el mismo formato del modo de video, así se aceleran todas las operaciones de dibujo.

Las que no lo sean, puedes convertirlas con SDL_ConvertSurface.




P.D.: Haz una versión para BGL... aunque aun no hay funciones gráficas :P
Soy indeciso... ¿o no?

javiel

 Yo creo que eso lo tenía resuelto con SDL_DisplayFormat(SDL_Surface *sfc);. Esta función tengo entendo que te pasa al formato de la pantalla la imagen que le pases. Si te fijas en la función load de la clase Frame es donde lo hago


void Frame::load (char *path) {
img = IMG_Load (path);
img = SDL_DisplayFormat(img);
if ( img == NULL) {
 printf ("No se cargo la imagen: %s\n", path);
}
}


Crees que sería mejor utilizar la otra función?? Mejorará el rendimiento??

Gracias
uper-Tirititran: el superhéroe gaditano (http://www.super-tirititran.com)

rrc2soft

 SDL_DisplayFormat sirve para convertir las "surfaces" al formato de la pantalla. Pero OJO!
img = SDL_DisplayFormat(img);
En esa instruccion se crea una nueva imagen (puntero a superficie), y al asignar el puntero resultado a img (otra vez) estas "machacando" el antiguo puntero - perdiendo memoria.

sés

 javiel, no me refería a ese trozo de código, me refiero a otros. Puede que también uses SDL_DisplayFormat, pero no lo he visto (la verdad es que no me he fijado demasiado ^_^).

En algunos sitios he visto que crear superficies a mano con un RGB que eliges tú por código y no he visto que lo conviertas. Y aunque lo hicieras, sería más lógico crearlas directamente en el formato de video, ¿no?
Soy indeciso... ¿o no?

javiel

 sés

Yo cada vez que meto una imagen en un Objeto se guarda en una instancia de la clase Frame que en el load hace el SDL_DisplayFormat. Por lo tanto, lo hace cada vez que cargo una imagen. Pero ahora que lo dices, y eso si es verdad, cada vez que hago un alpha a PNG o hago zoom, rotaciones o algo de eso, creo una nueva imagen (en el método dibujar() de la clase Objeto) y es verdad que esas no les hago el SDL_DisplayFormat.

Por lo tanto eso lo tengo que cambiar. Aunque no creo que el redimiento vaya por ahí, ya que aunque no haga zoom ni cosas de esas, simplemente muestre imágenes el rendimiento sigue siendo muy pobre. Pero es verdad, eso es una cosa a cambar. Te agradezco que me ayudes

rrc2soft

Supongo que será mejor algo como:


img_new = SDL_DisplayFormat(img);
SDL_FreeSurface(img);
... y ya trabajo con img_new


No se si es a esto a lo que te refieres

Gracias por vuestros mensajes
uper-Tirititran: el superhéroe gaditano (http://www.super-tirititran.com)

Lord Trancos 2

 Y q tal usando OpenGL?  :rolleyes:  
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

tamat

 Y qué tal abstrayendo el contexto de renderizado?  :rolleyes:  
Por un stratos menos tenso

javiel

 
Citar
Y qué tal abstrayendo el contexto de renderizado?

No te entiendo. Podrias explicarlo mejor si no te importa

gracias por contestar
uper-Tirititran: el superhéroe gaditano (http://www.super-tirititran.com)






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.