从OpenGL ES 1.1过渡到OpenGL ES 2.0

时间:2011-05-03 07:09:36

标签: iphone opengl-es opengl-es-2.0

iPhone 3GS推出已经有一段时间了,现在可能足够的OpenGL ES 2.0支持设备的市场份额,以保证在其中发展。

但情况是很多开发人员可能已经在OpenGL ES 1.1中拥有庞大的代码库

如何将ES 1.1转换为ES 2.0?我想需要处理矩阵,以及像GL_FOG,GL_CULL这样的东西?

是否可以为这些函数编写“替代品”,例如你自己的glTranslatef,glPushmatrix等?这是否会影响性能?

转换到ES 2.0还有哪些其他考虑因素?使用其中任何一个都有哪些优点和缺点(除了显而易见的设备支持问题)?

在stackoverflow中查看es 2.0标签与标准es标签的数量,看起来它不是2.0的时间。

3 个答案:

答案 0 :(得分:17)

在尝试确定是否使用OpenGL ES 2.0时,不要只通过Stack Overflow上的标记中的活动。首先,并非每个2.0或与着色器相关的问题都被标记为这样。此外,在推出iPhone SDK时或之后不久,有很多关于OpenGL ES 1.1的信息,因此人们对该API更为熟悉。很明显,人们对OpenGL ES 2.0很感兴趣,因为我关于这个主题的一节课是迄今为止my course videos中最受欢迎的课程。

在大多数情况下,处理几何体的方式在1.1和2.0之间是相同的,以及像帧缓冲区之类的东西,但是其他一切从内置函数确定转移到您自己的着色器。您将不得不编写一些代码来复制简单的函数,例如使用模型视图矩阵或纹理,但这些代码往往只需要着色器中的几行。例如,使用模型视图矩阵调整顶点就像在顶点着色器中放置这样的直线一样简单:

vec4 transformedPosition = modelViewProjMatrix * position;

就个人而言,我替换了glRotate()等函数a long while ago using the Core Animation helper functions来操纵有效的模型视图矩阵。这使得将代码移到OpenGL ES 2.0中变得微不足道。

Jeff LaMarche还有一个非常有用的帮助类,用于在他的文章here中包装大多数着色器程序设置代码。

有关转换到OpenGL ES 1.1的精彩指南,请参阅“从OpenGL ES 1.0迁移到OpenGL ES 2.0”一文,这是本书GPU Pro中的一章,可以在文档中找到伴随免费PowerVR SDK

我已经解释过OpenGL ES 2.0在我以前的答案herehere中可能有什么用处,但也许在演示之前和之后关于什么是有用的新的API可以给你。

OpenGL ES 1.1:

OpenGL ES 1.1

OpenGL ES 2.0:

OpenGL ES 2.0

希望你能看到用着色器替换一些内置函数的收益。

答案 1 :(得分:1)

如果你有现有项目,我不建议转到2.0,考虑到所需的努力很可能超过它的价值。也就是说,对于任何新项目,我认为没有理由再费心考虑1.1了。大多数已售出的设备都是3GS或4s,两者都能够处理2.0。

答案 2 :(得分:1)

OpenGL ES 2.0与OpenGL ES 1.1有一些共同点(我的意思是渲染)。对于每个渲染,您都需要一个着色器。例如,FOG也是使用着色器创建的。但你会有更多的力量。

+1给@jer他的回答