VBO 的第一次初始化。绑定在哪里重要吗?
First Inizialization of VBO. Does it matter where to bind?
假设我只想创建并填充一个缓冲区。
GLuint ret;
glGenBuffers(1,&ret);
glBindBuffer(GL_ARRAY_BUFFER, ret);
glBufferData(GL_ARRAY_BUFFER,size,data,usage);
glBindBuffer(GL_ARRAY_BUFFER,0);
我在这两个调用中使用哪个目标真的很重要吗? (当然他们必须是一样的)。
例如:我可以在绑定到 GL_ARRAY_BUFFER
目标时填充写入缓冲区,然后在代码中将正常缓冲区绑定到 GL_UNIFORM_BUFFER
目标并使用它的数据填充统一块glBindBufferRange
?
没关系;任何目标都应该有效。我已经创建了缓冲区,其目标与之前的预期用途相匹配,但没有任何区别。
我想 OpenGL 实现(即驱动程序)可能会根据传递的目标分配不同的内存,但我没有看到这方面的证据。
此外,较新的 glNamedBufferData
与 glBufferData
的功能相同,无需先前的 glBindBuffer
调用,它没有 target
参数。这强烈暗示目标是可以互换的。
假设我只想创建并填充一个缓冲区。
GLuint ret;
glGenBuffers(1,&ret);
glBindBuffer(GL_ARRAY_BUFFER, ret);
glBufferData(GL_ARRAY_BUFFER,size,data,usage);
glBindBuffer(GL_ARRAY_BUFFER,0);
我在这两个调用中使用哪个目标真的很重要吗? (当然他们必须是一样的)。
例如:我可以在绑定到 GL_ARRAY_BUFFER
目标时填充写入缓冲区,然后在代码中将正常缓冲区绑定到 GL_UNIFORM_BUFFER
目标并使用它的数据填充统一块glBindBufferRange
?
没关系;任何目标都应该有效。我已经创建了缓冲区,其目标与之前的预期用途相匹配,但没有任何区别。
我想 OpenGL 实现(即驱动程序)可能会根据传递的目标分配不同的内存,但我没有看到这方面的证据。
此外,较新的 glNamedBufferData
与 glBufferData
的功能相同,无需先前的 glBindBuffer
调用,它没有 target
参数。这强烈暗示目标是可以互换的。