着色器输入/输出变量的顺序和/或大小是否会对内存使用或性能产生任何影响?例如,这些是:
// vert example:
out vec4 colorRadius;
// tess control example:
out vec4 colorRadius[];
// frag example:
in smooth vec4 colorRadius;
相当于:
// vert example:
out vec3 color;
out float radius;
// tess control example:
out vec3 color[];
out float radius[];
// frag example:
in smooth vec3 color;
in smooth float radius;
第二种形式是否有任何额外成本,或者编译器是否会将它们打包在内存中并对它们进行完全相同的处理?
答案 0 :(得分:4)
编译器可以将这些东西打包在一起。但它没有必要,并且几乎没有证据表明编译器通常会这样做。因此,顶级版本至少不会低于底部版本。
与此同时,这更像是一种微观优化。所以除非你知道这是一个瓶颈,否则就放手吧。最好写出清晰,易于理解的代码,并在知道问题所在时对其进行优化,而不是优化它而不知道它是否会成为一个问题。