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.