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?


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í .


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.