为什么必须连续多次绑定缓冲区?

时间:2013-01-05 13:26:25

标签: opengl opengl-es opengl-es-2.0

  

可能重复:
  How does glBufferData know which VBO to work on?

我注意到样本代码(在O'Reilly书中)对于VBO和渲染缓冲区来说,绑定不止一次。这背后的原因是什么?例如,您可能将此放在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);

2 个答案:

答案 0 :(得分:1)

如果您已等待问题的答案How does glBufferData know which VBO to work on? 这个问题也得到了回答。

OpenGL是一个状态机并调用glBindBuffer select,这个缓冲区可以进行以下操作。

答案 1 :(得分:0)

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