即使所有数据频繁变化,VBO也能提升性能

Sud*_*n S 1 opengl

我正在做一个基于2D回合的RTS游戏,使用32x32平铺(每帧400-500个平铺).我可以使用一个VBO,但我可能不得不每帧更改几乎所有的VBO数据,因为背景是滚动的,每次地图滚动时可见的瓷砖都会改变.使用VBO而不是客户端顶点阵列仍然会在这里产生性能优势吗?另外,如果使用哪种数据格式效率最高的VBO(float,或int16,还是......)?

kcb*_*ner 8

如果只是滚动,则可以使用顶点着色器来操纵位置,而不是更新顶点本身.将"滚动"值作为一个统一体传递给您的背景,然后将该值添加到每个顶点的x(或y,或适用于您的情况的任何值)值.

更新:

如果您打算经常修改VBO,可以使用usageparam 告诉驱动程序glBufferData.这个页面很好地描述了它的工作原理:http://www.opengl.org/wiki/Vertex_Buffer_Object,在Accessing VBOs下.在您的情况下,您应该指定GL_DYNAMIC_DRAW,glBufferData以便驱动程序将VBO放在内存中最适合您的应用程序的位置.