假设我有一个非常简单的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
是否为每个顶点重新计算,还是预先计算并存储,直到它取决于变化的统一变量?
答案 0 :(得分:6)
特定的实现可以缓存该值吗?当然。他们会吗?
我不会认为他们愿意。这样的缓存很难实现,因为它需要在绘制调用之前根据统一状态评估这样的表达式,然后将这些表达式上传到代码中。
如果你有一些从多个统一值计算的状态,并且你认为这样的计算会出现性能问题,那么你应该是计算它的人。