Allegro,AllegroGL, OpenGL のタイムライン

2005/05/15
AllegroGL, OpenGL を使うためのメモ。OpenGLのヘッダファイルは、それぞれ MacOSX :OpenGL/glu.h  Windows :GL/glu.h となっている。AllegroGL は、install_allegro_gl(); で初期化するだけ、OpenGL に至っては、拡張機能は自動的に管理される。

複数のライブラリを使用した開発では、そのコードがどこから由来しているのか知らないと混乱を招く可能性があります。そこで、わかりやすくライブラリごとに対応する処理を分けてみた。AllegroGL サンプルプログラムでは、Allegro, AllegroGL , OpenGL を組み合わせたコードの進行は、おおよそ次のようになっていた。(この表に書いてあるコードは ほとんどメモ程度のものなので、実際には動作しません)
C言語文脈
Allegro文脈
AllegroGL 文脈 OpenGL文脈
(任意)
#include< stdio.h>

Allegro ヘッダファイル読込み
#include <allegro.h>
AllegroGL ヘッダファイル読込み
#include "alleggl.h"
OpenGL ヘッダファイル読込み
他OSでもコンパイル可能にするなら
#ifdef ALLEGRO_MACOSX
#include <OpenGL/glu.h>
#else
#include <GL/glu.h>
#endif

Allegroで使う変数の用意(任意)
volatile int secs;
AllegroGLで使う変数の用意(任意)OpenGLで使う変数の用意(任意)


struct void fps_timer(void){
FPSを計算する場合のカウント(任意)
secs++;
}END_OF_FUNCTION(fps_timer);


struct OpenGL_matrix_and_so_on_etc{
OpenGL で 使用するデータなどを準備の例 主に 他の描画処理関数で使われる。
エフェクトや,回転用のmatrixデータ,スプライト動作処理、3Dオブジェクトの頂点座標データなど
}

void draw_GL(void){
  OpenGL の 描画処理の例 AllegroGLのサンプルでは main()関数のwhileループ内で呼び出される。 他の描画処理関数  からも呼び出される。
カラー設定
glClear ,  glColor4f
glBegin( setting );

glBegin と glEnd の間に
OpenGLの描画処理を書く
glRotatef ,glPushMatrix(); など。

glEnd();
フレームバッファに反映
 glFlush();
}

void init_GL(void){
OpenGL の 初期化処理の例 AllegroGL サンプルプログラムでは main()関数内に書かれているが、ここでは分けてみた。
シェーディング、ポリゴン、カメラ視点などの初期状態をセット。
glEnable( setting );
glShadeModel( setting );
glPolygonMode( setting );

glLoadIdentity();

 /*カメラの視点  */
 gluLookAt( setting );

glBegin( setting );
〜〜〜
glEnd();
}

int main(){ メイン処理


Allegroで使う変数を用意。
BITMAP *texture,*sprite;
DATAFILE *datafile;
AllegroGLで使う変数を用意 OpenGLで使う変数を用意。
GLuint *value;
Unicodeを使用する場合(任意)  set_uformat(int type);
Allegro を有効にする前にセットする
Allegroを有効にする。
allegro_init();
AllegroGLを有効にする。install_allegro_gl();
キーボード入力,マウス入力等を有効にする。
install_keyboard();
install_mouse();
 install_timer();
タイマー処理(任意)
LOCK_FUNCTION(fps_timer);
LOCK_VARIABLE(secs);
install_int (fps_timer, 1000);
AllegroGL の初期状態をセットする。
allegro_gl_clear_settings();
allegro_gl_set( setting , value );
allegro_gl_set( priority , setting | ....);
allegro_gl_set(AGL_WINDOWED, TRUE);
スクリーンの画面モードをセット、有効にする。
set_color_depth (32);
set_gfx_mode(GFX_OPENGL, WINDOW_W, WINDOW_H, 0, 0)
ソースの読み込み(ビットマップ画像,テクスチャ画像,サウンド,DATAFILE)(任意)
bitmap = load_bitmap("image.bmp", NULL);
data = load_datafile("datafile.dat");
テクスチャ画像のセット(任意)
処Allegroによって、読み込んだビットマップデータをテクスチャにセット。
allegro_gl_use_mipmapping(TRUE);
allegro_gl_make_texture( texture );
( allegro_gl_begin(); (不必要) )
AllegroGLから、OpenGL拡張機能をロード(任意)
allegro_gl_extensions_GL

OpenGLの初期状態をセットする
AllegroGL
サンプルプログラムでは main()関数内(ここ)に書かれている。
 init_GL();
 制御ループ(例)(  ESCキーが押されるまで処理を繰り返す:whileループを抜ける条件は任意) また、ループ内の各処理の順序は自由です。
  while (!key[KEY_ESC]) {
OpenGLによる描画(任意)
draw_GL();
処理によって、任意に呼び出せる。
glEnable(setting );
glLoadIdentity();
glBegin( setting );
〜〜〜
glEnd();
画面を更新する(任意)
allegro_gl_flip();
実際の表示画面が切り替えられる。OpenGLや、Allegroグラフィックによる描画がここで画面上に反映される。
キーボード入力/マウス入力/イベント処理(任意)
poll_mouse(); マウスの状態を監視
keypressed(); キーが押されたか?
readkey(); キーバッファ読み取り
if(
!key[KEY_A]   ){ 処理  }
}
Allegroで使ったデータの破棄
メモリを開放する
AllegroGLで使ったデータの破棄
メモリを開放する
OpenGLで使ったデータの破棄
メモリを開放する
return 0;
}
Allegro終了マクロ AllegroGL, OpenGL の終了
END_OF_MAIN();
OpenGLの画面モードは正しいものを設定してください。

プログラムは強制終了--- デバッグする。 プログラムが終了できなくなった--- アクティビティモニタを起動。モニタ>アクティビティモニタを表示>プロセス名から、プログラムを選択。 強制終了する。

ドライバ指定が間違っている!?
画面が薄暗くなり、電源ボタンまたはリセットボタンを押して再起動して下さいとメッセージでる---電源ボタン長押しで電源を切って再起動。
いきなり画面が真っ暗に---電源ボタン長押しで電源を切って再起動。