OpenGL 1.1で気をつけること


OpenGL 1.1 のバージョンであれば、今ならどこでも動くだろうと思ってやむなく使うこともあるかと思います。
そんなときに意外と嵌まってしまうポイントがあるようだったので、ここに記録&公開しておきたいと思います。もしも○○も気をつけなきゃいけないポイントだよね!ということがあればコメントにでもいただけると嬉しいです。

・ちゃんと初期化処理を行う。
ドライバ等の規定値を信用せずに、使用する値や期待しているステートは自分で再セットを行うこと。
ビューポートの指定を忘れると妙な挙動に悩まされることも。(例:RADEONの一部ドライバにて)

・テクスチャの解像度について。
実はOpenGL 1.1ではテクスチャは2ベキである必要があります。
最近のハードウェアだと非2ベキで問題なく動作するため、この問題に気づきにくいです。
また1.1でコンテキストをデフォルトで作成するということが OpenGLでできないためやっぱり発見が遅れます。

・拡張の取得について。
フレームレート制御のために glSwapIntervalを使いたいことがあります。
定番なのはこれのサポートチェックのために wglGetExtensionsString を使いますが、
意外とこの関数ポインタが取り出せないことがあるので注意が必要です。またこの関数がとれなくても glGetString(GL_EXTENSIONS)で、WGL_EXT_swap_control の有無をチェックするというコードも必要です。

・GLのデバイスについて
ドライバが正常に入っていても実はOpenGLはエミュレーションで動くとか平気であり得る。
レンダラーが GDI Generic とか返ってきたらエミュレーション。

・SwapBuffers実行の前にglFlush()を呼ぶ
これをやらないと描画できないデバイス(ドライバ)がいる模様。もしくは glFinish() でもいいのかも。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする