繁体   English   中英

每帧多次调用glBufferSubData

[英]Calling glBufferSubData several times per frame

我正在做一个渲染,每帧我多次调用glBufferSubData

这是我在代码中的方法:

    glBindBuffer(GL_ARRAY_BUFFER,_vboID);

//Buffering the data
glBufferData(GL_ARRAY_BUFFER,_vboDATA[type].size()*sizeof(vboData),nullptr,GL_DYNAMIC_DRAW);
glBufferSubData(GL_ARRAY_BUFFER,0,_vboDATA[type].size()*sizeof(vboData),_vboDATA[type].data());

   glBindBuffer(GL_ARRAY_BUFFER,0);

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

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

2.)渲染元素1

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

4.)渲染元素2

...

这样是正确的方法吗?

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

如果数据是完全动态的(并且每帧都在变化),则无论如何都必须上传数据,因此仅使用一个缓冲区就可以了。 但是您仍然应该尝试与仅上传数据( glBufferSubDataglBufferSubData并避免全部分配新内存( glBufferData )。 例如,您可以选择一个足以容纳所有数据的缓冲区初始大小。 另一种选择是使用持久映射缓冲区

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM