2012-02-23 15 views
6

シェーダー変数にはboolタイプがありますが、使用したいサイズは見つかりませんでした。ポインタ頂点属性を設定するとき、私は一般的にboolは4バイトintと同じサイズを持つ必要があり、C++でGLSLブール値のサイズ

GL_BYTE, 
GL_UNSIGNED_BYTE, 
GL_SHORT, 
GL_UNSIGNED_SHORT, 
GL_INT, 
GL_UNSIGNED_INT, 
GL_FLOAT, or 
GL_DOUBLE 

にすることができるデータの種類を指定するため、これは重要、私はGLSLのための同じをとることができるか、それをしません1バイトしかありませんか?

+1

私は確かにboolはC++(通常は実装が定義されています)では1バイトしかありませんが、逆のことを証明する準備ができています。 –

+0

@ChristianRauよく調べました。あなたは正しいと思いますが、sizeofも1を返します。私がどこにいるかを覚えていません。 – Raven

+2

唯一言うことは、sizeof(bool)です。クリスチャンの権利は、実装定義であり、コンパイラの設定に依存することさえあります。 – MSalters

答えて

11

頂点を設定するときは、私は頂点がはブールすることはできません属性のため、それは、無関係だ

ことができるデータの種類を指定するポインタ属性ので、これが重要。 GLSL 3.30仕様から:

頂点シェーダ入力のみフロート、浮動小数点ベクトル、行列、符号付きおよび符号なし整数および整数のベクトルであってもよいです。頂点シェーダ入力は、これらのタイプの配列を形成することもできますが、構造は作成できません。

ブール値はそのリストにありません。

ただし、GLSL boolのサイズがuniform blocksであることを知りたければ、それはuint:32ビットと同じサイズです。

+0

だから、GL4.0のdoubleを除くすべての型は最終的に4バイトに拡張され、クライアント側のみに関係しますか? – Raven

+1

@Raven:頂点シェーダー入力のGLSLタイプです。属性値として渡すものは多くの場合あなた次第です。 OpenGLには、必要に応じてデータを変換するための幅広い緯度があります。 32ビットの整数を渡す必要はありません。必要に応じて8ビットの整数を使うことができます。正規化された整数属性を浮動小数点入力に渡すことができます。その他 –