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.