Python 使用glBufferData编辑OpenGL VBO将删除部分数据

Python 使用glBufferData编辑OpenGL VBO将删除部分数据,python,opengl,vbo,pyopengl,Python,Opengl,Vbo,Pyopengl,我一直在尝试使用glBufferData编辑和/或更新OpenGL VBOs,以将数据发送回缓冲区。在某些情况下,我发送给它的数据比以前的数据大,但这并不重要,因为我使用的glBufferData无论如何都会覆盖缓冲区的数据,对吗 嗯,当我运行程序并向缓冲区添加更多面时,它会从缓冲区的另一部分删除面,而不是渲染它们 以下是我的缓冲区更新代码: glBindVertexArray(vao) glBindBuffer(GL_ARRAY_BUFFER, vbo) draw_data = self.ge

我一直在尝试使用
glBufferData
编辑和/或更新OpenGL VBOs,以将数据发送回缓冲区。在某些情况下,我发送给它的数据比以前的数据大,但这并不重要,因为我使用的
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,它在某种程度上被限制为缓冲区的大小<代码>绘制数据是一个numpy数组。另外,如果我不更新缓冲区,一切都很好

当我更新缓冲区时,如果
draw\u data
大于
previous\u draw\u data
,它会渲染新的面,但会停止渲染其他面(我假设删除的面存储在缓冲区的前面)


我想知道为什么
glBufferData
显然被限制在缓冲区的大小上,即使它应该重新发送整个数据。

因此,我现在知道,我在调用
glDrawArrays
时没有更新面数量,这有效地限制了可以渲染的面数量。就这么简单:我更新了面数,现在它按预期工作。

问题:你确定你在绘图调用中也更新/增加了顶点数吗?事实上,我没有!万分感谢,你刚刚解决了一周的头痛问题!