以下是我对OpenGL缓冲区如何工作的理解:将数据从CPU发送到GPU的速度很慢,因此我们不希望按顶点发送顶点数据顶点。相反,我们将顶点数据一次性发送到GPU,并告知GPU如何解释我们发送它的内容。缓冲区以某种方式参与了这个过程(这是我不明白的地方)。
那怎么办呢?我们遵循OpenGL对象创建模型:
生成缓冲区ID
GLuint VBO;
glGenBuffers(1, &VBO);
将缓冲区ID绑定到当前状态/上下文中的目标缓冲区
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData()
的{{1}}可用于发送顶点数据。将目标设置回默认值
GL_ARRAY_BUFFER
取消分配资源(编辑:在缓冲区达到其目的之后;例如,在游戏循环结束后)
glBindBuffer(GL_ARRAY_BUFFER, 0);
所以一方面我有一个GPU内存块的抽象概念,另一方面我有一个访问该块的过程,我不明白这两个是如何相关的。