Nanashi-softプログラマ専用Windows gcc SDL


◇Windowsでgcc+SDL -フルスクリーン表示をちゃんとする-

表示できない画面モードに変更すると、フリーズするパソコンもあります
ちゃんと環境を調べてから SDL_SetVideoModeを行いましょう

○画面モードが変更可能か調べる

指定した画面モード&色深度でのフルスクリーン表示が可能か調べます

  int bpp=SDL_VideoModeOK(1024, 768, 32, SDL_SWSURFACE|SDL_FULLSCREEN);
  printf("bpp=%d\n",bpp);
  if(bpp != 32){
    SDL_Quit();
    return -1;
  }

注意点として、SDL_VideoModeOKの戻り値は、可能な色深度です
ですから、指定した色深度と等しい事を if文で調べなければなりません
可能かどうか? の true/falseでは無いのでハマらないように

○変更可能な画面モード一覧を調べる

ピンポイントにゲームモードと同じ画面サイズでは無く、少し大きな画面が可能な場合もあるので、ちゃんと調べる方が良いです
例えば 720p(1280x720)で設計していたとして、普通のディスプレイは 1280x1024しか持っていないことがほとんどです

  modes=SDL_ListModes(NULL, SDL_SWSURFACE|SDL_FULLSCREEN);
  if(modes == (SDL_Rect **)0){
    printf("video mode error.\n");
    exit(-1);
  }
  if(modes == (SDL_Rect **)-1){
    printf("video mode all ok!\n");
  }
  else{
    /* 有効なモードを表示 */
    printf("video mode error.\n");
    for(i=0;modes[i];++i){
      printf("%d x %d\n", modes[i]->w, modes[i]->h);
    }
  }

これで、可能なモード一覧が取得できるので、適切なモードに変更する

ちなみに、一番最初に出てくるのが推奨モードらしい
例えば、うちのサブディスプレイは 1024x768表示だが、これを 800x600に手動で変更してから SDL_ListModes取ると、最初に 1024x768が出てくる

どちらも、DirectX必須であれば、ハードウェアモードで問い合わせた方が良いです
SDL_SWSURFACE → SDL_HWSURFACE


TOPプログラマ専用Windows gcc SDL