openGL glBufferData用法

时间:2014-03-19 18:17:13

标签: qt opengl buffer

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

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

其中顶点保存每个顶点的数据。我稍后更改了顶点数据以渲染不同的图像。但是,它仍然显示原始的。我相信将GL_STATIC_DRAW更改为GL_DYNAMIC_DRAW可以解决问题,但失败了。我该怎么做?

2 个答案:

答案 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。