2014-05-09 5 views
0

OpenGL 통합에 문제가 있습니다. 요구 사항은 맵 상단에 복잡한 UI 구성 요소를 표시하는 것입니다 (OpenGL 엔진에서 렌더링 됨). 그리고이 지도가 움직이는 동안 UI 구성 요소는 특정 지점에 고정되어야합니다.GLSurfaceView의 UI 구성 요소 렌더링

하나의 직접적인 해결책은 OpenGL Engine을 사용하여 복잡한 UI 구성 요소를 렌더링하는 것입니다. 그러나 레이아웃/렌더링 및 이벤트 처리에는 많은 노력이 필요합니다.

또 다른 방법은 OenpGL 맵 위에 오버레이 UI 구성 요소를 배치하고지도가 패닝하는 동안 움직 이도록하는 것입니다. 아시다시피 GLSurfaceView의 경우 UI 구성 요소가 기본 UI 스레드에서 렌더링되는 동안 별도의 스레드에서 렌더링이 수행됩니다. 기능적으로 작동하도록 할 수 있습니다. 그러나 실제로는 두 개의 스레드에서 실행 중이므로 패닝하는 동안 UI 구성 요소와 맵간에 약간의 차이가있을 수 있습니다.

이 문제를 극복하기위한 아이디어가 있습니까? 내가 생각하고

두 방향은 다음과 같습니다

  1. 있는 방법이 UI 스레드에서 OpenGL을지도를 렌더링?
  2. GL 스레드에서 일반적인 UI 구성 요소를 렌더링하는 방법.

답변

1

1의 경우, 아마도 그렇지 않습니다.

2의 경우 ui-thread 외부의 ui 구성 요소를 만질 수 없습니다.

문제는 Vsync-Mouse 지연 문제와 매우 비슷합니다. 그리고 그것에 관한 나의 제한된 지식만큼, 그들은 마우스의 마지막 N 위치를 유지하고 N + 1 번째를 외삽 법에 의해 예측함으로써 그 문제를 해결합니다 (완전히 풀지는 않지만 ...). 이런 식으로 구현할 수 있습니다.

또한 멀티 스레드 렌더링 작업을 살펴 ​​보시기 바랍니다. 말 그대로 이것은 당신이하려는 일입니다.

+0

감사합니다. 이것은 내가 결코 생각할 수없는 생각입니다. 이론적으로 OpenGL 엔진과 동일한 관성 알고리즘을 사용할 수 있습니다. 그것이 얼마나 힘든지 보자. – duanbo1983

+0

Vsync-Mouse lag 문제로 인해 시각적 커서 위치를 언급하고 있습니까? 이는 일반적으로 "하드웨어 커서"를 사용하여 해결됩니다. 하드웨어 커서는 특별한 하드웨어/드라이버 기능으로, 커서 위치를 받아들이며, * VBLK 인터럽트 당 한 번씩 뭔가를 디스플레이로 푸시 할 때마다 * 해당 위치에 커서를 겹쳐 씁니다. –

+0

예, 커서 위치를 나타냅니다. 실제로 하드웨어 커서는 솔루션 중 하나이지만 여전히 부드럽지는 않습니다. VSync가 활성화되면 1 밀리 초 내에 렌더 완료가 완료되고 16 밀리 초마다 VSync가 시작됩니다. 이제 렌더링 된 프레임과 사용자가 보는 프레임 사이에 15 밀리 초의 간격이 있습니다. 커서 위치를 조작하여 하드웨어 커서에 대해서도 외삽 법을 사용하는 게임 엔진이 있습니다. 하지만 당신도 맞습니다, 나는 하드웨어 커서에 대해 생각하지 않았습니다. – Onur