如何在C ++中使2D高效的OpenGL渲染?

我正在使用OpenGL在C ++中开发一个小项目。 我希望能够尽可能高效地渲染多个2D矩形,无论是以某种颜色还是纹理渲染。

但是,我正在做这个现代的C ++,所以我正在写OpenGL API的许多包装,所以我有更好的逻辑结构,RAII,…

本着这种精神,我想创建一个类Rectangle,它将有一个draw()方法,并且这个方法将激活相应的OpenGL上下文并调用glDrawArrays()。 这工作正常,但后来我意识到,如果我想呈现更多的矩形,我将不得不周期通过许多实例。 他们每个人都会切换上下文,我不认为这是一个有效的解决scheme。

经过一番思考,我的解决scheme是创建一个Renderer对象,它将为所有的Rectangle,关联的程序和巨大的缓冲区保存一个VAO,在这个缓冲区中我将保存所有对象的坐标(Rectangle实例会像一个更聪明的指针到这个缓冲区),然后一次画出它们。 当然这会增加我很多的工作来管理缓冲区本身(添加/删除矩形)。 会更好吗?