2014-03-19 11 views
2

我正在使用glBufferData保存一些渲染信息。openGL glBuffer數據用法

glBufferData(GL_ARRAY_BUFFER, vertex_size * sizeof(VertexData), vertices, GL_DYNAMIC_DRAW); 

其中頂點保存每個頂點的數據。稍後我更改了頂點數據以呈現不同的圖像。但是,它仍然顯示出原來的一個。我認爲將GL_STATIC_DRAW更改爲GL_DYNAMIC_DRAW應該可以解決問題,但它失敗了。我該怎麼做?

+3

用新數據再次調用'glBufferData()'應該可以正常工作。發佈[SSCCE](http://sscce.org/)。 – genpfault

回答

3

要更新整個緩衝區,你應該再次致電glBufferData()

glBufferData(GL_ARRAY_BUFFER, vertex_size * sizeof(VertexData), vertices, GL_DYNAMIC_DRAW); 

此外,也可以使用glBufferSubData()調用來更新數據的唯一部分:

glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data); 

glBufferSubData()速度更快,因爲它不會重新分配底層緩衝區。

-2

每次更新數組時,都需要調用glBindBuffer相對的BufferObject處理程序來激活此數組緩衝區或元素緩衝區。另外,如果新數組大於舊緩衝區,則需要調用glBufferData,否則只需調用glBufferSubData。