Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Velocidad Sdl

Iniciado por Abc7, 22 de Septiembre de 2004, 02:43:03 PM

« anterior - próximo »

Abc7

 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

Sacrifai

 ¿Estas seguro de que no estás cargando la imagen continuamente?

Abc7

 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

rrc2soft

 
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_   ;) ).

Abc7

 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

rrc2soft

 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.

vicho

 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

sés

 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).
Soy indeciso... ¿o no?

ethernet

 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






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.