rotozoomSurfaceXY() lento

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

rotozoomSurfaceXY() lento

Notapor hugetto » Vie May 18, 2007 9:01 am

Alguien sabe porqué se me relentiza bastante el juego que quiero programar cuando aplico la función rotozoomSurfaceXY()?

Tengo un pentium IV a 2.8GH por lo que no deberia pasar, és más, la CPU nunca llega al 100% (alrededor del 70%).

Si no uso esta función y simplemente duplico la imagen girada en el .bmp la CPU no llega al 5%.

Si me podeis echar una mano os lo agradeceria ;)

El codigo que uso és el siguiente:

Código: Seleccionar todo
bool accio::PintaReverseV(SDL_Surface *imatge,SDL_Rect *Origen,SDL_Surface *p, SDL_Rect *Desti) {
//Creo esta imagen para no tener que girar toda la imagen .bmp donde estan todos los sprites
   SDL_Surface *Temp = SDL_CreateRGBSurface(SDL_HWSURFACE, Origen->w, Origen->h, imatge->format->BitsPerPixel, imatge->format->Rmask, imatge->format->Gmask, imatge->format->Bmask,  imatge->format->Amask);
   if(!Temp)return false;
   
   SDL_Rect dest;
   dest.x = 0;
   dest.y = 0;
   SDL_BlitSurface(imatge, Origen, Temp, &dest);
   SDL_Surface *Girada = rotozoomSurfaceXY(imatge, 1, -1, 1, 0);
   SDL_BlitSurface(Girada, &dest, p, Desti);
   SDL_FreeSurface(Girada);
   SDL_FreeSurface(Temp);
   return true;
}
hugetto
 
Mensajes: 5
Registrado: Vie Abr 13, 2007 8:35 pm

Notapor rcaf » Vie May 18, 2007 6:31 pm

Supongo que estas usando una sprite sheet, con todos los sprites en un solo archivo.

Creo que para este caso es mejor que manejes las superficies en un arreglo, y antes de entrar al game loop, generes las posibles imagenes rotadas que necesitas usar, y así después solo bliteas la superficie correspondiente.

Utilizar la funciones rotozoom pueden ser un poco costosas en tiempo real, ya que ademas de realizar los cálculos para realizar un zoom o rotación, se está creando y liberando memoria de superficies en tiempo de ejecución, lo que provoca una baja considerable del rendimiento de nuestra aplicación.

Por lo tanto, lo mejor es utilizar estas funciones solo para generar las superficies al inicio, luego solo usarlas, y por último antes de salir del juego, eliminar su memoria.

Para hacer rotaciones o escalados en tiempo real, lo mejor es utilizar OpenGL.

Saludos!
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


Volver a Sobre las bibliotecas multimedia

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado