В моем приложении на основе OpenGL-ES 1.1 я использую CALayer
s в качестве источника текстур OpenGL. Эти CALayer
состоят из CGImage
и текста, отображаемого с помощью CoreGraphics. Другой источник текстур OpenGL - это снимок экрана UIView
, сделанный с использованием -[CALAyer renderInContext:]
и UIGraphicsGetImageFromCurrentImageContext
. В настоящее время я полностью использую основной поток.
Последний случай, в частности, очень плох, потому что он останавливает рендеринг OpenGL на все время, необходимое для создания UIView
и его снимка экрана.
Теперь я подумываю переместить код OpenGL в отдельный поток в надежде обойти эту блокировку. В идеале снимок экрана должен быть сделан в другом потоке (при необходимости, в основном потоке), чем рендеринг OpenGL.
Мне не удалось найти в документации полное описание того, что требует запуска в основном потоке, а что нет. Я нашел несколько комментариев в примечания к выпуску iOS 4 и некоторые комментарии в конкретных методах UIKit, но мне не хватает полной картины.
Код работает на iOS 4.x или выше.