フルスクリーンとウィンドウの切り替え

SDL でフルスクリーンとウィンドウを切り替える方法について記述します。
Linux だけで動作させる場合ならば、SDL_WM_ToggleFullScreen() を使えば簡単ですが、Windows ではこの関数は使えません。

以下では SDL_SetVideoMode() を使ってウィンドウモードを切り替える方法を示します。この実装は SDL-1.2.XX/test/graywin.c で紹介されています。


サンプル

toggleScreen.cpp
#include <SDL.h>
#include <cstdlib>

namespace
{
  SDL_Surface* createScreen(Uint32 flags)
  {
    // 毎回、ウィンドウを作りなおす
    return SDL_SetVideoMode(640, 480, 0, flags);
  }
}


int main(int argc, char *argv[])
{
  static_cast<void>(argc);
  static_cast<void>(argv);

  SDL_Init(SDL_INIT_VIDEO);
  atexit(SDL_Quit);

  Uint32 flags = 0;
  createScreen(flags);

  SDL_Event event;
  while (true) {
    while (SDL_PollEvent(&event)) {
      switch (event.type) {
      case SDL_QUIT:
        exit(0);
        break;

      case SDL_KEYDOWN:
        // スペースキーが押されたら、ウィンドウモードを変更する
        if (event.key.keysym.sym == SDLK_SPACE) {
          flags ^= SDL_FULLSCREEN;
          createScreen(flags);
        }
        // ESC を押すと終了する
        if (event.key.keysym.sym == SDLK_ESCAPE) {
          exit(0);
        }
        break;
      }

      SDL_Delay(10);
    }
  }

  return 0;
}

簡単ですね。
ただ、私の Windows 環境だと、SDL + OpenGL でウィンドウモードを切り替えたときに、以降の描画画面が青くなってしまいます。この問題については、対処方法がわかったときに記述します。

既に対処法が分かっている方は、是非、以下のコメントフォームにて教えて下さい。よろしくお願いします。


コメントページ


参考



Generated on Mon May 18 11:11:10 2009 by  doxygen 1.5.7.1