为什么 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_BUFFER
。 glBufferData
的第一个参数现在标识要将数据上传到哪个绑定缓冲区。
在 Direct State Access 扩展中,指定绑定点的需要已通过将缓冲区句柄直接传递给方法来代替:
glNamedBufferData(GLuint buffer, GLsizei size, const void *data, GLenum usage)
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_BUFFER
。 glBufferData
的第一个参数现在标识要将数据上传到哪个绑定缓冲区。
在 Direct State Access 扩展中,指定绑定点的需要已通过将缓冲区句柄直接传递给方法来代替:
glNamedBufferData(GLuint buffer, GLsizei size, const void *data, GLenum usage)