【发布时间】:2015-03-08 23:23:04
【问题描述】:
我想节省电池续航时间。我的应用程序有时只需要绘制。 所以我在 onDraw 方法中将这段代码添加到我的 Renderer 中:
boolean dirty = true;
public void onDrawFrame(GL10 arg0) {
if (!dirty) return;
dirty = false;
..... draw images ....
}
所以我的应用只有在我需要的时候才会被绘制。但是发生的情况是,如果我不在每一帧上绘制我的应用程序,它会非常快地闪烁。看起来它将每 2. 帧左右绘制一次,而在所有其他帧中只会绘制一个黑屏。
我知道我可以将渲染模式设置为RENDERMODE_WHEN_DIRTY。但我不想创建另一个线程来检查它是否脏。
我的问题是它为什么会闪烁?在进行检查之前,我不会调用任何方法或 GLES20 调用:if (!dirty) return;,我确信boolean dirty 不会改变并且除了第一帧之外总是错误的。
编辑:
我将代码更改为:
int dirty = 0;
public void onDrawFrame(GL10 arg0) {
if (dirty > 1) return;
dirty++;
..... draw images ....
}
这会停止闪烁!看起来你必须至少画 2 次,这样你就不会让这个奇怪的屏幕闪烁。无论如何,我现在将尝试使用更干净的方式并创建一个调用 requestRender() 的线程,当我想绘制一些东西并将我的渲染模式设置为 RENDERMODE_WHEN_DIRTY
【问题讨论】:
标签: android opengl-es screen opengl-es-2.0 flicker