GLSL: ¿Cómo lanzo un flotador a un int?

40

En un sombreador de fragmentos GLSL estoy tratando de convertir un floaten un int. El compilador genera un error:

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

Traté de aumentar la precisión de int:

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

pero fue en vano.

¿Cómo lanzo intcorrectamente?

dugla
fuente
1
Para referencia futura, obtendrá mejores respuestas si hace preguntas generales de programación como esta en Stack Overflow. stackoverflow.com : dependiendo de los comentarios de la comunidad, esta pregunta podría migrarse allí de todos modos.
Ricket
Para reinterpretar lanzamientos, ahora hay funciones como floatBitsToInt.
jozxyqk

Respuestas:

41

Prueba esto:

highp int index = int(indexf);

Lo encontré aquí .

Ricket
fuente
También tenga en cuenta que lanzar un flotador a un int automáticamente lo coloca en el piso (al menos en cualquier implementación que haya visto), por lo que su llamada al piso debería ser innecesaria.
Ricket
66
En la mayoría de los idiomas, el modo de redondeo es truncar / redondear a cero, que es equivalente al piso para números positivos pero no números negativos. No recuerdo si esto se aplica a GLSL, pero me sorprendería si no fuera así.
@ Joe Es un hecho interesante en el que nunca pensé, y lo acabo de confirmar con un caso de prueba de Java.
Ricket
44
¿Highp es importante aquí? (En un número entero)
Léon Pelletier
Gracias, también funcionó en mi caso. ¿Podría actualizar la referencia que ha puesto, ya que la página no existe?
Bora