2012-05-23 1 views
0

В соответствии с Apple's OpenGL ES Programming Guide: «Если фреймбуфер [a] предназначен для отображения пользователю, используйте специальный рендерингщик с поддержкой Core Animation».Есть ли другой способ отображать содержимое OpenGL, чем с помощью рендеринга с поддержкой Core Animation?

В тексте далее говорится, что для обеспечения этого рендеринга с поддержкой Core Animation требуется «Subclass UIView для создания представления OpenGL ES для приложения [iOS] [и] переопределить слойClass» с помощью этого кода:

+ (Class) layerClass 
{ 
    return [CAEAGLLayer class]; 
} 

Однако, если исследовать Apple's GLCameraRipple example, который отображает OpenGL для конечного пользователя, класс layerClass никогда не будет переопределен. Текстовый поиск на layerClass или CAEAGLLayer показывает, что они отсутствуют.

Если вы ищете другие подходы к отображению непосредственно пользователям, Apple дает два других подхода OpenGL, но оба они, похоже, подразумевают, что они не предназначены для отображения непосредственно пользователям, а скорее для визуализации вне экрана. (т. е. «Если фреймбуфер используется для обработки внеэкранного изображения, прикрепите визуализатор рендеринга. Если изображение фреймбуфера используется как вход для последующего этапа рендеринга, прикрепите текстуру».)

Есть ли другой способ отображения OpenGL чем использование известного рендеринга с поддержкой Core Animation - или Apple каким-то образом переопределяет класс слоев, поэтому содержимое OpenGL становится Core Animation известным по-другому?

ответ

3

Причина, по которой вы не видите подкласса UIView с CAEAGLLayer, поддерживающим его в примере GLCameraRipple, заключается в том, что он использует GLKView. GLKView - это класс, представленный в iOS 5.0 как часть GLKit, и он обертывает некоторый общий код, такой как явное переопределение для использования CAEAGLLayer и настройка его соответствующего renderbuffer.

Это все еще делается, это просто отвлечено от вас. Для отображения содержимого OpenGL ES на экране вам все равно нужно пройти CAEAGLLayer так или иначе.

Оффшрин-рендеринг - это другое животное, потому что там вы не прикрепляетесь к слою для отображения, поэтому вам не нужен слой. Если вы хотите визуализировать текстуру, добавьте текстуру в качестве цели для вашего FBO, и все.