我想在创建VBO后更新对象的顶点列表。我见过glBufferSubData
和glMapBuffer
,他们似乎都做了类似的事情,这意味着我现在不确定要使用哪一个。
我的伪工作流程是:
创建对象
开始顶点更新(用data = nullptr调用glBufferData)
更新对象的顶点
结束顶点更新(获取更新的顶点并调用glBufferSubData
或glMapBuffer
)
答案 0 :(得分:22)
两者都有效。
如果您打算经常更新顶点(每帧左右),我建议避免使用glBufferSubData,这需要在驱动程序中再添加一个memcpy。 glMapBuffer / glMapBufferRange通常会为你提供更多的性能。
如果你很少更新,glBufferSubData就可以了。
另见OpenGL Insights第28章(免费:http://openglinsights.com/)