何时清除顶点缓冲区对象

时间:2014-07-01 14:13:42

标签: opengl vbo

我只是想知道:何时(以及可能如何)清除VBO中的数据。在重写数据之前,您是否必须清除它?为什么清楚呢?

1 个答案:

答案 0 :(得分:5)

清除缓冲区(即将每个字节设置为0)并不太有用。 无效缓冲区是。

使缓冲区的某个部分无效意味着该部分的内容无效,并且您必须在使用该部分之前将新内容写入该部分。这允许OpenGL实现避免等到缓冲区对象不再被使用,以便通过给你一个完全“新”的缓冲区来写入(在同一名称下)来向它上传数据。这种技术称为 buffer orphaning

要使缓冲区无效,您可以使用相同的大小和使用提示调用glBufferData,但使用NULL数据指针,使用glMapBufferRangeGL_MAP_INVALIDATE_BUFFER_BIT,或glInvalidateBufferData如果您的GPU支持它。

OpenGL Wiki article for Buffer Object Streaming更详细地介绍了这一点,并提供了其他几种解决方案。

要直接回答您的问题,您不需要在更新缓冲区之前使其无效或清除缓冲区。只要您想要更新所需的任何内容,就可以致电glBufferSubData。但是,在没有失效的情况下这样做可能会导致管道停滞,因为OpenGL在安全更新之前等待缓冲区完成使用。