31

我将开始一个新的跨平台 openGL 项目(主要用于 iPhone 和 PC)。所以有一个主要问题:针对 OpenGL ES 1.1 还是 OpenGL ES 2.0?或两者?到目前为止,我读到 Open GL ES 1.1 并没有真正被弃用,不是吗?那么,openGL ES 2.0 的意义何在?可编程顶点和片段着色器 - 还有什么?我听说 alpha 混合会降低性能 - 这是真的吗?我假设 openGL ES 2.0 代码也应该在 PC 上运行 - 那么 openGL ES 2.0 真的更具有未来意识吗?

其他开发人员仍在为 OpenGL ES 1.1 或 2.0 编写代码?为什么?我假设如果我选择 openGL ES 2.0,那么与 openGL ES 1.1 的向后兼容性也会有很多开销。但是有很多 iPhone 没有 openGL ES 2.0 支持——我应该如何做到这一点?有什么经验吗?

我只发现了这个问题:iPhone 上的 OpenGL ES 1.1 或 2.0有点相关,但它的实现并不深入......所以欢迎任何建议!非常感谢!

4

4 回答 4

52

是使用 OpenGL ES 1.1 还是 2.0 取决于您想在应用程序中做什么,以及需要与多少设备兼容。所有 iOS 设备都支持 OpenGL ES 1.1,其中只有 iPhone 3GS 和更新的设备(iPhone 3GS、iPhone 4、iPad 和第 3 代和第 4 代 iPod touch)支持 OpenGL ES 2.0。但是,Apple 当前发布的所有 iOS 设备都与 OpenGL ES 2.0 兼容。不支持 OpenGL ES 2.0 的设备百分比每天都在下降。所有 iPad 从发布之日起就支持 OpenGL ES 2.0,因此如果您以该外形尺寸为目标,则可以保证获得支持。

OpenGL ES 2.0 和 1.1 使用不同且相当不兼容的渲染管道。OpenGL ES 1.1 使用固定功能管道,您可以在其中输入几何和纹理数据、设置光照等状态,并让 OpenGL 为您处理其余工作。OpenGL ES 2.0 基于可编程管道,您可以在其中提供顶点和片段着色器来处理内容如何呈现到屏幕的细节。

因为您必须编写自己的代码来替换最基本的内置函数,所以将 OpenGL ES 2.0 用于简单的 3-D 应用程序可能比 OpenGL ES 1.1 需要更多的努力。此外,您在那里发现的大多数示例应用程序和文章都面向 1.1,因此开始使用 2.0 API 可能会更加困难。

然而,您可以编写自己的例程来处理几何体和纹理以及它们如何显示到屏幕上,这意味着 OpenGL ES 2.0 可以让您做一些根本不可能的事情(或者需要大量的努力) ) 在 OpenGL ES 1.1 中执行。这些包括卡通着色和环境光遮蔽照明等效果,以及让您做一些有趣的事情,例如将大量并行工作卸载到 GPU。

如果您想查看一些使用 OpenGL ES 2.0 可以做什么的示例,我在 iTunes U 上提供了有关该主题的课程的视频,我在这里这里创建了两个示例应用程序。

在跨平台兼容性方面,着色器在桌面 OpenGL 上已经有一段时间了,所以你使用 OpenGL ES 1.1 或 2.0 构建的任何东西都应该可以相当移植到桌面。

如果您可以在 OpenGL ES 1.1 中进行您想要的渲染,那么您可以采用这种方式来提供最大的设备兼容性。但是,当今使用的绝大多数 iOS 设备都支持 OpenGL ES 2.0(我现在找不到这方面的统计数据,但它是基于出货量的),而且这个数字只会随着时间的推移而增长。OpenGL ES 2.0 可以让您实现一些令人惊叹的效果(请参阅 Epic Citadel),这些效果可以帮助您将您的应用程序与其他应用程序区分开来。

于 2011-01-24T21:57:34.030 回答
0

基本上只有 iPhone 3G 及更早版本(2010 年停产)和 iPod 第二代及更早版本(也于 2010 年 9 月停产)需要您使用 OpenGL ES 1.0。

所有 iPad、iPad mini 和 iPhone 3GS 及以上版本均支持 OpenGL ES 2.0。事实上,任何在 2010 年 9 月之后销售的 iOS 设备(作为全新设备)都支持 OpenGL ES 2.0。

OpenGL ES 3.0 支持

您不仅可以获得 ES 2.0 支持,而且 iPhone 5S + iPad Air(iPad 第 5 代)现在支持 OpenGL ES 3.0,截至 2013 年 11 月。

于 2013-12-14T16:46:21.093 回答
0

目前,我严重怀疑是否有任何设备不支持 OpenGLES 2.0!在 OpenGLES 2.0 上投入更多的精力,您将面向未来,尤其是在 OpenGLES 3.0 发布之后。实际上,我发现 OpenGLES 2.0 比 1.1 更容易,因为我可以执行自己的矩阵计算并准确指定着色器中的内容。

另一件事是,如果您要使用 OpenGLES 1.1 API,您需要知道它实际上是作为着色器实现的,并且它不是硬件,如果这有意义的话。OpenGLES 2.0 运行一个顶点着色器,它实现了一个 OpenGLES 1.1 固定功能管线。

这很简单——至少 OpenGLES 2.0!

于 2015-02-18T21:35:32.583 回答
-2

我为 Cubemap 选择了 2.0

于 2011-08-29T16:22:29.007 回答