gpt4 book ai didi

opengl - Intel nvidia OpenGL 驱动差异 mod-function

转载 作者:行者123 更新时间:2023-12-02 22:12:19 26 4
gpt4 key购买 nike

我遇到的问题是,我的片段着色器在我的英特尔图形芯片上和在 nvidia 芯片上的执行方式大不相同。 (两个驱动程序都是最新的)

问题似乎出在以下代码中的 mod-call 上:

float opRep( vec3 p, vec3 c ){
// gl_FragColor = vec4(max(0.0, sign(p.x)), max(sign(p.y), 0.0), max(sign(p.z), 0.0), 1);
vec3 q = mod(p,c)-0.5*c;
gl_FragColor = vec4(max(0.0, sign(q.x)), max(sign(q.y), 0.0), max(sign(q.z), 0.0), 1);
return twistedColumn( q );
}

float distanceFromPoint(vec3 point) {
return opRep(point, vec3(90.5, 0, 98));
}

gl_FragColor 是我的“调试”语句。调试语句打印点的符号,因为我认为 mod 函数在 diffrenet 驱动程序上返回不同的符号。

如果我取消注释第一个调试输出,我会得到相同的视觉结果。但是在mod之后,视觉结果在intel显卡驱动和nvidia版本之间有所不同,这非常困惑。

有人可以提示我为什么会得到不同的结果...吗?

最佳答案

mod 是一个不连续的阶跃函数——p 的一个非常小的变化会导致 mod0< 之间翻转c。因此,mod 的任何使用都对舍入细节非常敏感,这可能因 GL 实现而异。 OpenGL 没有规定任何特定的舍入方法用于插值或任何其他可能产生无法在实现的内部数字表示中精确表示的结果的操作。它只规定了计算的最低精度要求——任何实现都可以根据需要自由使用更高的精度。

因此可能发生的情况是其中一个芯片使用比另一个更高的精度进行某些计算,或者一个芯片向下舍入而另一个舍入到最接近的精度,或者一些其他变化或效果组合。

关于opengl - Intel nvidia OpenGL 驱动差异 mod-function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15054159/

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