GLSL: Come posso lanciare un float su un int?


40

In uno shader di frammenti GLSL sto provando a lanciare a floatin un int. Il compilatore genera un errore:

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

Ho provato ad aumentare la precisione di int:

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

ma inutilmente.

Come faccio a lanciare intcorrettamente?


1
Per riferimento futuro, otterrai risposte migliori se poni domande generali sulla programmazione come questa su StackTranslate.it. stackoverflow.com - a seconda del feedback della comunità questa domanda potrebbe essere migrata lì comunque.
— Ricket,

Per reinterpretare i cast, ora ci sono funzioni come floatBitsToInt.
— jozxyqk,

Risposte:


41

Prova questo:

highp int index = int(indexf);

L'ho trovato qui .


Nota anche che lanciare un float su un int automaticamente lo pavimenta (almeno in qualsiasi implementazione che abbia mai visto), quindi la tua chiamata al pavimento dovrebbe essere superflua.
— Ricket,

6
Nella maggior parte delle lingue la modalità di arrotondamento è troncata / arrotondata a zero, che equivale a floor per numeri positivi ma non negativi. Non ricordo se questo vale per GLSL, ma sarei sorpreso se non fosse così.

@Joe Questo è un fatto interessante a cui non ho mai pensato, e l'ho appena confermato con un caso di test Java.
— Ricket,

4
Highp è importante qui? (Su un numero intero)
— Léon Pelletier,

Grazie, ha funzionato anche nel mio caso. Potresti aggiornare il riferimento che hai inserito, poiché la pagina non esiste?
— Bora,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.