如何在python中正确删除VBO?

问题描述:

我想知道如何在Python中正确删除一个顶点缓冲区对象。我生成我这样的VBO:如何在python中正确删除VBO?

from ctypes import pointer 
vbo_id = GLuint() 
glGenBuffers(1, pointer(vbo_id)) 

有时我必须删除一个VBO并创建一个新的VBO。我想知道正确的删除VBO的方法是什么?我试图通过以下两种方式,但我不知道哪一个是正确的(和Python不会抱怨任何一种方式):

glDeleteBuffers(1, pointer(vbo_id)) 
or 
glDeleteBuffers(1, vbo_id) 

调用哪个是正确的?并删除VBO也释放GPU上的内存?

+0

好像两种方式都是正确的,因为在任何情况下调用'glIsBuffer(vbo_id)'都会返回0。 – memyself 2012-03-17 17:33:35

我不写Python,所以把它与盐,但规范glDeleteBuffers()需要一些缓冲区和一个缓冲区名称数组。所以它应该可能是pointer(vbo_id)。在C中,它与glGenBuffers()相同,所以我会假设Python中也是这样。原因是第二个参数是一个缓冲区名称数组,而不仅仅是一个缓冲区名称。

+0

有没有办法检查VBO是否被删除?在glDeleteBuffers()调用之后,我试图调用\t \t'glBindBuffer(GL_ARRAY_BUFFER,vbo_id)',但我也没有收到任何错误。 – memyself 2012-03-17 16:02:10

+2

您可以调用'glIsBuffer()'来查看它是否已被分配。我认为你所描述的关于没有出现任何错误的描述与OpenGL的某些版本有关,如果它不存在,那么创建一个带有该ID的缓冲区(这看起来有点违背必须先生成它们)。但我对此的记忆是模糊的,所以我可能会误记。 – user1118321 2012-03-17 16:44:41

+0

@memyself:请注意,如果您只想替换缓冲区的数据,则不必删除它,但可以使用glBufferData将其重新初始化为新数据。 – datenwolf 2012-03-17 18:28:40