【问题标题】:libGDX Pixmap and Texture performancelibGDX 像素图和纹理性能
【发布时间】:2014-08-04 17:30:54
【问题描述】:

我的游戏中有大量 2d 图像,有多个图层。我使用spritebatch()orthographicCamera()。我有一些关于表演的基本问题:

  1. 使用 Atlas 是不是加载图像的速度更快?
  2. 使用像素图(并在绘制前转换为纹理)还是纹理更快?
  3. 当我制作多层图像时,我应该使用Texture.draw(或Pixmap.draw 用于Pixmap),制作最终图像然后渲染它吗?还是应该渲染spritebatch.begin()spritebatch.end() 中的所有内容?
  4. 有没有办法跟踪“脏精灵”(屏幕在两帧之间变化的部分)并仅渲染该区域以提高性能?
  5. 另外,如何查看程序资源占用的内存量,如何管理? (也许这个问题有点难)

感谢您的帮助(欢迎任何其他一般性建议)

【问题讨论】:

    标签: performance libgdx textures render pixmap


    【解决方案1】:
    1. 是的,这减少了渲染时需要交换纹理的次数。这通常比使用单独的图像要快得多。

    2. 不确定你的意思,像素图应该只用于需要动态更改或作为缓存形式生成的纹理。如果可能的话,任何动态的(每秒改变多次到每帧一次)都应该使用着色器来完成。

    3. 尽可能使用 sprite 批处理,因为它可以减少绘制调用的数量。通常,仅在绝对需要或您想要将多个图层缓存在一起时才应使用像素图。缓存意味着它不会非常频繁地更改(即应该每隔几秒更改一次)。由于 Pixmap 依赖于使用 CPU,因此如果经常更改大部分内容,则会非常慢。您还需要在进行更改后更新纹理。

    4. 不,这必须由您自己完成...这很少值得付出努力,通常还有其他更简单的方法,例如减少绘制调用和剔除...但是,这是非常特定于应用程序的您需要试验一下,看看哪种方法最适合您的应用程序。

    5. VisualVM for desktop 存在许多分析和监视工具。 Android 4.0+ 具有非常好的开发工具来跟踪事物,Android 开发环境将提供有关 GC 发生时间、内存使用情况等的信息。当然,分析本身会降低应用程序的性能/行为。 Runtime.getRuntime() 还提供了一些关于正在运行的 JVM 的良好内存信息。

    一般建议:

    没有灵丹妙药,一切都是特定于应用程序的,虽然我已就一般情况提出建议并回答了您的问题,但并非一切都适用于所有情况。您将不得不对您的应用程序进行试验,以找出最适合您的方法。另外,不要过于担心性能和设计,目标是制作软件产品。如果您花太多时间担心性能,那么您将永远无法完成您开始的任何项目。我最好的建议是尝试一下并从经验中学习。你会犯错,我们都会犯错,但经验总是有助于减轻这种情况。

    【讨论】:

    • 感谢您的回答。我只想将不同的图像放在另一个上,以创建一些我将渲染为纹理的最终图像。看来我必须以 Pixmap 格式加载所有内容,创建最终图像,然后转换为纹理并渲染。不确定它是否是最佳想法。
    • 您不必将它们全部加载为像素图,您可以渲染到屏幕外缓冲区并使用 libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/… 从它们中获取纹理如果您有很多图像(例如 10+ )。
    • @Jyro117 很抱歉这个迟到的问题。你说的是Framebuffer
    • 是的,ScreenUtils 只是一种从当前屏幕的帧缓冲区中捕获的方法。
    猜你喜欢
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多