美文网首页LibGDX
LibGDX图形模块之剖析

LibGDX图形模块之剖析

作者: 天神Deity | 来源:发表于2017-09-11 22:33 被阅读10次

本文介绍的实用工具可能会派上用场,以防遇到性能问题,并需要开始分析你的游戏。

FPSLogger

FPSLogge是一个简单的帮助类,用于记录每秒刷新的帧数。 只需在渲染方法中调用log()方法即可。记录每秒输出一次。

PerformanceCounter性能计数器

PerformanceCounter跟踪特定任务所需的时间和负载(总时间的百分比),在启动任务之前调用start(),然后结束时调用stop()方法.如果需要,您可以多次执行此操作,每个渲染或更新调用tick()来更新值,FloatCounter可以访问该任务所需的最小时间,最大时间,平均时间,总时间和当前时间。 还有负载值,也就是总时间的百分比。

OpenGL

剖析

分析您的游戏运行时发生的实际OpenGL调用通常不是很容易,因为libGDX尝试抽象所有这些低级别的东西。 为了能够收集这些信息,可以使用GLProfiler类。
要启用它,你必须调用静态方法GLProfiler.enable()。 在幕后,这将替换原来的GL20和GL30实例(Gdx.gl等)的剖析器。

现在开始监控实际的GL调用.您可能感兴趣的一个信息是发生的纹理绑定的数量,当然这代价也很昂贵,可能会减慢您的游戏。 要优化这个您可能会开始使用TextureAtlas。要获取纹理绑定数量,您可以从分析器读取静态字段GLProfiler.textureBindings。

您也可以执行类似于剔除操作来仅渲染在屏幕上可见的那些东西。 静态字段GLProfiler.drawCalls将显示这些优化的结果。
目前,Profiler提供以下信息:

  1. OpenGL总数量
  2. draw调用次数
  3. 纹理绑定量
  4. 着色器开关量
  5. 已使用顶点的数量

GLProfiler.vertexCount实际上是一个FloatCounter。 除了GLProfiler.vertexCount.total,它还有更多的信息,如GLProfiler.vertexCount.min,GLProfiler.vertexCount.max或GLProfiler.vertexCount.average。

一旦您读取并显示它们(可能每帧一次),为了重置所有这些数字,您必须调用GLProfiler.reset()方法。 要完全禁用性能分析并使用原始GL20和GL30实例替换Profiler,请使用GLProfiler.disable()。

请注意,如果您使用Gdx.graphics.getGL20()或Gdx.graphics.getGL30(),您将绕过性能分析器,这就是您应该直接使用Gdx.gl20或Gdx.gl30的原因.

如果你想了解更多Profiling的使用方法,可以参考Benchmark3DTest

错误检查(自1.6.5起)

GLProfiler有一个更有用的功能,那就是错误检查。
几乎所有GL调用在某些情况下都会产生错误。这些错误不会像Java错误那样抛出或记录下来,但是必须明确地检查这些错误(Gdx.gl.getError()),因此可能很难找到。启用GLProfiler(见上文关于如何启用)将在每次GL调用后自动检查GL错误并进行报告.

默认情况下,遇到的错误将打印到控制台(使用Gdx.app.error)。 但是,可以通过在GLProfiler.listener中设置不同的错误侦听器来定制(例如,用于自己的日志记录/崩溃报告系统)。

如果您想知道代码中发生错误的位置,您可能需要使用GLErrorListener.THROWING_LISTENER,它会显示堆栈跟踪并显示出错的位置

附上测试例子 GLProfilerErrorTest

apitrace
apitrace is an open source cross platform debugger and profiler for OpenGL. You run the tracer to record the state and each call (including contents of buffers). You then run the viewing tool will read the trace and playback any state at any point in time. It breaks down the cpu/gpu time, every single OpenGL call. You can see the contents of the framebuffer and each texture bound at any point you choose.
Running: For linux, do: apitrace trace java -cp /home/me/my-app/desktop/build/libs/*.jar -Dorg.lwjgl.opengl.libname=/usr/lib/apitrace/wrappers/glxtrace.so com.my.app.desktop.DesktopLauncher
Then just exit your app (if you want), run qapitrace
and open that trace file.

相关文章

  • LibGDX图形模块之剖析

    本文介绍的实用工具可能会派上用场,以防遇到性能问题,并需要开始分析你的游戏。 FPSLogger FPSLogge...

  • LibGDX图形模块之Ninepatches

    本文介绍了NinePatch图像,如何创建它们以及如何在Libgdx上下文中使用它们。 在你开始之前 本指南适用于...

  • LibGDX图形模块之清屏

    要清除Libgdx中的屏幕与在常规OpenGL应用程序中清除屏幕是不同的。 唯一的区别在于如何访问OpenGL上下...

  • LibGDX图形模块之网格

    网格是一组顶点(和可选的索引)的组合,它们描述了用于渲染的几何图形。 顶点以顶点缓冲对象(VBOs)的形式保存在V...

  • LibGDX图形模块之截屏

    使用以下代码可以截屏:

  • LibGDX图形模块之视口

    当处理不同的屏幕时,通常需要决定采取何种策略来处理不同屏幕尺寸和宽高比.Camera 和Stage 支持不同的视口...

  • LibGDX图形模块之位图字体

    LibGdx使用位图文件(png)来渲染字体。 字体中的每个字形都具有相应的纹理区域。BitmapFont cla...

  • LibGDX图形模块开篇

    此页面需要重写。 介绍 图形模块提供有关当前设备显示和应用程序窗口的信息,以及有关当前OpenGL上下文的信息和访...

  • LibGDX图形模块之正交相机

    本页介绍了OrthographicCamera类和用法。 正交相机仅在2D环境中使用,因为它实现了平行(正投影)投...

  • LibGDX图形模块之着色器

    如果你想使用OpenGL ES 2.0,你应该知道一些着色器的基础知识。 Libgdx附带了一个标准着色器,它将通...

网友评论

    本文标题:LibGDX图形模块之剖析

    本文链接:https://www.haomeiwen.com/subject/ppfqsxtx.html