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));
もう一度動作しません。私が単純な定数値/ float変数に置き換えると、それは不思議にも十分にコンパイルされます。
att = (1.0/(uLightAttenuation[i] * distance * distance));
color += vec3(uLightColor[i] * NdotL * uLightIntensity[i]);
均一フロート値であり、それがあったとしても:私は色の計算からATTを削除し、それの現在の位置で均一に保つならば、何でもより奇妙であること、である、それはうまく動作します型キャストの問題は、リンクしていないコンパイル時に失敗するはずです。
完全なシェーダがありますが、コード内の別の場所に何かが見当たりませんでした。
質問の内容を反映するようにタイトルを編集してください。この質問は、均一なコンポーネントの制限とは関係ありません。 –