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

Opengl es OpenGL着色器编译器可以优化服务器上的表达式吗?,opengl-es,glsl,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; 我很好

我有一个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版本会有所不同,那么您可以获得额外的积分。

编译器可以优化这一点吗?是的,可以。会吗?可能不会,因为这在开始渲染对象时需要很大的开销(他们必须预计算着色器的所有预计算内容)。

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