gpt4 book ai didi

opengl - 在 OpenGL 着色器中检测 NaN 的最佳方法

转载 作者:行者123 更新时间:2023-12-03 13:54:22 27 4
gpt4 key购买 nike

今天早上我遇到了一个看似神秘的错误,我很幸运能够很快找到解决方案。

我用计数器除以产生片段着色器内部的平均值,当然当计数器为零时,生成的颜色值变为 NaN。

在混合过程中,NVidia 优雅地将 NaN 视为 0 值,但 Intel 不会并且似乎将 NaN 级联,从而产生黑色片段。

所以这个错误一直存在,直到我在英特尔机器上测试代码。

我想知道我是否可以做一些事情来“捕获”无效值。似乎,就像在常规编程中一样,处理这个问题的唯一万无一失(即使这样也不是万无一失)的方法是在除数时仔细考虑所有可能的情况。

检测 NaN 的标准方法是查看数字是否不等于自身。我是否可以构建一个调试着色器来检查每个片段以查看它是否不等于自身,如果满足该条件,则设置一个闪烁的显眼颜色? GLSL 是否允许我以这种方式检测 NaN,或者每当值无效时我是否会陷入未定义的行为?

最佳答案

缺少 isnan 是 WebGL 和 Opengl ES 2.0 的问题。适用于所有 GPU 的 Polyfill 我有机会尝试:

bool isnan( float val )
{
return ( val < 0.0 || 0.0 < val || val == 0.0 ) ? false : true;
// important: some nVidias failed to cope with version below.
// Probably wrong optimization.
/*return ( val <= 0.0 || 0.0 <= val ) ? false : true;*/
}

关于opengl - 在 OpenGL 着色器中检测 NaN 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9446888/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com