Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: Abc7 en 22 de Septiembre de 2004, 02:43:03 PM

Título: Velocidad Sdl
Publicado por: Abc7 en 22 de Septiembre de 2004, 02:43:03 PM
 ola ola.. estaba tratando d hacer aca un engine en 2D con SDL.. y al ver lo feo d mis fps.. decidi buscar a ver si encontraba x la red algo para aumentar la velocidad.. y lo unico q encontre fue q use opengl, uno q posteaba un link roto a un codigo para mac para q solo se actualize la parte d la pantalla q cambio desde el ultimo frame, y tb uno q me sirvio fue el d displayformat:
SDL_Surface *image;
image = SDL_LoadBMP("llalala.bmp");
image = SDL_DisplayFormat(images);

y eso t aumenta un poco la velocidad... q es mucho cuando se forea en X y en Y como es mi caso =)
pero despues no encontre nada mas.. alguna aiuda? gracias!!
saludos y suerte
Título: Velocidad Sdl
Publicado por: Sacrifai en 22 de Septiembre de 2004, 03:08:31 PM
 ¿Estas seguro de que no estás cargando la imagen continuamente?
Título: Velocidad Sdl
Publicado por: Abc7 en 23 de Septiembre de 2004, 01:55:53 AM
 la imagen (osea la SDL_Surface conteniendo ese tile) lo cargo una vez cuando cargo el mapa y nunca mas despues.. si kieren subo el codigo
Título: Velocidad Sdl
Publicado por: rrc2soft en 23 de Septiembre de 2004, 04:46:51 AM
 
Cita de: "Abc7"SDL_Surface *image;
image = SDL_LoadBMP("llalala.bmp");
image = SDL_DisplayFormat(images);

Ojo! el SDL_DisplayFormat te crea una nueva superficie, por lo que cada vez que haces lo de antes estas perdiendo memoria.

Y ya que estamos, el juego en el que estoy trabajando funciona sobre SDL, y va bastante bien. Puedes mirar el codigo fuente para ver como me las apanyo con el SDL (esta en Delphi, pero vamos, haz un grep buscando funciones SDL_   ;) ).
Título: Velocidad Sdl
Publicado por: Abc7 en 24 de Septiembre de 2004, 02:17:02 AM
 es verdad se me safo una 's'.... no estoy creando una nueva.. sino q uso la misma... seria image = SDL_DisplayFormat(image);
ahora echo un vistazo al codigo.. si es q el mouse se digna en andar :P
Título: Velocidad Sdl
Publicado por: rrc2soft en 24 de Septiembre de 2004, 04:07:20 AM
 Precisamente el problema esta en la linea:
image = SDL_DisplayFormat(image);
SDL_DisplayFormat recoge la imagen pasada por parametro y devuelve una nueva. Como "image" es un puntero, los datos a los que apuntaba se pierden = basura (memoria sin liberar).

< IMAGEN_8BITS>>
image = SDL_DisplayFormat(image);
< IMAGEN_16BITS>>
<--huerfanito!!!!)>>

Nunca olvides leerte muy bien la definicion de la funcion en la ayuda, que a veces ocultan sorpresas de este tipo.
Título: Velocidad Sdl
Publicado por: vicho en 24 de Septiembre de 2004, 09:10:11 AM
 bueno algunas cosas sobre SDL, el displayformat no nos aumenta los fps realmente, lo que ase simplemente es sacar una copia de una surface por ende nos consume algo mas de memoria en hacer la copia, usa el mismo formato por ende no necesariamente tiene que ser mas compatible con el screen.

lo que si aumentar considerablemente los fps de una aplicacion con SDL es el updatear la screen donde requiere simplemente ser updateada, ejemplo enves de blitear y updatear la pantalla entera solo bliteamos la porcion que a cambiado de la pantalla. sinceramente esto crea una gran ganancia en el tema de velocidad
Título: Velocidad Sdl
Publicado por: sés en 24 de Septiembre de 2004, 09:40:16 AM
 SDL_DisplayFormat( image ) sí aumenta la velocidad. No crea una simple copia de la superficie, crea una copia con el mismo formato de pixels que la memoria de video, lo que se traduce en un aumento de la velocidad.

Lo que espero, Abc7,  es que eso lo hagas solo una vez y no en cada fotograma.

Lo lógico sería algo como:

SDL_Surface *image, *aux;
aux = SDL_LoadBMP( "llalala.bmp" );
image = SDL_DisplayFormat( aux );
SDL_FreeSurface( aux );


Así tienes la imagen en el mismo formato que la pantalla.


P.D.: Realmente nunca lo he probado :P, yo uso mis propias funciones para dibujar imágenes, pero es así (según la documentación... y por pura lógica).
Título: Velocidad Sdl
Publicado por: ethernet en 24 de Septiembre de 2004, 10:20:45 AM
 OFFTOPIC[ONTOPIC]:  Habeis probado CImg?, es una librería para tratar imágenes aunque tb se pueden renderizar. Hay hecho un tetris en poquísimas líneas.

saludos