лучший способ остановить ondraw () opengl на время - PullRequest
2 голосов
/ 29 ноября 2010

Я использую opengl для рисования значений из массива.Значения взяты из 3 сенсоров Android.Я хочу включить рендер во время сбора значений.Похоже, что рисование и сбор данных имеют разные результаты, поэтому я хочу отключить рендеринг во время сбора значений сенсоров.На данный момент я использую логическое значение в ondraw (), чтобы остановить рисование.Но есть ли лучший способ сделать это?Когда я прекращаю рисовать, случаются странные вещи, например, то, что я рисую, немного дрожит, но этого не может быть, потому что нет рисования (ondraw () {if (boolean) {.........}}

Большое спасибо за вашу помощь: -)

Ответы [ 2 ]

5 голосов
/ 30 ноября 2010

Вы можете попросить GLSurfaceView рисовать только по запросу через setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY), затем позвоните requestRender(), когда будете готовы к рисованию.

1 голос
/ 30 ноября 2010

У меня есть предложение: создать поток для сбора данных датчика и сделать его доступным как объект.Этот поток будет собирать все данные и синхронизироваться с объектом общего значения.Время блокировки будет сведено к минимуму.

collectLocalData = getData();
synchronized(pubData) {
  pubData.set(collectLocalData);
}

Ваш поток рендеринга может затем сделать то же самое при копировании общих значений для локального потребления.

synchronized(pubData) {
  renderLocalData.set( pubData );
}

renderData( renderLocalData );

Если опрос датчиков занимает больше времени, чем время рендерингаодни и те же данные будут отображаться более одного раза.Анимация может быть немного нервной, но не более, чем то, что представляют данные.

PS: ваши дрожания могут быть результатом самих данных, а не вашего кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...