iPhone 成本与收益 - OpenGL ES 1.x 与 2.0

Posted

技术标签:

【中文标题】iPhone 成本与收益 - OpenGL ES 1.x 与 2.0【英文标题】:iPhone cost vs. benefit - OpenGL ES 1.x vs 2.0 【发布时间】:2010-07-20 15:54:56 【问题描述】:

我不确定这个问题是否已经被问过,我的 ***-fu 失败了。

所以我正在构建一个基于 OpenGL-ES 的 iPhone 游戏,而且我在野外发现的几乎所有示例都在 OpenGL ES 1.x 上。这很好,因为至少我总体上(重新)学习了很多关于 OpenGL 的知识。

现在较新的设备支持 OpenGL-ES 2.0,我想知道是否有人将他们的 OpenGL-ES 1.x 应用程序移植到 2.0,如果是的话,是否有任何性能或效率提升?例如,我可以使用 glLightf(blahblah) 设置我的照明(在 1.x 中),我已经完成了照明......但显然该功能在 2.0 中不存在,所以我不得不自己编写它?那么,没有“管道编程”经验的人怎么能做到这一点呢? 2.0 中有默认的光照实现吗?

我可能是出于无知,因为我还没有真正找到任何可靠的 iPhone 专用 OpenGL-ES 2.0 信息。

我们将不胜感激在这方面的任何帮助。

【问题讨论】:

【参考方案1】:

根据我所阅读的内容以及我有限的时间使用它,从 1.1 到 OpenGL ES 2.0 与其说是性能问题,不如说是功能问题。如果您观看Mastering OpenGL ES for iPhone videos(可通过 iPhone 开发者计划网站获得的 iPhone 入门视频的一部分),Apple 甚至表示如果您可以在 OpenGL ES 1.1 下做您需要做的事情,则无需升级2.0.

OpenGL ES 2.0 的完全可编程管道可以使简单的操作比在 1.1 中执行相同的操作更加困难,因为您需要为之前为您处理的部分管道编写代码。然而,2.0 实现了许多在 1.1 中无法实现的令人惊叹的效果。例如,我建议观看WWDC 2010 session video 417 - OpenGL ES Shading and Advanced Rendering 和 Graphics and Media State of the Union,了解使用 OpenGL ES 2.0 的可能性。

迄今为止,很少有应用程序使用 OpenGL ES 2.0,因为具有兼容 GPU 的 iPhone 设备子集有限且缺乏文档和示例。我认为随着 iPhone 3G S 之前的设备被淘汰,我们会看到这种情况开始改变。特别是,iPad 从一开始就具有 OpenGL ES 2.0,因此如果您正在为其设计应用程序,您可以依赖这些功能。更多的代码示例和文档肯定会在不久的将来出现。

【讨论】:

感谢您的解释,不幸的是,通过您提供的入门链接,我找不到标有“Mastering OpenGL ES for iPhone”视频的曲目……我确实找到了 WWDC 曲目。在您的研究中,您是否发现任何有关在未来的 ios 设备上弃用 OpenGL-ES 1.x 的信息? @T Reddy - 单击“入门视频”链接时,在 iTunes 中的“高级视频”轨道下查看。我提到的两个视频都在那里。至于弃用,我认为他们没有理由很快就会这样做。桌面上的OpenGL仍然支持旧的所有功能。 缺少示例是因为 ES2 是 100% 基于着色器的。如果你研究着色器(在任何 OpenGL 语言上),你就会明白。困难的部分是找到正确的算法(例如:如何做定向灯?htd an ortho view?)。我正计划支持混合 ES1/2 代码,但巴西较新的 iOS 设备的成本高得令人望而却步(而且模拟器还不够)。 @Eduardo - 在 OpenGL ES 2.0 与桌面 OpenGL 中,着色器的实现存在一些不同之处,因此人们不仅可以依赖 OpenGL 引用来阻止好的示例。但是,这个答案在这一点上有些过时了,我最近的答案更准确地反映了当前的情况:***.com/questions/4784137/…。事实上,我教了一整堂关于使用 OpenGL ES 2.0 的课程,所以它肯定会变得越来越主流。

以上是关于iPhone 成本与收益 - OpenGL ES 1.x 与 2.0的主要内容,如果未能解决你的问题,请参考以下文章

iPhone:Quartz2d 与 OpenGL ES

在设备方向下 iPhone 上的 OpenGL ES 原点会发生啥

iPhone OpenGL ES 2.0 与 Cocos2D 的混合产生了意想不到的结果

opengl es 纹理不是二的幂(iphone)

将 DirectX 移植到 OpenGL ES (iPhone)

OpenGL ES/iPhone 的透明度/混合问题