Opengl es 绘制大量四边形时的一致性或顶点属性?

Opengl es 绘制大量四边形时的一致性或顶点属性?,opengl-es,fragment-shader,vbo,vao,Opengl Es,Fragment Shader,Vbo,Vao,我正在开发一个极简2D用户界面工具包,需要画很多矩形。我有一个渲染类,它使用循环绘制所有矩形,每次都为矩形属性(如填充、颜色、边框宽度、绘制颜色是否反转等)设置一致性,然后使用GL_三角形调用gldrawArray。我的片段着色器使用这些统一值。对于使用反转颜色绘制矩形,我使用glBlendFunc 每个矩形有一个VAO/VBO。显然,这是低效的,我想在我所有的矩形上使用一个VAO,用一个draw调用来绘制矩形,而不是在它们之间循环,设置统一的值,每次调用gldrawArray 我想我可以把每一

我正在开发一个极简2D用户界面工具包,需要画很多矩形。我有一个渲染类,它使用循环绘制所有矩形,每次都为矩形属性(如填充、颜色、边框宽度、绘制颜色是否反转等)设置一致性,然后使用GL_三角形调用gldrawArray。我的片段着色器使用这些统一值。对于使用反转颜色绘制矩形,我使用glBlendFunc

每个矩形有一个VAO/VBO。显然,这是低效的,我想在我所有的矩形上使用一个VAO,用一个draw调用来绘制矩形,而不是在它们之间循环,设置统一的值,每次调用gldrawArray


我想我可以把每一对三角形放在一个VBO中,或者对所有矩形使用一个VBO,但是我该如何处理制服,我应该使用顶点属性来代替,并尝试将它们传递给片段着色器,即使每个矩形的属性在顶点之间保持不变?

使用大量绘图调用对于CPU负载来说是非常糟糕的,因此您肯定希望将尽可能多的矩形批处理到单个绘图中

如果批处理到单个绘图中,则只能使用属性流的单个配置,因此该批处理中的所有矩形都需要位于同一组VBO和同一VAO布局中

听起来您不会有大量的顶点,因此将其打包到属性流中听起来很不错,但是您可以使用由实例ID索引的统一数组(每个矩形一个实例)