2017-09-05 82 views
1

我刚刚尝试更新一个顶点缓冲区对象(vbo),它具有静态绘制数据。为什么我可以用glBufferSubData进行更新?我一直认为静态vbo不能改变。OpenGL更新静态VBO

回答

5

GL_STATIC_DRAW并不意味着数据无法更改。 glBufferDatausage参数是底层实现的提示,可能会提高性能,但不会限制实际使用情况。 documentation指出:

用法是GL实现如何访问缓冲区对象的数据存储的暗示。这使得GL实现可以做出更明智的决定,这可能会显着影响缓冲区对象的性能。但是,它并不限制数据存储的实际使用。

4

这些只是用法提示。该规范明确指出:

usage被指定为九个枚举值之一。 [这9个枚举值的描述​​如下]

usage 仅作为性能暗示提供。指定的使用情况值不会限制数据存储的实际使用模式。

OpenGL 4.6 core profile specification,第6.2节 “创建和修改缓冲区对象数据存储”,68-69页)