0

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

问题是我不想为每个网格实例化一个新的 VBO,我希望 VBO 的大小由我加载到其中的网格的数量来确定(不仅仅是 2MB 的固定大小或其他东西)。

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

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

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

我想,通过这种方式,我可以灵活地将不同的网格对象放在不同的 VBO 中或全部放在一个 VBO 中。我唯一担心的是这是否是一个好的设计。

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

我试图尽可能清楚地说明这一点。让我知道是否需要澄清。

4

1 回答 1

0

老实说,对我来说,一个可疑的回报听起来很麻烦。您是否有理由相信将多个网格放在同一个缓冲区中会显着提高您的性能?

对我来说,这听起来像是过早的优化。

当然,如果您有一个包含 50,000 个粒子的粒子系统,我可以看到希望它位于共享缓冲区中,但总的来说,我不知道将两个任意网格存储在同一个缓冲区中是否有好处。这听起来像是错误和头痛的巨大潜力。

于 2012-04-27T00:35:29.300 回答