如果我想将两个名义上独立的浮点数属性数组传递给绘制调用,我是否可以愉快地拥有 GLSL in float
每个变量的变量,或者我是否需要确保将它们打包成 in vec2
或类似并使用各种组件来确保不消耗不必要的 GL_MAX_VERTEX_ATTRIBS
“插槽”?
或者,换句话说; GL_MAX_VERTEX_ATTRIBS
根据文档,指定“顶点着色器可访问的 4 分量通用顶点属性的最大数量”。少于 4 个组件的属性是否总是计为一个属性以达到此限制?
最佳答案
Does an attribute that is less than 4 components always count as one attribute towards this limit?
是的,这正是它的意思。
每个顶点属性是 4-component,如果你写成
float
在你的着色器中,实际上并没有改变任何东西。如果你想看到它的实际效果,尝试设置一个 1-component 顶点属性指针,然后声明该属性 vec4
在您的顶点着色器中——GL 将自动分配值 0.0 , 0.0 , 1.0 为 y
, z
和 w
分别。如果您因为使用一堆标量而达到顶点属性限制(最少 16 个),那么您应该考虑将您的属性打包到
vec4
中。而是为了最佳利用。对于包含超过 4 个分量的数据类型(例如
mat4
),我上面描述的这条规则有一个小异常(exception)。声明的顶点属性 mat4
有 16 个组件并消耗 4 个连续的属性位置。
关于opengl - 我需要注意将顶点属性打包在一起吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26498523/