GLSL: Wie kann ich einen Float in einen Int umwandeln?


40

In einem GLSL-Fragment-Shader versuche ich, ein floatin ein zu werfen int. Der Compiler löst einen Fehler aus:

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

Ich habe versucht, die Genauigkeit der folgenden Punkte zu erhöhen int:

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

aber ohne Erfolg.

Wie wirke ich das intrichtig?


1
Zum späteren Nachschlagen erhalten Sie bessere Antworten, wenn Sie allgemeine Programmierfragen wie diese bei Stack Overflow stellen. stackoverflow.com - Abhängig vom Feedback der Community kann diese Frage dort ohnehin migriert werden.
Ricket

Für die Neuinterpretation von Casts gibt es jetzt Funktionen wie floatBitsToInt.
Jozxyqk

Antworten:


41

Versuche dies:

highp int index = int(indexf);

Ich habe es hier gefunden .


Beachten Sie auch, dass das Casting eines Floats auf ein Int automatisch das Floor-Signal erzeugt (zumindest in jeder Implementierung, die ich je gesehen habe), sodass Ihr Call-to-Floor unnötig sein sollte.
Ricket

6
In den meisten Sprachen ist der Rundungsmodus abgeschnitten / auf Null gerundet, was für positive Zahlen, aber nicht für negative Zahlen dem Floor entspricht. Ich erinnere mich nicht, ob dies für GLSL gilt, aber ich wäre überrascht, wenn dies nicht der Fall ist.

@ Joe Das ist eine interessante Tatsache, über die ich nie nachgedacht habe und die ich gerade mit einem Java-Testfall bestätigt habe.
Ricket

4
Ist Highp hier wichtig? (Auf einer ganzen Zahl)
Léon Pelletier

Danke, es hat auch in meinem Fall geklappt. Könnten Sie den von Ihnen eingegebenen Verweis aktualisieren, da die Seite nicht vorhanden ist?
Bora
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.