gpt4 book ai didi

iphone - 为什么单个 Vec4 乘法会使我的 ogl es 2 片段着色器减慢这么多?

转载 作者:行者123 更新时间:2023-12-03 18:39:17 25 4
gpt4 key购买 nike

我正在为 iOS 设备编写 2D OpenGL 游戏。现在,我正在研究 iPad(第一代)上的性能。该游戏有 ogl 1.1 和 2.0 的代码路径,我可以通过 #define 切换使用哪一个。

使用 ogl 2.0 时,分析器告诉我,渲染器利用率 % 相当稳定,为 100%,帧速率约为 30 fps。使用 ogl 1.1 时,分析器告诉我,渲染器利用率约为 60%,帧速率为 60 fps。

我想提高 ogl 2.0 的性能,并且由于填充率有限,我怀疑片段着色器。这是正在使用的片段着色器:

precision highp float;
uniform vec4 u_color;
uniform sampler2D u_sampler0;
varying vec2 v_texCoord;

void main()
{
gl_FragColor = u_color * texture2D( u_sampler0, v_texCoord );
}

您可以看到着色器非常简单。它只是将几何颜色乘以纹理颜色。作为实验,我删除了乘法,以便输出颜色只是纹理颜色,如下所示:

precision highp float;
uniform vec4 u_color;
uniform sampler2D u_sampler0;
varying vec2 v_texCoord;

void main()
{
gl_FragColor = texture2D( u_sampler0, v_texCoord );
}

使用此修改后的着色器分析代码,渲染器利用率约为 60%,帧速率为 60fps,与 ogl 1.1 代码路径实现的性能相同。

我的问题:

1) 片段着色器中的简单 Vec4 乘法真的会对性能产生如此大的负面影响吗?

2) 我听说在 ogl es 2 设备上,1.1 功能是通过着色器实现的。显然,这些着色器能够有效地实现我想要的效果(将几何颜色混合到纹理颜色中)。如何在我的 ogl 2 着色器中有效地实现这种效果?

最佳答案

您的着色器比内置 ES1.1 着色器慢的原因是您要乘以 4 个高精度值 (Float32),而不是 4 个低精度值(定点,-2 到 2)。

uniform vec4 u_color 更改为 uniform lowp vec4 u_color,您应该会看到与 ES 1.1 相同的性能。

关于iphone - 为什么单个 Vec4 乘法会使我的 ogl es 2 片段着色器减慢这么多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5508527/

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