Problema con SDL_DisplayFormat

Consulte acerca de programas, técnicas, algoritmos etc.

Problema con SDL_DisplayFormat

Notapor sofoke » Jue Dic 27, 2007 3:01 am

Tengo un Error al querer usar SDL_DisplayFormat()
Tengo este codigo

Código: Seleccionar todo
#include "SDL/SDL.h"
#include "SDL/SDL_image.h"
SDL_Surface *Exp2;
...
Exp2 = IMG_Load( "../IMG/EXPLOCION/EXPLOCION_FOR/2.png" );
if( Exp2 == NULL ){
   printf("Error al cargar la imagen %s\n", SDL_GetError() );
   exit( 0 );
}
Exp2 = SDL_DisplayFormat( Exp2 );
...
SDL_FreeSurface( Exp2 );


y todo bien compila y todo(sin errores) pero cuando lo ejecuto se cierra la ventana inmediatamente ni si quiera se ve que la abre y no marca error no se que pasa...
Ojala Puedan ayudarme...
...cuando lo popular no es suficiente...
Gnu-Linux-y-Más
Avatar de Usuario
sofoke
 
Mensajes: 102
Registrado: Jue May 24, 2007 8:10 pm
Ubicación: México

Notapor hugoruscitti » Jue Dic 27, 2007 1:50 pm

Saludos, por lo que se ve en el código me parece que todo
está bién. Es imporante ver que el contexto donde se ejecuta todo
eso.

Armé un programa de ejemplo completo para que puedas probar si
te funciona correctamente. El programa muestra una ventana pequeña
durante dos segundos (y usa SDL_image).

Te recomiendo que lo pruebes en un sistema como GNU/Linux, es
mas fácil saber si funciona o no contando con un terminal de
texto:

http://www.losersjuegos.com.ar/foro/viewtopic.php?t=207

El código:

Código: Seleccionar todo
#include <stdio.h>
#include "SDL.h"
#include "SDL_image.h"

int main(void)
{
    SDL_Surface * screen;
    SDL_Surface * superficie;

    SDL_Init(0);
    screen = SDL_SetVideoMode(320, 240, 16, 0);

    /* prueba de SDL_Display */
    superficie = IMG_Load("explosion.png");

    if (! superficie)
    {
        printf("Error: %s \n", SDL_GetError());
        return 1;
    }

    superficie = SDL_DisplayFormat(superficie);
    SDL_BlitSurface(superficie, NULL, screen, NULL);
    SDL_Flip(screen);

    /* espera dos segundos antes de cerrar el programa */
    SDL_Delay(2000);
    SDL_FreeSurface(superficie);

    return 0;
}


Archivo "Makefile" para compilar todo el proyecto mediante el comando
"make":

Código: Seleccionar todo
CFLAGS=`sdl-config --cflags`
LDFLAGS=`sdl-config --libs` -lSDL_image
all: ejemplo


Saludos.
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

Notapor sofoke » Mié Ene 02, 2008 6:43 pm

con el codigo anterior funciono perfecto
carga la imagen y la convierte en el formato que tiene la pantalla (SDL_DisplayFormat)
pero; no entiendo: por que con mi codigo no muestra nada¿?
Con mi codigo sigue sin mostrar nada y no da error ni siquiera en los archivos que crea SDL para errores...
...cuando lo popular no es suficiente...
Gnu-Linux-y-Más
Avatar de Usuario
sofoke
 
Mensajes: 102
Registrado: Jue May 24, 2007 8:10 pm
Ubicación: México

Notapor hugoruscitti » Jue Ene 03, 2008 12:55 am

sofoke escribió:pero; no entiendo: por que con mi codigo no muestra nada¿?


No lo sé, solo he visto un fragmento de tu programa en el primer
mensaje; y parece correcto. El problema debe estar en alguna
otra parte del código que no has mostrado aún... ¿quien sabe?, tal
vez no tienes un bucle de juego correcto (para mantener el programa
en funcionamiento), o no usas SDL_Delay como en el ejemplo
que escribí... no sé, pueden ser muchas cosas en realidad, tal vez
siquiera sea un error: ¿cual es la condición que usas para mantener
el programa en funcionamiento?, puede que eso esté fallando.

Saludos.
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

Notapor carleto » Sab Ene 05, 2008 9:35 pm

No se si será tu caso, pero a mí me pasó algo parecido y era por que llamaba a SDL_DisplayFormat antes de iniciar SDL y SDL_SetVideoMode.

Había creado una clase y en el constructor puse el código para cargar el gráfico, y creaba un objeto de dicha clase antes de iniciar SDL. Modifiqué para crear el objeto después de iniciar SDL y se acabó el error.

Saludos
Avatar de Usuario
carleto
 
Mensajes: 42
Registrado: Mar Ago 21, 2007 9:38 pm
Ubicación: Almería, España

Notapor sofoke » Jue Ene 10, 2008 9:12 pm

Al parecer :oops: ambos tienen algo de razon pues me encontre con que estaba algo mal el gameloop y el orden de los objetos y otras cosillas
pero parece ser que ya esta bieny les agradesco su ayuda.
...cuando lo popular no es suficiente...
Gnu-Linux-y-Más
Avatar de Usuario
sofoke
 
Mensajes: 102
Registrado: Jue May 24, 2007 8:10 pm
Ubicación: México

Notapor trutoman » Mar Abr 08, 2008 9:51 pm

Es porque haces "ext2 = SDL_DisplayFormat(ext2)"

No se puede hacer sobre la misma surface, esto provoca memory leak, según la documentación de SDL.
trutoman
 
Mensajes: 1
Registrado: Mar Abr 08, 2008 9:48 pm


Volver a General

¿Quién está conectado?

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

cron