Фрагментный шейдер для целочисленных текстур без знака
Я использую следующий шейдер для целочисленных текстур без знака для чтения данных: Фрагмент шейдера:
Код:
#version 150
out uvec4 fragColor;
uniform uint factor;
void main()
{
uint temp=factor;
temp=temp/2;
fragColor = uvec4(temp,temp,temp,temp);
}
Но я получаю сообщение об ошибке на драйвере A:
"Компиляция не удалась. ОШИБКА: 0:7: '/': Неправильные типы операндов. Не существует операции '/', которая принимает левый операнд типа 'uint' и правый операнд типа 'const int' (и есть недопустимое преобразование) ОШИБКА: 1 ошибка компиляции. Код не создан."
на водителе Б он работает отлично. Драйвер А глючит или мой шейдер не так? если не так, как я могу достичь того же результата?
2 ответа
Решение
GLSL не допускает неявных преобразований между знаковыми и беззнаковыми целыми числами, поэтому оба операнда двоичного операнда должны быть одинаковыми. Использование:
temp = temp / 2u;
использовать беззнаковую константу int.