У меня проблемы с плавной прокруткой в OpenGL (тестирование на SGS2 и ACE)
Я создал простые приложения - только фиксированную скорость горизонтальной прокрутки изображений или только одно изображение (плеер), движущееся по ускорителю,
но это движение не гладко:-(
Я пробовал много разных кодов, но не удовлетворен...
сначала я пробовал работать с GLSurfaceView.RENDERMODE_CONTINUOUSLY, и я поместил весь код в onDrawFrame:
public void onDrawFrame(GL10 gl)
{
updateGame(gl, 0.017f);
drawGame(gl);
}
это самый простой и абсолютно гладкий! - но это зависит от скорости аппаратного обеспечения (= бесполезно)
public void onDrawFrame(GL10 gl)
{
frameTime = SystemClock.elapsedRealtime();
elapsedTime = (frameTime - lastTime) / 1000;
updateGame(gl, elapsedTime);
drawGame(gl);
lastTime = frameTime;
}
это лучший из всех, но это не так гладко, как предыдущий, иногда щелкнуть
второй я попробовал GLSurfaceView.RENDERMODE_WHEN_DIRTY, в onDrawFrame у меня есть только чертежные объекты и этот код в отдельном потоке:
while (true)
{
updateGame(renderer, 0.017f);
mGLSurfaceView.requestRender();
next_game_tick += SKIP_TICKS;
sleep_time = next_game_tick - System.currentTimeMillis();
if (sleep_time >= 0)
{
try
{
Thread.sleep(sleep_time);
}
catch (Exception e) {}
}
else
{
Log.d("running behind: ", String.valueOf(sleep_time));
}
}
это негласно, и это не проблема с "бегом за"
Моя цель - плавное движение изображения, как в первом примере кода выше.
Возможная ошибка в другом месте, я смотрю. Пожалуйста, может кто-нибудь помочь мне с этим?
Лучше использовать RENDERMODE_WHEN_DIRTY или RENDERMODE_CONTINUOUSLY?
Спасибо.