【问题标题】:uniforms or vertex attributes when drawing lots of quads?绘制大量四边形时的制服或顶点属性?
【发布时间】:2021-07-22 01:44:05
【问题描述】:

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

每个矩形都有一个 VAO/VBO。显然这是低效的,我想在我的所有矩形中使用一个 VAO,并使用单个绘图调用绘制矩形,而不是循环遍历它们并设置统一值并每次调用 glDrawArrays。

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

【问题讨论】:

    标签: opengl-es fragment-shader vbo vao


    【解决方案1】:

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

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

    听起来你不会有大量的顶点,所以将它打包到属性流中听起来和任何东西一样好,但你可以使用由实例 ID 索引的统一数组(每个矩形一个实例) .

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 2020-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多