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правильно разыграть?


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

Для переинтерпретации приведений теперь есть такие функции, как floatBitsToInt.
Jozxyqk

Ответы:


41

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

highp int index = int(indexf);

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


Также обратите внимание, что приведение числа с плавающей точкой к int автоматически выравнивает его (по крайней мере, в любой реализации, которую я когда-либо видел), поэтому ваш вызов floor должен быть ненужным.
Рикет

6
В большинстве языков режим округления является усеченным / округлением до нуля, что эквивалентно полу для положительных чисел, но не отрицательных чисел. Я не помню, относится ли это к GLSL, но я был бы удивлен, если это не так.

@Joe Это интересный факт, о котором я никогда не задумывался, и я только подтвердил это тестовым примером Java.
Рикет

4
Здесь важен хайп? (На целое число)
Леон Пеллетье

Спасибо, это также сработало в моем случае. Не могли бы вы обновить указанную вами ссылку, поскольку страница не существует?
Бора
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.