Swizzling 顶点数组、顶点缓冲区对象和着色器

Posted

技术标签:

【中文标题】Swizzling 顶点数组、顶点缓冲区对象和着色器【英文标题】:Swizzling Vertex Arrays, Vertex Buffer Objects and Shaders 【发布时间】:2013-01-20 15:44:56 【问题描述】:

我对顶点数组、顶点缓冲区对象和着色器有基本的了解。但是,我不确定我是否可以重用它们或者关联是否是双射的。

例如:

我可以在不同的顶点数组中使用相同的顶点缓冲区对象吗? 我可以在不同的着色器中使用相同的顶点数组吗?

【问题讨论】:

【参考方案1】:

是的,你可以:)

VBO - 控制数据的存储位置

VAO - 控制布局和绑定(您可以有多个 VAO 指向同一个 VBO,但顺序不同)

着色器 - 负责处理数据,它们可以与不同的 VAO/VBO 组合一起使用(但该组合当然必须匹配着色器中的属性布局)

【讨论】:

谢谢。那么当我想使用一个VAO和多个shader时,我只需要确保属性位置相同?如何将 VBO 切换为 VAO?只需在调用glBindVertexArray 之后再调用glBindBuffer 这里有一个很好的关于使用VAO的教程:ogldev.atspace.co.uk/www/tutorial32/tutorial32.html,但是基本上你绑定了VAO之后就可以绑定新的VBO了。

以上是关于Swizzling 顶点数组、顶点缓冲区对象和着色器的主要内容,如果未能解决你的问题,请参考以下文章

从顶点着色器中修改着色器存储缓冲区对象

具有多个缓冲区的片段着色器颜色错误

是否可以从顶点着色器读取数据?

Directx 11 - 是来自顶点缓冲区的所有顶点都推送到顶点着色器还是只是索引的顶点?

将无符号整数输入属性传递给顶点着色器

着色器存储缓冲区中的 OpenGL 顶点