戻る

Allegro4 をMac OSX にインストールする。

Allegro とは、「Allegro Low LEvel Game ROutines」 の略
Allegro4 OSX版は OSX 10.2 以降で動作するそうです。 こちらで確認したものは、 OSX 10.3 (4.1.18〜)、OSX 10.4 (4.2.0〜)。 最新のリリースノートによれば OSX10.6 (4.2.3.1〜) にも対応しているらしい。
 

はじめに

OSXでAllegroを扱う場合は、ライブラリのインストールはターミナルから行います。またコードの編集&リンク設定&ビルドはXcode(またはターミナル上)からも行えます。
また、アプリケーションの開発は、C言語/C++言語(ObjectiveC++)に対応しています。Objective-C が使える人は、OSX の機能をもっと引き出せるかもしれません。

ダウンロードと、OSX環境へのインストールについて

この文書ではAllegro の バージョンは 4.2.0 で説明しますが、インストール方法は似たようなものです。

  • 公式サイト http://alleg.sf.net/ から allegro-4.2.0.tar.gz という圧縮ファイルをダウンロードする。
  • 解凍ツールを使い、ファイルを解凍すると、「allegro-4.2.0」 というディレクトリが作られます。
  • ターミナル を使い、ディレクトリに移動し、コマンドライン上からインストール作業をします。

    allegro-4.2.0 ディレクトリに移動するコマンドは...

    インストール

    インストール するには ターミナルから以下のコマンドを入力します。 make には少し時間がかかります。
    cd allegro-4.2.0

    chmod +x fix.sh
    ./fix.sh macosx
    make
    sudo make install
    sudo make install-framework EMBED=1
    sudo make install-template

    インストール時のコマンド説明

    chmod +x fix.sh  fix.sh に実行権限を与える。
    ./fix.sh macosx   OSXにインストールできるよう最適化する
    sudo make install 動的ライブラリ(.dylib)として インストールされる。
    sudo make install-framework EMBED=1 このオプションを有効にすると、アプリに埋込み可能なフレームワークとしてインストールされます。
    make install-applehelp アップルのヘルプビューアにAllegroマニュアルを追加する(英語)。
    sudo make install-templat Xcode用のプロジェクトの テンプレートをインストールします。 「新規プロジェクト作成」にAllegroアプリ開発の項目が追加されます。
    テンプレートがインストールされる場所はそれぞれ、 このテンプレートには、Xcodeのリンカ情報やフレームワークのリンク情報等も設定済みなので、開発がとてもラクになります。

    静的ライブラリや、デバッグ版をインストールする場合
    export STATICLINK=1 静的ライブラリとしてインストールする場合はこのコマンドも入力します。
    export DEBUGMODE=1
    export PROFILEMODE=1
    それぞれ、デバッグモード, プロファイルモードでインストールを準備します。 デバッグ版は エラーログやASSERT機能などが用意されているらしい。
    • export STATICLINK=1 を省略し、export DEBUGMODE=1 のみ指定すると、Allegroデバッグモードの動的ライブラリ がインストールされます。
    • デバッグモードの静的ライブラリをインストールする場合は export STATICLINK=1と export DEBUGMODE=1 を併用します。
    • Allegro拡張ライブラリの中には、インストール時にallegro_s を要求する物があるので、フレームワーク版と静的リンク版両方いれといたほうが楽かもしれません。

    ※これらを設定した場合は、再度 make し install を行います。
    例えば...静的リンク版をインストールするには、続けて以下のようにコマンドを入力します。
    export STATICLINK=1
    make
    sudo make install
    ○make を途中でやり直す場合
    間違ってmacosx 以外 のmake を行ってしまったり、エラーが発生してmakeが失敗した時には、
    make clean
    と入力することで、作業時のファイルを片付け、最初の状態にすることができます。

    ○コンパイルした後、解凍ディレクトリは?
    任意の場所へ移動させても差し支えはありません。しかし、マニュアルやGrabber等の便利なツールが収録されているので、解凍したディレクトリはゴミ箱へ捨てない方がよいでしょう。

    アンインストール

    アンインストールについて
    新しいバージョンと入れ替えたり、アンインストールしたいと思った場合、
    Allegroをアンインストールするには、ターミナルからAllegroを解凍してできたディレクトリに入り、
    sudo make uninstall
    と、入力します。(※アンインストールするには、既にmakeが通っている必要があります。)
    どのファイルが削除されたのかは uninstall 実行時のターミナルのログを見るとわかります。

    Allegro拡張ライブラリのアンインストールについては、それぞれの説明書を参考にしてください。

  • インストール時に行われる事

    make&インストール行われると、マニュアルや文書類は makedocにより、自動的にHTML化される。 同時に デモ、サンプル類、fixbundle や Grabber等のツールもコンパイルされる。 インストールが終了したら、マニュアルを見たり、サンプルプログラムを実行して、Allegroはどんなことができるのか見てみるとよいでしょう。

    Allegro オンライン マニュアル 

    ○Allegro で、インストールされたファイルと、リンカフラグ
    何がインストールされたかは、 usr/local/lib や Frameworks ディレクトリの内を見ても確認できます。
    拡張ライブラリの中には、コンパイル時に 静的ライブラリをリンクするものや、
    コンパイル時にAllegroのデバッグモードを必要とするものがあります。
    ld: can't locate file for: -lalleg_s
    make: *** [Demo] Error 1
    このようなエラーが出るのは、Allegroの静的ライブラリ版がインストールされていないのが原因です。

    その他

    ○Xcode で、C++言語を扱うには
    OSXで、C++言語や、Objective-C 言語を使ってウインドウアプリケーションを開発したい場合は、コードを ObjectiveC++ として扱います。(ソースコードの拡張子.cpp を、拡張子.mm に変更し、関連ファイルをXcodeから参照できるようにしてください。あと C++のフレームワークも) リンカの設定などは、プロジェクトのテンプレートを元にすると簡単かもしれません。

    ○Allegroをアップデートしたときの注意
    古いAllegroライブラリに動的リンクしたままになっているとクラッシュする場合があります。
    これは、アプリケーションのクラッシュログを調べると分かります。(Onyxなどを使っても見れます。)
    Link (dyld) error:
    dyld: /Users/xcode/remings/build/remings.app/Contents/MacOS/remings
    can't open library: @executable_path/../Frameworks/Allegro.framework/Versions/4.1.18/Allegro (No such file or directory, errno = 2)
    ↑Allegro4.2.0 をインストールした後に、Allegro4.1.18 の時に開発していたプロジェクトを実行した。

    関連情報

    ○関連情報
  • Allegroプログラミング Allegroクイックリファレンス の日本語訳版が読めます。
  • Allegro Vivace Allegroのチュートリアル。
  • LoomSoft resources-Allegro Newbie Tutorial
  • FreeLunchDesignAllegroで制作されたもの
  • Alex the Allegator 4 は MacOSX とBeOS でも遊べる。

    ○デバッガ
    Xcode のデバッガはAllegroアプリのデバッグにはあまり使えません(アセンブラ表示で一見わけがわかりませんが、それでも、エラーの原因となった関数名や、一部構造体の変数も探し出せることもあります)。またAllegroの デバッグ版もあります。

    ○こんなエラーメッセージが出た場合(割り当てられたメモリを二重に解放しようとしている。):
    RytPaint(5243,0x182b200) malloc: *** Deallocation of a pointer not malloced: 0xf0080a4; This could be a double free(), or free() called with the middle of an allocated block; Try setting environment variable MallocHelp to see tools to help debug
    Allegro は すべての ストラクチャなどに割り当てられたメモリを、終了時のEND_OF_MAIN();マクロによって自動的に解放しています。 そのため、プログラム中でメモリを手動で解放するdestroy系関数が呼ばれていれば、二重にメモリを解放することになるようです。
    このメッセージが表示されても、プログラムは正常に終了しますが、メモリを手動で解放するdestroy_系関数をコメントアウトしておけば、一応出なくなります。
    // destroy_bitmap( cursor );
    // destroy_rle_sprite( cu_pat );
    しかし、Windows, Unix, MacOS X 以外の、END_OF_MAIN();マクロに未対応のプラットフォームを考慮すると、destroy_系関数は必要です。

    Allegro収録サンプルプログラム

    Allegro オンライン マニュアルにも情報があります。

    Allegroに収録されているサンプルプログラムは、2種類あり
    ダウンロードしたファイルを解凍したディレクトリ
  • /allegro-4.1.18/ の examples/ ディレクトリ に入っているサンプルプログラム
  • /allegro-4.1.18/ の test/ ディレクトリ に入っているテストプログラム。
    があります。
    ソースコードを読むことは、実際に関数がどのように使われているのかを知ることができるので、とても役立ちます。

    サンプルプログラム

    ダウンロードしたファイルを解凍した場所 /allegro-4.1.18/ の examples/ ディレクトリ にあるサンプルプログラム。
    実行ファイルとソースやデータがついています。

    使い方(exsample.txt より抜粋)
  • ダブルクリックすると、ターミナル上で動作するコンソールアプリケーション。ESC キーを押すと終了する。
  • サンプルの中には、ユーザーが解像度を選べたり、フルスクリーンで実行されるものもある。
  • 一部のデモは読み込むファイル名を引数として渡さないと動作しないものもある。
    【基本部分】
    exhello.c - シンプルな "hello world" プログラム。ライブラリ、ウインドウ、グラフィクの初期化方法
    【コンフィグ】
    exconfig.c - exconfig.ini からコンフィグデータを読み込む by Lennart Steinke
    【DATAFILE】
    exdata.c - データファイルにアクセする。四角形と大きなフォントと小さいフォントを描画
    exexedat.c - 作ったアプリケーションにdatafiles を追加する , by Grzegorz Hankiewicz
    exfixed.c - 小数点を使った計算のデモ
    【Allegro GUI】
    excustom.c - カスタムGUI オブジェクトを作る 
    exgui.c - GUI 表示してみる。プルダウンメニュー、ラジオボタン、チェックボックス、セレクトメニューなど
    exrgbhsv.c - RGB < -> HSV 色空間の変換 ( GUI スライドバーを動かして色を調整することができる)
    【出入力】
    exjoy.c - ジョイスティックからの入力 by Grzegorz Hankiewicz
    exkeys.c - キーボードを使った入力を検出する(終了するにはESCキーを長押しする)
    exsyscur.c - システムカーソルの表示
    exmouse.c - マウスによる入力を検出する ボタンやクリック位置など。画像をつかったカーソル等。
    【オーディオ】
    exsample.c - デジタルサンプリング音源の再生
    exstream.c - オーディオストリームの再生
    exmidi.c - MIDI ファイルを演奏する ./exmidi song.mid で song.mid を演奏。再生時間、ドライバ、再生ファイル名を表示
    exdodgy.c - MIDIプレーヤを使って面白い効果を試す。これは DOS環境 でしか動作しません。
    【スプライト】
    exsprite.c - データファイルとスプライトアニメーション by Grzegorz Ludorowski
    exshade.c - グローシェ-ドスプライト by Patrick Hogan
    exalpha.c - 32 bitカラーで半透明スプライト。 set_write_alpha_blender 関数を使用した描画。
    【グラフィック】
    exscale.c - PCX と BMP ファイルをロードして画像を拡大表示する by Grzegorz Ludorowski
    exxfade.c - truecolor 画像のロードと フェード効果 ./exxfade allegro.pcx
    exbitmap.c - PCX と BMP フォーマットのファイルをロードし表示 ./exbitmap allegro.pcx

    expat.c - sub-bitmap と drawing modeを使ったパターン表示
    extrans.c - 照明効果 及び 半透明効果のデモ by Owen Embury
    exblend.c - truecolorモードでブレンド半透明効果。2つの画像が消えたり現れたりオーバーラップする。

    expal.c - カラーパレットを変化させるアニメーション効果
    excolmap.c - カラーマップテーブルによるエフェクト by Grzegorz Hankiewicz
    extruec.c - truecolor pixel format への転換

    exlights.c - hicolor ビデオモード で、照明効果 を行う方法のひとつ
    exmem.c - メモリビットマップ上でパターンを描いてから、スクリーンへ描画。画像転送の基本処理。
    exaccel.c - VBE/AFオフスクリーン処理。ねずみの画像が移動。多重レイヤとスプライトの参考に。
    ex12bit.c - fake 12-bit truecolor on an 8 bit card, by Richard Mitton
    【スクリーン】
    exscroll.c - ハードウェアスクロールと分割画面
    exflame.c - ビデオメモリに直接書き込む場合の処理速度の比較。炎が燃え上がるデモ
    exflip.c - mode -X を使った、ダブルバッファリングと ページフリッピング

    exupdate.c -スクリーン更新の比較。 ダブルバッファ、トリプルバッファリングなど。 ./exupdate 1〜4
    exdbuf.c - VGA mode 13h 画面でダブルバッファ表示
    ex3buf.c - 三角形が舞い散るデモ mode -X を使用したトリプルバッファリング と retrace interruptのシミュレーション
    【Allegro3D】
    exstars.c - 3D宇宙空間と光速宇宙船 by Dave Thomson
    exzbuf.c - Zバッファポリゴンを使ったデモ by Bertrand Coconnier
    exquat.c - 立方体の回転デモ クオータニオンとオイラー角回転のわかりやすい比較。 by Jason Wilkins

    ex3d.c - 3Dで跳ね回る立方体のデモ
    excamera.c - 3D空間内を視点が移動するデモ。キーで操作可能
    exscn3d.c - scene関数を使ったAllegro3Dデモ by Bertrand Coconnier
    【ユニコード/フォント】
    exfont.c - フォント表示のデモ らしい(うまく動かなかった)
    exunicod.c - ユニコード文字列を扱う関数のデモ by Eric Botcazou(日本語表示や、DATAFILEフォントの読み込みの参考になる)
    【その他】
    exswitch.c - コンソールスイッチモードを制御する。マンデルブロー画像を表示するデモ
    extimer.c - タイマーを使う(遅延と割り込み) 数字をカウントするデモ
    exspline.c - スプライン曲線を使ったスムーズな軌跡移動を構築する

    別の画像ファイルを読み込んでみる
    コマンドラインから実行する場合、引数に別のファイルを指定できるものもあります。
    . /exbitmap allegro.pcx

    サンプルプログラムの個別コンパイル方法
    exfonts.c をコンパイルして exfonts というアプリを作る場合。
    cd allegro-4.2.0/examples/ ディレクトリに入ってから、
    gcc -Wall -o exfonts exfonts.c -I /home/allegro/allegro-unstable/ `allegro-config --libs`
    とコマンドを打つ。

    テストプログラム

    ダウンロードしたファイルを解凍した場所 /allegro-4.1.18/ の test/ ディレクトリ にあるサンプルプログラム。
    それぞれ 実行ファイルとソースやデータがついています。
     
    使い方(exsample.txt より抜粋)
  • ダブルクリックすると、ターミナル上で動作するコンソールアプリケーション。ESC キーを押すと終了する。
  • サンプルの中には、ユーザーが解像度を選べたり、フルスクリーンで実行されるものもある。
  • 一部のデモは読み込むファイル名を引数として渡さないと動作しないものもある。
  • 万が一、虹色カーソル が ぐるぐるして止まったら 「command + option + esc」 キーで強制終了。
    テストプログラム一覧
    cpptest - 拡張子 .cpp のファイルをコンパイル 、実行する。( C++ コード の動作テスト)
    playfli - FLIC/FLI 動画ファイルを再生するテスト

    akaitest - サウンド録音に対応しているかのテスト
    digitest - サウンド入力に対応しているかのテスト

    filetest - GUI を利用したファイルセレクタ
    mathtest - GUI を利用した 電卓
    miditest - GUI を利用したMIDI音源のテスト。楽器を選択し、鍵盤をクリックすると音が鳴ります。

    gfxinfo - グラフィックドライバの情報をを表示する
    play - Digi / Midi ドライバに関する情報を表示する。

    vesainfo - Windows と DOS 向けの機能テスト。
    afinfo - Windows と DOS 向けの機能テスト。

    test - 様々なテストを行う。テスト内容は以下の通り
      グラフィックモード(Solid, Xor,Copy pattern,Solid pattern, Masked pattern,Translucent),
      スイッチモード(None,Pause,Amnesia,Background,Backamnesia), リフレッシュレートの取得,
      blitting関数描画テスト ( textout,blit,stretch_blit,draw_sprite,draw_trans_sprite,draw_lit_sprite,rotate_sprite )
      primitive関数描画テスト( putpixel, hline, vline,rectfill,circle,circlefill,ellipse,ellipsefill,arc,triangle,triangle3d )
      Intaractive テスト( getpixel(スポイト), polygon(多角形), polugon3d(ポリゴンテクスチャ やグローシェーディング等) , floodfill(塗りつぶし),spline)
      スクリーンのプロファイル, メモリのプロファイル, 3D描画のプロファイル
      マウス情報表示,キー入力の表示, タイマー, スクロールに関する情報, 簡易ベンチマーク計測
    Grabber と fileselctor は、プログラムの文字コードをUTF8 にして、和文フォント読み込み処理を加えれば日本語パスも表示されると思います。
    以下のコマンドを実行するとGrabber を個別にコンパイルすることができる(4.1.18の場合)。
    gcc -Wall -o grabber grabber.c datedit.c plugins/*.c -I /home/allegro/allegro-unstable/ `allegro-config --libs`
    コンパイルするとき macosx/obj/plugin.h が存在しないというエラーが出るようなら objディレクトリ を tools ディレクトリにコピーしてうまくソースをリンクさせよう。
    exuincod.c のサンプルで使われているDATAFILE形式の unicod.dat には、ユニコード 画像形式フォントが固められているので、 それをgrabberから読み込むとわかりやすいです。
  • Allegro概略

    マルチプラットホームに対応しています: DOS , Windows , Unix, Linux, BeOS , QNX , MacOS X

    ○ 基本仕様と、読み込み可能なフォーマット
    ウインドウモード, フルスクリーンモード (8bit パレット, 15,16,24,32bit 半透明処理)
    z-buffer によるポリゴン3D描画。ビットマップのダブルバッファリング,トリプルバッファリング
    Blitting 透過処理 3種類のスプライト(Normal/lit ,RLE, Compiled), 拡大,縮小,反転,回転,透過,半透明
    ユニコード 対応(ASCII , UTF8, UTF16), デバッグ・トレース、タイマー, GUI
    キーボード, マウス,ジョイスティック による入力 , DATアーカイブ と Packfile 圧縮。

    イメージ: bmp , pcx , tga , lbm 形式の読み込みと保存
    サウンド: wav , voc , midi 形式の再生と録音
    フォント: .fnt (PC bios font) , .grx(xFree86) , Datafile(フォント画像化)
    動画関連:fli , flc(Autodesk Animator形式)
    コンフィグ:ini (テキストファイルで、解像度やキーコンフィグ等の設定情報を記録できる)
    アーカイブ:.dat (Grabber, DAT ツールによって圧縮したDatafile、 またはLZW形式のPackgile )
    FLIC routines や load_grx_font などの関数はほとんど使わないかもしれない。

    Allegroの弱点は、デフォルトで対応しているフォーマットが古く、新しいフォーマットには対応してない所です。
    Allegro がデフォルトでは対応していない機能を使いたい場合でも、それを補う方法はあります
    例えばTrueTypeフォント, JPEG , PNG,GIF画像形式, Mpeg ,Ogg Vorbis , mp3 音源ファイルを扱うには…
    1. 自分で読み込みプログラムを書く(C標準ライブラリも使えます)
    2. Allegro用の拡張ライブラリが用意されているので、それが使えます。
    3. Allegroに依存しない、ライブラリ fmod や wxWidgets 等を使う。
    他のライブラリと組み合わせて用いる場合は、そのライブラリの掲げている、ライセンス に従って用いてください。


    ○ MacOSX 版 固有の仕様
    OSXにおける Allegro プログラムは Cocoa アプリとして動作します。Cocoa インターフェイスは END_OF_MAIN()マクロによって隠されており、これは liballeg-main.a ファイルで定義されている。 システムドライバが初期化後、NSApplication オブジェクトから、ウインドウサーバーに接続するらしい。
    Allegro で指定可能なOSX 固有のグラフィックドライバ
    GFX_QUARTZ_FULLSCREEN - フルスクリーン表示
     CoreGraphics(Quartz)DirectDisplay interface による描画

    GFX_QUARTZ_WINDOW - ウインドウ表示
     Cocoa QuickDraw with Quartz 2D( Quartz 2D から QuickDrawを使う )描画。
    Allegro で指定可能なOSX 固有のサウンドドライバ
    マウスや、サウンドドライバが動作するには、 MacOS X 10.2.x (Jaguar)以降が必要です。
    MIDI_CORE_AUDIO - CoreAudio MIDI シンセの使用。Carbon Sound Manager出力 (OSX 10.2 以降)
    MIDI_QUICKTIME - QuickTime 音源を割り当てる
    マルチプラットフォームを意識する場合は以下のものを指定するのが無難です。
    GFX_TEXT - エラー発生時等
    GFX_AUTODETECT - 画面モードの自動検索
    GFX_AUTODETECT_FULLSCREEN
    GFX_AUTODETECT_WINDOWED
    GFX_SAFE

    MIDI_AUTODETECT - MIDIドライバの自動検索
    MIDI_DIGMID - ウェーブレットプレイヤーを使う。
    MIDI_NONE
    グラフィックモードやサウンドの初期化について は exhello.c 等の 収録サンプルコードが参考になります。

    ○ fixbundle について
    MacOSX のコマンドライン上でAllegroアプリを開発する場合に、アイコン等のリソースを追加するためにこのツールを使います。 このツールは、Allegroを解凍したディレクトリのtools ディレクトリに入っています。 Xcode を使う場合は、このツールのお世話にはなりません。

    ○使用する際の問題点(4.2.0正式版)
  • Allegro MacOSX版には 特有の問題があります。
  • Mac OSX 10.4 Tiger の Xcode で使用可能な gcc4 コンパイラを使った場合、10.4未満の環境でアプリケーションの互換性の問題が発生するらしい。Apple がこの問題を改善するまでは gcc4 ではなく gcc3 を使う事を推奨するとのこと。

  • GUIのファイルセレクタで、日本語文字列が使われた ファイル名やパス名 が 文字化けする。
  • GUI を使う場合は、あまり激しい操作をしない。
  • メニューから ファイル>終了を選択しても終了しない? ESCキーで終了。
    4.2.0 正式リリース版では 日本語文字列など含むUTF-8パス名の表示に対応しました。
    OSX版については、マウスやジョイスティックなど 多くの改善が図られているようです。

  • 標準API と 代表的な関数。

    DATAFILE routines と FONT, Grabber(と DAT)ツール は密接に関連するので あわせて読んでおいた方がよい。 exunicod.c と unicod.dat も参考になる。 また、 FLIC routines は かなり珍しいフォーマットを扱うため 読まなくても問題ないかもしれない。
    システム
    * Using Allegro:★★★ サンプルコードを見ると大体わかる
    allegro_init, allegro_message ,END_OF_MAIN,set_window_title

    構造体(ストラクチャ)
    * Structures and types defined by Allegro :★★★★
    BITMAP の 幅や高さを得たい時など。

    ユニコード
    * Unicode routines:★★★★
    テキスト関連、文字列の検索や連結だとか。

    コンフィグ
    * Configuration routines:システム環境設定や初期設定などを書いた
    .iniファイルを読み込む ★★ 興味が有れば

    出入力
    * Mouse routines:★★★★★
    * Timer routines:★★★★
    * Keyboard routines:★★★★★
    * Joystick routines:★★★★
    * Graphics modes:★★★ 要点のみおさえる
    set_gfx_mode(GFX_AUTODETECT, 640, 480, 0, 0) を押さえておけばOK。

    画像関連
    * Bitmap objects:★★★★ 必要に応じて
    create_bitmap, screen,destroy_bitmap,SCREEN_W,SCREEN_H
    * Loading image files:★★★ 要点のみおさえる
    load_bitmap の ロード方法さえ押さえておけばOK。
    * Palette routines :★★★★ 必要に応じて
    * Truecolor pixel formats:★★★ 要点のみ
    makecol は押さえとく、あとは必要に応じて

    図形描画
    * Drawing primitives:★★★ 要点のみ
    rectfill , rect , circle., circlefill, polygon,

    画像転送&スプライト
    * Blitting and sprites :★★★★ 必要に応じて
    * RLE sprites:★★★★ 必要に応じて
    * Compiled sprites:★★ 興味があれば

    テキスト
    * Fonts:★★必要に応じて。
    * Text output : 英数字しか対応してないが、
    textprintf_ex 等を押さえておけば困らないと思う。

    レンダリング
    * Polygon rendering:★★★★ 必要に応じて
    * Transparency and patterned drawing:★★★★ 必要に応じて
    * Converting between color formats:★★ 興味があれば
    * Direct access to video memory:★★ 興味があれば

    動画
    * FLIC routines: ★★興味があれば。

    サウンド
    * Sound init routines :★★★ 要点のみ
    install_sound(DIGI_AUTODETECT, MIDI_NONE, 0) さえ押さえておけばOK。
    * Mixer routines:サウンド関連の情報を取得する。★★ 興味があれば
    * Digital sample routines : WAVの読み込みは押さえておく。★★★★ 必要に応じて
    * Music routines (MIDI):★★★★ 必要に応じて
    * Audio stream routines:★★ 興味があれば
    * Recording routines:★★ 興味があれば

    ファイル
    * File and compression routines:
    圧縮ファイルや ファイルにパスワードをかける。★★ 興味があれば
    * Datafile routines:
    音楽や画像データをひとつのファイル(.dat)にまとめる。(Grabber関連)

    数学関連
    * Fixed point math routines:★★ 興味があれば
    * 3D math routines:行列変換など ★★ 興味があれば
    * Quaternion math routines:四元数による 3D回転に関する変換 ★★ 興味があれば

    GUI
    * GUI routines :ラジオボタンや チェックボックス、
    セレクトメニュー、コンテキストメニューなど ★★ 興味があれば

    デバッグ
    *Debugging:ASSERT や TRACE といった関数が用意されている。
    ★★★★ 必要に応じて

    その他
    *Available Allegro examples :収録されている サンプルについての紹介。
    *Makefile targets:Makefile のターゲットについて
    *Help: what to do when your Allegro program doesn't work:
    エラーに悩まされた時のヘルプ
    *Changes since previous versions:バージョンアップ履歴
    *API compatibility information:Allegro の バージョンの互換性について
    * Packfile format information:Packfileの仕様
    *Datafile format information: Datafile仕様
    *License and Disclaimer:ライセンスとか

    DAT アーカイブファイルの扱い
    *grabber - Create datafiles(Datafile routinesと関連) ★★★★ 必要に応じて
    *dat - Manipulate datafiles from the commandline :★★★★ 必要に応じて

    Allegro MacOSX版 特有の問題

    MacOSX上で開発するときの注意。

    アプリケーションバンドル外にあるファイルを読み込む

    Allegro 4.2.0 を使っている場合、 Xcode で アプリケーションバンドル形式のものを作る際には注意が必要です。 リソース パスが ずれるという問題が発生しています。コマンドラインでコンパイルしたもの(バンドルが付いてないもの)は大丈夫のようです。
    同じディレクトリに実行ファイルと、画像ファイルがあって、
    MY_APPLICATION.app
    picture.bmp
    上のような配置で、バンドルアプリケーションの外にあるファイルを読み込むのに
    myimage = load_bitmap( "picture.bmp" , NULL );
    このように書いても何故かファイルが読み込めなかったりします。この現象は、Allegroの OSX ユーザーの間でも問題になっています。
    これを回避するには、あまりいい方法ではありませんが、main(); 関数内で、 chdir(".."); を一回だけ使えば、ファイルを読み込めるようになります。ほかには、"../picture.bmp" このように書けば読み込めます。

    アプリケーションバンドル内にあるファイルを読み込む

    もうひとつ、Mac OSX では アプリケーションバンドル内にあるファイルを読み込むことができます。
    この方法では上のような問題は発生せず、ファイルを読み込むことができます。

    バンドル内にあるファイルを読み込む方法については、Allegro のドキュメント(allegro-4.2.0/docs/build/macosx.txt)に書いてありますがイマイチわかりにくいので、ここで解説します。
    Allegroの MacOSX アプリケーションバンドルの構造は、このようになっています。
    Bundles created by fixbundle have this default layout:
    
          bundle.app --- Contents --+--- MacOS --- executable
                                    |
                                    +--- Resources --+--- (bundle.icns)
                                    |                |
                                    |                +--- (executable/...) ここに読み込むファイルを置く。
                                    |
                                    |
                                    +--- (Frameworks) --- (Allegro.framework/...)
                                    |
                                    +--- Info.plist
                                    |
                                    +--- PkgInfo
    
    Allegro はバンドル内の bundle.App/Contents/Resources/executable/ というパスを読み込むことができるので、そこに画像ファイルを登録しておけば、 そのファイルを読み込むことができます。ここで重要なことは、executable は、プロジェクト名と同じ名前でなければいけないということです。

    具体的な方法

    まず、 「プロジェクト名」と同じ 名前のフォルダを作成(場所は任意)して、その中にアプリケーションが読み込むファイルをすべて入れます。 この例では、プロジェクト名は「allexp」なので、allexp という名前のフォルダを作りそこへ画像を入れました。


    次に、Xcode の左にある、ファイルとグループ ペインにある、Resources タブを右クリックし、コンテキストメニューから「追加>既存のファイル...」を選んでください。 そして、さっき作った、プロジェクト名と同じ名前のフォルダごと選択してください。この例では、画像ファイルが入っている allexp というフォルダを選択しました。


    このようなダイアログが出るので、デフォルトの「追加したフォルダに再起的にグループを作成する」から「追加したフォルダにフォルダ参照を作成する」にラジオボタンを変更してください。


    上の図のようになっていれば成功です。このようになっている状態で、
    myimage = load_bitmap( "sample.bmp" , NULL );
    と書けばアプリケーションバンドル内の sample.bmp を読み込みます。
    ※グループ(黄色いフォルダ)を追加するのではなくて、フォルダ(青色のフォルダ)を直接参照されていることに注意してください。

    この記事を書く為に、以下の記事を参考にしました。 http://www.allegro.cc/forums/thread/533485 http://www.allegro.cc/forums/thread/546399 http://www.allegro.cc/forums/thread/557890

    他プラットホームへ移植するときのTips

    (Allego オンラインマニュアル の Differences between platforms より要約)
  • Windows, Unix, そして MacOS X の場合は必ず main(){ 〜 } メイン関数の 後 に「END_OF_MAIN();」 を呼び出してください。
    このEND_OF_MAIN()マクロはそれぞれ、Windows の場合は WinMain(), Unix の場合は argv[] parameter, MacOSX では Cocoa Application スタイルを作ります。
  • もしプラットホーム間で、スクリーン描画速度に著しい差が出てしまう場合は、 acquire_bitmap() と release_bitmap() 関数 を使用してタイミングを調整する事ができる。 
  • Windowsに移植する際の注意点として、ユーザーがウインドウを切り替えた場合、ウインドウ内のビデオメモリの内容が失われるので、対策が必要です。 
  • OSやCPUごとに処理を振り分けたい場合はこれらの定数が役に立つ。
  • ○ OS やコンパイラ環境に応じて

    ALLEGRO_DOS
    ALLEGRO_DJGPP
    ALLEGRO_WATCOM
    ALLEGRO_WINDOWS
    ALLEGRO_MSVC
    ALLEGRO_MINGW32
    ALLEGRO_BCC32
    ALLEGRO_UNIX
    ALLEGRO_LINUX
    ALLEGRO_BEOS
    ALLEGRO_QNX
    ALLEGRO_DARWIN
    ALLEGRO_MACOSX
    ALLEGRO_GCC

    ○ CPU の特徴に応じて

    ALLEGRO_AMD64
    ALLEGRO_I386
    ALLEGRO_BIG_ENDIAN
    ALLEGRO_LITTLE_ENDIAN

    ○ 環境が対応している機能に応じて

    ALLEGRO_MULTITHREADED
    ALLEGRO_USE_CONSTRUCTOR
    ALLEGRO_NO_STD_HEADER
    ALLEGRO_NO_KEY_DEFINES
    ALLEGRO_NO_FIX_ALIASES
    ALLEGRO_NO_FIX_CLASS
    ALLEGRO_NO_CLEAR_BITMAP_ALIAS
    ALLEGRO_NO_COMPATIBILITY

    INLINE
    RET_VOLATILE
    ZERO_SIZE_ARRAY(type, name)
    AL_CONST
    .
  • Windows向けのソースを使用する時の注意
    Windows やLinux 版しか用意されていない「拡張ライブラリ」を使っている場合は要注意!OSXに移植するのは難しいです。 また、Allegro以外の システムが提供している標準関数でも、他のOSでは違った方法で処理する場合があるので注意してください。

    例えば、Windows向けのソースで、ファイルサイズを取得する処理に filelength() 関数が使われていると、 OSXや UNIX ではコンパイルが失敗してしまいます。 コンパイル時に、 定義されていないsymbol filelength が見つからない というエラーメッセージが出ます。

    この場合、OSXでは filelength()関数 の代わりに UNIX系 で使われる stat() 関数を使う必要があります。
    #include <sys/types.h>
    #include <sys/stat.h>

  • OpenGL のヘッダファイルの include の表記も、OS によって違うことも注意してください。
    Windows
    #include <GL/gl.h>
    #include <GL/glu.h>
    #include <GL/glut.h>
         ↓
    OSX
    #include <OpenGL/gl.h>
    #include <OpenGL/glu.h>
    #include <GLUT/glut.h>
  • 相対ファイル指定が効かない場合は、 自動的に絶対パスを検出させる方法があります。
    char name[200];
    get_executable_name(name, sizeof(name));
    //例えば、 user/desktop/tetris/program.app が name に代入されます。
    allegro_message("Running `%s'\n", name);

    // ファイル読込み( MapLoad と TextLoad 関数はユーザが用意した関数で、
    // C標準ライブラリの fopen 関数を使ってテキストファイルを読み込むというものです。
    // 関数を fp= fopen( name , "r" ); というように使っています。 )


    // ファイル名を差し替える
    replace_filename(name, name,"map.txt", sizeof(name));
    MapLoad(name);// name に格納されている絶対パス名 user/desktop/tetris/map.txt で読み込みます

    replace_filename(name, name,"story.txt", sizeof(name));
    TextLoad(name);// name に格納されている絶対パス名 user/desktop/tetris/story.txt で読み込みます。



  • Last modified 2009.10.29 Allegro4.2.3.1についての情報を追加
    Last modified 2006.03.05 OSX 特有の問題 を追加

    Tsukubado