我創建了一個在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);
}
}
這段小小的代碼計算從點光源反射的漫反射顏色。它是更大的for循環的一部分。正如本文表明,它不會鏈接可言,但如果我從ATT計算,像這樣刪除uLightAttenuation:
att = (1.0/(distance * distance));
它工作得很好。如果我用任何其他制服替換它,比如說,uLightIntensity,
att = (1.0/(uLightIntensity[i] * distance * distance));
它再次不起作用。如果我用一個簡單的常量值/浮點型變量替換它,奇怪的是它編譯。什麼是更奇怪的是,如果我從計算色刪除ATT,但保持一致,在它的當前位置,它運行得很好:
att = (1.0/(uLightAttenuation[i] * distance * distance));
color += vec3(uLightColor[i] * NdotL * uLightIntensity[i]);
的統一是一個浮點值,即使它是一個類型轉換的問題應該在編譯時失敗,而不是鏈接。
這裏是完整的着色器,也許我錯過了代碼中的其他地方。
請修改標題以反映被問到的問題。這個問題與統一的組件限制無關。 – 2011-03-06 16:47:17