我需要注意将顶点属性打包在一起吗?

时间:2014-10-22 00:21:56

标签: opengl glsl

如果我想将两个名义上独立的浮点数属性数组传递给一个绘制调用,我可以高兴地为它们中的每一个都有一个GLSL in float变量,或者我是否需要确保将它们打包成{{ 1}}或类似的,并使用各种组件,以确保不消耗不必要的in vec2“插槽”?

或者换句话说;根据文档,GL_MAX_VERTEX_ATTRIBS指定“顶点着色器可访问的4分量通用顶点属性的最大数量”。小于4个组件的属性是否始终计为此限制的一个属性?

1 个答案:

答案 0 :(得分:5)

  

小于4个组件的属性是否总是算作此限制的一个属性?

是的,这正是它的含义。

每个顶点属性都是4个组件,如果您在着色器中将其写为float,实际上不会更改任何内容。如果要查看此操作,请尝试设置单组件顶点属性指针,然后在顶点着色器中声明该属性vec4 - GL将自动指定值 0.0 0.0 1.0 分别为yzw

如果您正在使用顶点属性限制(最小值为16),因为您正在使用一堆标量,那么您应该考虑将属性打包到vec4中,以获得最佳利用率。

对于具有4个以上组件的数据类型(例如mat4),我在上面描述的此规则有一个小例外。声明为mat4的顶点属性具有16个组件,并消耗4个连续属性位置。