J'ai un problème en essayant de compiler un fragment shader. Je continue à obtenir cette erreur:gl_FragData doit être une constante 0
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
Voici le code:
#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.);
}
L'ensemble de l'installation fonctionne très bien si je suis la mise en gl_FragColor
(avec les 4 textures attachées à la mémoire tampon de trame), mais essayer pour faire le code ci-dessus (indexer les tampons à la sortie) semble ne pas compiler. J'ai vu cela fonctionner correctement dans WebGL1 en utilisant des extensions. J'utilise WebGL2, alors peut-être que quelque chose est différent dans ce contexte? (Je l'essaie dans la dernière version de Chrome).
Si vous utilisez WebGL2, je pense que vous devez changer radicalement votre syntaxe pour l'adapter à la norme GLSL 3.3 ... regardez ici: http://io7m.com/documents/fso-tta/ au GLSL 3.30 (OpenGL 3.3) 'chapitre, aussi qui dit:" Sur OpenGL [3.3, 4.4] et OpenGL ES 3.0, assigner aux sorties de shader de fragments nommés, en associant les sorties nommées avec des tampons de tirage numérotés en utilisant des qualificateurs de mise en page. " –
WebGL2 ne prend pas en charge GLSL 3.3. Il prend en charge [GLSL ES 3.0] (https://www.khronos.org/registry/OpenGL/specs/es/3.0/GLSL_ES_Specification_3.00.pdf). Il serait très déroutant de se référer à la spécification GLSL 3.3 seulement pour constater que des tonnes de choses ne fonctionnent pas parce que c'est la mauvaise spécification. – gman