Основная программа фрагментации GLSL на аппаратном обеспечении AMD
Я написал программу фрагментов GLSL, которая рисует несколько источников света, некоторые с эффектами прожектора (например, glLightfv с GL_SPOT_DIRECTION и glLightf с GL_SPOT_EXPONENT). Соответствующая выдержка из программы выглядит следующим образом:
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;
}
Все переменные говорят сами за себя или задокументированы, кроме "vec_vertex_eye_i", который отличается от vec3 от вершинного шейдера, в котором он установлен на (gl_ModelViewMatrix*gl_Vertex).xyz.
Программа отлично работает на оборудовании NVIDIA (протестировано на NVIDIA GeForce 8400M GS и NVIDIA GeForce GTX 580M), но дает ошибочные результаты на карте AMD (в частности, ATI Mobility Radeon HD 4250).
У меня вопрос: есть ли что-то, чего мне не хватает в способе glEnable или какой-то другой специальной конфигурации, которую нужно сделать. У карты AMD есть новые драйверы, и я скорее думаю, что прожектор является довольно важной функцией, которая вряд ли будет сломана. Шейдер компилируется нормально. Что мне здесь не хватает?