2012-03-17 8 views
1

私は、頂点バッファオブジェクトをPythonで正しく削除する方法を知りました。私はVBOを削除し、代わりに新しいものを作成する必要が随時PythonでVBOを正しく削除する方法は?

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

:私はこのように私のVBOsを生成します。私は正しい VBOを削除する方法は何ですか?私は、次の2つの方法を試してみたが、私は1つが正しいであるかわからない(とPythonのいずれかの方法で文句はありません):正しい呼び出し

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

を? VBOを削除すると、GPUのメモリも解放されますか?

+0

は 'glIsBuffer(vbo_id)'を呼び出すといずれの場合も0を返すので、両方の方法が正しいと思われます。 – memyself

答えて

3

私はPythonを書いていないので、塩分を取りますが、glDeleteBuffers()の仕様にはいくつかのバッファとバッファ名の配列があります。したがって、おそらくpointer(vbo_id)になるはずです。 Cでは、それはglGenBuffers()と同じなので、私はPythonで同じことを仮定します。これは、2番目のパラメータがバッファ名だけでなくバッファ名の配列であるためです。

+0

VBOが削除されたかどうかを確認する方法はありますか?私は 'glDeleteBuffers()'呼び出しの後に\t \t 'glBindBuffer(GL_ARRAY_BUFFER、vbo_id)'を呼び出そうとしましたが、何もエラーが出ません。 – memyself

+2

'glIsBuffer()'を呼び出して、すでに割り当てられているかどうかを調べることができます。 OpenGLのいくつかのバージョンでは、存在しない場合は、そのIDを持つバッファを作成することになります(最初に生成する必要はありません)。しかし、私の記憶はあいまいなので、私は誤って覚えている可能性があります。 – user1118321

+0

@memyself:バッファのデータを置き換えたい場合は、削除する必要はありませんが、glBufferDataを使用して新しいデータで簡単に再初期化できます。 – datenwolf