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

Dol*_*000 5 opengl glsl

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

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

And*_*man 6

小于4个组件的属性是否始终计为此限制的一个属性?

是的,这正是它的意思.

每个顶点属性都是4个组件,如果您float在着色器中编写它实际上不会更改任何内容.如果你想看到这个动作,尝试建立一个1组分顶点属性指针,然后宣称属性vec4在你的顶点着色器- GL将自动分配值0.0,0.0,1.0y,zw分别.

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

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