2

私のopenGLフレームワークでウィンドウ管理を処理するためにSDL1.2を使用しています。

を呼び出さずにプログラムの実行中にウィンドウ (サーフェス) を破棄することは可能SDL_Quit()ですか?

背景: 私のフレームワークは、マルチメディア環境における (潜在的に多くのそのような gfx コンポーネントの) 1 つの 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) をターゲットにしています。

4

1 に答える 1

4

これは SDL 1.2 では不可能だと思います。画面の表面には特別なステータスがあり、SDL_Quit()削除することしかできません。SDL_QuitSubSystem()ビデオ部分だけをシャットダウンして元に戻すことができますSDL_InitSubSystem()が、うまくいくかどうかはわかりません (今はテストできません)。

一方、SDL 2.0 では と を使用すると簡単に実行できSDL_CreateWindow()ますSDL_DestroyWindow()

SDL_Init()いずれにせよ、初期化 ( ) をウィンドウの作成から、クリーンアップ ( SDL_Quit()) をウィンドウの破棄から分離する必要があります。

于 2012-08-21T09:30:01.703 に答える