2014-01-07 7 views
0

iOS 앱이 오픈 글로스보기에서 2D 커브를 그립니다. 장면은 매우 비쌉니다 (최대 1 ~ 2 초 소요될 수 있음). AFAIK는 크기 변경, 다시 그리기 및 크기 변경을 위해 다시 렌더링 할 수 없음을 의미합니다 (꼬집음/줌). 나는 현재 화면에 렌더링되는 버퍼에 직접 드로잉한다.여러 해상도에서 OpenGL ES 2.0 확대/축소

줌을 얻을 수있는 방법 중 하나는 주어진 해상도의 텍스처로 렌더링 한 다음 해당 텍스처의 일부로 (잠재적으로 다른 비율로 변환하여) 렌더링하는 것입니다. 내 추측으로는 현재 사용중인 메모리를 두 배로 늘릴 것입니다 (물론 텍스처를 화면과 동일한 해상도로 유지하는 경우). 누군가 그것을 확인할 수 있습니까? 그래픽 메모리 사용량을 두 배로 늘리지 않고 다시 그리기없이 확대/축소를 할 수있는 또 다른 방법이 있습니까?

이제 품위있는 품질을 유지하려면 다른 해상도로 다시 렌더링해야합니다. 나의 초기 생각은 "수동으로"밉맵을 만드는 것입니다. 2 단계 (100-150 % 확대시 텍스처 1 개, 150-200 % 확대시 다른 텍스처). 이번에는 1 개의 버퍼 + 2 개의 텍스처가 있습니다. 당연히 패닝을 다시 수행 할 수는 있지만 사용자 경험이 좋을 것이라고는 생각하지 않습니다. 사용자 경험 및/또는 메모리 관점에서이를 향상시킬 수있는 방법에 대한 의견이 있으십니까?

답변

1

이미 씬을 그리는 데 오래 걸리므로 타일링을 만들 것을 제안합니다. 로드 타임에 다른 해상도로 장면을 그려 출력을 일부 이미지에 저장할 수 있습니다 (이미지 파일을 일부 임시 디렉토리에 저장). 이 접근 방식을 사용하면 최소한의 메모리 소비가 있어야하며 사용자 경험이 우수해야합니다.

이미지보기, 스크롤보기에 큰 이미지를 표시하는 몇 가지 아주 좋은 방법이 있으므로 OpenGL을 사용하여 장면을 표시하려는 경우에도 고려해야합니다. 이 방법을 사용하면 실제로 모든 GL - UIView 바인딩을 건너 뛰고 표시 할 수 있습니다. 모든 GL 작업을 별도의 스레드로 옮길 수 있습니다. 즉, 장면을 변경해야하는 경우 백그라운드에서 수행 할 수 있으므로 사용자가 현재 장면에서 중단없이 작업 할 수 있습니다. 또한 사용자가 장면간에 "스와핑 (swapping)"을 원할 경우 성능을 유지하지 않고 저장된 상태로 유지하고 재사용 할 수 있습니다.

+0

내 시나리오에서는 타일링을 사용할 수 없으며 (게다가 장면은 동적입니다.) 대답 주셔서 감사합니다 – user1727274

+0

참고로, 나는 완벽하게 기능 OpenGL 코드가 있습니다. 필자의 경우 UIView를 사용하는 것은 의미가 없습니다. 또한 2 차 스레드에서 정확한 프레임 속도로 렌더링 할 때도 편리하지 않습니다. – user1727274

+0

렌더링에 1-2 초가 걸리면 장면을 다시 그리면서 사용자 환경을 개선 할 수 없습니다. 여러 수준의 드로잉을 사용하면 메모리가 2 배 이상 증가합니다 (150 % 확대는 225 %의 메모리 증가로 인해 325 %가됩니다). 메모리 소비를 줄이고 모든 데이터를 보유하는 유일한 방법은 파일을 일부 파일에 저장하는 것입니다. 일단 당신이 당신이 "완전한 기능을 갖춘 OpenGL 코드"를 사용할 수있는 로컬 디스크를 가지고 있다면, 고려해야 할 부분 일뿐입니다. 긴 단편 짧은 : 게시 한 모든 요구에 맞는 상황을 해결할 다른 방법은 없습니다. –