内存池算法

Memory pool algorithms

本文关键字:算法 内存      更新时间:2023-10-16

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

就目前而言,我目前将我的每个模型存储在4MB VBO中。如果模型大于 4MB,则单独存储。存储对象时,模型将池化在一起以减少绑定数。

我遇到的问题是如何清理未使用的 VBO,这些 VBO 仅使用很少使用。感谢有关如何更好地管理这些内存池的任何资源。

VBO 不像常规内存,不需要任何复杂的"内存管理"。您可以为每个不同的网格分配一个自己的、适当大小的 VBO,然后完成操作。任何智胜驾驶员的尝试都只会导致性能下降。

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

我最初有像你一样的东西。 我在大约 100 行代码中实现了一个简单的自由列表,以便可以重用释放的 VBO 段。 它大大减少了 VBO 重新分配,这给了我帧故障。 我使用最佳拟合算法进行分配,因为我有许多网格恰好具有相同数量的顶点和面。