初期化

FWAppの初期化処理は仮想関数Initで行います.

FWApp

virtual void Init(int argc, char* argv[])

 

以下にInit関数のデフォルトの実装を示します.

void FWApp::Init(int argc, char* argv[]){
    // create SDK
    CreateSdk();
    // create a single scene
    GetSdk()->CreateScene();
    // initialize window manager
    GRInit(argc, argv);
    // create main window
    CreateWin();
    // create timer
    CreateTimer();
}

はじめに

    CreateSdk();

でSDKを作成します. つぎに

    GRInit(argc, argv);

でウィンドウマネジャが作成されます. デフォルトではGLUTを用いるウィンドウマネジャが作成されます. さらに

    GetSdk()->CreateScene();

FWSceneを1つ作成します. つづいて

    CreateWin();

でメインウィンドウを作成します. 最後に

    CreateTimer();

でタイマを作成します.

この基本処理に追加してなんらかの処理を行う場合は

virtual void Init(int argc = 0, char* argv[] = 0){
    // select GLUI window manager
    SetGRAdaptee(TypeGLUI);

    // call base Init
    FWApp::Init(argc, argv);

    // do extra initialization here


}

のように,FWApp:Initを実行してから追加の処理を行うのが良いでしょう. 一方,以下に挙げるようなカスタマイズが必要な場合はInit関数の処理全体を派生クラスに記述する必要があります.

この場合は,上に載せたInitのデフォルト処理をもとに必要な部分に修正を加えるのが良いでしょう.

プログラムの全体の構造は通常以下のようになります.

MyApp app;

int main(int argc, char* argv[]){
    app.Init(argc, argv);
    app.StartMainLoop();
    return 0;
}

ここでMyAppはユーザが定義したFWAppの派生クラスです(もちろん他の名前でも構いません). MyAppのインスタンスをグローバル変数として定義し, main関数でInitStartMainLoopを順次実行します. StartMainLoop関数はアプリケーションのメインループを開始します.