[英]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中来完成。
如果数据是完全动态的(并且每帧都在变化),则无论如何都必须上传数据,因此仅使用一个缓冲区就可以了。 但是您仍然应该尝试与仅上传数据( glBufferSubData
) glBufferSubData
并避免全部分配新内存( glBufferData
)。 例如,您可以选择一个足以容纳所有数据的缓冲区初始大小。 另一种选择是使用持久映射缓冲区 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.