我遇到了一个试图编译片段着色器的问题。我不断收到此错误:gl_FragData必须为零
Uncaught Error: Fragment Shader Compiler Error: ERROR: 0:21: '[' :
array index for gl_FragData must be constant zero ERROR: 0:21: '[' :
array index for gl_FragData must be constant zero ERROR: 0:21: '[' :
array index for gl_FragData must be constant zero
这是代码:
#ifdef GL_EXT_draw_buffers
#extension GL_EXT_draw_buffers : require
#endif
#ifdef GL_ES
precision highp float;
#endif
void main() {
gl_FragData[0] = vec4(1.,2.,3.,4.);
gl_FragData[1] = vec4(1.,2.,3.,4.);
gl_FragData[2] = vec4(1.,2.,3.,4.);
gl_FragData[3] = vec4(1.,2.,3.,4.);
}
如果我设置gl_FragColor
(与连接到帧缓冲器4个纹理)整个安装工作正常,但试图做上面的代码(索引缓冲区输出到)似乎不能编译。我已经看到使用扩展在WebGL1中正常工作。我正在使用WebGL2,所以在这种情况下可能有些不同? (我正在使用最新版本的Chrome浏览器)。
如果使用WebGL2我认为你必须从根本上改变你的语法,以适应GLSL 3.3标准...看看这里:http://io7m.com/documents/fso-tta/在'GLSL 3.30( OpenGL 3.3)'章节,也就是说:“在OpenGL [3.3,4.4]和OpenGL ES 3.0上,分配给指定的片段着色器输出,通过使用布局限定符将指定的输出与已编号的绘制缓冲区相关联。 – 2017-10-14 09:48:22
WebGL2不支持GLSL 3.3。它支持[GLSL ES 3.0](https://www.khronos.org/registry/OpenGL/specs/es/3.0/GLSL_ES_Specification_3.00.pdf)。引用GLSL 3.3规范只会发现大量的东西不起作用,因为这是错误的规范,这会非常混乱。 – gman