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

标签 opengl glsl

如果我想将两个名义上独立的浮点数属性数组传递给绘制调用,我是否可以愉快地拥有 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 , zw分别。

如果您因为使用一堆标量而达到顶点属性限制(最少 16 个),那么您应该考虑将您的属性打包到 vec4 中。而是为了最佳利用。

对于包含超过 4 个分量的数据类型(例如 mat4),我上面描述的这条规则有一个小异常(exception)。声明的顶点属性 mat4有 16 个组件并消耗 4 个连续的属性位置。

关于opengl - 我需要注意将顶点属性打包在一起吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26498523/

相关文章:

c - 为什么我需要 glut.h、glut32.lib、glut32.dll ALL 来编译 openGL 程序?

c - OpenGL 如何与 GPU 通信?

glsl - Web-GL : Multiple Fragment Shaders per Program

c - OpenGL glUniform1f 不更新顶点着色器

glsl - 是否可以仅使用 GPU 来加厚二次贝塞尔曲线?

opengl - 是否可以将索引缓冲区对象 (IBO) 与功能 'glMultiDrawElements' 一起使用?

opengl - 裁剪与像素所有权测试 opengl

opengl - OpenGL 3.1 中已弃用 glLineStipple

c++ - 调用过剩函数退出程序

c++ - 在细胞中产生噪声 - CPP 和 GLSL