内存池算法

时间:2011-05-08 19:45:49

标签: c++ opengl memory-management vbo memory-pool

我正在寻找更智能的算法来处理OpenGL中的VBO。

目前,我目前将每个模型存储在4MB VBO中。 如果模型大于4MB,则单独存储。 存储对象使得模型汇集在一起​​以减少绑定的数量。

我遇到的问题是如何清理未使用的VBO,这些VBO仅使用稀疏。 关于如何更好地管理这些内存池的任何资源都表示赞赏。

2 个答案:

答案 0 :(得分:1)

VBO不像常规内存,不需要任何复杂的“内存管理”。您为每个不同的网格分配一个自己的,适当大小的VBO并完成。任何超越驾驶员的企图都会导致性能低下。

尝试使您的VBO尽可能大也没有任何好处。事实上,在我的经验中,大约0.5k到5k顶点的适度大小的VBO效果最好。

答案 1 :(得分:1)

我原本和你一样。我在大约100行代码中实现了一个简单的freelist,以便可以重用已释放的VBO段。它显着减少了VBO重新分配,这给了我框架故障。我使用了最合适的分配算法,因为我有许多网格恰好具有相同数量的顶点和面。