Основная программа фрагментации 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 есть новые драйверы, и я скорее думаю, что прожектор является довольно важной функцией, которая вряд ли будет сломана. Шейдер компилируется нормально. Что мне здесь не хватает?

0 ответов

Другие вопросы по тегам