如果我想将两个名义上独立的浮点数属性数组传递给一个绘制调用,我可以高兴地为它们中的每一个都有一个GLSL in float
变量,或者我是否需要确保将它们打包成{{ 1}}或类似的,并使用各种组件,以确保不消耗不必要的in vec2
“插槽”?
或者换句话说;根据文档,GL_MAX_VERTEX_ATTRIBS
指定“顶点着色器可访问的4分量通用顶点属性的最大数量”。小于4个组件的属性是否始终计为此限制的一个属性?
答案 0 :(得分:5)
小于4个组件的属性是否总是算作此限制的一个属性?
是的,这正是它的含义。
每个顶点属性都是4个组件,如果您在着色器中将其写为float
,实际上不会更改任何内容。如果要查看此操作,请尝试设置单组件顶点属性指针,然后在顶点着色器中声明该属性vec4
- GL将自动指定值 0.0 , 0.0 , 1.0 分别为y
,z
和w
。
如果您正在使用顶点属性限制(最小值为16),因为您正在使用一堆标量,那么您应该考虑将属性打包到vec4
中,以获得最佳利用率。
对于具有4个以上组件的数据类型(例如mat4
),我在上面描述的此规则有一个小例外。声明为mat4
的顶点属性具有16个组件,并消耗4个连续属性位置。