OpenGL glslシェーダーにブール値を送信しようとしています。
現在、私はこれをシェーダーに持っています:
uniform bool foo;
そして、私はこれを使用して設定します:
glUniform1i(glGetUniformLocation(shader, "foo"), true);
glUniform1b
はないようですので、整数として設定しています。これはうまくいくようです。
このアプローチに問題はありますか?移植性がありますか、それとも他のグラフィックカード/ドライバーで破損する可能性がありますか?現在OpenGL 4.3を使用しています。
§4.1基本型 OpenGLシェーディング言語は、次のようにグループ化された次の基本データ型をサポートしています。
bool
trueまたはfalseの値を取る条件付きタイプbvec2
2成分のブールベクトルbvec3
3成分のブールベクトルbvec4
4成分のブールベクトル
...
§4.1.2ブール値コードの条件付き実行を表現しやすくするために、bool型がサポートされています。ハードウェアがこのタイプの変数を直接サポートするという期待はありません。 (...)
設定に関して:
§2.2.1(...)状態値がその状態の実際のタイプとは異なるパラメータータイプを使用して指定されている場合、データ変換は次のように実行されます。
- 内部状態のタイプがブール値の場合、ゼロの整数値または浮動小数点値は
FALSE
に変換され、ゼロ以外の値はTRUE
に変換されます。