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