2011-05-03 219 views
8

从iPhone 3GS问世到现在已经有一段时间了,现在或许有足够的OpenGL ES 2.0支持设备的市场份额,以保证它的发展。从OpenGL ES 1.1过渡到OpenGL ES 2.0

但是现在的情况是很多开发者可能已经有了巨大的代码库中的OpenGL ES 1.1

一个人怎么transitionf ROM ES 1.1 ES 2.0?我想这些矩阵需要照顾,还有像GL_FOG,GL_CULL这样的东西可能?

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

转换到ES 2.0还有哪些其他考虑因素?使用这些优点和缺点(除了显而易见的设备支持问题)之外还有什么?

看看在标准es标签在stackoverflow es 2.0标签的数量,它看起来像它不是2.0的时间,但尽管如此。

回答

17

不要只是通过活动去堆栈溢出的标签。首先,并非每个2.0或着色器相关的问题都被标记为这样。此外,很多关于OpenGL ES 1.1的信息都是在iPhone SDK发布后不久发布的,因此人们对该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

希望,你可以看到着色器替换一些内置功能的回报。

+0

您的观点的优秀例证。你是制造分子应用程序的人吗?我在图片中假设这个例子,表演的收费大概是一样的? – kamziro 2011-05-04 10:05:23

+0

@ kamziro - 是的,就是我。上面的屏幕截图来自2.0版本,应该在本周末回顾。我并不是说你不会看到像我1.1例子那样的简单阴影几何体和我的2.0例程序中生成的光滑球体之间的性能差异,只是你可以获得更高级的效果。我的2.0渲染器比1.1的渲染器慢得多,但这是苹果与桔子的比较,因为后者更多。在1.1中获取第二幅图像所需的几何图形大小会削弱GPU。 – 2011-05-04 17:57:31

1

如果你有现有的项目,我不会推荐移动到2.0,考虑到所需的努力很可能超过它的价值。也就是说,对于任何新项目,我认为没有理由再考虑1.1了。大多数已销售的设备都是3GS或4S,两者都能够处理2.0以上。

1

OpenGL ES 2.0有几个与OpenGL ES 1.1常见的东西(在我的意思是渲染)。对于每个渲染,你需要着色器。例如,FOG也是用着色器创建的。但你会拥有更多的权力。

+1试图确定是否要使用OpenGL ES 2.0的时候@jer他的回答