猿问

OpenGL渲染功能顺序

我正在使用OpenGL渲染Voxel游戏中的块块。每个块都有其自己的顶点缓冲区,现有的渲染函数(已简化)如下:


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之后调用它们?


神不在的星期二
浏览 172回答 1
1回答
随时随地看视频慕课网APP
我要回答