title: OpenGL -- Multiple glDrawArrays() calls only showing results from first?
body: <p>So I am iterating through a couple of meshes each stored in its own GL_ARRAY_BUFFER, but both sharing the same glVertexAttribPointer structure. I iterate through each render/draw pass in a for loop:</p>
  
  <pre><code>if (sConfig.mRendering.isRenderTypeActive(RENDER_TYPE_SINGLE_MESH) || 
      sConfig.mRendering.isRenderTypeActive(RENDER_TYPE_TWO_MESH)) {
      const int mesh_count = sConfig.mRendering.isRenderTypeActive(RENDER_TYPE_TWO_MESH) ? 2 : 1;
      for (int i = 0; i &lt; mesh_count; i++) {
          std::lock_guard&lt;std::mutex&gt; lock(mModelDataMutex[i]);
          mUniV_VertexTransform-&gt;setValue(mModelTransform[i]);
          glBindBuffer(GL_ARRAY_BUFFER, mVBOs[i]); CHECK_GL_ERR;
          glDrawArrays(GL_TRIANGLES, 0, (GLsizei)mVertexCount[i]); CHECK_GL_ERR;
      }
  }
  </code></pre>
  
  <p>And set the data for each VBO using a couple of calls to the following function:</p>
  
  <pre><code>bool ::updateModelData(const RenderCloud&amp; data, VERTEX_BUFFER_ID id /*= VBID_MESH_0*/)
  {
      if (id &lt; VBID_COUNT)
      {
          std::lock_guard&lt;std::mutex&gt; lock(mModelDataMutex[id]);
          // Bind Point VBO
          glBindBuffer(GL_ARRAY_BUFFER, mVBOs[id]); CHECK_GL_ERR_RET;
          // Set coordinate attribute
          glVertexAttribPointer(BTID_COORDS, 3, GL_FLOAT, GL_FALSE, RenderCloud::elemSize(), (GLvoid*)BT_COORDS_OFFSET); CHECK_GL_ERR_RET;
          glEnableVertexAttribArray(BTID_COORDS); CHECK_GL_ERR_RET;
  
          // Set the normals attribute
          glVertexAttribPointer(BTID_NORMALS, 3, GL_FLOAT, GL_FALSE, RenderCloud::elemSize(), (GLvoid*)(BT_NORMALS_OFFSET)); CHECK_GL_ERR_RET;
          glEnableVertexAttribArray(BTID_NORMALS); CHECK_GL_ERR_RET;
  
          // Set the colors attribute
          glVertexAttribPointer(BTID_COLOR, 4, GL_UNSIGNED_BYTE, GL_TRUE, RenderCloud::elemSize(), (GLvoid*)(BT_COLOR_OFFSET)); CHECK_GL_ERR_RET;
          glEnableVertexAttribArray(BTID_COLOR); CHECK_GL_ERR_RET;
          // Copy Data
          glBufferData(GL_ARRAY_BUFFER, data.pts.size() * data.elemSize(), data.pts.data(), GL_STATIC_DRAW); CHECK_GL_ERR_RET;
          mVertexCount[id] = data.pts.size();
          // Unbind buffer
          glBindBuffer(GL_ARRAY_BUFFER, 0); CHECK_GL_ERR_RET;
          return true;
      }
      return false;
  }
  </code></pre>
  
  <p>I can verify the data is there for both VBOs, but only the first VBO in the for loop is rendered using glDrawArrays()</p>
  
  <p>They share the shame geometry shader, which is then used by a deferred rendering stack to apply effects.</p>
  
  <p>Does each glDrawArrays() call need its own instance of the geometry shader, so long as they all share the same draw buffers?</p>