2010-06-02 3 views
3

저는 아이폰 OS에서 OpenGL 객체 모델을 머리에 쓰려고합니다. 현재 화면에 다른 UIView (빌드 CAEAGLayer s)로 렌더링 중입니다. 나는 현재 이들 각각을 별도의 EAGLContext을 사용하고 있는데, 각각은 컬러 렌더 버퍼와 프레임 버퍼를 가지고있다.EAGLContext, EAGLSharegroups, RenderBuffers, FrameBuffers, 오 세상에!

저는 비슷한 것들을 렌더링하고 있습니다. 메모리 오버 헤드를 줄이기 위해 이러한 인스턴스간에 텍스처를 공유하고 싶습니다.

나의 현재의 이해는 동일한 설정 (FBO/RBO가있는 몇 가지 컨텍스트)을 사용할 수 있지만, 첫 번째 것의 EAGLShareGroup을 사용하여 나중의 것들을 생성하면 텍스처 이름들 (GLuints)은 후자의 첫 글자들과 같습니다. 정확합니까?

"sharegroup"이되면 어떤 이점이 있습니까? 방금 동일한 컨텍스트를 재사용하고 해당 컨텍스트에 여러 FBO/RBO를 첨부 할 수 있습니까? 나는 "객체"(텍스처 및 다른 명명 된 것들)를 공유하는 것처럼 보이는 공유 그룹의 추상화 계층에 대해 고민하고 있지만 컨텍스트에 의해 소유 된 "상태"(매트릭스, 활성화/비활성화 상태)와는 고민하고 있다고 생각합니다.

이것을 생각하는 가장 좋은 방법은 무엇입니까?

계몽주의에 감사드립니다!

답변

4

맞습니다. 두 EAGLContext이 동일한 EAGLSharegroup으로 생성되면 버퍼 객체, 텍스처, 렌더 버퍼 및 프레임 버퍼의 동일한보기를 공유합니다. 컨텍스트가 OpenGL ES 2.0을 사용하는 경우 셰이더 및 프로그램 개체도 공유합니다.

동일한 공유 그룹을 사용하는 다중 컨텍스트의 가장 큰 사용 사례 중 하나는 렌더링하는 동안 다른 스레드에서 비동기 적으로 리소스를로드하는 것입니다. 그건 당신이 여기에서하는 것처럼 보이지 않습니다. 그리고 그것은 지속적인 컨텍스트 상태가 문제가되는 것처럼 보이지 않으므로 단일 EAGLContext을 사용하는 것이 더 낫고 어딘가에 참조를 숨길 수 있습니다. 그것을 필요로 할지도 모른 모든 목표는 그것을 볼 수있다. 적절한 프레임 버퍼와 컬러 렌더 버퍼를 바인딩함으로써 렌더링하는 뷰를 변경할 수 있습니다.

+0

고마워요. 이것에 대해 확신을 가지고 목소리를 내기 매우 도움이됩니다. –

+0

이것은 이야기의 절반에 불과합니다. 공유 그룹을 인스턴스화해서는 안됩니다. 당신은 애플이 당신을 위해 그것을하도록해야합니다. c.f. 이 답변 : http://stackoverflow.com/questions/7547603/multiple-eaglviews-but-only-one-copy-of-each-texture-how/7547686#7547686 – Adam