2012-03-17 107 views
1

我想知道如何在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

回答

3

我不寫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