我发现自己在使用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
。但是如果我想每帧进行几次绘制调用,比如
glDrawElements
glBufferData
然后我在glBufferData
崩溃了。这可能是因为当我尝试用新数据提供缓冲区时,缓冲区仍被上一次绘制调用锁定。我知道我应该在这里使用同步,但我不确定如何以正确的方式做到这一点。
在提供新数据之前,我尝试使用带有NULL
数据指针的GL_STREAM_DRAW
孤立缓冲区,但它没有帮助。在这种情况下,我遇到了渲染帧缓冲区的崩溃。问题是如何在旧数据仍在使用的情况下使用新数据管理缓冲区进纸?
我尝试使用GL_DYNAMIC_DRAW
和{{1}}都显示了相同的结果。