代码之家  ›  专栏  ›  技术社区  ›  Moshe

iphone如何知道在1.1和2.0之间使用哪个opengl es上下文?

  •  0
  • Moshe  · 技术社区  · 14 年前

    我最近在网上搜索,注意到一些视频教程显示了一个旧的模板(pre-sdk 3.2),带有一个opengl es上下文。现在有两个版本,我收集到了更新的iMobile设备上提供的两个版本的OpenGL ES。

    我可以用旧的还是每件事都要做两次?如何告诉iphone使用旧的上下文,或者它会自动这样做?

    2 回复  |  直到 14 年前
        1
  •  0
  •   Frogblast    14 年前

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

        2
  •  4
  •   Brad Larson    14 年前

    为了扩展frogblast所说的内容,模板代码定义了两个类: ES1Renderer ES2Renderer . 这个 EAGLView 类首先尝试创建 ES2招标人 实例,但如果失败,则创建 ES1招标人 . 如果 ES2招标人 无法使用以下代码设置OpenGL ES 2.0上下文:

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

    如果设备支持OpenGL ES 2.0,则此操作应成功。如果没有,则应用程序返回到 ES1招标人 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和更高版本的设备支持这种永不api。然而,如果你正在开发一个只支持ipad的应用程序,你可以假设它支持2.0。您还可以通过添加 opengles-2 关键是 UIRequiredDeviceCapabilities 在你的信息列表里。

    在较新的设备上可以很好地使用opengl es 1.1,因此如果要禁用2.0呈现路径,可以让模板中的eagleview忽略 ES2招标人 上课和工作 ES1招标人 . 您还可以从 ES1招标人 把它放在鹰视图里。

    推荐文章