【发布时间】:2020-12-14 09:35:14
【问题描述】:
我一直在尝试使用 glBufferData 编辑和/或更新 OpenGL VBO,以将数据发送回缓冲区。在某些情况下,我发送的数据比之前的数据大,但这不重要,因为我使用的是glBufferData,它会覆盖缓冲区的数据,对吧?
好吧,当我运行我的程序并向缓冲区添加更多面孔时,它会从缓冲区的另一部分移除面孔,而不是渲染它们。
这是我的缓冲区更新代码:
glBindVertexArray(vao)
glBindBuffer(GL_ARRAY_BUFFER, vbo)
draw_data = self.generate_vertex_data(data)
print(draw_data.size - previous_draw_data.size)
glBufferData(GL_ARRAY_BUFFER, draw_data.nbytes, draw_data, GL_DYNAMIC_DRAW
previous_draw_data = draw_data
我已经检查过了,draw_data 是正确的:问题在于 glBufferData,它在某种程度上受限于缓冲区的大小。 draw_data 是一个 numpy 数组。另外,如果我不更新缓冲区,一切都很好。
当我更新缓冲区时,如果draw_data 大于previous_draw_data,它会渲染新面孔但停止渲染其他面孔(我假设被删除的面孔存储在缓冲区的前面)。
我想知道为什么glBufferData 显然受限于缓冲区的大小,即使它应该重新发送整个数据。
【问题讨论】:
-
问题:你确定你也在你的draw call中更新/增加顶点数吗?
-
我没有,实际上!谢谢一百万,你刚刚解决了大约一周的头疼问题!
标签: python opengl vbo pyopengl