J'ai créé un shader qui fonctionne parfaitement dans Firefox, mais dans Chrome le fragment et le vertex shader ne peuvent pas être liés. Ils compilent très bien, mais à la partie de liaison quelque chose ne va pas. Je localisé le problème au bit pour avoir de code:Shaders GLSL et problème WebGL
else if (uLightType[i] == 1) { //point light
NdotL = dot(n, normalize(lightDir[i]));
if (NdotL > 0.0) {
distance = length(lightDir[i]);
att = (1.0/(uLightAttenuation[i] * distance * distance));
color += vec3(uLightColor[i] * NdotL * uLightIntensity[i] * att);
}
}
Ce petit morceau de code calcule la couleur diffuse réfléchie à partir d'un point de lumière. Cela fait partie d'une plus grande boucle. Comme il est montré ici, il ne sera pas un lien du tout, mais si je retire uLightAttenuation de calcul att, comme ceci:
att = (1.0/(distance * distance));
cela fonctionne très bien. Si je le remplace par un autre uniforme, disons uLightIntensity,
att = (1.0/(uLightIntensity[i] * distance * distance));
encore une fois cela ne fonctionnera pas. Si je le remplace par un simple variabile constant value/float, il compile assez étrangement. Et ce qui est encore plus étrange est, si je retire att de calculer la couleur, mais garde l'uniforme à sa position actuelle, il fonctionne très bien:
att = (1.0/(uLightAttenuation[i] * distance * distance));
color += vec3(uLightColor[i] * NdotL * uLightIntensity[i]);
L'uniforme est une valeur flottante, et même si elle était un problème avec le moulage de type, il devrait échouer à la compilation, pas de liaison.
Voici les shaders complets, peut-être que j'ai manqué quelque chose ailleurs dans le code.
Veuillez modifier le titre pour refléter la question posée. Cette question n'a rien à voir avec des limites de composants uniformes. –