为什么glBufferData有模式参数?

时间:2018-02-10 14:42:17

标签: opengl opengl-3 vertex-buffer

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中再次使用最后一个有界缓冲区来设置模式?

1 个答案:

答案 0 :(得分:3)

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

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

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

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