私は、いくつかのライトを描画する GLSL フラグメント プログラムを作成しました。一部はスポットライト エフェクト付きです (つまり、GL_SPOT_DIRECTION を指定した glLightfv と GL_SPOT_EXPONENT を指定した glLightf)。プログラムからの関連する抜粋は次のとおりです。
float light_spot(gl_LightSourceParameters light) {
float dot_LD = dot( normalize(vec_vertex_eye_i-light.position.xyz), normalize(light.spotDirection) );
float coeff = 1.0 - (1.0-dot_LD)/(1.0-light.spotCosCutoff);
return (dot_LD>light.spotCosCutoff) ? pow(coeff,light.spotExponent) : 0.0;
}
すべての変数は、(gl_ModelViewMatrix*gl_Vertex).xyz に設定されている頂点シェーダーからのさまざまな vec3 である「vec_vertex_eye_i」を除いて、自明であるか文書化されています。
このプログラムは、NVIDIA ハードウェア (NVIDIA GeForce 8400M GS および NVIDIA GeForce GTX 580M でテスト済み) では完全に動作しますが、AMD カード (具体的には ATI Mobility Radeon HD 4250) では誤った結果をもたらします。
私の質問は、glEnable やその他の必要な特別な構成の方法で不足している可能性があるものがあるかどうかです。AMD カードには新しいドライバーがあり、スポットライトはかなり重要な機能であり、壊れる可能性は低いと思います。シェーダーは正常にコンパイルされます。ここで何が欠けていますか?