我正在使用glBufferData保存一些渲染信息。openGL glBuffer數據用法
glBufferData(GL_ARRAY_BUFFER, vertex_size * sizeof(VertexData), vertices, GL_DYNAMIC_DRAW);
其中頂點保存每個頂點的數據。稍後我更改了頂點數據以呈現不同的圖像。但是,它仍然顯示出原來的一個。我認爲將GL_STATIC_DRAW更改爲GL_DYNAMIC_DRAW應該可以解決問題,但它失敗了。我該怎麼做?
我正在使用glBufferData保存一些渲染信息。openGL glBuffer數據用法
glBufferData(GL_ARRAY_BUFFER, vertex_size * sizeof(VertexData), vertices, GL_DYNAMIC_DRAW);
其中頂點保存每個頂點的數據。稍後我更改了頂點數據以呈現不同的圖像。但是,它仍然顯示出原來的一個。我認爲將GL_STATIC_DRAW更改爲GL_DYNAMIC_DRAW應該可以解決問題,但它失敗了。我該怎麼做?
要更新整個緩衝區,你應該再次致電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()
速度更快,因爲它不會重新分配底層緩衝區。
每次更新數組時,都需要調用glBindBuffer相對的BufferObject處理程序來激活此數組緩衝區或元素緩衝區。另外,如果新數組大於舊緩衝區,則需要調用glBufferData,否則只需調用glBufferSubData。
用新數據再次調用'glBufferData()'應該可以正常工作。發佈[SSCCE](http://sscce.org/)。 – genpfault