我正在使用OpenGL来渲染体素游戏中的块。每个块都有自己的顶点缓冲区,现有的渲染函数(简化版)如下:
foreach (Chunk c in chunks)
{
glBindBuffer(BufferID.Array, c.handle);
if (c.dirty)
{
glBufferData(BufferID.Array, ... , BufferUsage.StaticDraw);
c.dirty = false;
}
// For position, normal, colour and UV
glEnableVertexAttribArray(...);
glVertexAttribPointer(...);
glUseProgram(shader.Handle);
glDrawArrays(DrawMode.TriangleStrip, 0, c.vertexBuffer.Length);
}
上述代码可以正常运行,但是在glEnableVertexAttribArray、glVertexAttribPointer和glUseProgram函数中CPU使用率较高。
我可以在循环开始之前调用这些函数吗?还是必须在每次调用glBindBuffer之后调用它们?