続々・MacOSX LionでSDL 解決編

お詫び

今までの2つの記事で使ってたテストプログラムにミスがありました
どうりで動かないわけだ・・・

んで、セットアップ手順を再度まとめ直します。

SDLのインストール

公式サイトからソースをダウンロード
http://www.libsdl.org/

テキトーなディレクトリに展開してビルド
このとき、configureのオプションとして--disable-assemblyをつける
参考:
http://stackoverflow.com/questions/8136857/libsdl-cmake-and-mac-os-x-lion

$ tar zxvf SDL-1.2.15.tar.gz
$ cd SDL-1.2.15
$ ./configure --disable-assembly
$ make
# make install

動作確認のためにテストプログラムをビルドしてテキトーに一つ実行してみる

$ cd test
$ ./configure --disable-assenbly
$ make
$ ./checkkeys

動作することを確認

SDLのサンプル

試しに画面を作るだけのプログラムを組んで実行してみる。
参考:
http://ro119.com/archive/tokyo.cool.ne.jp/sdl/

/**
 * show_window.cpp
 */
#include <SDL/SDL.h>

#include <iostream>
#include <string>

SDL_Surface* screen;
static const std::string SCREEN_CAPTION = "SDL window test";
static const int SCREEN_WIDTH = 640;
static const int SCREEN_HEIGHT = 640;
static const int SCREEN_BPP = 32;

bool init();
bool finalize();
bool pollingEvent();

int main(int argc, char* argv[]) {
  // initialize
  if (!init()) {
    //std::cerr << "ERROR: failed to initialize SDL" << std::endl;
    exit(1);
  }

  // main loop
  while (true) {
    if (!pollingEvent()) break;
  }

  // finalize
  finalize();
  
  return 0;
}


bool init() {
  // initialize SDL
  if( SDL_Init(SDL_INIT_VIDEO) < 0 ) return false;

  // set caption of window
  SDL_WM_SetCaption( SCREEN_CAPTION.c_str(), NULL );

  // initialize window
  screen = SDL_SetVideoMode(
                            SCREEN_WIDTH,
                            SCREEN_HEIGHT,
                            SCREEN_BPP,
                            SDL_SWSURFACE // | SDL_FULLSCREEN
                            );

  // vanish mouce cursor
  // SDL_ShowCursor(SDL_DISABLE);

  return true;
}

bool finalize() {
  // finalize SDL
  SDL_Quit();
}


// polling event and execute actions
bool pollingEvent()
{
  SDL_Event ev;
  SDLKey *key;
  while ( SDL_PollEvent(&ev) )
    {
      switch(ev.type){
      case SDL_QUIT:
        // raise when exit event is occur
        return false;
        break;
      case SDL_KEYDOWN:
        // raise when key down
        {
          key=&(ev.key.keysym.sym);
          // ESC
          if(*key==27){
            return false;
          }
        }
        break;
      }
    }
  return true;
}

コンパイルと実行
ちなみにsdl-configはSDLに関する情報を取得するために用意されているスクリプトで、以下のコマンドではCFALGSとLDFLAGSを取得してきてる

$ g++ show_window.cpp -g `sdl-config --cflags` `sdl-config --libs`
$ ./a.out

抜けるときはESCキーか閉じるボタンをクリックで

その他のSDLライブラリ

これはconfigureに--disable-assemblyをつければ以前紹介した方法
http://d.hatena.ne.jp/yano-htn/20120218/1329553181
でいけるかと思うので省略