在 OpenGL ES 中,多个程序可以使用相同的 VBO 并绑定到它们的属性吗?

Posted

技术标签:

【中文标题】在 OpenGL ES 中,多个程序可以使用相同的 VBO 并绑定到它们的属性吗?【英文标题】:In OpenGL ES, can multiple programs have the same VBO used and bound to their attributes? 【发布时间】:2014-09-16 03:50:06 【问题描述】:

我有两个程序要在它们之间切换。我在 VBO 中加载了我的位置数据,然后为我的第一个程序设置了我的顶点属性数组。当我切换到第二个程序并尝试使用相同的数据设置我的顶点属性数组时,它无法绘制。但是,如果我使用完全相同的代码创建第二个缓冲区,并将其用于第二个程序,它们都可以正常绘制。我想知道是否有人可以澄清在程序之间共享这些 VBO 的规则,因为除非需要它们,否则我宁愿没有两个缓冲区。

【问题讨论】:

当然。顶点设置与绑定的程序完全正交。只要程序之间的属性位置匹配,您甚至可以使用相同的 VAO。 @RetoKoradi - 当这是唯一的区别时,为什么我可以使用一个缓冲区而不是另一个缓冲区?如果我发现其他情况,我将继续测试并在这里发布 @RetoKoradi - 我在我的应用程序中发现了一个导致这种情况的复杂错误。你的说法是正确的,这可能有多个程序使用同一个 VBO。 你能发布一个答案来解释是什么原因造成的吗? 【参考方案1】:

是的,多个程序可以毫无问题地绑定到同一个 VBO。我的问题最终是我的程序的另一部分加载了一个单独的 VBO,该 VBO 缺少一些顶点并且与使用两个程序无关。

【讨论】:

以上是关于在 OpenGL ES 中,多个程序可以使用相同的 VBO 并绑定到它们的属性吗?的主要内容,如果未能解决你的问题,请参考以下文章

opengl es着色器程序ID和vbo缓冲区ID相同

iOS 上的 OpenGL ES 多个没有索引的 VBO

OpenGL ES 多目标渲染(MRT)

在 OpenGL ES iOS 中绘制多个纹理时帧率下降

OpenGL ES 2.0 中具有不同纹理的许多对象

OpenGL ES:一个 VBO 中的多个网格