- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
方法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/
Apple's Technical Q&A on addressing flickering (QA1650)包括以下段落。 (强调我的。) 您必须为屏幕上的每个像素提供一种颜色。在绘图代码开始时,最
我在 iPhone openGL ES 项目中使用多重采样。仅使用 glClear 命令即可使渲染器利用率上升至近 42%。这是应该的方式还是我做错了什么?我使用 iPod Touch 第 4 代进行
出于某种原因,我正在尝试创建一个旋转的立方体 bur,我在 OpenGL 中清除屏幕时遇到了问题。我将 OpenGL 与 SDL2 一起使用来创建窗口并将内容渲染到窗口,但我不确定为什么它不起作用。
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我看到了不同的意见。 目前,我只关心颜色数据。 在 Chapter 28. Graphics Pipeline Performance , 它说: Avoid extraneous color-buf
每次打电话后glClear(GL_COLOR_BUFFER_BIT); ,我收到 OpenGL 错误“无效的帧缓冲区操作”。 通话似乎工作得很好,似乎没有任何问题。我打电话glClear(GL_COL
方法Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);花费了太多时间,大约15ms 这是代码示例: long now = System.currentTimeMilli
我被难住了。我在已配置为 openGL 小部件的 QT 4.6 应用程序的主窗口内有一个小部件。它画得很好,除了我无法清除帧之间的背景。当他的窗口打开时我得到一个黑色背景并且之后它永远不会清除,所以随
假设在下面的代码之前绘制了一些东西,下面的代码应该做什么? glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE); glClearColor(0.0,
这是我编写的一个简单的 opengl 程序。我试图在绘制三角形之前清除屏幕。我在我的 init() 函数中调用了 glClear(),但是,它似乎无法清除屏幕。 #include #include
在使用Opengl绘制场景图时,我看到总是有一个glClear(GL_DEPTH_BUFFER_BIT),这是做什么用的? 最佳答案 它清除深度缓冲区。深度缓冲区是帧缓冲区的一部分,它使图元被前面的其
在 Khronos OpenGL 2.1 Specs 中,他们说 glStencilMask 应该影响 glClear 的操作,但是,在我的机器上,这似乎不是真的。 我目前得到的输出是: Stenci
我有一个简单的 GLKViewController ,我将屏幕设置为白色: - (void)viewDidLoad { [super viewDidLoad]; self.contex
我正在尝试学习 OpenGL。我将 Clion 用作 IDE,它使用 CMakeLists.txt 文件来组织/编译项目。 由于某种原因,编译器找不到 glClear: Undefined symbo
我想深入了解 glClear 函数。我理解它的一般解释 -> 清除颜色、深度、模板和累积的缓冲区,但我还有其他问题。我的 friend 假设你清除了内存中代表颜色、深度、模板和累积的位(堆栈?)。通过
我最近从 https://github.com/fogleman/Craft 下载了 fogleman 出色的“Minecraft in 500 lines”演示.我使用了 2to3 工具并手动更正了
我想删除 glClear,这样我就可以为一个对象设置动画,当它在屏幕上移动时,它会显示动画图像,而如果我包含 glClear,则不会显示该图像。它在模拟器上可以运行,但是当我把它放在手机上时,它就可以
问题 当 QPainter 在 glClear 之后创建时,后者无效。 描述 我使用 Qt 5.7.1。我在 Linux 上使用 gcc 和在 Windows 上使用 vc++ 得到相同的结果。 我在
我的应用程序的填充率约为 30fps。我知道 GLES20.glClear() 用于清除每次绘制的屏幕。如果我评论它,我得到大约 60fps 的 fps。但是输出并不像预期的那样。我有一个内容要在每一
我正在 http://LearnOpenGL.com 学习这些 OpenGL 教程我遇到了这个函数glClear(here 在渲染标题)。因为我还在学习英语,所以我在这个功能中遇到了“清晰”世界的麻烦
我是一名优秀的程序员,十分优秀!