是否有其他方式来显示OpenGL内容而不是使用Core Animation识别渲染缓冲区?

时间:2012-05-23 18:14:04

标签: ios opengl-es opengl-es-2.0

根据Apple's OpenGL ES Programming Guide,"如果要将[a]帧缓冲区显示给用户,请使用特殊的Core Animation-aware渲染缓冲区。"

文本接着说要使这个Core Animation识别渲染缓冲区,需要使用子类UIView为[iOS]应用程序创建一个OpenGL ES视图[和]覆盖layerClass"使用此代码:

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

但是,如果检查向最终用户显示OpenGL的Apple's GLCameraRipple example,则看起来不会覆盖layerClass。对layerClass或CAEAGLLayer的文本搜索显示它们缺失。

如果您寻找其他方法直接向用户显示,Apple会提供另外两种OpenGL方法,但两者似乎都暗示它们不是直接向用户显示,而是用于屏幕外渲染。 (即"如果帧缓冲用于执行屏幕外图像处理,请附加渲染缓冲区。如果帧缓冲图像用作后续渲染步骤的输入,请附加纹理。")

是否有另一种显示OpenGL内容的方法,而不是使用Core Animation识别渲染缓冲区 - 或者Apple是否以某种方式覆盖了图层类,以便OpenGL内容以另一种方式变为核心动画?

1 个答案:

答案 0 :(得分:3)

在GLCameraRipple示例中没有看到带有CAEAGLLayer的子类UIView的原因是因为它使用了GLKView。 GLKView是iOS 5.0中作为GLKit的一部分引入的类,它包含一些常用代码,例如使用CAEAGLLayer的显式覆盖以及匹配的渲染缓冲区的设置。

这仍然在做,它只是抽象而已。要将OpenGL ES内容显示到屏幕上,您仍需要以这种或那种方式浏览CAEAGLLayer。

离线渲染是一种不同的动物,因为您没有附加到图层进行显示,因此不需要任何图层。如果要渲染到纹理,请将纹理作为FBO的目标附加,就是这样。