GLSLには、const struct
宣言のようなものはありません。しかし時定数の値をコンパイルしていない:
const int position_loc = 0;
constant expressionsのための規則は、定数式で初期化されたconst修飾変数は定数式そのものであると言います。
そして、このようなconst修飾変数の型は基本型でなければならないと言う何のルールがないではありません。attr
は定数式を含む初期化リストで初期化されているので
struct Attr
{
int position;
};
const Attr attr = {1};
、attr
があるがそれ自体は定数式です。つまり、attr.position
も整数型の定数式です。
そして、このようなコンパイル時の整数定数式がlayout qualifiersで使用することができますが、GLSL 4.40またはARB_ehanced_layouts使用している場合にのみ:そのバージョンの前に
layout(location = attr.position) in vec3 position;
を、あなたが使用する必要がしたいです実際のリテラル。これはあなたができる最善の#define
だろう意味:
#define position_loc 1
layout(location = position_loc) in vec3 position;
今個人的に、私は、このような積分定数式 - 内 - 構造体体操に頼ることはありません。ドライバのコードがほとんどこのような方法でテストされることはほとんどありません。したがって、ドライバのバグに遭遇する可能性はかなり高いです。 #define
メソッドは、実際にはるかに機能する可能性があります。
私は '#define ' – elect