In particular, we 1. weren't setting the function mask to 'all on', such that any mixed function mask would in turn apply inside the foreach loop, and 2. weren't always setting the internal mask to 'all on' before doing any additional masking based on the iteration variables.
26 lines
617 B
Plaintext
26 lines
617 B
Plaintext
|
|
export uniform int width() { return programCount; }
|
|
|
|
|
|
// make sure we reset the func mask in the foreach loop...
|
|
|
|
void update(uniform float val[], const uniform float a[]) {
|
|
foreach (i = 0 ... programCount+3)
|
|
val[i] += a[i] - 1;
|
|
}
|
|
|
|
export void f_f(uniform float RET[], uniform float aFOO[]) {
|
|
uniform float val[programCount+3];
|
|
for (uniform int i = 0; i < programCount+3; ++i)
|
|
val[i] = 0;
|
|
|
|
if ((int)aFOO[programIndex] & 1)
|
|
update(val, aFOO);
|
|
|
|
RET[programIndex] = val[3+programIndex];
|
|
}
|
|
|
|
export void result(uniform float RET[]) {
|
|
RET[programIndex] = programIndex+3;
|
|
}
|