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.