GLSL:floatをintにキャストするにはどうすればよいですか?


40

GLSLフラグメントシェーダーで、にキャストしようとしfloatていintます。コンパイラはエラーを発生させます:

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

の精度を上げてみましたint

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

しかし、無駄に。

どうすればint適切にキャストできますか?


1
今後の参考のために、Stack Overflowでこのような一般的なプログラミングの質問をすると、より良い回答が得られます。stackoverflow.com-コミュニティのフィードバックに応じて、この質問はとにかく移行される可能性があります。
リケット

再キャストのキャストには、などの関数がありますfloatBitsToInt
jozxyqk 14年

回答:


41

これを試して:

highp int index = int(indexf);

ここで見つけまし


また、フロートをintにキャストすると、フロートが自動的にフローリングされることに注意してください(少なくとも、これまでに見た実装では)。floorへの呼び出しは不要です。
リケット

6
ほとんどの言語では、丸めモードは切り捨て/ゼロへの丸めです。これは、負の数ではなく正の数の下限に相当します。これがGLSLに当てはまるかどうかは覚えていませんが、当てはまらない場合は驚くでしょう。

@Joeこれは、私が考えもしなかった興味深い事実であり、Javaテストケースで確認しました。
リケット

4
ここでhighpは重要ですか?(整数)
レオンPelletier

おかげで、私の場合もうまくいきました。ページが存在しないため、配置した参照を更新できますか?
ボラ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.