为什么 glBufferData 有模式参数?

Why does glBufferData have mode parameter?

unsigned int vbo;
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

我们在第 3 行绑定 OpenGL 中的缓冲区,我们将模式设置为 GL_ARRAY_BUFFER 或其他任何内容。

为什么我们要在glBufferData中再次设置模式,它只使用最后一个有界缓冲区?

注意,glBindBuffer的第一个参数不是模式,而是缓冲区将绑定到的缓冲区绑定点。这些绑定点有好几个,一个缓冲区也可以同时绑定到多个绑定点。

之所以需要重复这一点,是因为多个缓冲区可以同时绑定到不同的缓冲区绑定点。例如,当使用索引几何体进行渲染时,将有一个缓冲区绑定到 GL_ARRAY_BUFFER,另一个缓冲区绑定到 GL_ELEMENT_ARRAY_BUFFERglBufferData 的第一个参数现在标识要将数据上传到哪个绑定缓冲区。

Direct State Access 扩展中,指定绑定点的需要已通过将缓冲区句柄直接传递给方法来代替:

glNamedBufferData(GLuint buffer, GLsizei size, const void *data, GLenum usage)