Быстрое мерцание экрана при НЕ рисовании на Android OpenGL
Я хотел сэкономить время автономной работы. Мое приложение нужно рисовать только иногда. Поэтому я добавил этот код в мой Renderer в методе onDraw:
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