GLSL: Bagaimana cara melemparkan pelampung ke int?


40

Dalam shader fragmen GLSL saya mencoba untuk melemparkan floatke dalam int. Kompiler memunculkan kesalahan:

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

Saya mencoba meningkatkan presisi int:

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

tetapi tidak berhasil.

Bagaimana cara membuang yang intbenar?


1
Untuk referensi di masa mendatang, Anda akan mendapatkan jawaban yang lebih baik jika Anda mengajukan pertanyaan pemrograman umum seperti ini di Stack Overflow. stackoverflow.com - tergantung pada umpan balik komunitas, pertanyaan ini mungkin tetap dimigrasikan di sana.
Ricket

Untuk menafsirkan kembali gips, sekarang ada fungsi seperti floatBitsToInt.
jozxyqk

Jawaban:


41

Coba ini:

highp int index = int(indexf);

Saya menemukannya di sini .


Juga perhatikan bahwa casting float ke int secara otomatis membuat lantai (setidaknya dalam implementasi apa pun yang pernah saya lihat) sehingga panggilan Anda ke lantai seharusnya tidak perlu.
Ricket

6
Dalam kebanyakan bahasa, mode pembulatannya adalah truncate / round-to-zero, yang setara dengan lantai untuk angka positif tetapi bukan angka negatif. Saya tidak ingat apakah ini berlaku untuk GLSL, tetapi saya akan terkejut jika tidak.

@ Jo. Itu fakta menarik yang tidak pernah saya pikirkan, dan saya baru saja mengonfirmasinya dengan test case Java.
Ricket

4
Apakah highp penting di sini? (On an Integer)
Léon Pelletier

Terima kasih, ini juga berhasil dalam kasus saya. Bisakah Anda memperbarui referensi yang telah Anda masukkan, karena halaman itu tidak ada?
Bora
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.