Opengl VAO性能

Opengl VAO性能,opengl,graphics,3d,Opengl,Graphics,3d,我目前的想法是在我的引擎中有一个模型管理器。它将有一个网格字典,每个网格获取一个字符串,从内存加载到GPU内存(RAII样式),并公开原始信息(用于消隐)以及渲染器的渲染信息。我没有绑定缓冲区,也没有指向这些缓冲区的指针,而是考虑为这个网格创建一个VAO,只公开VAO指针,然后在销毁(从字典中删除)时,网格会在其自身之后进行清理,删除VAO和缓冲区 这种方法是否存在性能问题?VAO会占用更多的空间吗?绑定VAO会比绑定缓冲区并每次指向缓冲区花费更多吗?或者这是一种可行的方法,我正在考虑也许我必须

我目前的想法是在我的引擎中有一个模型管理器。它将有一个网格字典,每个网格获取一个字符串,从内存加载到GPU内存(RAII样式),并公开原始信息(用于消隐)以及渲染器的渲染信息。我没有绑定缓冲区,也没有指向这些缓冲区的指针,而是考虑为这个网格创建一个VAO,只公开VAO指针,然后在销毁(从字典中删除)时,网格会在其自身之后进行清理,删除VAO和缓冲区


这种方法是否存在性能问题?VAO会占用更多的空间吗?绑定VAO会比绑定缓冲区并每次指向缓冲区花费更多吗?或者这是一种可行的方法,我正在考虑也许我必须在屏幕上显示很多模型,并且每帧绑定VAO这么多次可能会很昂贵。

我已经看到VAO的速度很快,而VAO的速度很慢,所以我不能对此说太多-您可以同时测试这两种方法吗?@harold我将如何进行测试?我正在寻找一个大概的答案,也许有人知道这在内部是如何工作的,我没有那么多的平台来检查代码,如果知道瓶颈在哪里,它是否依赖于openGL实现,那就很好了为VAO编写代码,每次都重新设置attrib指针,并比较性能。我不确定是否有一个普遍的答案,这是我的观点。编辑:好吧,也许这已经足够普遍了——如果你有太多的VAO,那么VAO可能会比“旧方法”慢,“太多”对于nVidia来说“不是一个不合理的数字”(但这无疑是在改进),这些信息必然是硬件、平台和驱动程序特定的。每一次驾驶员释放都可能改变答案。这个问题根本无法回答;你能做的最多的就是对其进行基准测试。虽然个别驱动程序可能对VAO的实现特别糟糕,但毫无疑问,从原则上讲,VAO的效率更高。绑定和解除绑定多个缓冲区以及设置指针涉及更多的库调用、更多的对象取消引用和更多的状态一致性检查。VAO理想地将所有内容合并到一个操作中。因此,即使在一个实现中情况更糟,我仍然会出于原则使用它。