在不退出SDL的情况下关闭SDL窗口

时间:2012-08-21 07:36:50

标签: window sdl

我正在使用SDL1.2来处理我的openGL框架中的窗口管理。

是否可以在程序运行时销毁窗口(曲面)而不调用SDL_Quit()

背景:我的框架实际上只是多媒体环境中的一个gfx组件(可能有很多这样的gfx组件)。我不能对其他组件做什么做出任何假设(例如他们是否使用SDL)。我担心调用SDL_Quit()会对其他组件产生副作用。

目前我正在做类似的事情:

SDL_Surface m_surface=0;

bool create_window() {
   int videoFlags = SDL_OPENGL;
   if(m_surface) {
       pritnf("window already made\n");
       return false;
   }
   if(SDL_Init(SDL_INIT_VIDEO) < 0 ) {
       pritnf("unable to initialize SDLn");
       return false;
   }
   m_surface = SDL_SetVideoMode(WIDTH, HEIGHT, BPP, videoFlags);

   return(m_surface!=0);
}

bool destroy_window() {
   if(m_surface) {
      SDL_Quit();
   }
   m_surface=0;
}

create_window()destroy_window()都应该在应用程序的生命周期中被多次调用。 但是,多次拨打SDL_Init()SDL_Quit()感觉很奇怪。

不过,我现在正在使用linux,但我的目标是跨平台(至少是linux,osx,w32)

1 个答案:

答案 0 :(得分:4)

我不认为SDL 1.2可以实现这一点,屏幕表面具有特殊状态,只有SDL_Quit()可以删除它。您可以尝试使用SDL_QuitSubSystem()关闭视频部分,然后关闭SDL_InitSubSystem()以恢复它,但我不确定它是否可行(我现在无法测试)。

另一方面,使用SDL_CreateWindow()SDL_DestroyWindow()的SDL 2.0看起来很容易。

无论哪种方式,您都需要将初始化(SDL_Init())与窗口创建分开,并从窗口销毁中清除(SDL_Quit())。