警告 X3550:数组引用不能用作左值
Warning X3550: array reference cannot be used as an l-value
我正在尝试让我的着色器在 Shaderfrog 中工作,我通过 URL 导入了我的 glsl 沙箱版本。
我遇到错误:“C:\fakepath(111,2-27):警告 X3550:数组引用不能用作左值;不可本地寻址,强制展开循环。
真的不确定为什么会出现此错误,我尝试取消嵌套循环中的任何循环但无济于事。
这是我的片段代码:
#extension GL_OES_standard_derivatives : enable
precision highp float;
varying vec2 vUv;
uniform float time;
uniform vec2 resolution;
void main()
{
vec2 p = vUv.xy / resolution.x * .05;
vec3 col;
for (float j = 0.; j < 3.; j++) {
p.x += ((0.05 / 2.0) * sin(2.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 2.0)) * 2.0)));
p.y += ((0.02 / 2.0)* cos(2.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 2.0)) * 2.0)));
p.x += ((0.05 / 3.0) * sin(3.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 3.0)) * 3.0)));
p.y += ((0.02 / 3.0)* cos(3.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 3.0)) * 3.0)));
p.x += ((0.05 / 4.0) * sin(4.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 4.0)) * 4.0)));
p.y += ((0.02 / 4.0)* cos(4.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 4.0)) * 4.0)));
p.x += ((0.05 / 5.0) * sin(5.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 5.0)) * 5.0)));
p.y += ((0.02 / 5.0)* cos(5.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 5.0)) * 5.0)));
p.x += ((0.05 / 6.0) * sin(6.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 6.0)) * 6.0)));
p.y += ((0.02 / 6.0)* cos(6.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 6.0)) * 6.0)));
p.x += ((0.05 / 7.0) * sin(7.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 7.0)) * 7.0)));
p.y += ((0.02 / 7.0) * cos(7.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 7.0)) * 7.0)));
p.x += ((0.05 / 8.0) * sin(8.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 8.0)) * 8.0)));
p.y += ((0.02 / 8.0)* cos(8.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 8.0)) * 8.0)));
p.x += ((0.05 / 9.0) * sin(9.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 9.0)) * 9.0)));
p.y += ((0.02 / 9.0)* cos(9.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 9.0)) * 9.0)));
p.x += ((0.05 / 10.0) * sin(10.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 10.0)) * 10.0)));
p.y += ((0.02 / 10.0)* cos(10.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 10.0)) * 10.0)));
p.x += ((0.05 / 11.0) * sin(11.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 11.0)) * 11.0)));
p.y += ((0.02 / 11.0)* cos(11.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 11.0)) * 11.0)));
p.x += ((0.05 / 12.0) * sin(12.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 12.0)) * 12.0)));
p.y += ((0.02 / 12.0)* cos(12.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 12.0)) * 12.0)));
p.x += ((0.05 / 13.0) * sin(13.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 13.0)) * 13.0)));
p.y += ((0.02 / 13.0)* cos(13.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 13.0)) * 13.0)));
p.x += ((0.05 / 14.0) * sin(14.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 14.0)) * 14.0)));
p.y += ((0.02 / 14.0)* cos(14.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 14.0)) * 14.0)));
p.x += ((0.05 / 15.0) * sin(15.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 15.0)) * 15.0)));
p.y += ((0.02 / 15.0)* cos(15.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 15.0)) * 15.0)));
p.x += ((0.05 / 16.0) * sin(16.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 16.0)) * 16.0)));
p.y += ((0.02 / 16.0)* cos(16.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 16.0)) * 16.0)));
p.x += ((0.05 / 17.0) * sin(17.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 17.0)) * 17.0)));
p.y += ((0.02 / 17.0)* cos(17.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 17.0)) * 17.0)));
p.x += ((0.05 / 18.0) * sin(18.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 18.0)) * 18.0)));
p.y += ((0.02 / 18.0)* cos(18.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 18.0)) * 18.0)));
p.x += ((0.05 / 19.0) * sin(19.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 19.0)) * 19.0)));
p.y += ((0.02 / 19.0)* cos(19.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 19.0)) * 19.0)));
p.x += ((0.05 / 20.0) * sin(20.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 20.0)) * 20.0)));
p.y += ((0.02 / 20.0)* cos(20.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 20.0)) * 20.0)));
p.x += ((0.05 / 21.0) * sin(21.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 21.0)) * 21.0)));
p.y += ((0.02 / 21.0)* cos(21.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 21.0)) * 21.0)));
p.x += ((0.05 / 22.0) * sin(22.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 22.0)) * 22.0)));
p.y += ((0.02 / 22.0)* cos(22.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 22.0)) * 22.0)));
p.x += ((0.05 / 23.0) * sin(23.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 23.0)) * 23.0)));
p.y += ((0.02 / 23.0)* cos(23.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 23.0)) * 23.0)));
p.x += ((0.05 / 24.0) * sin(24.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 24.0)) * 24.0)));
p.y += ((0.02 / 24.0)* cos(24.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 24.0)) * 24.0)));
p.x += ((0.05 / 25.0) * sin(25.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 25.0)) * 25.0)));
p.y += ((0.02 / 25.0)* cos(25.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 25.0)) * 25.0)));
col[int(j)] = 20.*(abs(p.x + p.y));
}
gl_FragColor = vec4(col, 1.);
}
理解错误
array reference cannot be used as an l-value
见OpenGL ES Shading Language 1.00 Specification - 5.5 Vector Components
[...]
To form an l-value, swizzling must be applied to an l-value of vector type [...]
还有 OpenGL ES Shading Language 1.00 Specification - 5.8 Assignments
[...] Array variables are l-values and may be passed to parameters declared as out or inout. However, they may not be used as the target of an assignment. [...]
这意味着可以读取表单 col[i]
,但无法通过赋值写入。
您必须在选择中分配矢量的分量:
vec3 col;
for (int j = 0; j < 3; j++) {
// [...]
float c = 20.*(abs(p.x + p.y));
if (j==0)
col.x = c;
else if (j==1)
col.y = c;
else
col.z = c;
}
我正在尝试让我的着色器在 Shaderfrog 中工作,我通过 URL 导入了我的 glsl 沙箱版本。
我遇到错误:“C:\fakepath(111,2-27):警告 X3550:数组引用不能用作左值;不可本地寻址,强制展开循环。
真的不确定为什么会出现此错误,我尝试取消嵌套循环中的任何循环但无济于事。
这是我的片段代码:
#extension GL_OES_standard_derivatives : enable
precision highp float;
varying vec2 vUv;
uniform float time;
uniform vec2 resolution;
void main()
{
vec2 p = vUv.xy / resolution.x * .05;
vec3 col;
for (float j = 0.; j < 3.; j++) {
p.x += ((0.05 / 2.0) * sin(2.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 2.0)) * 2.0)));
p.y += ((0.02 / 2.0)* cos(2.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 2.0)) * 2.0)));
p.x += ((0.05 / 3.0) * sin(3.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 3.0)) * 3.0)));
p.y += ((0.02 / 3.0)* cos(3.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 3.0)) * 3.0)));
p.x += ((0.05 / 4.0) * sin(4.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 4.0)) * 4.0)));
p.y += ((0.02 / 4.0)* cos(4.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 4.0)) * 4.0)));
p.x += ((0.05 / 5.0) * sin(5.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 5.0)) * 5.0)));
p.y += ((0.02 / 5.0)* cos(5.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 5.0)) * 5.0)));
p.x += ((0.05 / 6.0) * sin(6.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 6.0)) * 6.0)));
p.y += ((0.02 / 6.0)* cos(6.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 6.0)) * 6.0)));
p.x += ((0.05 / 7.0) * sin(7.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 7.0)) * 7.0)));
p.y += ((0.02 / 7.0) * cos(7.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 7.0)) * 7.0)));
p.x += ((0.05 / 8.0) * sin(8.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 8.0)) * 8.0)));
p.y += ((0.02 / 8.0)* cos(8.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 8.0)) * 8.0)));
p.x += ((0.05 / 9.0) * sin(9.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 9.0)) * 9.0)));
p.y += ((0.02 / 9.0)* cos(9.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 9.0)) * 9.0)));
p.x += ((0.05 / 10.0) * sin(10.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 10.0)) * 10.0)));
p.y += ((0.02 / 10.0)* cos(10.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 10.0)) * 10.0)));
p.x += ((0.05 / 11.0) * sin(11.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 11.0)) * 11.0)));
p.y += ((0.02 / 11.0)* cos(11.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 11.0)) * 11.0)));
p.x += ((0.05 / 12.0) * sin(12.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 12.0)) * 12.0)));
p.y += ((0.02 / 12.0)* cos(12.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 12.0)) * 12.0)));
p.x += ((0.05 / 13.0) * sin(13.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 13.0)) * 13.0)));
p.y += ((0.02 / 13.0)* cos(13.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 13.0)) * 13.0)));
p.x += ((0.05 / 14.0) * sin(14.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 14.0)) * 14.0)));
p.y += ((0.02 / 14.0)* cos(14.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 14.0)) * 14.0)));
p.x += ((0.05 / 15.0) * sin(15.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 15.0)) * 15.0)));
p.y += ((0.02 / 15.0)* cos(15.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 15.0)) * 15.0)));
p.x += ((0.05 / 16.0) * sin(16.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 16.0)) * 16.0)));
p.y += ((0.02 / 16.0)* cos(16.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 16.0)) * 16.0)));
p.x += ((0.05 / 17.0) * sin(17.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 17.0)) * 17.0)));
p.y += ((0.02 / 17.0)* cos(17.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 17.0)) * 17.0)));
p.x += ((0.05 / 18.0) * sin(18.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 18.0)) * 18.0)));
p.y += ((0.02 / 18.0)* cos(18.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 18.0)) * 18.0)));
p.x += ((0.05 / 19.0) * sin(19.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 19.0)) * 19.0)));
p.y += ((0.02 / 19.0)* cos(19.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 19.0)) * 19.0)));
p.x += ((0.05 / 20.0) * sin(20.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 20.0)) * 20.0)));
p.y += ((0.02 / 20.0)* cos(20.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 20.0)) * 20.0)));
p.x += ((0.05 / 21.0) * sin(21.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 21.0)) * 21.0)));
p.y += ((0.02 / 21.0)* cos(21.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 21.0)) * 21.0)));
p.x += ((0.05 / 22.0) * sin(22.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 22.0)) * 22.0)));
p.y += ((0.02 / 22.0)* cos(22.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 22.0)) * 22.0)));
p.x += ((0.05 / 23.0) * sin(23.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 23.0)) * 23.0)));
p.y += ((0.02 / 23.0)* cos(23.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 23.0)) * 23.0)));
p.x += ((0.05 / 24.0) * sin(24.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 24.0)) * 24.0)));
p.y += ((0.02 / 24.0)* cos(24.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 24.0)) * 24.0)));
p.x += ((0.05 / 25.0) * sin(25.0 * 10. * p.y + (time*0.2) + cos((time / (150. * 25.0)) * 25.0)));
p.y += ((0.02 / 25.0)* cos(25.0 * 10. * p.x + (time*0.15) + sin((time / (100. * 25.0)) * 25.0)));
col[int(j)] = 20.*(abs(p.x + p.y));
}
gl_FragColor = vec4(col, 1.);
}
理解错误
array reference cannot be used as an l-value
见OpenGL ES Shading Language 1.00 Specification - 5.5 Vector Components
[...] To form an l-value, swizzling must be applied to an l-value of vector type [...]
还有 OpenGL ES Shading Language 1.00 Specification - 5.8 Assignments
[...] Array variables are l-values and may be passed to parameters declared as out or inout. However, they may not be used as the target of an assignment. [...]
这意味着可以读取表单 col[i]
,但无法通过赋值写入。
您必须在选择中分配矢量的分量:
vec3 col;
for (int j = 0; j < 3; j++) {
// [...]
float c = 20.*(abs(p.x + p.y));
if (j==0)
col.x = c;
else if (j==1)
col.y = c;
else
col.z = c;
}