Ruby/SDL on MacOSX

on MacOSX とか in MacOSX とか悩みますよね。私は気にしない境地に達しています。

初日は Ruby/SDL を見てた。色々考えたけど、やっぱ SDL がイカンだろうという感は強い。要は SDL はユーザーの main をマクロで SDL_main に書きかえていて、 libSDLmain.a に main を忍ばせて、そこで Cocoa の起動をしてから Cocoa のイベントループに入ったら SDL_main を呼ぶ、と。

これのうっとうしいところは、一旦 main が動いちゃうと Cocoa の初期化をしてまた戻ってくる…ってことが簡単にできないことです。でまぁこいう苦労の記録がある、と。

http://www2s.biglobe.ne.jp/~nunokawa/wiki.cgi?page=Ruby%2FSDL+on+Mac+OS+X

http://eto.com/d/RubySDLonMacOSX.html

今はずいぶん簡単になってるみたいで、動かしたいだけなら

#include <SDL.h>
void ruby_init();
void ruby_options(int argc, char* argv[]);
void ruby_run();
int main(int argc, char* argv[]) {
    ruby_init();
    ruby_options(argc, argv);
    ruby_run();
    return 0;
}

こんな感じのファイルを `sdl-config --cflags --libs` -lruby つきでコンパイルしてやれば動きます。

んでまぁ根本的な対策としては、私が考えてたのは、 Cocoa の初期化は別スレッド、とか初期化前に継続作っておいて舞い戻ってくる、とかですが、前者はどうもうまくいかなくて(少なくともイベント取れないと思う)、後者はめんどくなってやめました。

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h