2009-09-05 81 views
1

我想优化我的iPhone OpenGL ES应用程序。这基于GLSprite和GLPaint示例应用程序。我已经将EAGLView分解为一个基类,并且我在3个不同的OpenGL视图中对它进行了子类化,以创建3个透明图层。 3个EAGLViews的显示父级是UIView,而UIView是UIWindow的子级。我试图尽可能接近60fps。我听说其他人在这个网站说,iPhone是能够以60fps的图50的透明层,所以这是令人鼓舞的......如何优化多个全屏透明iPhone OpenGL ES图层的绘制?

我在做什么是:

1)绘制多达9纹理线,使用与GLPaint(renderLineFromPoint:toPoint :)中相同的基于point-sprite的函数来映射层#1。用于此的纹理是64x64,中间有一个40x40的圆圈,其余都是透明的。

2)绘制与该相同的功能和质地到层#2的单个线。

3)绘制一个128×128的纹理9个实例(与其余透明)到层#3一80x80中心圆。此图层位于最上方。

层#1和#3的变化非常罕,和层#2变更(擦除全屏,重绘一行)每次touchesMoved:被调用。

本来我想在一个单一的EAGLView这样做,像样品...基本上绘制所有3层内容的顺序。但是,这太慢了。在添加线条图(第1层和第2层)之前,这很好,但不幸的是,每触摸一下绘制10条线,移动帧速率就减半。所以我试图通过将它们分解到图层来优化它...只在必要时绘制每个图层一次。 (绘制第2层每手指移动)。这仍然不够快,我假设因为有很多透明度(每个图层需要透视;每个纹理绘图都需要混合)。

我不认为我做画了很多......是9个半透明圣城和几行了很多?

所以,我是注定的吗?使用这种透明度会杀死性能?或者是有什么我失踪...任何帮助非常感谢!

+0

更新:我得到60fps的,如果我不画任何东西* *到层#2。当我在第2层的drawView函数中放入单个glClear(GL_COLOR_BUFFER_BIT)(和* nothing * else)时,帧速率下降到19-20 fps。这就像你在屏幕上移动你的手指一样。这是因为系统现在必须混合第2层,即使它是空的,当它不需要之前? – yozzozo 2009-09-07 00:34:45

回答

1

我通过删除层#1来解决这个问题。 现在,第2层处理静态和动态线条绘制。回到60fps! :)

我猜iphone只是crapped了对合成3全屏透明层...