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

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

有帮助吗?

解决方案

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

其他提示

为了扩展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,则应该成功。如果没有,该应用程序又回到了 ES1Renderer OpenGL ES 1.1渲染器。

该应用程序具有两个不同的渲染类的原因是,OpenGL ES 1.1和2.0具有不同且不兼容的渲染管道。 OpenGL ES 2.0可让您创建可编程的着色器,以获得一些惊人的效果,但是与OpenGL ES 1.1相比,对于简单任务而言,它可能更难使用。

如果他们使用OpenGL ES 2.0,许多人在应用程序中增加了后备,因为只有iPhone 3G S和后来的设备对此进行了支持。但是,如果您正在开发仅iPad应用程序,则可以假设它具有2.0支持。您还可以通过添加该功能将应用程序限制为具有此功能的设备运行 opengles-2 关键 UIRequiredDeviceCapabilities 在您的info.plist中。

您可以在较新的设备上使用OpenGL ES 1.1,因此,如果要禁用2.0渲染路径,则可以在模板中使用EAGLVIEW ES2Renderer 上课,只是与 ES1Renderer. 。您也可以从 ES1Renderer 并将其放在Eaglview中。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top