Я создал шейдер, который отлично работает в Firefox, но в Chrome фрагмент и вершинный шейдер не могут быть связаны. Они компилируются просто отлично, но в части соединения что-то идет не так. Я локализована проблема в паровании битого кода:GLSL-шейдеры и проблема 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);
}
}
Этот небольшой фрагмент кода вычисляет диффузный цвет отраженного от точечного источника света. Это часть более крупного цикла. Как показано здесь, он не будет ссылаться на все, но если я удалю uLightAttenuation из расчета ATT, например, так:
att = (1.0/(distance * distance));
это работает просто отлично. Если я заменил его на любую другую форму, скажем, uLightIntensity,
att = (1.0/(uLightIntensity[i] * distance * distance));
снова он не будет работать. Если я заменил его простым постоянным значением/float variabile, как ни странно, он компилируется. И что еще более странно, если удалить ATT из расчета цвета, но сохранить форму в его нынешнем положении, он работает просто отлично:
att = (1.0/(uLightAttenuation[i] * distance * distance));
color += vec3(uLightColor[i] * NdotL * uLightIntensity[i]);
Равномерное является значение с плавающей точкой, и даже если бы это было проблема с литьем типа должна быть неудачной при компиляции, а не в связывании.
Вот полные шейдеры, возможно, я пропустил что-то в другом месте в коде.
Пожалуйста, отредактируйте название, чтобы ответить на вопрос. Этот вопрос не имеет ничего общего с едиными пределами компонентов. –