iphone – 从OpenGL ES 1.1过渡到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标签相比es 2.0标签的数量,看起来它不是2.0的时间.

最佳答案
在尝试确定是否使用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随附的文档中找到.

我在前面的答案herehere中已经解释了OpenGL ES 2.0可能有用的东西,但是对于新API可以提供给你的前后展示也许是有用的.

OpenGL ES 1.1:

OpenGL ES 2.0:

希望您可以看到使用着色器替换某些内置函数的收益.

转载注明原文:iphone – 从OpenGL ES 1.1过渡到OpenGL ES 2.0 - 代码日志