统一变量的操作是否在GLSL中缓存?

时间:2017-08-24 15:41:41

标签: opengl glsl shader

假设我有一个非常简单的GLSL顶点着色器:

uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;

in vec3 position;
in vec3 color;

out vec3 vertexColor;

void main()
{
    mat4 mvp = projection * view * model;
    vertexColor = color;
    gl_Position = mvp * vec4(position, 1.0);
}

变量mvp是否为每个顶点重新计算,还是预先计算并存储,直到它取决于变化的统一变量?

1 个答案:

答案 0 :(得分:6)

特定的实现可以缓存该值吗?当然。他们会吗?

我不会认为他们愿意。这样的缓存很难实现,因为它需要在绘制调用之前根据统一状态评估这样的表达式,然后将这些表达式上传到代码中。

如果你有一些从多个统一值计算的状态,并且你认为这样的计算会出现性能问题,那么你应该是计算它的人。