0

根据Apple 的 OpenGL ES Programming Guide,“如果 [a] 帧缓冲区旨在显示给用户,请使用特殊的 Core Animation-aware 渲染缓冲区。”

文本继续说,要让这个 Core Animation 感知渲染缓冲区,需要使用以下代码“子类 UIView 为 [the] iOS 应用程序 [and] Override the layerClass”创建一个 OpenGL ES 视图:

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

但是,如果查看向最终用户显示 OpenGL 的Apple GLCameraRipple 示例,layerClass 似乎永远不会被覆盖。对 layerClass 或 CAEAGLLayer 的文本搜索显示它们丢失了。

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

除了使用支持 Core Animation 的渲染缓冲区之外,还有另一种显示 OpenGL 内容的方法 - 或者 Apple 是否以某种方式覆盖了图层类,因此 OpenGL 内容以另一种方式成为 Core Animation 感知?

4

1 回答 1

3

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

这仍在进行中,只是从您那里抽象出来。为了在屏幕上显示 OpenGL ES 内容,您仍然需要以一种或另一种方式通过 CAEAGLLayer。

屏幕外渲染是另一种动物,因为您没有附加到图层进行显示,因此不需要图层。如果要渲染到纹理,请将纹理附加为 FBO 的目标,仅此而已。

于 2012-05-23T19:10:16.337 回答