有效地绘制多个opengl元素

时间:2017-12-19 20:17:46

标签: c++ opengl 2d

我正在学习opengl并开始制作自己的2D引擎。到目前为止,我已设法使用glDrawElements()渲染由2个三角形组成的矩形,并将其应用于自定义着色器。

这是我的代码到目前为止的样子:

#include <all>

int main() {
    Window window("OpenGL", 800, 600);
    Shader shader1("./file.shader");

    float vt[8] = {-0.5f, -0.5f,    0.5f, -0.5f,     0.5f, 0.5f,    -0.5f, 0.5f };
    const GLuint indices[6] = { 0, 1, 2, 2, 3, 0 };

    GLuint vao, vbo, ebo;
    glGenVertexArrays(1, &vao);
    glBindVertexArray(vao);

    glGenBuffers(1, &vbo);
    glBindBuffer(GL_ARRAY_BUFFER, vbo);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vt), vertices, GL_STATIC_DRAW);

    glEnableVertexAttribArray(0);
    glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);

    glGenBuffers(1, &ebo);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);


    while(window.isOpen()) {
        window.clear(0.0, 0.5, 1.0);

        shader1.use();
        glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, NULL);

        window.update();
    }

    /* glDeleteStuffs */
}

有多种方法可以做到,但我听说逐个绘制和切换着色器非常昂贵。我希望在一个缓冲区中预加载所有数据,顶点,着色器或更高效,并且当它准备就绪时开始在一次调用中绘制它们,类似于批处理。谢谢!

0 个答案:

没有答案