0

重複の可能性:
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

これらのいずれかを削除すると、図面が表示されなくなりますが、なぜ2回バインドする必要があるのでしょうか。

最初にこれを行う別の例:

// 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);
4

2 に答える 2

1

質問の回答を待っていた場合、glBufferDataはどのVBOで作業するかをどのように知るのですか? この質問にも答えられました。

OpenGLはステートマシンであり、glBindBuffer selectを呼び出します。これは、次の操作が機能するバッファです。

于 2013-01-05T13:34:04.307 に答える
0

同じバッファーを連続して複数回バインドする必要はありません。一度やれば十分です。配列バッファーを使用したサンプルでは、​​描画ルーチンの前に別の(またはデフォルトの0)バッファーにバインドしている場合、描画が表示されない場合があります。

于 2013-01-05T14:24:18.663 に答える