0

我最近一直在网上搜索,并注意到一些视频教程显示了一个带有 OpenGL ES 上下文的旧模板(SDK 3.2 之前)。现在有两个,我收集到的是在较新的 iMobile 设备上可用的两个 OpenGL ES 版本。

我可以只使用旧的还是我需要做两次?我如何告诉 iPhone 使用旧上下文,还是会自动这样做?

4

2 回答 2

4

为了扩展 Frogblast 所说的内容,模板代码定义了两个类:ES1RendererES2Renderer. 该类EAGLView首先尝试创建一个ES2Renderer实例,但如果失败,它会创建一个ES1Renderer. 如果ES2Renderer无法使用以下代码设置 OpenGL ES 2.0 上下文,则会出现故障:

context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];

if (!context || ![EAGLContext setCurrentContext:context] || ![self loadShaders])
{
    [self release];
    return nil;
}

如果设备支持 OpenGL ES 2.0,这应该会成功。如果不是,则应用程序回退到ES1RendererOpenGL ES 1.1 渲染器。

应用程序具有两个不同渲染类的原因是 OpenGL ES 1.1 和 2.0 具有不同且不兼容的渲染管道。OpenGL ES 2.0 允许您为一些令人惊叹的效果创建可编程着色器,但它可能比 OpenGL ES 1.1 更难用于简单任务。

如果他们使用 OpenGL ES 2.0,许多人会在他们的应用程序中添加回退,因为只有 iPhone 3GS 和更高版本的设备才支持这个从来没有的 API。但是,如果您正在开发仅适用于 iPad 的应用程序,您可以假设它将支持 2.0。opengles-2您还可以通过将密钥添加到UIRequiredDeviceCapabilitiesInfo.plist 中来限制您的应用程序在具有此功能的设备上运行。

您可以在较新的设备上使用 OpenGL ES 1.1,因此如果您想禁用 2.0 渲染路径,您可以让模板中的 EAGLView 忽略ES2Renderer该类并只使用ES1Renderer. 您也可以从 中获取 OpenGL ES 代码,ES1Renderer然后将其放在 EAGLView 中。

于 2010-05-10T12:58:51.127 回答
0

默认情况下,模板会尝试创建 ES2 上下文,如果失败,则尝试创建 ES1 上下文。如果你想单独使用 ES 1.1(所有设备都支持),你可以从模板项目中删除所有对 ES2 的引用。

于 2010-05-10T02:47:29.897 回答