GLSL: Como converter um float para um int?


40

Em um shader de fragmento GLSL, estou tentando converter um floatem um int. O compilador gera um erro:

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

Eu tentei aumentar a precisão do int:

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

mas sem sucesso.

Como faço para transmitir intcorretamente?


11
Para referência futura, você obterá melhores respostas se fizer perguntas gerais sobre programação como esta no Stack Overflow. stackoverflow.com - dependendo do feedback da comunidade, esta pergunta pode ser migrada para lá de qualquer maneira.
Ricket

Para reinterpretar conversões, agora existem funções como floatBitsToInt.
jozxyqk

Respostas:


41

Tente o seguinte:

highp int index = int(indexf);

Encontrei aqui .


Observe também que converter um float para um int automaticamente o atinge (pelo menos em qualquer implementação que eu já tenha visto), portanto sua chamada para o andar deve ser desnecessária.
Ricket

6
Na maioria dos idiomas, o modo de arredondamento é truncado / arredondado a zero, o que equivale ao mínimo para números positivos, mas não negativos. Não me lembro se isso se aplica ao GLSL, mas ficaria surpreso se não.

@ Joe Esse é um fato interessante que eu nunca pensei, e acabei de confirmar com um caso de teste Java.
Ricket

4
O highp é importante aqui? (Em um número inteiro)
Leon Pelletier

Obrigado, também funcionou no meu caso. Você poderia atualizar a referência que colocou, já que a página não existe?
Bora
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.