配列
配列は次のように宣言して使う。
int a[10];
関数に引き渡すには次のようにする。
void f(in int a[10]);f(a);
型にinがつくと、入力、
outがつくと、出力、
inoutがつくと、入出力になる。
次の例は、
an = a0 + ... + an-1
s = a0 + ... + an
を、a0を変えて計算する。
しかし、配列の大きさが1024より大きくなるとうまく動かなかった。
この問題ではそうだが、他では大きさの限界が違うかもしれない。
uniform sampler2DRect texUnit0; // dataconst int N = 1023;
void calc(inout int a[N+1]);
int sum(in int a[N+1]);void main(void) {
int n = int(texRECT(texUnit0, gl_FragCoord.xy).x);
if(n == 0)
return;
int a[N+1];
a[0] = n;
calc(a);
int s = sum(a);
gl_FragColor = vec4(a[N], s, 0, 0);
}void calc(inout int a[N+1]) {
for(int i = 1; i <= N; i++) {
a[i] = 0;
for(int k = 0; k < i; k++)
a[i] += a[k];
}
}int sum(in int a[N+1]) {
int s = 0;
for(int i = 0; i <= N; i++)
s += a[i];
return s;
}