OpenGL-ES вызывает onDrawFrame вручную - PullRequest
2 голосов
/ 14 сентября 2011

Я создаю игровой цикл, и мне нужно иметь возможность вызывать onDrawFrame (изнутри средства рендеринга вручную), чтобы «пропустить кадры», если я обнаружил, что отстаю в процессах.

В настоящее время у меня есть класс GLSurfaceView, который вызывает

setRenderer(glSurfaceRenderer);

С этой настройкой я понимаю, что onDrawFrame вызывается каждый тик.

Я попытался поместить вышеупомянутый вызов вметод, чтобы я мог вызвать его из моего игрового цикла, но при втором запуске игрового цикла у меня вылетает сообщение:

setRenderer has already been called for this instance

Есть ли способ вызывать визуализатор вручную каждый кадр

Будет ли просто вызов метода

onDrawFrame

работать правильно.Или не рекомендуется управлять рендерером таким образом при использовании openGL

1 Ответ

4 голосов
/ 15 сентября 2011

Я не вижу, как вызов setRenderer() и вызов вручную onDrawFrame() в игровом цикле решат что-нибудь.Вы должны реорганизовать ваши вызовы рендеринга, чтобы учесть время, затрачиваемое на рисование, другими словами, анимация на основе времени.В любом случае вызов вручную onDrawFrame() без вызова eglMakeCurrent() до того, как какие-либо вызовы рисования не будут работать, поскольку у вас есть как рендерер, так и рисование потоков игрового цикла.

Редактировать: поскольку вы используете GLSurfaceView,Вы можете вызвать requestRender() из вашего игрового цикла, чтобы запустить рендер, если вы чувствуете, что RENDERMODE_CONTINUOUSLY слишком медленный для вас.

...