Фрагментный шейдер для целочисленных текстур без знака

Я использую следующий шейдер для целочисленных текстур без знака для чтения данных: Фрагмент шейдера:

Код:

#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 ответа

Решение

Попробуй это:

temp = temp / uint(2);

GLSL не допускает неявных преобразований между знаковыми и беззнаковыми целыми числами, поэтому оба операнда двоичного операнда должны быть одинаковыми. Использование:

temp = temp / 2u;

использовать беззнаковую константу int.

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