在WebGL中故意制作NaN

Cra*_*ney 2 glsl nan webgl

我有一个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之间不一致的真实事实.

ibe*_*ora 8

不要在这里使用NaN.

OpenGL ES 3.2规范第2.3.4.1节规定了这一点

特殊值Inf和-Inf编码的数值太大而无法表示; 特殊值NaN编码由未定义的算术运算(如0/0)产生的"非数字"值.允许(但不是必需)实现以支持Inf和NaN的浮点计算.

所以它似乎真的取决于实施.您应该输出另一个值而不是NaN