我正在尝试在片段着色器中创建一个空的 vec2 数组。
获取长度并将 vec2 推入数组的语法是什么?
您无法将值“推送”到 GLSL 中的数组。数组的大小无法更改。您所能做的就是创建一个大小恒定的数组,并使用一个额外的变量来告诉您数组中有多少个值有意义:
vec2 array[10];
int size = 0;
array[size] = vec2(1.0, 0.0);
size = size + 1;
数组的长度可以通过
length()
获得。例如:array.length();
。另请参阅GLSL 4.6 - 基本类型。
您可以像这样创建 vec2 数组:
vec2 myArray[10];
然后你可以像这样一一初始化这些值:
myArray[0] = vec2(0.0, 0.0);
myArray[1] = vec2(0.0, 0.0);
// ...
或者你可以使用像这样的
for
循环:
for (int i = 0; i < myArray.length(); i++) {
myArray[i] = vec2(123, 123);
}
myArray.length()
函数调用返回数组大小。
需要提及的一件重要事情是数组必须声明为固定大小,即不可能使用变量来声明数组的大小。
但是,如果必须将大小应用于多个数组,则可以使用常量,如下所示:
#define SIZE 10
vec2 myArray[SIZE];
vec2 myArray2[SIZE];
这也使得在使用 4.3 版本之前的 GLSL 时可以创建数组的数组,如下所示:
#define ROWS 10
#define COLUMNS 2
int myArray[ROWS * COLUMNS];
for (int row = 0; row < ROWS; row++) {
for (int column = 0; column < COLUMNS; column++) {
myArray[COLUMNS * row + column] = 123;
}
}