我正在使用glBufferData来保存一些渲染信息。
glBufferData(GL_ARRAY_BUFFER, vertex_size * sizeof(VertexData), vertices, GL_DYNAMIC_DRAW);
其中顶点保存每个顶点的数据。我稍后更改了顶点数据以渲染不同的图像。但是,它仍然显示原始的。我相信将GL_STATIC_DRAW更改为GL_DYNAMIC_DRAW可以解决问题,但失败了。我该怎么做?
答案 0 :(得分:4)
要更新整个缓冲区,请再次致电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 :(得分:-2)
每次更新数组时,都需要调用glBindBuffer相对的BufferObject处理程序来激活此数组缓冲区或元素缓冲区。另外,如果你的新数组大于旧的Buffer,则需要调用glBufferData,否则只需要调用glBufferSubData。