OpenGL着色器编译器可以优化制服上的表达式吗?

时间:2013-03-28 17:22:27

标签: opengl-es glsl

我有一个OpenGL ES着色器,里面有一些制服。我在片段着色器中对制服做了一些数学计算。着色器编译器通常会优化制服上的那些表达式,以便它们发生一次而不是每个像素吗?或者我应该在着色器外进行计算并将结果传递给它?

具体来说,我有三个统一坐标我正在进入着色器:

uniform vec2 u_a;
uniform vec2 u_b;
uniform vec2 u_c;

然后我在这些点中计算了一些向量:

vec2 v0 = u_c - u_a;
vec2 v1 = u_b - u_a;

我很好奇是否着色器编译器可以优化它们,使得每次渲染它们发生一次,或者我应该在着色器外部计算它们并将它们作为附加制服传递。当然,为了优化,我应该测量一些东西以找出我的具体情况的差异(因为GPU可能比我的CPU更快地在每个像素上执行此操作),但我对着色器编译器具有多少范围感兴趣像这样的优化一般。

如果您知道Android / iPhone设备上的着色器编译器可能表现不同,或者不同的GLSL版本有所不同,那么

奖励积分。

1 个答案:

答案 0 :(得分:1)

可能编译器优化了吗?是的,它可以。 吗?可能不是,因为在开始渲染对象时需要很大的开销(他们必须为着色器预先计算所有可预先计算的东西)。