GLSL:动态统一表达式只计算一次吗?

时间:2014-12-06 19:54:31

标签: opengl glsl

如果GLSL着色器中的某些计算仅依赖于统一变量,则它们只能计算一次并用于每个顶点/片段。这真的用在硬件上吗?在阅读了GLSL规范中的“统一和非均匀控制流程”后,我得到了这个想法:

https://www.opengl.org/registry/doc/GLSLangSpec.4.40.pdf#page=30&zoom=auto,115.2,615.4

我想知道预先计算投影和视图矩阵之间是否存在差异。

1 个答案:

答案 0 :(得分:2)

这取决于驱动程序及其构建的优化,在direct3D中有一个明确的api。

例如

的简单点
//...

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

main(){
    gl_position = projection*view*model*pos;
}

大多数驾驶员都能够对其进行优化以预先计算MVP矩阵,并将其传递给单一制服。

这是实施定义的,一些司机更擅长内联制服而不是其他。另一个优化选项是使用内联制服重新编译整个程序,并优化未采用的路径。