使用VBO和VAO是否会提高具有共享内存的集成芯片的性能

问题描述 投票:0回答:2

在我们目前的项目中,我们正在使用this intel integrated chip。即使在规范中,它被告知支持OGL ES 2.0,我们也没有使用VBO和VAO(没有glGenBuffers,glBindBuffers),因此我们使用了客户端侧顶点缓冲。

我们提出这样的想法:如果我们使用VBO,我们将获得更好的性能。但现在我在考虑它;如果GPU和CPU已经使用VBO共享相同的内存有任何区别。因为在我看来,VBO有帮助,因为我们不需要每次都将数据传输到GPU,但在这种情况下,当内存共享时我不确定它是否会产生任何影响。

我的问题是我的硬件共享内存,使用VBO会提高性能吗?如果集成芯片之间的VBO性能有差异,并且cpu和gpu分开了它们是什么?

c++ opengl-es-2.0 vbo
2个回答
1
投票

对于客户端顶点,驱动程序最多必须分配一些空间并复制顶点,因为它必须允许客户端在GPU消耗顶点之前修改数据。

对于最好的情况下的VBO,可以跳过该副本,对于永远不会改变它的VBO,可以安全地假设您将获得性能提升(虽然可能是一个小的)。

但是,对于不断变化的顶点(如CPU驱动的粒子系统,或者为字体/ huds动态生成的四边形),使用VBO可能会有点棘手。您需要使用某种策略来回收缓冲区(孤立,双缓冲,三重缓冲,GL_MAP_INVALIDATE_BUFFER_BIT),您选择的任何选项似乎在Android设备的某些子集上表现不佳。对于不断变化的顶点,客户端顶点可能不是最好的,但至少它们很少是性能黑洞。


0
投票

在我看来,使用VBO / VAO没有缺点,是目前的做法。

https://www.khronos.org/opengl/wiki/Client-Side_Vertex_Arrays

“在VBO之前,有一些普通的旧顶点数组。这意味着你的顶点和顶点属性和索引都在RAM中。当然,这并没有提供最好的性能,因为每次你想要GL绘制,驱动程序必须上传GPU的顶点。“

也就是说,OpenGL只是一个规范,所以在一天结束时,这一切都取决于你的驱动程序如何实现这些。

© www.soinside.com 2019 - 2024. All rights reserved.