GLSL: Як я кидаю поплавок до 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);

Я знайшов це тут .


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

6
У більшості мов режим округлення - це скорочення / округлення до нуля, що еквівалентно поверху для додатних чисел, але не від'ємних чисел. Я не пам'ятаю, чи стосується це GLSL, але я був би здивований, якщо це не так.

@Joe Це цікавий факт, про який я ніколи не замислювався, і я просто підтвердив це тестовим випадком Java.
Рікет

4
Чи важливий тут хайп? (Про ціле число)
Леон Пелтьє,

Дякую, це працювало і в моєму випадку. Чи можете ви оновити посилання, яке ви поставили, оскільки сторінка не існує?
Бора
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.