跨多个网格对象共享VBO

时间:2012-04-26 23:37:06

标签: opengl-es opengl-es-2.0

我正在开发一款使用OpenGL ES 2.0的小型游戏引擎。将VBO集成到我的Mesh类中时遇到了一些设计问题。

问题是我不想为每个网格实例化一个新的VBO,我希望VBO大小由我加载到它的网格数量决定(不仅仅是2MB的固定大小)

由于VBO没有realloc函数,我需要一次批量加载所有顶点数据。这没关系,因为我只有4或5个小网格。所以我创建了一个MeshList类。

我调用MeshList.AddMesh(网格网格)并聚合网格对象的顶点/索引数据,并将偏移返回到顶点数据/索引数据的数组中,返回到添加的网格。通过这种方式,网格知道它在VBO中的位置(但不知道它在哪个VBO中)。

但是,在调用MeshList.BindToVBO()之前,没有任何MeshList数据上传到VBO中。但是现在,我的网格中没有一个知道它们在哪个VBO中。所以我想在MeshList中创建一个指针数组,指向每个Mesh类中的整数成员变量,它们将保存VBO句柄。这样,当调用BindToVBO()时,它会遍历指针数组并更新网格对象中的VBO句柄。

我想,通过这种方式,它为我提供了在不同的VBO中或在一个VBO中拥有不同网格对象的灵活性。我唯一担心的是这是否是一个好的设计。

有人瞥了一眼MeshList.BindToVBO()正在更新一大堆网格对象的代码并不清楚。我的意思是,MeshList确实在BindToVBO()调用之前与所有Mesh对象进行交互,但是没有任何明确的说明通过将Mesh对象传递给MeshList.AddMesh(),它基本上订阅它的VBOHandle成员来更新某些点。未来。

我试图尽可能清楚地说明这一点。如果需要澄清,请告诉我。

1 个答案:

答案 0 :(得分:0)

老实说,对于一个可疑的回报来说听起来很麻烦。您是否有理由相信将多个网格物体放在同一个缓冲区中会使您的表现变得明显?

这对我来说听起来不成熟。

当然,如果你有一个拥有50,​​000个粒子的粒子系统,我可以看到它想要在共享缓冲区中,但一般来说我不知道​​在同一个缓冲区中存储两个任意网格是否有好处。这听起来像是臭虫和头痛的巨大潜力。