openGL glBufferData 的使用方法

4

我正在使用glBufferData来保存一些渲染所需的信息。

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

顶点保存每个顶点的数据。我后来更改了顶点数据以呈现不同的图像。然而,它仍然显示原始图像。我相信将GL_STATIC_DRAW更改为GL_DYNAMIC_DRAW应该可以解决问题,但它失败了。我该怎么办?


3
再次使用glBufferData()函数并提供新的数据是可以正常工作的。请发布一个SSCCE - genpfault
2个回答

5

要更新整个缓冲区,您应该再次调用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() 更快,因为它不会重新分配底层缓冲区。

-1
每次更新数组时,需要调用glBindBuffer相对于的BufferObject处理程序来激活此Array Buffer或Element Buffer。另外,如果新的数组比旧的Buffer大,则需要调用glBufferData,否则只需调用glBufferSubData。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接