【问题标题】:General rendering and performance questions (OpenGL)一般渲染和性能问题(OpenGL)
【发布时间】:2015-07-18 05:43:09
【问题描述】:

我正在使用 LibGDX,我需要一些一般优化问题的答案:

  1. 如果我绘制一个对视口/相机仅部分可见的精灵,它是否具有与绘制它对视口完全可见相同的性能影响?
  2. 如果我在活动视口的边界之外绘制一个精灵,它是否会影响性能与根本不绘制精灵相同或类似于在视口内绘制它?换句话说:离屏精灵有什么样的性能影响?
  3. 在屏幕上绘制大 TextureAtlas (2048x2048) 的小区域(例如 32x32)时,它是否具有与绘制小的 32x32 单一纹理类似的性能影响?我知道大纹理会影响内存使用,但是在仅渲染小区域时它们会影响实时渲染性能吗?
  4. 如果我在渲染大精灵时旋转它,会影响性能吗?
  5. 如果我在屏幕上绘制一个 4096x4096 的纹理,但将其缩小以使其在屏幕上看起来像 10x10,它是否具有与渲染全尺寸相同的性能?即屏幕上纹理的表观大小会影响渲染性能吗?

【问题讨论】:

标签: android optimization opengl-es libgdx rendering


【解决方案1】:
  1. 没有。
  2. 它比在视口内绘制它更持久,但仍然不如完全不绘制它。
  3. 较大的图像需要更多时间来准备渲染。实际渲染将与 fast 相同。
  4. 是的。
  5. 没有。

【讨论】:

  • 又短又甜——很好。
  • 你能澄清一下3吗?它似乎自相矛盾。
  • 啊,好的。所以每次绑定纹理时,较大的纹理需要更长的时间?有道理。
【解决方案2】:

在谈论性能时,影响取决于您的瓶颈是什么。绘制一个精灵会使用一些 CPU 和一点点 GPU,无论屏幕上有多少(如果有的话)。一般来说,屏幕上实际显示的精灵像素越多,它使用的 GPU 就越多。

  1. 在CPU方面,没有区别,但是对于GPU,精灵画的像素越少越好。

  2. 屏幕外精灵对 CPU 有影响,对 GPU 影响较小。如果你有很多离屏精灵,你可能需要避免绘制它们,但你应该分组检查它们而不是一个一个地检查它们,否则你可能会花费更多的 CPU 来检查它们而不是绘制它们所需的时间屏幕。

  3. 绘制大纹理的小区域与绘制小纹理具有相同的性能影响。但是第一个选项允许您将许多不同的图像批量处理到一个绘图调用中,这是一个很大的节省。

  4. 一些,因为您将在每一帧上重新计算其顶点。

  5. 将其绘制得更小意味着您绘制的像素更少,因此速度更快。

【讨论】:

    【解决方案3】:
    1. 没有。顶点处理将相同,但视口之外的片段将被剪裁,减少片段处理。

    2. 这只是问题1的一个极端情况。现在没有片段处理,但仍然是所有顶点处理。根据您的顶点处理的便宜/昂贵程度,这可能是非常可变的。这当然不仅仅是不画画。另一方面,如果您在应用中添加大量逻辑来避免绘制精灵,则增加的开销可能会比不渲染它节省的更多。

    3. 加载纹理后,渲染本身应该非常相似。但是当然加载纹理会更加昂贵。这不仅适用于您为加载纹理数据而进行的 OpenGL 调用,还适用于在渲染之前将其映射到 GPU 地址空间的开销,以及其他相关的内存管理开销。

    4. 也许吧。但可能不多。 GPU 使用针对本地访问进行了优化的内存布局,不太依赖于访问模式的方向。

    5. 以 10x10 渲染当然要便宜得多,因为片段和相应的采样操作要少得多。但它仍然比使用 10x10 纹理渲染要昂贵得多,因为访问的本地化程度要低得多,因此会有更多的缓存未命中。为避免这种情况,请使用 mipmapping,如果您渲染按比例缩小的大纹理,它将为您提供较小纹理的大部分性能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-09
      • 2013-06-06
      • 2014-06-26
      • 2021-12-04
      • 2011-11-24
      • 2013-09-26
      相关资源
      最近更新 更多