如何优化多个全屏透明iPhone OpenGL ES层的绘图?

如何优化多个全屏透明iPhone OpenGL ES层的绘图?,iphone,optimization,opengl-es,transparency,alphablending,Iphone,Optimization,Opengl Es,Transparency,Alphablending,我正在尝试优化我的iPhone OpenGL ES应用程序。这是基于GLSprite和GLPaint示例应用程序的。我已经将EagleView分解为一个基类,并在3个不同的OpenGL视图中对其进行子类化,以形成3个透明层。3个eAglView的显示父级是UIView,该UIView是UIWindow的子级。我正试图让它尽可能接近每秒60帧。我在这个网站上听到其他人说iPhone能够以60fps的速度绘制50个透明层,所以这是令人鼓舞的 我正在做的是: 1) 使用与GLPaint(renderL

我正在尝试优化我的iPhone OpenGL ES应用程序。这是基于GLSprite和GLPaint示例应用程序的。我已经将EagleView分解为一个基类,并在3个不同的OpenGL视图中对其进行子类化,以形成3个透明层。3个eAglView的显示父级是UIView,该UIView是UIWindow的子级。我正试图让它尽可能接近每秒60帧。我在这个网站上听到其他人说iPhone能够以60fps的速度绘制50个透明层,所以这是令人鼓舞的

我正在做的是:

1) 使用与GLPaint(renderLineFromPoint:toPoint:)中相同的基于点精灵的功能绘制最多9条纹理线到第1层。用于此的纹理是64×64,中间有一个40x40个圈,其余的是透明的。 2) 使用相同的功能和纹理绘制一条线到第2层

3) 将128x128纹理的9个实例(一个80x80中心圆,其余部分透明)绘制到第3层。这一层在上面

第1层和第3层的变化非常小,第2层每次调用touchesMoved:时都会发生变化(擦除全屏,重画一行)

最初我试着在一个单一的EagleView中这样做,就像样本一样。。。基本上按顺序绘制所有3层的内容。但是,这太慢了。在我添加线条绘制(第1层和第2层)之前一切都很好,但不幸的是,每次触摸绘制10条线条会将帧速率减半。所以我试着通过把它们分成几层来优化它。。。仅在必要时绘制每个层一次。(每次手指移动绘制第2层)。我想这还不够快,因为有很多透明度(每个层都需要显示;每个纹理绘制都需要混合)

我想我画的东西不多。。。9个半透明四边形和几条线是否很多


那么,我注定要在这里吗?使用如此高的透明度会降低性能吗?还是有什么我错过了。。。非常感谢您的帮助

我通过移除第1层修复了这个问题。 现在,图层#2处理静态和动态线条绘制。返回到每秒60帧!:)


我猜iphone只是在合成3个全屏透明层时失败了

我通过移除第1层修复了这个问题。 现在,图层#2处理静态和动态线条绘制。返回到每秒60帧!:)


我猜iphone只是在合成3个全屏透明层时失败了

更新:如果我不在第2层绘制任何东西,我将获得60 fps。当我在第2层的drawView函数中输入一个glClear(GL_COLOR_BUFFER_BIT)(没有其他内容)时,帧速率下降到19-20 fps。这是当你在屏幕上移动手指的时候。这是因为系统现在必须混合第2层,即使它是空的,而以前不需要混合吗?更新:如果我不在第2层绘制任何东西,我将获得60 fps。当我在第2层的drawView函数中输入一个glClear(GL_COLOR_BUFFER_BIT)(没有其他内容)时,帧速率下降到19-20 fps。这是当你在屏幕上移动手指的时候。这是因为系统现在必须混合第2层,即使它是空的,而以前不必这样做吗?