openGL glBufferData 使用

ivo*_*ory 4 opengl qt buffer

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

glBufferData(GL_ARRAY_BUFFER, vertex_size * sizeof(VertexData), vertices, GL_DYNAMIC_DRAW);
Run Code Online (Sandbox Code Playgroud)

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

Ser*_* K. 5

要更新整个缓冲区,您应该glBufferData()再次调用:

glBufferData(GL_ARRAY_BUFFER, vertex_size * sizeof(VertexData), vertices, GL_DYNAMIC_DRAW);
Run Code Online (Sandbox Code Playgroud)

此外,可以使用以下glBufferSubData()调用仅更新部分数据:

glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data);
Run Code Online (Sandbox Code Playgroud)

glBufferSubData()更快,因为它不会重新分配基础缓冲区。