5

質問1

そのVAOが削除されると、特定のVAOの下で作成された頂点バッファオブジェクトは削除されますか?

例:

glGenBuffers(1, &bufferObject);
glGenVertexArrays(1, &VAO);

glBindVertexArray(VAO);
glBindBuffer(GL_ARRAY_BUFFER, bufferObject);
glBufferData(GL_ARRAY_BUFFER, sizeof(someVertices), someVertices, 
             GL_STATIC_DRAW);
glEnableVertexAttribArray(positionAttrib);
glVertexAttribPointer(positionAttrib, 3, GL_FLOAT, GL_FALSE, 0, NULL);

後で を呼び出すとglDeleteVertexArrays(1, &VAO);bufferObjectも削除されますか?

私が質問している理由は、これらのバッファ オブジェクトを削除していない例を Web 上でいくつか見たからです。

質問2

バッファ オブジェクトに割り当てることができるメモリの最大量はどれくらいですか? もちろん、システムに依存しているに違いありませんが、見積もりが見つからないようです。ビデオ RAM が十分に大きくない場合はどうなりますか? どうすればわかりますか?

4

2 に答える 2

15
于 2012-11-12T11:04:36.490 に答える
8

答え 1

場合によります。以前に呼び出した場合glDeleteBuffersは、VAO を削除すると削除されます。そうでなければ、そうはなりません。VAO は VBO への参照を保持しており、 を呼び出した後のアプリケーションも同様ですglGenBuffers。VBO を削除する前に、両方の参照を解放する必要があります。

答え 2

割り当てることができる最大量を照会する方法は (私の知る限り) ありません。ただし、リファレンス ドキュメントによると、バッファglBufferDataGL_OUT_OF_MEMORY割り当てられない場合に発行されます。

于 2012-11-12T11:03:54.933 に答える