Есть сильное чувство, что я чего-то не понимаю.
Методы обновления и рисования GLSurfaceView, вызываются в своём потоке. В другом потоке я меняю игровой мир с дофига большим состоянием (ибо стратегия).
На данный момент мне в голову приходит такой способ:
в потоке логики изменять состояние мира
synchronized(world){
//do something, причём может быть долгой операцией
}
вызывать рисование
view.queueEvent(new Runnable() {
public void run() {
view.requestRender();
}});
return true;
и реализация рисования:
public void onDrawFrame(GL10 gl10) {
...
synchronized(world){
//рисование
}
}
Обновление мира и вызовы рисования скорее всего будут идти вперемежку.
Мне кажется, что если я вызову рисование, а потом сразу начну менять мир какой-нибудь долгой операцией (порядка секунды), то метод onDrawFrame, может быть вызван чуть позже, чем я начну снова менять мир - получится, что рисования изменений не произошло (вернее, оно завершится, но в лучшем случае через секунду), а так нехорошо.
Проще говоря, мне нужно заблокироваться до того момента, как экран будет обновлён, и только после возобновить поток с игровой логикой.
Как это по-человечески без велосипедов сделать?