每帧调用glBufferSubData几次

时间:2016-10-28 10:45:39

标签: c++ opengl rendering

我正在进行渲染,每帧多次调用 glBufferSubData

以下是我在代码中的使用方法:

super

我问,因为我有不同类型的元素,每个都有自己的矢量来表示vbo数据(我在我的程序中使用1个VBO(用于颜色,UV,位置和1个VAO)和我我做渲染,如:

1。)将元素1的向量加载到缓冲区

2。)渲染元素1

3.)将元素2的向量加载到缓冲区

4。)渲染元素2

...

是这样做的正确方法吗?

1 个答案:

答案 0 :(得分:1)

正确的方法取决于您的使用方案。当数据大部分是静态的时,最好的方法是将数据上传一次到GPU。这可以通过为每个对象创建一个VBO,或者将所有对象一起打包到一个VBO中来完成。

如果数据是完全动态的(并且每帧都在变化),那么无论如何都必须上传数据,因此只使用一个缓冲区就可以了。但是你仍然应该尝试与上传数据(glBufferSubData)相处并避免全部分配新内存(glBufferData)。例如,您可以选择足够大的缓冲区初始大小以适合所有数据。另一种选择是使用persistently mapped buffer