gpt4 book ai didi

android - libgdx - glClear 花费太多时间

转载 作者:行者123 更新时间:2023-12-02 10:23:10 25 4
gpt4 key购买 nike

方法Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);花费了太多时间,大约15ms

这是代码示例:

long now = System.currentTimeMillis();

Gdx.gl.glClearColor(0.1f, 0.1f, 0.1f, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);


long end = System.currentTimeMillis() - now;//this is almost always > 15 ms
System.out.println("render time total: " + end);

这是在我的 Android 设备 (nexus 5) 上,在我的电脑上为 2-3 毫秒

最佳答案

这符合预期。您测量的是帧速率,而不是 glClear() 的执行时间。

要了解此处发生的情况,您需要了解 GPU 与 CPU 代码异步运行。例如,当您调用 glClear() 时,您正在提交一条命令,告诉 GPU 清除帧缓冲区。描述其工作原理的最简单方法是将命令添加到队列中,该队列稍后由 GPU 处理。

一个后果是,当 glClear() 调用返回时,帧缓冲区通常不会被清除。因此,测量调用所花费的时间大部分与实际清除帧缓冲区所需的时间无关。

那么你在测量什么?基本上就是帧率。 Android 不允许您生成比屏幕刷新率更快的帧,屏幕刷新率通常为 60 Hz 或稍高。在 60 Hz 频率下,显示屏每 16.667 毫秒显示一个新帧,这几乎正是您测量的时间。

您的渲染需要进行节流以匹配显示刷新率,否则您将以更高的速率生成帧,并且会排队越来越多的工作。限制可能发生在任何地方,但当足够的工作已经排队时,在新帧开始时阻止应用程序是相当常见的。

我相信大多数 Android 系统都使用三重缓冲。这意味着,如果两个未显示的帧已经排队等待显示,并且您开始渲染另一帧,则您将被阻塞,直到下一次屏幕刷新时显示两个待处理帧之一。

这实际上是非常理想的行为。根据系统和设置,某些 PC 类型设备的渲染速度可能快于屏幕刷新率。结果是您渲染的帧永远不会显示在显示屏上,并且只是被丢弃。如果你仔细想想,这完全是一种浪费。特别是在电池供电和/或热量受限的设备上,您不想做任何不必要的工作。限制渲染以匹配屏幕刷新率是完全有意义的。

关于android - libgdx - glClear 花费太多时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32538798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com