SDL_SetVideoMode зависает процесс - PullRequest
0 голосов
/ 25 октября 2010

Во время инициализации моей программы я вызываю SDL_SetVideoMode () сразу после SDL_Init (), и она вешает мою программу.При выполнении программы, если я нажму Ctrl-C во время зависания, она продолжится как обычно, и все будет работать нормально.

Очевидно, что необходимость каждый раз прерывать SDL_SetVideoMode () не идеальна!У кого-нибудь есть идеи, что это может быть?

Вот простой тестовый код, который я использую:

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 Ответ

1 голос
/ 26 октября 2010

С тех пор я нашел проблему. Я просто не освобождаю поверхность изображения после отображения, что означало, что SDL_Quit вызывался неправильно! Исправлен код из примера ниже:

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;
}
...