为什么OpenGL缓冲区(以及一般的对象)有效?

时间:2017-05-15 02:20:07

标签: opengl buffer gpu

以下是我对OpenGL缓冲区如何工作的理解:将数据从CPU发送到GPU的速度很慢,因此我们不希望按顶点发送顶点数据顶点。相反,我们将顶点数据一次性发送到GPU,并告知GPU如何解释我们发送它的内容。缓冲区以某种方式参与了这个过程(这是我不明白的地方)。

那怎么办呢?我们遵循OpenGL对象创建模型:

  1. 生成缓冲区ID

    GLuint VBO;
    glGenBuffers(1, &VBO);
    
  2. 将缓冲区ID绑定到当前状态/上下文中的目标缓冲区

    glBindBuffer(GL_ARRAY_BUFFER, VBO);
    
  3. 修改或查询数据。例如,调用目标glBufferData()的{​​{1}}可用于发送顶点数据。
  4. 将目标设置回默认值

    GL_ARRAY_BUFFER
  5. 取消分配资源(编辑:在缓冲区达到其目的之后;例如,在游戏循环结束后)

    glBindBuffer(GL_ARRAY_BUFFER, 0);
    
  6. 所以一方面我有一个GPU内存块的抽象概念,另一方面我有一个访问该块的过程,我不明白这两个是如何相关的。

0 个答案:

没有答案