Archive for the ‘OpenGL’ Category:

WindowsでOpenGL (GLUTを使わずGLEWで)

Thursday, January 5th, 2012

MacでOpenGLをやりたいと思っているのですが、せっかくマルチプラットフォームなOpenGLを使うならWindowsも動作確認をしておきたいということもあり、これから開発するアプリのひな形にと、Windows上で非常に単純なOpenGLアプリを作成してみました。ソースコードはこちらです。
ベースにしたのは、以前、Direct Xで作成したGame of Life 3Dです。こちらから、Direct Xに関連する部分を削除、そしてOpenGLの処理を追加しました。
WindowsでOpenGLを開発しようとして困るのが、どうやってOpenGL Contextを取得するのかという部分です。この部分は、環境依存となっており、統一した方法をOpenGL側では用意していません。そこで、多くの人が使うのがGLUTですが、これを用いると開発は簡単になるのですが、完全にブラックボックスになってしまい、プラットフォームの機能を十分に生かせません。なので、GLUTを使わず、参考にしている書籍「OpenGL 4.0 Shading Language Cookbook」にも書かれているGLEWを用いてみることとしました。また以下のOpenGL.orgの情報も参考にしました。

具体的にOpenGL Contextを作成しているのはGLContext.cpp内でです。58行目のアトリビュートにてOpenGLのバージョンを指定しています。ここでは、IntelのGPUでも動作するように2.1.0を指定しています。最新のGeforceやRadeonであれば4.2.0で動作します(手持ちのRadeon 6570とGeforce 460で確認済み)。

    static const int  att[] = {
        WGL_CONTEXT_MAJOR_VERSION_ARB,   2,
        WGL_CONTEXT_MINOR_VERSION_ARB,   1,
        WGL_CONTEXT_FLAGS_ARB,           0,
        WGL_CONTEXT_PROFILE_MASK_ARB,    WGL_CONTEXT_CORE_PROFILE_BIT_ARB,
        0,
    };

今は単純に三角形を表示しているだけですが、GLSLもきちんと使っています。Ribbonは表示していますが、終了以外は特に何もしません。内部ではTSF、Animation、Touchなどのソースも残していますが、これといって何もしていない状態です。時間があったらもう少しアプリらしくしたいと思います。