▽OpenGLでテクスチャマッピング
 (ベンチマーク)

これまでに作成してきた各種クラスを利用して、OpenGLでテクスチャを貼るときのベンチマークソフトを作ってみました。

ソースコードはこちら。

skGLTexture ver 1.0 [021]
skGLTexture-021.lzh

ただし、このソースコードだけではコンパイルできません。別にskLibを入手してください。

指定された方法でテクスチャマッピングされたボックスがぐるぐる回り続けます。

skGLTexture
skGLTexture実行中

○解説

今回のプログラムで使っている、ちょっとしたテクニックの解説です。

○アイドル処理

今回はWM_TIMERでの手抜きアニメーションではなく、メッセージループがあいているときに、常に処理を行い続ける方法を使っています。

BOOL CSkGLTextureApp::OnIdle(LONG lCount) 
{
    //      システムが時間を必要としているときはシステム優先

    if( CWinApp::OnIdle( lCount ) )
        return  TRUE;

    //      可能ならばビューを更新

    if( m_view == NULL )
        return  FALSE;

    m_view->Loop();
    
    return  TRUE;
}

CWinApp::OnIdle()のあと、無条件で自分の処理を行う事もできますが、ここでは、MFCが処理を行っているあいだはそちらを優先するようにしてあります。問答無用で時間を使うようなやり方より、ちょっと控えめって感じで。

○特定のコマンドだけ受け付け

ベンチマークを実行中は“ベンチマーク停止”以外のコマンドは受け付けないようにしてあります。

BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) 
{
    CSkGLTextureApp*    app = (CSkGLTextureApp*)AfxGetApp();

    if( app->GetBenchmark() == true ) {

        //      ベンチマーク中は特定のコマンドしか使用できない

        if( nID != IDC_BENCH_STOP )
            return  FALSE;
    }

    return  CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}

見ての通り、使えないコマンドはメッセージとしての処理を拒否しているだけです。簡単ですね。

○4文字の拡張子

CFileDialogでファイルを保存するときのファイル名を選択したとき、ユーザーが拡張子を指定しなかったときは自動的に拡張子を追加してくれますが、なぜか、3文字までしか追加してくれません。

つまり、拡張子を『html』と指定していて、ユーザーが『aaa』と入力したときは『aaa.htm』なんてファイル名になってしまいます。

仕方がないので、CFileDialogは信用しないで、自力で拡張子を追加しています。

○Html出力

ベンチマークの結果はHtml形式で出力されますが、これは、リソースに持っているHtmlファイルから、必要な部分だけを置き換えて出力する事で実現しています。

似たような処理をやりたい方にはCSkGLTextureView::BenchWrite()、CSkGLTextureView::ReplaceKeyword()のあたりが参考になるかもしれません。

○その他

全体的にエラー処理が甘いです。また、ベンチマーク目的という事で(?)最適化の処理もものすごく甘いです。OpenGLをまじめに使いたい人は、そのあたりは自力でがんばってください。

○結果

せっかくベンチマークソフトを作った事ですし、手元にあったいくつかのマシンで測定してみました。

結果はこんな感じになりました。※別ウィンドウで開きます
ベンチマーク結果

測定環境がどれも古いのは、見なかった事にしてください。OpenGLですし、最新のグラフィックカードでも傾向は変わらないと思います。

それで、わざわざソフトを作ってまで設定とフレームレートの関係を調べましたが・・・ なんだか想像通りの結果で、いまいち面白味に欠けます。

新たな発見というと、少なくとも、テクスチャに関してはディスプレイリストがあまりあてにならないのと、glBindTextureを使えば、他の設定は自由になりそうな所ぐらいでしょうか。

まぁ、『そこまで調べて、OpenGLを何に使うんだ?』って疑問もありますがw

○今後の予定

OpenGLだけでずいぶん引っ張ってしまいました。そろそろ、OpenGLは一段落という事で、他の処理に入りたいところですが・・・ その前に、テクスチャマッピングじゃなくてポリゴン数を基準にしたベンチマークソフトを作るかもしれません。

とりあえず、今後の予定はこんな感じ。


[skLib] Presented by See.Ku [2005/1/30]