Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中正确删除VBO?_Python_Opengl_Vbo_Pyglet - Fatal编程技术网

如何在python中正确删除VBO?

如何在python中正确删除VBO?,python,opengl,vbo,pyglet,Python,Opengl,Vbo,Pyglet,我想知道如何在python中正确删除顶点缓冲区对象。我生成的VBO如下所示: from ctypes import pointer vbo_id = GLuint() glGenBuffers(1, pointer(vbo_id)) 有时,我不得不删除VBO并创建一个新的VBO。我想知道删除VBO的正确方法是什么?我尝试了以下两种方法,但不知道哪一种是正确的(python也没有抱怨任何一种方法): 哪个电话正确?删除VBO是否也会释放GPU上的内存?我不写Python,所以请恕我直言,但是gl

我想知道如何在python中正确删除顶点缓冲区对象。我生成的VBO如下所示:

from ctypes import pointer
vbo_id = GLuint()
glGenBuffers(1, pointer(vbo_id))
有时,我不得不删除VBO并创建一个新的VBO。我想知道删除VBO的正确方法是什么?我尝试了以下两种方法,但不知道哪一种是正确的(python也没有抱怨任何一种方法):


哪个电话正确?删除VBO是否也会释放GPU上的内存?

我不写Python,所以请恕我直言,但是
glDeleteBuffers()
的规范需要大量缓冲区和一组缓冲区名称。因此,它可能应该是
指针(vbo\u id)
。在C语言中,它与
glGenBuffers()
相同,因此我假设在Python中也是这样。原因是第二个参数是缓冲区名称数组,而不仅仅是缓冲区名称。

有没有办法检查VBO是否已被删除?在调用
glDeleteBuffers()
之后,我尝试调用
glBindBuffer(GL\u ARRAY\u BUFFER,vbo\u id)
,但也没有收到任何错误。您可以调用
glIsBuffer()
查看是否已经分配了它。我认为您所描述的没有任何错误与OpenGL的某些版本有关,如果该ID不存在,则使用该ID创建一个缓冲区(这似乎与必须首先生成它们有点相反)。但是我对此的记忆很模糊,所以我可能记错了。@memyself:注意,如果你只是想替换缓冲区的数据,你不必删除它,但你可以使用glBufferData用新数据重新初始化它。似乎两种方法都是对的,因为调用
glIsBuffer(vbo_id)
在任何一种情况下都返回0。
glDeleteBuffers(1, pointer(vbo_id))
or 
glDeleteBuffers(1, vbo_id)