我正在寻找更智能的算法来处理 OpenGL 中的 VBO。
就目前而言,我目前将每个模型存储在 4MB VBO 中。如果模型大于 4MB,则单独存储。对象的存储使得模型汇集在一起,以减少绑定的数量。
我遇到的问题是如何清理未使用的 VBO,这些 VBO 仅使用很少。任何有关我如何更好地管理这些内存池的资源都值得赞赏。
我正在寻找更智能的算法来处理 OpenGL 中的 VBO。
就目前而言,我目前将每个模型存储在 4MB VBO 中。如果模型大于 4MB,则单独存储。对象的存储使得模型汇集在一起,以减少绑定的数量。
我遇到的问题是如何清理未使用的 VBO,这些 VBO 仅使用很少。任何有关我如何更好地管理这些内存池的资源都值得赞赏。
VBO 不像普通内存,不需要任何复杂的“内存管理”。您为每个不同的网格分配一个自己的、适当大小的 VBO 并完成。任何比驾驶员更聪明的尝试只会导致性能下降。
尝试使您的 VBO 尽可能大也没有任何好处。事实上,根据我的经验,大约 0.5k 到 5k 顶点的中等大小的 VBO 效果最好。
我本来也有你这样的。我用大约 100 行代码实现了一个简单的 freelist,以便可以重用释放的 VBO 段。它显着减少了给我带来框架故障的 VBO 重新分配。我使用了最佳拟合算法进行分配,因为我有许多网格,它们恰好具有相同数量的顶点和面。