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?

dugla
fonte
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 .

Ricket
fonte
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