GLSL: Как я могу разыграть float для int?

40

В шейдерном фрагменте GLSL я пытаюсь floatпреобразовать объект в int. Компилятор вызывает ошибку:

ERROR: 0:60: '=' :  cannot convert from 'mediump float' to 'highp int'

Я попытался повысить точность int:

mediump float indexf = floor(2.0 * mixer);
highp int index = indexf;

но безрезультатно.

Как intправильно разыграть?

dugla
источник
1
Для дальнейшего использования вы получите лучшие ответы, если зададите такие общие вопросы по программированию, как этот, в Stack Overflow. stackoverflow.com - в зависимости от отзывов сообщества этот вопрос может быть перенесен туда в любом случае.
Рикет
Для переинтерпретации приведений теперь есть такие функции, как floatBitsToInt.
Jozxyqk

Ответы:

41

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

highp int index = int(indexf);

Я нашел это здесь .

Ricket
источник
Также обратите внимание, что приведение числа с плавающей точкой к int автоматически выравнивает его (по крайней мере, в любой реализации, которую я когда-либо видел), поэтому ваш вызов floor должен быть ненужным.
Рикет
6
В большинстве языков режим округления является усеченным / округлением до нуля, что эквивалентно полу для положительных чисел, но не отрицательных чисел. Я не помню, относится ли это к GLSL, но я был бы удивлен, если это не так.
@Joe Это интересный факт, о котором я никогда не задумывался, и я только подтвердил это тестовым примером Java.
Рикет
4
Здесь важен хайп? (На целое число)
Леон Пеллетье
Спасибо, это также сработало в моем случае. Не могли бы вы обновить указанную вами ссылку, поскольку страница не существует?
Бора