それは必要ですか?
いいえ。
それは良い考えですか?
おそらくですが、現在の疑似コードにはありません。
GL でリソースを削除する前に手動でアンバインドしたいのは、それを別のコンテキストでバインドしている場合だけです。これは、GL リソースに関連付けられたメモリを実際に解放するための基準の 1 つは、参照カウントが0であることだからです。解放するオブジェクトのキューに入れる前に、オブジェクトを現在のglDelete* (...)
コンテキストからバインド解除するだけです。
現在バインドされていないVAO がこのバッファーへのポインターを保持しているときにそれを削除した場合、または呼び出したものとはまったく異なる OpenGL コンテキストでバインドされている場合、参照カウントは終了する前に0glDelete* (...)
に達しません。その結果、参照を保持しているすべての VAO / レンダー コンテキストから実際にバインドを解除するか破棄するまで、メモリは解放されません。すべてのぶら下がっている参照を処理するまで、効果的にメモリ リークが発生します。glDelete* (...)
つまり、glDelete* (...)
常に現在のコンテキストからリソースをバインド解除し、すぐに再利用できるように名前を再利用しますが、バインド解除後に参照カウントが0である場合にのみ、関連するメモリを解放します。
この場合、呼び出し元と同じコンテキストで実行しているため、バインド解除はまったく不要ですglDeleteBuffers (...)
。この呼び出しは、削除するオブジェクトのバインドを暗黙的に解除するため、冗長なことを行っています。さらに、呼び出す前にすでに VAO を削除しています。glDeleteBuffers (...)
その VAO が削除されると、すべてのポインターが放棄され、バッファーへの参照カウントが減少します。