GLSL: Comment jetter un float sur un int?


40

Dans un fragment de GLSL, j'essaie de floattransformer un en int. Le compilateur lève une erreur:

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

J'ai essayé d'augmenter la précision du int:

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

mais en vain.

Comment puis-je lancer le intcorrectement?


1
Pour une référence ultérieure, vous obtiendrez de meilleures réponses si vous posez des questions de programmation générales telles que celle-ci à Stack Overflow. stackoverflow.com - en fonction des commentaires de la communauté, cette question peut être migrée de toute façon.
Ricket

Pour réinterpréter les conversions, il existe maintenant des fonctions telles que floatBitsToInt.
jozxyqk

Réponses:


41

Essaye ça:

highp int index = int(indexf);

Je l'ai trouvé ici .


Notez également que le fait de placer un float sur un int le recouvre automatiquement (du moins dans toute implémentation que j'ai jamais vue), de sorte que votre appel au sol devrait être inutile.
Ricket

6
Dans la plupart des langues, le mode d'arrondi est tronqué / arrondi à zéro, ce qui équivaut à plancher pour les nombres positifs mais pas pour les nombres négatifs. Je ne me souviens pas si cela s'applique au GLSL, mais je serais surpris que ce ne soit pas le cas.

@ Joe C'est un fait intéressant auquel je n'avais jamais pensé, et je viens de le confirmer avec un scénario de test Java.
Ricket

4
Est-ce que le highp est important ici? (Sur un entier)
Léon Pelletier

Merci, cela a également fonctionné dans mon cas. Pourriez-vous mettre à jour la référence que vous avez mise, puisque la page n'existe pas?
Bora
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.