MacOSX , Allegro + OpenGL を使うためのメモ。

 

Allegro GL について

AllegroGL は、 OpenGL を Allegro上で使えるようにする補助ライブラリで、ちょうど、SDL と GLUT( OpenGL UtilityToolkit) を組み合わせて使うのと似ています。

Windows , Linux , OSX対応の AllegroGL 0.4.0RC3 がリリースされました。こちらから入手できます。
OSX Tiger 10.4.5&Allegro4.2.0 にて、インストール、動作を確認済み。

AllegroGL 0.2.4 は http://allegrogl.sourceforge.net/ から入手できる。
Windows , MacOSX , UNIX X11環境に対応している。(現時点では、MacOSX へのインストールはちょっと修正が必要です)

AllegroGL 0.2.0 は、OpenGL 1.4対応、AllegroGL 0.4.0 では、OpenGL 2.0に対応しているとの事。



OpenGLを使って描画するする場合、Allegro のスクリーンや、グラフィック描画関連の関数( line や blit ) はほとんど使えなくなってしまうので注意する。 (AllegroGLでは Allegro のグラフィック関数を使う代替手段として、 Direct-mode 2画面モード やOpenGLで描画する Allegroグラフィック関数( allegro_gl_screen_draw_sprite 等 )が一応用意されているが、処理速度はあまり期待しないで、とのこと。)

Allegro, AllegroGL , OpenGL の タイムライン
各ライブラリの役割について。

AllegroGL と GLUT の比較
まだよくわかっていないな部分もあります。

AllegroGL でテクスチャ貼付け
面倒な処理はAllegroGLが引き受ける。

AllegroGL0.4.0RC3インストールメモ

AllegroGL0.4.0RC3を こちらから入手。
○ コンパイルとインストール:
ターミナルから
cd alleggl
./fix.sh macosx
make
sudo make install

sudo make install DEBUGMODE=1 (デバッグモードをインストールする場合)
サンプルプログラムの実行
cd examp
./tex
(MacOSXでサンプルプログラムを実行する場合はコマンドラインから実行して下さい。サンプルプログラムの中には、GUIからのダブルクリックでは画像ファイルを読み込まないものがあります。(extextur, exalpfnt,exalleg,tex など))
○情報
AllegroGLで利用できる OpenGL拡張機能.:extensions.txt
バグ・リスト: .bugs.txt
クイックスタート:quickstart.txt 良く有る質問, 画面モード ,OS別コンパイルオプション について

○ AllegroGL サンプル
インストールに成功すると、AllegroGL 解凍ディレクトリ 内の examp ディレクトリの中にはコンパイルされたサンプルプログラムが 作成されているので、色々試すことができます。
exext.c (ワイヤーフレームで出来たうねうねする波)
test .c ( 3Dの組合わさった立体をキー入力によって回転できる)

tex.c (テクスチャ画像が貼られた立体)
excamera.c (カメラ視点の移動)
exalpfnt.c (カラーバー描画と、フォントを表示、Hello world )
exmasked.c ( 背景と、疑似透過スプライト。OpenGL で2D表示する。)
extextur.c (ブレンド表示 、テクスチャ表示のデモ)
dialog.c ( GUI による ダイアログで画面モードと色深度を選択してから test .c の立体を表示 )
extext.c ( STAR WARS のオープニング風にテキストが表示される。また、その周りを他のテキストが飛び回わる。 )

exmipmaps.c( ミップマップのテスト。格子状のテクスチャがだまし絵のように動きます。テクスチャが密になっている中央部分に注目。)
exalleg.c (FPS表示、ポリゴンマウスカーソル、アニメーション。)
dumbtest.c(よく分からないデモ, スクリーンショットと変な mysha.bmpを作る?)

AllegroGLサンプルプログラムに関する、MacOSX 注意事項:
(exalleg.c, exalpfnt.c, extext.c,extextur.c , tex.c  で、(Error loading `mysha.pcx' 等 のエラーメッセージが出る )
  • これらは、コマンドラインからコンパイルされた非アプリケーションバンドルなので、コマンドラインから実行して下さい。
    GUIからアイコンをダブルクリックしても画像読み込み失敗するものがあります。

  • これらサンプルをXcode上でコンパイルしたい場合、アプリケーションバンドル外にある画像やdatファイルを正常に読込ませる必要があります。 ソースを修正してmain関数で初期化後の install_allegro_gl(); の後に chdir(".."); を追加すると解決します。 OSX特有の問題参照。

  • Xcodeでexext.c のコンパイルが失敗するのは、文字コードが原因です。(サンプルの マクロ行のある行末を「¥」から「バックスラッシュ」に変更する)


    ○ ソース
    #include <alleggl.h>
    ○ Xcode「リンカ設定」に追加するオプション。 
    -lagl -framework Carbon -framework OpenGL
    (allegroGLを 動的ライブラリとしてリンクするなら -lagld),
    allegroライブラリは、 -lalleg-main または、`allegro-config --libs` (allegroデバッグモードなら `allegro-config --libs debug`)

    ○ トラブル
    alopgl:0: table of contents for archive: /usr/local/lib/libagl.a is out of date; rerun ranlib(1) (can't load from it)
    Xcodeでコンパイルしようとした場合、このようなメッセージが表示されたら
    sudo ranlib /usr/local/lib/libagl.a
    と、ターミナルから コマンドを打ってlibagl.a をrerun してください。

    参考文献:
  • OpenGL, Mingw32 and Allegro + DirectX
  • GLUTによる「手抜き」OpenGL入門
  • AllegroGL bug on OSX with ATI Radeon 9200
  • Cannot build AllegroGL 0.2.4 on Mac OS 10.3.9
  • OpenGL, GLUT, Mingw32 and Allegro + DirectX
  • OrbitalMind Software Obj Loader (OSXで動かすにはいくつか修正の必要がある)
  • ※AllegroGL 0.4.0RC3リリースのため、 AllegroGL0.2.4 インストールに関するメモをタブ化しました。

    AllegroGL0.2.4 インストールメモ

    AllegroGL0.40 API リファレンス日本語私訳

    (AllegroGLのマニュアルは少し複雑だったので、主要なところだけ訳したもの, 意訳含む。不正確な部分があるかもしれないので注意してください。)

    AllegroGL は、 Allegro と一緒に OpenGLを使用できるようにするための機能を提供します。スクリーンに出力は OpenGL が受け持ち、その他の雑多な仕事…たとえば、入力、タイマー処理、クロスプラットホームの移植性、データ読み込み、テクスチャの描画 をAllegro に任せます。このライブラリはちょうど GLUT(OpneGL Utility Tools) と同じような役目を果たします。

    AllegroGL は また、全部ではないけれども、ユーザープログラムが利用可能な OpenGL 拡張機能を自動的に検出、管理します。手動で拡張機能をロードする必要はありません。

  • システム
  • AllegroGLグラフィックドライバ
  • 数学 - 行列変換と四元数
  • 文字列描画とフォント
  • OpenGL 拡張機能
  • Allegro描画関数互換 (プリミティブ図形描画関数のwrapper、実際はOpenGLで描画する)
  • ビデオモードの設定 ( allegro_gl_set関数に渡すオプション設定)
  • AllegroGL GUI (このページでは未説明。 AllegroGUIのwrapper。使い方はAllegroGUIとほぼ同じ。 )

  • 非推奨APIリスト(廃止予定のAPI)
  • システム

    AllegroGL 旧バージョンとの下位互換性 ( backward compatibility )を保つ
     allegro_gl_begin(), ;allegro_gl_end();これらは、プログラムに書く必要はありません
    #define allegro_gl_begin();
    始まり
    AllegroGL 0.0.22 以前のバージョンと互換性をとるために記述される定義。記述しても定義されないので、これをプログラムに書く必要はありません。

    #define allegro_gl_end();
    終わり。
    AllegroGL 0.0.22 以前のバージョンと互換性をとるために記述される定義。記述しても定義されないので、これをプログラムに書く必要はありません。

    AllegroGLの初期化
    int install_allegro_gl(void );
    AllegroGL を 有効にする。この関数は、Allegro_init(); や install_allegro();よりも後に呼び出す必要がある。

    AllegroGLの終了
    void remove_allegro_gl (void );
    AllegroGL を 終了する。この関数の呼び出し後に、OpenGL や AllegroGL 関連の関数を呼び出してはいけない。 なお、この関数はプログラムの終了時に自動的に呼ばれるため、明示的に呼び出す必要はない。

    スクリーンのフリップ
    void allegro_gl_flip(void );
    フレームバッファを差し替えて、画面の更新を行う(必須)。 OpenGL の ダブルバッファモードならば、あなたは スクリーンに表示された前面のバッファにアクセスすることができる。 そしてまた、非表示になっている後面のバッファにも同じくアクセスできる。このルーチンは、バッファを交互に入れ替える

    OpenGL のバージョンを調べる
    float allegro_gl_opengl_version();
    OpenGL の バージョンナンバーを返す。 OpenGL の正しいコンテキストを得るには、 set_gfx_mode(GFX_OPENGL) の前に呼ばない方がよい。

    AllegroGL グラフィックドライバ

    AllegroGL グラフィックドライバ
    AllegroGL をインストール、使用する場合 Allegro の set_gfx_mode 関数で新たに OpenGL 画面用のモードが選択できるようになる 。
    set_gfx_mode(モード名 , 幅, 高さ,仮想幅, 仮想高さ)
    set_gfx_mode(GFX_OPENGL_WINDOWED, 640, 400, 0, 0)
    新たに選択できるようになるのは次の 3つのモード。
  • GFX_OPENGL
  • GFX_OPENGL_FULLSCREEN
  • GFX_OPENGL_WINDOWED
  • #define GFX_OPENGL_WINDOWED
    ウインドウモードで動作する Allegro 用の OpenGL グラフィックドライバを使用する

    #define GFX_OPENGL_FULLSCREEN
    フルスクリーンモードで動作する Allegro 用の OpenGL グラフィックドライバ を使用する

    #define GFX_OPENGL
    動作モードを特に指定しない場合。


    AllegroGLの詳細設定
    allero_gl_set(); allero_gl_set関数で指定できます。指定可能なパラメータの詳細はフレームバッファを参照して下さい。

    allegro_gl_set (AGL_COLOR_DEPTH, xxx)
    色深度は、 allegro_gl_set(); 関数で 指定されなければ set_color_depth() の設定が流用される。   GFX_AUTODETECT or GFX_AUTODETECT_WINDOWED を指定した場合、非OpenGL モードか Allegro モードか選択する、



    テクスチャサイズのチェック
    int allegro_gl_check_texture_ex( int flags,
    BITMAP * bmp,
    GLint internal_format
    )

    指定されたビットマップが、テクスチャとして最適かどうかチェックする。 これはテクスチャのサイズをチェックする。 この関数のパラメータの配置は、 allegro_gl_make_texture_ex().関数と 同一である。

    重要:このチェックは 大きさのチェックのみで、メモリ残量のチェックはしない。もしメモリ不足なら この関数からTRUEが返ってきたからといって このテクスチャを張り込めるとは限らない。あなたは、実際にglAreTexturesResident().関数を使ってテクスチャが内在しているか確かめる必要があるかもしれない。

    パラメータ:
    flags ビットマップコンバージョンのフラグ
    bmp コンバートするビットマップ
    internal_format 内部フォーマット

    返値:
    TRUE テクスチャを生成できる
    FALSE テクスチャが大きすぎる


    テクスチャの生成
    iGLuint allegro_gl_make_texture_ex( int flags,
    BITMAP * bmp,
    GLint internal_format
    )


    返値:テクスチャID
    allegro_gl_make_texture_ex で得られた テクスチャIDを glBindTexture で指定する。

    GL のドライバの テクスチャに、Allegro ビットマップ をアップロードする。 このビットマップオブジェクトは メモリビットマップ*1である必要がある。 また,サブビットマップオブジェクト*2 は適さない。
    *1 (Allegro の create_bitmap();関数によって生成されたビットマップオブジェクト )
    *2( Allegro の create_sub_bitmap(); 関数によって生成された 共有描画領域を司る ビットマップオブジェクト)

    allegro_gl_make_texture_ex を呼ぶと、OpenGLのテクスチャデータの並び形式を指定する glPixelStore関数や glTexImage2D関数, glTexParameter関数等の手間がかかる設定 が自動的に済まされるようです。そのため 例えば、allegro_gl_make_texture_ex で biliniear 補完を強制的に行いたい場合は、改めて glTexParameter関数 を呼び出して設定するそうです。

    各ビットマップは、ドライバによってロードされ、 single texture object に変換される。 テクスチャとして使えるビットマップのサイズは 必ず 2 の ベキ乗(2 .. 4 .. 16 .. 64 .. 128 .. 256 .. 512)ピクセル で なければならない。このテクスチャサイズの規則を絶対に破ってはいけない。

    single texture object に変化させた場合、オリジナルのビットマップオブジェクトに変更を加えてはいけない。

    int flags ビットマップコンバージョンのフラグ
    テクスチャ生成をコントロールする設定。これらの設定はOR 集合で 併用することができる。
    AGL_TEXTURE_MIPMAP
    AGL_TEXTURE_HAS_ALPHA
    AGL_TEXTURE_FLIP
    AGL_TEXTURE_MASKED
    AGL_TEXTURE_RESCALE

    テクスチャ設定 フラグ
    #define AGL_TEXTURE_MIPMAP 0x01
    AllegroGL は、このテクスチャのために ミップマップ(mipmap) を生成している。.

    #define AGL_TEXTURE_HAS_ALPHA 0x02
    ビットマップにアルファチャンネルがあるということを AllegroGL に知らせる。

    #define AGL_TEXTURE_FLIP 0x04
    x軸に対して表示を切り替える。

    #define AGL_TEXTURE_MASKED 0x08
    Allegro の maskcolor (濃いピンク色:RGB 255 0 255)を透過したテクスチャを生成する。

    #define AGL_TEXTURE_RESCALE 0x10
    ビットマップの拡大倍率を変更したいことを AllegroGL に知らせる。

    #define AGL_TEXTURE_ALPHA_ONLY 0x20
    AllegroGL に 8bbp アルファ のみの ビットマップデータを使用していることを知らせる。


    AllegroGL は決められたTexel *3 フォーマットを伴ったテクスチャを生成する。 Texel フォーマットは、glTexImage2D();関数 で指定可能なフォーマットでなければならない。 その際に、AllegroGL は どんな エラーチェックもしない。もし、あなたがビットマップに基づく フォーマットを自動的に設定して欲しいなら、フォーマットの パラメータに -1 を指定する。

    *3 (テクセル:3Dオブジェクトのテクスチャを構成する最小単位。2D描画における最小単位ピクセルに相当)

    正しいGL レンダリングコンテキストが確立されれば、あなたは OpenGLモードと同時には set_gfx_mode(); 関数を使うことができないことを意味する。 重要:アルファチャンネルは常に 32bit モードで、表示される。もしアルファチャンネルを必要とするなら、手動によって記述しなければならない。

    パラメータ:
    flags ビットマップコンバージョンのフラグ。
    bmp コンバートするビットマップ
    internal_format 内部フォーマット

    数学 - 行列変換

    スタック行列(待ち行列)。OpenGL では オブジェクトの回転やアニメーションのために、変換行列をいくつもストックすることで管理している。
    参考文献:http://miso.ice.ous.ac.jp/~oka/opengl/section04.html
    参考文献:http://www.wakhok.ac.jp/~momma/lec2000/Graphics_Programming/6/lecture6.html

    Allegro 固定 行列 → OpenGL 浮動 配列
    void allegro_gl_MATRIX_to_GLfloat ( MATRIX *m, GLfloat gl[16] )
    Allegro の 固定小数点 (fixed-point)型 の行列 を OpenGLの行列操作に適した 浮動小数点(floats)型 の配列 に変換する。
    MATRIX m = identity_matrix; GLfloat gl_m[16]; get_vector_rotation_matrix(&m, itofix(1), 0, itofix(1), ftofix(43.83)); allegro_gl_MATRIX_to_GLfloat(&m, &gl_m); glLoadMatrixf(&gl_m);
    Allegro 固定 行列 → OpenGL 倍精度実数 配列
    void allegro_gl_MATRIX_to_GLdouble ( MATRIX *m, GLdouble gl[16] )
    Allegro の 固定小数点 (fixed-point)型 の行列 を OpenGLの行列操作に適した倍精度実数(double)型 の配列に変換する。


    Allegro 浮動 行列 → OpenGL 浮動 配列
    void allegro_gl_MATRIX_f_to_GLfloat( MATRIX_f * m, GLfloat gl[16] )
    Allegro 浮動小数点型(float) 型の行列 を OpenGLの行列操作に適した 浮動小数点(floats)型 の配列 に変換する。


    Allegro 浮動 行列 → OpenGL 倍精度実数 配列
    void allegro_gl_MATRIX_f_to_GLdouble( MATRIX_f * m, GLdouble gl[16] )
    Allegro 浮動小数点(float) 型の行列 を OpenGLの行列操作に適した倍精度実数(double)型 の配列に変換する。


    OpneGL 浮動 行列 → Allegro 固定 行列
    void allegro_gl_GLfloat_to_MATRIX ( GLfloat gl[16], MATRIX *m)
    スタック行列から取り出された OpenGL 浮動小数点(floats)型 の行列 を Allegro の 固定小数点 (fixed-point)型 の行列 に変換する。


    OpneGL 倍精度浮動 行列 → Allegro 固定 行列
    void allegro_gl_GLdouble_to_MATRIX ( GLdouble gl[16], MATRIX *m )
    スタック行列から取り出された OpenGL 倍精度 浮動小数点(double precision floating-point)型 の行列 を Allegro の 固定小数点 (fixed-point)型 の行列 に変換する。


    OpneGL 浮動 行列 → Allegro 浮動 行列
    void allegro_gl_GLfloat_to_MATRIX_f ( GLfloat gl[16], MATRIX_f *m )
    スタック行列から取り出された OpenGL 浮動小数点(floats)型 の行列 を Allegroの 浮動小数点(floats)型 の行列 に変換する。


    OpneGL 倍精度浮動 行列 → Allegro 単精度浮動 行列
    void allegro_gl_GLdouble_to_MATRIX_f ( GLdouble gl[16], MATRIX_f *m )
    スタック行列から取り出された OpenGL 倍精度 浮動小数点(double precision floating-point)型 の行列 を Allegroの 単精度 浮動小数点(single-precision floating-point )型 の行列 に変換する。


    クオータニオン(Quaternion,四元数)関連
    参考:クオータニオン  ,四元数で回転入門
    ,Radiumsoftware 日記 010827 - クオータニオンって?
    , 3D-CGプログラマーのための実践クォータニオン入門(工学社, 金谷一朗著)

  • 「Euler Angle(オイラー角)」というのはは回転を表現するのに X軸(Roll),Y軸(Pitch),Z 軸(Yaw) それぞれ どの程度回転するかを指定する。 しかし複雑な回転を行う場合に、きりもみ状態が起きたり、回転軸が迷走して意図しない回転になってしまうという欠点がある。まるで、あばれ馬に乗っかっている感じがする。
  • 「Quaternion(クオータニオン)」は回転を表現するのに、ベクトルを用いて任意の回転軸 を中心に、始点 (a)の姿勢から 終点(b)の姿勢へ、何度回転させるかを4元数で指定する。なお、回転軸のベクトルは、始点 (a)と終点(b)の ベクトルの外積にあたり、(a)と(b)を含む回転面に垂直となる。クオータニオンにはオイラー角にみられる欠点はなく複雑な回転を自由自在に制御することができる。またクオータニオン+線形球面補完 によって球面の2点を通る最短距離をなぞって回転させたり。ひねり回転のような回転が合成したのもできる。

  • Allegro についてる デモプログラム exquat は 「Euler Angle」 と、「Quaternion」 による3次元空間上の回転をわかりやすく比較するという内容。
    ※OpenGLのglrotate関数は、 X軸(Roll),Y軸(Pitch),Z 軸(Yaw)の角度をパラメータとして持つ(Euler Angle)ていることに注意する。


    Allegroの クォ−タニオンオブジェクト
    typedef struct QUAT
    float w, x, y, z;

    クオータニオン(Quaternion,四元数)回転
    void allegro_gl_apply_quat ( QUAT *q )
    glRotatef() 関数で設定された 三次元の回転を適用する?
    OpenGLにはクオータニオン関係の関数が用意されていないので、 Allegro のクオータニオン関数を使うことになる。
    パラメータ:
    q 適用したい クオータニオンオブジェクトへのアドレス。
    QUAT q = identity_quat;
    get_vector_rotation_quat(&q, itofix(1), 0, itofix(1), ftofix(43.83));
    glLoadIdentity();
    allegro_gl_apply_quat(&q);
    クオータニオン→float 型 変数によるglrotate回転へ変換
    void allegro_gl_quat_to_glrotatef (QUAT * q,
    float * angle,  
    float * x,
    float * y,
    float * z
    )


    パラメータ:
    q 変換したい四元数.
    angle 回転角度。 単位は 度。
    x 回転ベクトルのx軸 成分。
    y 回転ベクトルのy軸 成分。
    z 回転ベクトルのz軸 成分。

    四元数 を ベクトル/角度 の成分で変換する。glRotate*().と同じパラメータ。
    QUAT q = identity_quat;
    float x, y, z, angle;
    allegro_gl_quat_to_glrotatef(&q, &angle, &x, &y, &z);
    glRotatef(angle, x, y, z);

    クオータニオン→double 型 変数によるglrotate回転
    void allegro_gl_quat_to_glrotated (QUAT * q,
    double * angle,
    double * x,
    double * y,
    double * z
    )


    四元数 を ベクトル/角度 の成分で変換する。glRotate*().と同じパラメータ。
    パラメータは allegro_gl_quat_to_glrotatef 関数と同じである。


    文字列描画とフォント Text drawing and fonts.

    AllegroGLは Allegro の独自形式である AllegroFontフォーマットを、OpenGLで利用できるように変換して表示する。 変換されたフォントは、AllegroGL Font と呼ばれ、BITMAP(ビットマップ), OUTLINE(ベクター),TEXTURED(テクスチャ) 形式の3種類存在する。 AllegroFont,AllegroGL Fontどちらも FONT オブジェクトで管理されるので、間違えないようにしたい。

    #define AGL_FONT_TYPE_DONT_CARE -1
    フォントがどのようにコンバートされるか気にしなくても良いことを示す
    AllegroGL が最適な形式を選んでくれる。

    #define AGL_FONT_TYPE_BITMAP 0
    フォントをビットマップ形式に変換したいことを示す
    ビットマップ形式の場合、3Dパイプ処理をいったん停止するため、処理が遅いかもしれない。

    #define AGL_FONT_TYPE_OUTLINE 1
    フォントをアウトライン形式に変換したいことを示す。
    ベクター形式なので、高速に描画、回転、拡大縮小することができる。非推奨。
    #define AGL_FONT_TYPE_TEXTURED 2
    フォントをテクスチャ形式に変換したいことを示す。 このテクスチャはすべてフォントと同じくある。
    ビデオカードによって、必要なときに自動的にメモリにアップロードされる。

    #define AGL_FONT_STYLE_BOLD 1
    太字( bold )フォントを作成する。(システムフォントのみ)
    非推奨:非テクスチャフォントは、AllegroGL からドロップされる。

    #define AGL_FONT_STYLE_BLACK 2
    極太(strong bold) フォントを作成する。(システムフォントのみ)
    非推奨:非テクスチャフォントは、AllegroGL からドロップされる。

    #define AGL_FONT_STYLE_ITALIC 4
    斜体 (italicized ) フォントを作成する。(システムフォントのみ)
    非推奨:非テクスチャフォントは、AllegroGL からドロップされる。

    #define AGL_FONT_STYLE_UNDERLINE 8
    アンダーラインのついた フォントを作成する。(システムフォントのみ)
    非推奨:非テクスチャフォントは、AllegroGL からドロップされる。

    #define AGL_FONT_STYLE_STRIKEOUT 16
    打ち消し線( striked out ) がついたフォントを作成する。(システムフォントのみ)
    非推奨:非テクスチャフォントは、AllegroGL からドロップされる。

    #define AGL_FONT_STYLE_ANTI_ALIASED 32
    アンチエイリアス(anti-aliased)がかかったフォントを作成する。(システムフォントのみ)
    非推奨:非テクスチャフォントは、AllegroGL からドロップされる。

    #define AGL_FONT_POLYGONS 1
    フォント生成モード (アウトラインフォントを ポリゴンを使って表示) (システムフォントのみ)
    非推奨:非テクスチャフォントは、AllegroGL からドロップされる。

    #define AGL_FONT_LINES 2
    フォント生成モード ( アウトラインフォントをラインを使って表示) (システムフォントのみ)
    非推奨:非テクスチャフォントは、AllegroGL からドロップされる。
    Printf 書式風にテキスト表示
    int allegro_gl_printf ( FONT *f,
    float x,
    float y,
    float z,
    int color,
    char * format,
    ...
    )


    パラメータ:
    f 使用するフォントオブジェクト.
    x,y,z 左上隅を起点に指定した位置でテキストを表示する。 
    color 文字色 ( Allegroの makecol()関数 で指定した色 など)
    format 書式 ( 詳細は printf() を見てください。)

    ビットマップフォントを使う場合は、一旦 2D の x, y 座標が描画位置になる(z座標は無視される) フォント描画処理が終われば、3D の各種モードや設定は元に戻る。しかし OpenGL の状態は維持されない。 現在設定されている modelview の 行列 は このコードに適用される。 従って、glLoadIdentity(); を事前に使用したいと思うかもしれない。

    一方、テクスチャ形式か ベクター(アウトライン)形式のフォントを使う場合は、modelview の 行列 を使用して テキストを変形することができる。

    この機能は、 allegro_gl_load_system_font() あるいは allegro_gl_load_system_font_ex() 関数によって読み込まれるか allegro_gl_convert_allegro_font()関数によって変換されたAllegroGL形式のフォントしか受け付けない。 この関数で表示する 文字にテクスチャを貼り込むには、AGL_FONT_TYPE_TEXTURED が有効になっているフォントを用いなければならない。 それと、テクスチャ表示を有効にするためには、 glEnable(GL_TEXTURE_2D);関数を使う事を覚えておくとよい。


    あなたが期待した文字の大きさで表示されないかもしれない。 ビットマップフォントについては、フォントの一部分を変更することができないためである。 テクスチャフォント、ベクターフォント であれば 柔軟性があり、glScale(); 関数を使って文字の大きさを調節することができる。

    もしあなたが 黒いバック以外に文字を表示したいなら、 テキストを描画する前に適切な ブレンドモードの設定をすすめる。
    たとえば次のようなコードである。
    glEnable(GL_BLEND);
    glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR);
    もし Allegro の drawing mode を エミュレートしたいなら、代替コードとして次のように書くことができる。
    glDisable(GL_DEPTH_TEST); glEnable(GL_BLEND);
    glBlendFunc(GL_DST_COLOR, GL_ZERO); allegro_gl_printf();
    glBlendFunc(GL_ONE, GL_ONE); allegro_gl_printf(); // Same as the one above!
    glEnable(GL_DEPTH_TEST);
    これらのテクニックについては、NeHe's Tutorial の #20 for details on this technique が参考になる。

    最も柔軟にフォントを扱う方法は、 アルファ - テクスチャをベースに、グレースケールフォントを使うことだ。 テクスチャフォントを作成する前に、 テクスチャ形式を GL_ALPHA4 or GL_ALPHA8 にセットする。 そうすれば、ブレンドモードに応じた色をセットすることができる。
    glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    allegro_gl_printf(my_font, x, y, z, makecol(255, 128, 0), "Hi!")
    あなたが agl_printf 関数に渡した 文字色の値は、適切な描画設定がなされていれば テクスチャの色 にあわせて調整される。 (描画前に glEnable(GL_COLOR_MATERIAL); を呼び出している場合など)

    返値:
    表示された文字の数


    AllegroFont→AllegroGL Fontへ変換
    FONT* allegro_gl_convert_allegro_font_ex ( FONT *f,
    int type,
    float scale,
    GLint format
    )


    3D表示のために AllegroFont形式のフォント を AllegroGL 形式(AGL format)のフォントに変換する。

    パラメータ:
    f 変換したいAllegro のフォントオブジェクト
    type 変換したいフォント形式
    (AGL_FONT_TYPE_DONT_CARE, AGL_FONT_TYPE_BITMAP, AGL_FONT_TYPE_TEXTURED を参照)
    scale 文字の大きさ、縮尺
    format テクスチャ内部形式を使う場合。

    type パラメータには 変換したいフォント形式を指定する。
    #define AGL_FONT_TYPE_DONT_CARE -1
    フォントがどのようにコンバートされるか気にしなくても良いことを示す
    AllegroGL が最適な形式を選んでくれる。

    #define AGL_FONT_TYPE_BITMAP 0
    フォントをビットマップ形式に変換したいことを示す
    ビットマップ形式の場合、3Dパイプ処理をいったん停止するため、処理が遅いかもしれない。

    #define AGL_FONT_TYPE_OUTLINE 1
    フォントをアウトライン形式に変換したいことを示す。
    ベクター形式なので、高速に描画、回転、拡大縮小することができる。

    #define AGL_FONT_TYPE_TEXTURED 2
    フォントをテクスチャ形式に変換したいことを示す。 このテクスチャはすべてフォントと同じくある。
    ビデオカードによって、必要なときに自動的にメモリにアップロードされる。

    この関数は、ビデオカードに自動的にアップロードされるテクスチャーマップや表示リストを作成するので、あなたはビットマップまたは テクスチャフォントに変換するだけで済みます。

    この関数を使ってAllegroFont 形式のフォントを ベクター形式 (AGL_FONT_TYPE_OUTLINE)に変換することはできません。 また、元のフォントを変更してはいけません。
     
    この関数を呼び出すタイミングは、有効なOpenGLモードでset_gfx_mode() 関数呼び出しに成功した後に行うとよいでしょう。 もし、あなたがプログラムを終了する場合は、allegro_gl_destroy_font() 関数を通して フォントを開放しなければなりません。

    AGL_FONT_TYPE_TEXTURED フォント のために、フォントのグリフは OpenGL 座標に配置される必要がある。 float scale パラメータ の単位は 1.0 OpenGLである。 なお、AllegroGL 0.0.24 以前でallegro_gl_convert_font(); 関数を動作にさせるために、 あなたは float scale に16.0 以上の値を指定する必要があります。

      Alternativaly, you can make all your fonts be 1.0 units high by using:
    allegro_gl_convert_allegro_font(f, #AGL_TYPE_TEXTURED, 1.0/font_height(f));
    もしあなたが、 1単位/1ピクセル の縮尺で 正射投影法 に基づいてフォントを使おうと考えているならば、 float scale パラメータに 1.0 を渡すべきである。 ただし、AGL_FONT_TYPE_BITMAP のフォントを使う場合、 float scale パラメータは意味をなさないため。上記のような変換を行おうとしても無視されます。

    GLint format について
    この GLint format パラメータ は AGL_FONT_TYPE_TEXTURED のフォントを使う場合に OpenGLがどの内部テクスチャ形式を使えばよいかをが指定する。 このことは、glTexImage2D(); の internalformatパラメータと同じく、AllegroGL のためにテクスチャ形式を選択するために、-1を指定するとよいかもしれません。

    返値:
    NULL が返った場合は、エラーが発生した事を示す


    AllegroGL フォントの破棄
    void allegro_gl_destroy_font ( FONT *f );
    ディスプレイリスト(行列, 配列,描画命令のデータを扱う記憶)や、テクスチャオブジェクトに使われるメモリを開放する。 AllegroFont と混同すると、エラーのもとなので気をつけよう。

    パラメータ:
    f 破棄したい AllegroGLフォントのオブジェクトを指定する。


    テクスチャIDをリスト
    size_t allegro_gl_list_font_textures ( FONT *f , GLuint * ids,
    size_t max_num_id
    )


    フォントのすべての テクスチャIDをリストする。 FONT *f には AllegroGL Font を指定しなければならない。 もし ID が NULLでなければ、フォントに使われるすべてのテクスチャの ID番号が ID に対応する GLuint 配列に書かれる。 この配列のサイズは、max_num_idパラメータによって指定される。この関数は決して、配列の最大サイズ max_num_id をオーバーして書き込みすることはありません。

    もし、 f が NULLなら、 この関数は 0 を返す。この時、 ID 配列には変更は加えられません。 fがNULLであるならば、ゼロは返されます、そして、ID配列は決して触れられません。

    もしフォントが全くテクスチャを含んでいない時(ビットマップ あるいは アウトラインフォントの場合)も 0 を返す。

    この関数の使用例:
    int num_ids = allegro_gl_list_font_textures(font, NULL, 0);
    GLuint *id = malloc(sizeof(GLuint) * num_ids);
    if (!id) { //handle error }
    allegro_gl_list_font_textures(font, id, num_ids);
    for (i = 0; i < num_ids; i++) { glBindTexture(GL_TEXTURE_2D, id[i]); // Use this texture }
    free(id);
    GLint id[10]; // Reserve a safe number GLint num_ids = allegro_gl_list_font_textures(font, id, 10);


    廃止されたAPI
    void allegro_gl_set_font_generation_mode ( int mode );
    Note: This function is deprecated and will be removed in a future version.
    Deprecated:
    この関数は、将来のバージョンでは削除されるので、使ってはいけない。

    OpenGL 拡張機能 OpenGL Extensions

    AllegroGLで利用可能な OpenGL拡張機能の一覧は、AllegroGLを解凍したディレクトリ内の extensions.txt に書かれています。 OpenGL拡張機能を使うと、テクスチャを重ね張りしたりすることができます。AllegroGL 0.4.0ではOpenGL2.0に対応しているそうです。

    Extension Registry

    OpenGL拡張機能 ハンドラ補助機能を提供する
    #define AGL_DEFINE_PROC_TYPE
    ポインタの機能を定める。このマクロは ほとんど typedef と同じである。
    一部のプラットホーム固有の機能を見えなくすることで、コードを移植可能にするため、このような補助機能が提供されている。

    OpenGL拡張機能の検出
    int allegro_gl_is_extension_supported ( AL_CONST char *extension )
    この関数は、OpenGL 拡張機能が利用できるかどうか定める補助機能を提供する。
    例:
    int packedpixels = allegro_gl_is_extension_supported("GL_EXT_packed_pixels");
    もし packedpixels の値が TRUE ならば、この packed pixels拡張機能が問題なく使えることを示す。

    パラメータ:
    extension 必要とする拡張機能の名前

    返値:
    TRUE 拡張機能が 利用可能である。
    FALSE 拡張機能は利用できない。


    OpenGL拡張機能 の提供
    void* allegro_gl_get_proc_address ( AL_CONST char *name )
    OpenGL シンボル のアドレスを取得するための補助機能を提供する。
    例:どのように ARB's Multitexture格納機能を提供する glMultiTexCoord3fARB関数を得るか。
    // define the type of the function
    AGL_DEFINE_PROC_TYPE(void, MULTI_TEX_FUNC,
    (GLenum, GLfloat, GLfloat, GLfloat));
    // declare the function pointer
    MULTI_TEX_FUNC glMultiTexCoord3fARB;
    // get the address of the function
    glMultiTexCoord3fARB = (MULTI_TEX_FUNC) allegro_gl_get_proc_address(
    もし、glMultiTexCoord3fARB が NULL以外の値をとれば、 あたかもそれが OpenGL のコア ライブラリにあるようにそれを使う事ができる。
    補足事項:あなたが、他のプラットホームに移植したいと望んでいるなら、AGL_DEFINE_PROC_TYPEマクロの使用が必須になる。

    パラメータ:
    name リンクしたいと望む、シンボルの名前

    返値:
    TRUE シンボルへのポインタが 利用可能である。
    FALSE シンボルへのポインタは利用できない。.


    OpenGL拡張機能のリスト
    AGL_EXTENSION_LIST_GL allegro_gl_extensions_GL
    AllegroGL でサポートされる OpenGL拡張機能のリスト。 この構造の各エントリは、1 ならば その ホストシステムOS に対応している。0 ならば 非対応であることを示す。 拡張機能の名前は基本となる名前のみ使える。 たとえば、GL_ARB_multitexture を参照すべきならばこのように書ける。
    allegro_gl_extensions_GL.ARB_multitexture

    WGL 拡張機能 のリスト
    AGL_EXT* agl_extension_table = NULL
    AllegroGL でサポートされるWGL 拡張機能 のリスト
    (WGL は Windows のみ使用可能なグラフィックライブラリです。)

    Allegroグラフィック関数互換 Allegro Graphics Driver

    OpnGL スクリーンに描画する関数。Allegroのグラフィック描画関数の代替。

    通常 OpenGL では、三角形や直線、点といった単純な図形を組み合わせて、複雑な直線やポリゴンを描画する ので、カラーを設定したり、頂点指定を何行も書く必要がある 例えばglVertex2i(x, y); が10行ずらりと並ぶと、後でソースを見た時には何が どうなっているのか分からなくなるかもしれない。

    OpenGLで記述する負担を軽減するため、これらの関数はAllegroの図形描画風関数を装っている が、内部では OpenGLの命令を使っている。他にはビットマップ画像を表示するのに、allegro_gl_screen_blit_to_self 関数は 内部で、ビットマップ → テクスチャ → ビデオメモリへ転送 という処理を行っているようだ。


    定義
    define BITMAP_BLIT_CLIP(source, dest, source_x, source_y, dest_x, dest_y, width, height)

    描画関連関数
    int __allegro_gl_make_power_of_2 (int x)
    void split_color (int color, GLubyte *r, GLubyte *g, GLubyte *b, GLubyte *a, int color_depth)
    void allegro_gl_created_sub_bitmap (BITMAP *bmp, BITMAP *parent)

    プリミティブ図形
    int allegro_gl_screen_getpixel (struct BITMAP *bmp, int x, int y)
    void allegro_gl_screen_putpixel (struct BITMAP *bmp, int x, int y, int color)
    void allegro_gl_screen_vline (struct BITMAP *bmp, int x, int y1, int y2, int color)
    void allegro_gl_screen_hline (struct BITMAP *bmp, int x1, int y, int x2, int color)
    void allegro_gl_screen_line (struct BITMAP *bmp, int x1, int y1, int x2, int y2, int color)
    void allegro_gl_screen_rectfill (struct BITMAP *bmp, int x1, int y1, int x2, int y2, int color)
    int allegro_gl_screen_triangle (struct BITMAP *bmp, int x1, int y1, int x2, int y2, int x3, int y3, int color)

    ビットマップデータ転送
    void allegro_gl_screen_blit_from_memory (
    struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height)


    void allegro_gl_screen_blit_to_memory (
    struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height)


    void allegro_gl_screen_blit_to_self (
    struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height)


    void upload_and_display_texture (
    struct BITMAP *source, int source_x, int source_y, int dest_x, int dest_y, int width, int height, int flip_dir, GLint format, GLint type)


    void do_screen_masked_blit_standard (
    GLint format, GLint type, struct BITMAP *temp, int source_x, int source_y, int dest_x, int dest_y, int width, int height, int flip_dir, int blit_type)


    void screen_masked_blit_standard (
    struct BITMAP *source, int source_x, int source_y, int dest_x, int dest_y, int width, int height, int flip_dir, int blit_type)


    void __allegro_gl_init_nv_register_combiners (BITMAP *bmp)

    void screen_masked_blit_nv_register (
    struct BITMAP *source, int source_x, int source_y, int dest_x, int dest_y, int width, int height, int flip_dir, int blit_type)


    void __allegro_gl_init_combine_textures (BITMAP *bmp)

    void screen_masked_blit_combine_tex (
    struct BITMAP *source, int source_x, int source_y, int dest_x, int dest_y, int width, int height, int flip_dir, int blit_type)


    void do_masked_blit_screen (
    struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height, int flip_dir, int blit_type)


    スプライト画像
    BITMAP * __allegro_gl_convert_rle_sprite (AL_CONST struct RLE_SPRITE *sprite)
    void allegro_gl_screen_draw_rle_sprite (struct BITMAP *bmp, AL_CONST struct RLE_SPRITE *sprite, int x, int y)
    void allegro_gl_screen_masked_blit (
    struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height)


    void allegro_gl_screen_draw_sprite (struct BITMAP *bmp, struct BITMAP *sprite, int x, int y)
    void allegro_gl_screen_draw_sprite_v_flip (struct BITMAP *bmp, struct BITMAP *sprite, int x, int y)
    void allegro_gl_screen_draw_sprite_h_flip (struct BITMAP *bmp, struct BITMAP *sprite, int x, int y)
    void allegro_gl_screen_draw_sprite_vh_flip (struct BITMAP *bmp, struct BITMAP *sprite, int x, int y)
    void allegro_gl_screen_draw_sprite_end (void)
    void allegro_gl_screen_pivot_scaled_sprite_flip (
    struct BITMAP *bmp, struct BITMAP *sprite, fixed x, fixed y, fixed cx, fixed cy, fixed angle, fixed scale, int v_flip)


    補助
    void allegro_gl_screen_draw_glyph (struct BITMAP *bmp, AL_CONST struct FONT_GLYPH *glyph, int x, int y, int color)
    void allegro_gl_screen_draw_color_glyph (struct BITMAP *bmp, struct BITMAP *sprite, int x, int y, int color, int bg)
    void allegro_gl_screen_draw_character (struct BITMAP *bmp, struct BITMAP *sprite, int x, int y, int color)
    void allegro_gl_screen_draw_256_sprite (struct BITMAP *bmp, struct BITMAP *sprite, int x, int y)
    void allegro_gl_screen_clear_to_color (struct BITMAP *bmp, int color)
    void __allegro_gl__glvtable_update_vtable (GFX_VTABLE **vtable)
    void allegro_gl_memory_blit_between_formats (
    struct BITMAP *src, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height)


    void dummy_unwrite_bank (void)

    行列とvtable
    double allegro_gl_projection_matrix [16]
    double allegro_gl_modelview_matrix [16]
    GFX_VTABLE allegro_gl_screen_vtable

    スクリーンのロックと開放
    void allegro_gl_screen_acquire ( struct BITMAP * bmp ) [static]
    void allegro_gl_screen_release ( struct BITMAP * bmp ) [static]
    void allegro_gl_video_acquire ( struct BITMAP * bmp ) [static]
    void allegro_gl_video_release ( struct BITMAP * bmp ) [static]
    OpenGLコンテキストはロックされる必要がないので、これらの関数は何もしません。
    あなたは、これらの機能をプログラムから呼ぶ必要はない。

    Allegroスクリーン
    BITMAP*allegro_gl_screen
    Direct-mode GL用 の screen ビットマップオブジェクト

    もしあなたがAllegro のグラフィック関数を使って、このビットマップオブジェクトになにか描けば 描画にOpenGL を使って、スクリーンまたは背景バッファに内容が表示されます。


    ※allegro_gl_screen_mode関数および、画面更新モード はAllegroGL 0.4.0 では廃止されました。

    画面更新モード Screen update modes

    ビデオモードの設定 Frame Buffer Settings

    ビデオモードの設定をセットする
    void allegro_gl_set ( int option, int value)
    OpenGLにはビデオモードに関する複数のオプションがあり、AllegroGLはその設定が必須かどうか判断する機能をもっています。 設定に迷いそうですが、サンプルコードの例を参考にするとよいかと思います。

    オプションをセットするには、allegro_gl_set() 関数を用います。
    この関数には2つの指定方法があります、
    1. オプション int option と、オプションに対する値 int value (整数値)を設定する。
    2. オプションに対して、優先度を設定する。
    ここで、値をセットするだけでは設定が有効にならないという事を注意して下さい。

    実際にオプションが有効になるかどうかは、AllegroGL に対する3段階の優先度に基づいて決定されます。 設定に優先度を与えるには、AGL_REQUIRE、AGL_SUGGEST または AGL_DONTCARE の3つのフラグのいずれかを 含めてください。

    オプション設定の優先度に関するオプション
    #define AGL_DONTCARE 0 Ignore these settings.
    #define AGL_SUGGEST -1 Prefer the assigned values for these settings.
    #define AGL_REQUIRE -2 Reject other values for these settings.

  • AGL_DONTCARE: 設定無視。この設定は無視される。.
  • AGL_SUGGEST:サジェスト設定。この設定は、選択されるが、必須というわけではない。
  • AGL_REQUIRE: 必須設定。この設定は 最優先に適用され、 欠くことができない。
  • 通常、オプションの設定は次のように記述される。
    例:
    allegro_gl_set(AGL_COLOR_DEPTH, 16);   //色深度(AGL_COLOR_DEPTH) を16に設定
    allegro_gl_set(AGL_REQUIRE, AGL_COLOR_DEPTH); //色深度(AGL_COLOR_DEPTH)を必須設定(AGL_REQUIRE)で設定。
    複数の設定に対し、まとめて優先度を与える場合は、設定を OR集合「 | 」で区切る
    例:
    //オプション AGL_COLOR_DEPTHと AGL_DOUBLEBUFFERに対して、
    //優先度 を必須設定(AGL_REQUIRE)としてセットします。
    allegro_gl_set(AGL_REQUIRE, AGL_COLOR_DEPTH | AGL_DOUBLEBUFFER);
    パラメータに何も設定しない、デフォルトでは、 allegro_gl_set (AGL_COLOR_DEPTH, 16)が指定されます。

    ビデオモードの設定を得る
    void allegro_gl_get ( int option )
    int option には、allegro_gl_setのオプションを渡す。
    返値:
    選択されたオプションのパラメータを返す。
    もし-1が返ってきたらそのオプションは無効になっている。

    ビデオモードの設定をクリア
    void allegro_gl_clear_settings ( void )
    ビデオモードの設定をクリアする。


    コンフィグファイル出入力   コンフィグファイル(.ini )についてはAllegroのマニュアル等に詳細が書かれています。
    void allegro_gl_load_settings ()
    ini ファイルの [OpenGL] セクションから、OpenGLに関する設定をロードします。

    void allegro_gl_save_settings ()
    ini ファイルの [OpenGL] セクションに、OpenGLに関する設定をセーブします。

    フレームバッファ設定オプション

    (allegro_gl_set() 関数でセット可能なオプション)
     
    #define AGL_ALLEGRO_FORMAT
    Allegro互換のフレームバッファを使うこの定義は、廃止された、

    各色成分とアルファチャンネル成分のフレームバッファを 選択
    #define AGL_RED_DEPTH
    #define AGL_BLUE_DEPTH  
    #define AGL_ALPHA_DEPTH 

    すべてのRGB色成分とアルファチャンネルに対して
    #define AGL_COLOR_DEPTH


    アキュムレータバッファ(高速バッファ)を各色成分とアルファチャンネルそれぞれ選択する場合
    #define AGL_ACC_RED_DEPTH
    #define AGL_ACC_GREEN_DEPTH  
    #define AGL_ACC_BLUE_DEPTH
    #define AGL_ACC_ALPHA_DEPTH
    Driverは適切なモードを見つけるかもしれませんが、 多くのビデオカードでは対応せず、アキュムレータバッファが高速化されない事に注意してください。


    #define AGL_DOUBLEBUFFER
    pageの書き換えにドライバ設定に依存したダブルバッファモードを作成しセットします。OpenGL自身はバッファリングモードを選択することはできません。

    #define AGL_STEREO
    左右別々の映像を表示します。これは 特殊な装置(メガネ)を使用した場合に有効です。表示は特別なハードウェアなしで大いに揺らめくように見えます。ステレオ表示するには 値 を TRUEに指定する。

     
    #define AGL_AUX_BUFFERS
    追加補助のバッファを作成します。 これによって複数のレンダリングコンテキストを持つ事が可能です。しかしこの機能はわずかなビデオカードしか対応してません。

    #define AGL_Z_DEPTH 
    奥行きに関する情報 を記憶する Z-バッファ深度を指定。 初期値は16です。


    #define AGL_STENCIL_DEPTH
    ステンシルバッファ(per-pixel testing (like the z-buffer))を有効にします
    最新のカードは対応していますが、古いカード(TNT2s、Voodoos、ATI Rage)はサポートしてません。


    #define AGL_WINDOW_X
    指定されたピクセルに位置にウインドウの配置するよう要求可能にします。 ドライバによっては、この要求に応じないものが有るかもしれません 。

    #define AGL_RENDERMETHOD
    AllegroGL に、ハードウェアアクセラレーションが対応しているかどうかを調べて欲しいなら設定します。
    しかし、OpenGL処理による加速は保証されないため注意して下さい。むしろ、ソフトウェアレンダラーの代わりに、ビデオカード側のドライバを使うことを要求します。もし必要ならビデオカードドライバは、ソフトウェアレンダリングモードに自由に戻すこともできます。 なお、この設定はXで効果がありません。


    #define AGL_FULLSCREEN
    フルスクリーンモードを選択する。 プラットフォームによっては非対応かもしれない。

    #define AGL_WINDOWED
      ウインドウモードを選択する。 プラットフォームによっては非対応かもしれない。

    #define AGL_VIDEO_MEMORY_POLICY
    ビデオメモリ使用量に関してAllegroGLの方針を定義してください。デフォルト値はAGL_KEEPになっています。
    値:
  • AGL_RELEASE : 内部テクスチャデータは、ビデオメモリの解放に従って解放されます。
  • AGL_KEEP : 内部テクスチャデータはビデオメモリに保存されたままにします。
  • AGL_KEEPは、一般的にallegro_gl_set_allegro_mode() や allegro_gl_unset_allegro_mode()が呼ばれる時にグラフィックス処理を加速します。 ビデオメモリが少ないシステム環境では、AGL_RELEASEを使用するべきです。その他の場合は、内部テクスチャを生成を許可されるので、AGL_KEEPを使うべきです。


    #define AGL_SAMPLE_BUFFERS
    複数のGL_ARB_multisampleとよばれる 、GLプリミティブ(線、点、ポリゴン、ビットマップ)にアンチエイリアスを施すOpenGL ICD機能拡張のパラメータを定義します。 multisample をサポートするAllegroGL モードを得るために、それぞれ AGL_SAMPLE_BUFFERS を 1 に、AGL_SAMPLES には必要なサンプル数を指定します。  しかし、この機能は複数の拡張機能(GL_ARB_multisample 、 GLX_ARB_multisample または WGL_ARB_multisample)に依存するため、AllegroGLがグラフィックスが multisample をサポートするかどうかを判断することは保証されない事に注意して下さい。 GeForce 2 のような古いビデオカードではこれらをサポートしません。

    従って、多くのプラットフォームとハードウェアでOpenGLプログラムを実行したいと望むなら、このオプションを指定するべきではありません。

    非推奨API

    Deprecated List
    AllegdGL/docs/deprecated.html にリストされています。
    様々な理由で、あまり使ってほしくないAPIのこと。将来的には廃止となったり、削除される予定のAPIです。


  • スクリーンアップデートに関する allegro_gl_screen_mode関数および定義は、
    AllegroGL 0.4.0 のソースから既に削除されました。
    AGL_MODE_DIRECT
    AGL_MODE_OPAQUE
    AGL_MODE_DUPLEX


  • 各種設定
    0.4.0では、アルファチャンネルを、有効に切り替えなくても良くなったのかもしれない。
    int allegro_gl_use_alpha_channel() は非推奨APIです。
    int allegro_gl_flip_texture() は非推奨APIです。
    int allegro_gl_use_mipmapping () は非推奨APIです。

  • テクスチャ生成
    allegro_gl_make_texture() は非推奨APIです。代わりに allegro_gl_make_texture_ex() を使います。
    allegro_gl_check_texture () は非推奨APIです。代わりに allegro_gl_check_texture_ex () を使います。

    allegro_gl_set_texture_format() は非推奨APIです。 allegro_gl_make_texture_ex() から自動的に呼ばれ、使わない。 allegro_gl_get_texture_format ()

    allegro_gl_set_font_generation_mode  これは今後のバージョンで削除される予定。
    AGL_ALLEGRO_FORMAT この定義も無効になっている。

  • フォント関連は、読み込んだAllegrofont をビットマップテクスチャとして変換する手順を踏む
    allegro_gl_convert_allegro_font() は非推奨なので、代わりに allegro_gl_convert_allegro_font_ex を使います。

    残念ながらフォントのアウトライン化は非推奨とされています。
    #define AGL_FONT_TYPE_OUTLINE 1
    アウトラインフォント化の使用 は非推奨。 それに伴い各定数

    AGL_FONT_STYLE_BOLD
    AGL_FONT_STYLE_BLACK
    AGL_FONT_STYLE_ITALIC
    AGL_FONT_STYLE_UNDERLINE
    AGL_FONT_STYLE_STRIKEOUT
    AGL_FONT_STYLE_ANTI_ALIASED
    AGL_FONT_POLYGONS
    AGL_FONT_LINES


    も非推奨になっています。


    allegro_gl_load_system_font
    allegro_gl_load_system_font_ex
    ドキュメントの allegro_gl_load_system_font_exの項目にアウトラインフォントの実装関連の説明が載っている。Allegro font は、 vector font に変換できないため、システムフォントを直接読んでアウトラインフォントとして変換するためのAPIが作られたのかもしれない。 環境によってはwidth、height指定が効かないそうです。これらは今後のバージョンでで削除される予定らしい。
  • Last modified 2006.04.03 AllegroGL 0.4.0RC3リリースされたので、AllegroGL0.2.4 インストールメモをタブ化。

    Tsukubado