我有一个GLSL着色器,当条件满足时,它应该输出NaN.我实际上遇到了麻烦.
基本上我想这样做:
float result = condition ? NaN : whatever;
Run Code Online (Sandbox Code Playgroud)
但是GLSL似乎没有NaN的常量,因此不能编译.我如何制作NaN?
我试着让自己不变:
float NaN = 0.0/0.0; // doesn't work
Run Code Online (Sandbox Code Playgroud)
这适用于我测试的其中一台机器,但不适用于另一台机器.在编译着色器时也会引发警告.
鉴于明显的计算在我尝试的其中一台机器上不起作用,我感觉这样做是非常棘手的,并且需要了解很多关于各种类型GPU之间不一致的真实事实.
不要在这里使用NaN.
OpenGL ES 3.2规范第2.3.4.1节规定了这一点
特殊值Inf和-Inf编码的数值太大而无法表示; 特殊值NaN编码由未定义的算术运算(如0/0)产生的"非数字"值.允许(但不是必需)实现以支持Inf和NaN的浮点计算.
所以它似乎真的取决于实施.您应该输出另一个值而不是NaN
| 归档时间: |
|
| 查看次数: |
1039 次 |
| 最近记录: |