我遇到了一個試圖編譯片段着色器的問題。我不斷收到此錯誤: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