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 实现(即驱动程序)可能会根据传递的目标分配不同的内存,但我没有看到这方面的证据。

此外,较新的 glNamedBufferDataglBufferData 的功能相同,无需先前的 glBindBuffer 调用,它没有 target 参数。这强烈暗示目标是可以互换的。