我最近一直在网上搜索,并注意到一些视频教程显示了一个带有 OpenGL ES 上下文的旧模板(SDK 3.2 之前)。现在有两个,我收集到的是在较新的 iMobile 设备上可用的两个 OpenGL ES 版本。
我可以只使用旧的还是我需要做两次?我如何告诉 iPhone 使用旧上下文,还是会自动这样做?
我最近一直在网上搜索,并注意到一些视频教程显示了一个带有 OpenGL ES 上下文的旧模板(SDK 3.2 之前)。现在有两个,我收集到的是在较新的 iMobile 设备上可用的两个 OpenGL ES 版本。
我可以只使用旧的还是我需要做两次?我如何告诉 iPhone 使用旧上下文,还是会自动这样做?
为了扩展 Frogblast 所说的内容,模板代码定义了两个类:ES1Renderer
和ES2Renderer
. 该类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,这应该会成功。如果不是,则应用程序回退到ES1Renderer
OpenGL 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
您还可以通过将密钥添加到UIRequiredDeviceCapabilities
Info.plist 中来限制您的应用程序在具有此功能的设备上运行。
您可以在较新的设备上使用 OpenGL ES 1.1,因此如果您想禁用 2.0 渲染路径,您可以让模板中的 EAGLView 忽略ES2Renderer
该类并只使用ES1Renderer
. 您也可以从 中获取 OpenGL ES 代码,ES1Renderer
然后将其放在 EAGLView 中。
默认情况下,模板会尝试创建 ES2 上下文,如果失败,则尝试创建 ES1 上下文。如果你想单独使用 ES 1.1(所有设备都支持),你可以从模板项目中删除所有对 ES2 的引用。