绘制调用之间的glBufferData同步

时间:2014-09-01 22:48:01

标签: c++ ios opengl-es

我发现自己在使用openGl es时遇到了麻烦,特别是用我的数据提供VBO。 以下是导致问题的代码:

void Renderer::DrawCurrentData()
{
    glBufferData(GL_ARRAY_BUFFER, (currentVertexIndex) * sizeof(Vertex), vertices, GL_STREAM_DRAW);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, (currentIndexIndex) * sizeof(GLushort), indices, GL_STREAM_DRAW);

    glDrawElements(GL_TRIANGLE_STRIP, currentIndexIndex, GL_UNSIGNED_SHORT, 0);

    currentVertexIndex = 0;
    currentIndexIndex = 0;
    bufVertex = &vertices[currentVertexIndex];
}

它工作正常,直到每帧只有一次绘制调用,因此在调用glBufferData之前,每帧的每个缓冲区只调用glDrawElements一次。glBufferData。但是如果我想每帧进行几次绘制调用,比如

  1. frame begin
  2. glDrawElements
  3. glBufferData
  4. ..重复步骤2,3
  5. presentRenderbuffer
  6. 然后我在glBufferData崩溃了。这可能是因为当我尝试用新数据提供缓冲区时,缓冲区仍被上一次绘制调用锁定。我知道我应该在这里使用同步,但我不确定如何以正确的方式做到这一点。 在提供新数据之前,我尝试使用带有NULL数据指针的GL_STREAM_DRAW孤立缓冲区,但它没有帮助。在这种情况下,我遇到了渲染帧缓冲区的崩溃。问题是如何在旧数据仍在使用的情况下使用新数据管理缓冲区进纸? 我尝试使用GL_DYNAMIC_DRAW和{{1}}都显示了相同的结果。

0 个答案:

没有答案