web-dev-qa-db-ja.com

OpenGL bool uniform?

OpenGL glslシェーダーにブール値を送信しようとしています。

現在、私はこれをシェーダーに持っています:

uniform bool foo;

そして、私はこれを使用して設定します:

glUniform1i(glGetUniformLocation(shader, "foo"), true);

glUniform1bはないようですので、整数として設定しています。これはうまくいくようです。

このアプローチに問題はありますか?移植性がありますか、それとも他のグラフィックカード/ドライバーで破損する可能性がありますか?現在OpenGL 4.3を使用しています。

26
Jan Rüegg

§4.1基本型 OpenGLシェーディング言語は、次のようにグループ化された次の基本データ型をサポートしています。

  • bool trueまたはfalseの値を取る条件付きタイプ
  • bvec2 2成分のブールベクトル
  • bvec3 3成分のブールベクトル
  • bvec4 4成分のブールベクトル

...

§4.1.2ブール値コードの条件付き実行を表現しやすくするために、bool型がサポートされています。ハードウェアがこのタイプの変数を直接サポートするという期待はありません。 (...)

設定に関して:

§2.2.1(...)状態値がその状態の実際のタイプとは異なるパラメータータイプを使用して指定されている場合、データ変換は次のように実行されます。

  • 内部状態のタイプがブール値の場合、ゼロの整数値または浮動小数点値はFALSEに変換され、ゼロ以外の値はTRUEに変換されます。
28