glGenBuffers を使用して VBO へのポインターを作成する場合、メモリを割り当てていると (思います)。glGenBuffers への後続の呼び出しは異なるポイントを返す必要がありますが、以前に割り当てられたメモリはどうですか? Nehe の例では、「空きメモリ」呼び出しは見られませんでした...そして、openGL は一種の「ステート マシン」であると読みましたが、これは、initializeBuffers() 関数が数回呼び出された場合、何かを解放して glGenBuffers を「そのまま」使用する必要がありますか?
3856 次
1 に答える
15
glGenBuffers
呼び出しを行う場合は、対応する呼び出しを行う必要がありglDeleteBuffers
ます。
glGenBuffers
渡すポインタは割り当て/割り当て解除されていないことに注意してください。実際、これらの呼び出しが実際には CPU メモリに何も割り当てない可能性もありますが、その保証もありません。
渡すglGenBuffers
のは、GPU リソースを参照する「名前」を格納する、既に割り当てられている配列 (または単一の値) です。ワークフローは次のようになります。
GLuint buffer; //Note: statically allocated
glGenBuffers(1, &buffer); // Allocate a GPU-resource - only updates value in buffer
//Work a bit with buffer
glDeleteBuffers(1, &buffer); //Deallocate the gpu-resource
ポインターとして渡される理由buffer
は、次のように複数のバッファーを作成できるためです。
GLuint buffer[3]; //Note: again statically allocated
glGenBuffers(3, &buffer); // Allocate a GPU-resource - update values in buffer
//Work a bit with buffer
glDeleteBuffers(3, &buffer); //Deallocate the gpu-resource
もちろん、buffer
動的に割り当てることもできます。たとえば、次のようになります。
std::vector<GLuint> buffer(3); //std::vector uses dynamic allocation
glGenBuffers(3, &buffer[0]); // Allocate a GPU-resource - update values in buffer
//Work a bit with buffer
glDeleteBuffers(3, &buffer[0]); //Deallocate the gpu-resource
于 2012-07-20T14:06:40.910 に答える