我正在尝试优化我的iPhone OpenGL ES应用。这基于GLSprite和GLPaint示例应用程序。我已经将EAGLView分解为基类,并且我将它子类化为3个不同的OpenGL视图以制作3个透明层。 3个EAGLViews的显示父级是UIView,UIView是UIWindow的子级。我试图尽可能接近60fps。我听说过这个网站上的其他人说iPhone能够以60fps的速度绘制50个透明层,所以这是令人鼓舞的......
我正在做的是:
1)使用与GLPaint相同的基于点精灵的函数(renderLineFromPoint:toPoint :)到第1层,绘制最多9条纹理线条。用于此的纹理为64x64,中间为40x40圆,其余为透明。
2)使用与#2层相同的功能和纹理绘制一条线。
3)绘制9个128x128纹理实例(一个80x80居中的圆,其余部分透明)到第3层。这一层位于顶层。
图层#1和#3很少变化,每次调用touchesMoved:时,图层#2会发生变化(擦除全屏,重绘一行)。
最初我尝试在单个EAGLView中执行此操作,例如样本...基本上按顺序绘制所有3个图层的内容。但是,这太慢了。在我添加线条图(第1层和第2层)之前很好,但不幸的是,每次触摸时都会绘制10条线,并将帧速率切成两半。所以我尝试通过将它们分成层来优化它...只在必要时绘制每一层ONCE。 (每个手指移动绘制第2层)。这仍然不够快,我想是因为有很多透明度(每一层都需要显示;每个纹理绘制都需要混合)。
我不认为我做了很多绘画...是9个半透明的四边形和几条线?
所以,我在这里注定了吗?使用这么多透明度可以扼杀性能?或者有什么我想念的......非常感谢任何帮助!
答案 0 :(得分:1)
我通过删除第1层来解决这个问题。 现在,第2层处理静态和动态线条绘制。回到60fps! :)
我猜iphone刚刚合成了3个全屏透明层......