从OpenGL ES 1.1过渡到OpenGL ES 2.0

kam*_*iro 8 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标签相比es 2.0标签的数量,看起来它不是2.0的时间.

Bra*_*son 17

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

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

vec4 transformedPosition = modelViewProjMatrix * position;
Run Code Online (Sandbox Code Playgroud)

就个人而言,我很久以前使用Core Animation辅助函数来替换glRotate()等函数来有效地操作模型视图矩阵.这使得将代码移植到OpenGL ES 2.0变得微不足道.

杰夫·拉马什也有包装大部分的着色器程序设置代码在他的文章中一个非常有用的辅助类在这里.

有关向OpenGL ES 1.1过渡的精彩指南,请参阅"从OpenGL ES 1.0迁移到OpenGL ES 2.0"一文,该文章是GPU Pro一书中的一章,可以在免费的PowerVR SDK附带的文档中找到.

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

OpenGL ES 1.1:

OpenGL ES 1.1

OpenGL ES 2.0:

OpenGL ES 2.0

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