2010-10-25 16 views
0

Lors de l'initialisation de mon programme, j'appelle SDL_SetVideoMode() juste après SDL_Init() et il suspend mon programme. Lors de l'exécution du programme, si j'appuie sur Ctrl-C pendant le blocage, il continuera comme d'habitude et tout ira bien.SDL_SetVideoMode bloque le processus

Évidemment, devoir interrompre SDL_SetVideoMode() à chaque fois n'est pas idéal! Quelqu'un a des idées sur ce que cela pourrait être?

est ici le code de test simple j'utilise:

main.cpp 

int main(int argc, char* argv[]) 
{ 
    Presentation* p = new Presentation(); //Presentation is used to display JPEGs 
    p->Initialise(); 

    while (p->hasSlides()) 
    { 
    p->DisplayNextSlide(); 
    sleep(5); 
    } 
    return 0; 
} 


Presentation.cpp 

Presentation::Initialise() 
{ 
    SDL_Init(SDL_INIT_VIDEO); 
    m_pScreen = SDL_SetVideoMode(1280,720,16, SDL_DOUBLEBUF | SDL_FULLSCREEN); 
    if (!m_pScreen) 
    { 
    //error handling... 
    } 

    SDL_ShowCursor(SDL_DISABLE); 
    initialised = true; 
} 


SDL_Surface* m_pImage; 

Presentation::DisplayNextSlide() 
{ 
    m_pImage = IMG_Load(filename); 
    if(!m_pImage) 
    { 
    //error handling... 
    } 

    SDL_BlitSurface(m_pImage,0,m_pScreen,0); 
    SDL_Flip(m_pScreen); 
} 
+1

Veuillez montrer le code que vous utilisez. – Giann

Répondre

1

Je l'ai depuis trouvé le problème. Je ne libérais tout simplement pas la surface de l'image après l'affichage, ce qui signifiait que SDL_Quit n'était pas correctement appelé! Code fixe de l'exemple ci-dessous:

SDL_Surface* m_pImage; 

Presentation::DisplayNextSlide() 
{ 
    m_pImage = IMG_Load(filename); 
    if(!m_pImage) 
    { 
    //error handling... 
    } 

    SDL_BlitSurface(m_pImage,0,m_pScreen,0); 
    SDL_Flip(m_pScreen); 
    SDL_FreeSurface(m_pImage); 
    m_pImage = NULL; 
}