我将开始一个新的跨平台openGL项目(主要用于iPhone和PC)。所以主要问题是:针对OpenGL ES 1.1或OpenGL ES 2.0?或两者?到目前为止我读过Open GL ES 1.1并没有真正弃用,不是吗? 那么对于openGL ES 2.0会说些什么呢?可编程顶点 - &碎片器 - 还有别的吗?我听说阿尔法混合后性能下降了 - 这可能是真的吗?我假设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支持 - 我该怎么做到这一点?那里有经验吗?
我发现只有这个问题:OpenGL ES 1.1 or 2.0 on iPhone有点相关,但实际上并不是很深入...... 所以欢迎任何建议!非常感谢你!
答案 0 :(得分:52)
是否使用OpenGL ES 1.1或2.0取决于您在应用程序中要执行的操作,以及需要与其兼容的设备数量。所有iOS设备都支持OpenGL ES 1.1,其中只有iPhone 3G S和更新的设备(iPhone 3G S,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做些什么的例子,那么我在这个主题上讲授的课程的视频是on iTunes U,我创建了两个示例应用程序here和{ {3}}
在跨平台兼容性方面,现在桌面OpenGL上已经提供了着色器,所以使用OpenGL ES 1.1或2.0构建的任何内容都应该可以移植到桌面上。
如果您可以在OpenGL ES 1.1中进行所需的渲染,则可以采用这种方式提供最大的设备兼容性。但是,目前使用的绝大多数iOS设备都支持OpenGL ES 2.0(我现在无法找到这方面的统计数据,但它是基于出货的单位),而且这个数字只会随着时间的推移而增长。 OpenGL ES 2.0可以让你实现一些令人惊叹的效果(参见Epic Citadel),它可以帮助你将应用程序与其他应用程序区分开来。
答案 1 :(得分:0)
基本上 仅 the iPhone 3G and prior(已停刊2010年)以及iPod第二代及更早版本(也已于2010年9月停刊)需要您使用OpenGL ES 1.0。
所有iPad,iPad minis和iPhone 3GS以后都支持OpenGL ES 2.0。事实上,在2010年9月之后出售的任何iOS设备(作为全新设备)都支持OpenGL ES 2.0。
截至2013年11月,您不仅获得了ES 2.0支持,还获得了iPhone 5S + iPad Air(iPad第5代)OpenGL ES 3.0。
答案 2 :(得分: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!
答案 3 :(得分:-2)
我为Cubemap选择了2.0