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