強火で進め

このブログではプログラム関連の記事を中心に書いてます。

OpenGL ESのマテリアル情報は取得と設定で使用するFaceの設定が異なるみたい

とあるライブラリをいじっているときに以下のコマンドでエラーが発生。

glGetMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE,matenvGL_DIFFUSE)

リファレンスで確認したところOpenGL ESだとFace(第一引数の値。どの面に対するアクションであるかを指定)が GL_FRONT か GL_BACK しか使えないみたい。

glGetMaterial
http://khronos.org/opengles/sdk/1.1/docs/man/glGetMaterial.xml

取得の方を修正したので設定の方のコマンド glMaterial() も GL_FRONT に設定したところエラー発生。

ずっと悩みながら調査を進め、リファレンスを確認するとこちらは GL_FRONT_AND_BACK だけしか対応していないらしい。

glMaterial
http://khronos.org/opengles/sdk/1.1/docs/man/glMaterial.xml

こんなプログラムを作ってデータを確認したところ GL_FRONT と GL_BACK の両方ともちゃんと値が変更されてた。

        GLfloat mat[4];
        glGetMaterialfv(GL_FRONT, GL_EMISSION, mat);
        mat[0] = 0.5f;
        mat[1] = 0.5f;
        mat[2] = 0.5f;
        mat[3] = 0.5f;
        glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, mat);
        glGetMaterialfv(GL_FRONT, GL_EMISSION, mat);
        glGetMaterialfv(GL_BACK, GL_EMISSION, mat);

どうせ設定のコマンドで GL_FRONT_AND_BACK しか使えないなら取得のコマンドも GL_FRONT_AND_BACK だけ使える様にしとけば良さそうなの何でこんな仕様なんだろ?