为什么有必要连续绑定一个缓冲区不止一次



可能重复:
glBufferData如何知道在哪个VBO上工作?

我在VBO和渲染缓冲区的示例代码(在O’Reilly的一本书中(中注意到,绑定不止一次。这背后的原因是什么?例如,您可能在OpenGL例程的顶部有以下内容:

  glGenBuffers(1, &m_vertexBuffer); 
  glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer);

然后在画画之前,你再画一次:

  glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer); 
  glVertexPointer(3, GL_FLOAT, sizeof(Vertex), 0);
  //on to the drawing routine

删除其中任何一个都会导致图形不显示,那么为什么它需要绑定两次呢?

另一个例子首先我们这样做:

// Create & bind the color buffer so that the caller can allocate its space.      
   glGenRenderbuffersOES(1, &m_colorRenderbuffer); 
   glBindRenderbufferOES(GL_RENDERBUFFER_OES, m_colorRenderbuffer);

然后,在创建顶点等之后,我们稍后再做一次:

   // Bind the color buffer for rendering. 
      glBindRenderbufferOES(GL_RENDERBUFFER_OES, m_colorRenderbuffer);

如果您一直在等待问题的答案,glBufferData如何知道要处理哪个VBO?这个问题也得到了回答。

OpenGL是一个状态机,调用glBindBuffer select,缓冲以下操作。

连续多次绑定同一缓冲区不是必须的。做一次就足够了。在带有数组缓冲区的示例中,如果在执行绘图例程之前绑定到另一个(或默认的0(缓冲区,则可能不会显示绘图。

相关内容

最新更新