내 OpenGL-ES 1.1 기반 응용 프로그램에서 OpenGL 텍스처 소스로 CALayer
을 사용하고 있습니다. 그 CALayer
은 CGImage
과 CoreGraphics를 통해 렌더링 된 텍스트로 구성됩니다. 다른 OpenGL 텍스처 소스는 -[CALAyer renderInContext:]
및 UIGraphicsGetImageFromCurrentImageContext
을 사용하여 촬영 한 UIView
의 스크린 샷입니다. 현재, 나는 주 스레드에서 완전히 실행 중입니다.메인이 아닌 스레드에서 UIKit, Core Graphics, Core Animation, OpenGL 중 어느 부분이 허용됩니까?
특히 후자의 경우는 UIView
및 그 스크린 샷을 만드는 데 걸리는 시간 동안 OpenGL 렌더링을 중단하기 때문에 꽤 나쁩니다.
이제 OpenGL 코드를이 차단을 피하기 위해 별도의 스레드로 옮길 생각입니다. 이상적으로, 스크린 샷은 OpenGL 렌더링보다 다른 스레드 (필요한 경우 주 스레드)에서 가져온 것입니다.
메인 스레드에서 실행해야하는 항목과 그렇지 않은 항목에 대한 설명서에서 전체 내용을 찾을 수 없었습니다. iOS 4 release notes의 일부 주석과 특정 UIKit 메서드의 일부 주석을 발견했지만 전체 그림이 누락되었습니다.
코드는 iOS 4.x 이상에서 실행됩니다.
OpenGL을 백그라운드 스레드로 이동하고 나머지는 메인 스레드에서 유지하는 것이 효과적일까요? 일부 텍스처를 생성하는 Core Graphics 코드는 어떻게됩니까? OpenGL 쓰레드로 옮길 수 있습니까? –
Pure Core Graphics/Quartz는 작업자 스레드에서 사용할 수 있지만 스레드 경계를 항상 안전하게 통과 할 수있는 것은 아닙니다. UIKit (예 :'UIGraphics ...'함수)를 사용하는 모든 것은 여전히 메인 스레드에서 실행되어야합니다. –
OpenGL은 스레드가 안전합니다. 공유 그룹에 있지 않으면 여러 스레드에서 동일한 컨텍스트를 사용하거나 다른 컨텍스트간에 리소스를 공유 할 수 없습니다. EAGLSharegroup (http://developer.apple.com/library/ios/documentation/OpenGLES/Reference/EAGLSharegroup_ClassRef/)에 대한 설명서를 확인하십시오. – Tommy