iphone - 在着色器中除以 0 时会发生什么?

标签 iphone opengl-es glsl shader

众所周知,在 OpenGL ES 着色器中,分支的计算成本特别高。在这样的着色器中,我在除以某个值之前检查该值是否为空,例如:

if(value == 0.0)
    other_value = 0.0;
else
    other_value = 1.0 / value;

为了加快速度,我想通过直接执行以下操作来避免此if:

other_value = 1.0 / value;

我想知道如果value碰巧等于0会发生什么,这在我的治疗中有点罕见,这就是为什么测试它并不简单。着色器会崩溃吗?应用程序是否崩溃?

最佳答案

确实未定义。

在 iPad 模拟器上,将红色分量除以 0.0 得到 0(这张图片中所有红色都消失了)。

enter image description here

在 iPad 硬件上,将 r 分量除以 0.0 使其饱和为全​​红色(即 +无穷大钳位)。

enter image description here

所以不,你根本不能依赖未定义的行为来产生一致的结果,但除以 0 本身并不会发生什么坏事。

在我的着色器中,我将 RGB 值除以 alpha。碰巧的是,如果 alpha 值为 0,像素无论如何都不会显示,所以我对任何一种除法(给出 0 或 +inf)都没有问题。

关于iphone - 在着色器中除以 0 时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5802351/

相关文章:

iphone - 如何根据设备是 3G 还是非 3G 设备来禁止使用应用程序功能?

iphone - 如何开始为 iPhone 开发应用程序

android - 安装 OpenGL ES 并为 android 编译代码

iphone - iPhone 使用什么版本的 GLSL?

opencv - 如何将视频(帧)输入 GLSL 着色器

ios - 当应用程序变为事件状态时,iOS TabbarViewController隐藏选项卡栏

iphone - 没有边框的圆角矩形 UIButton

java - 如何检测用户是否在主屏幕上触摸设备小部件?

iPhone - 多个 OpenGL (CAEaglelayer) View 的屏幕截图

无法发现我的 GLSL/OpenGL 代码的问题