2009-11-11 179 views
6

我为iPhone编写图形应用程序,我正在寻找将我最近的应用程序“层”移植到Android平台。图层是绘画应用程序,允许用户在屏幕上绘制并使用不同的画笔,颜色等创建多层次的绘画......并输出到PSD。这是有桌面同步,涂抹工具,很多好东西... http://www.layersforiphone.com/Android OpenGLES渲染到纹理

我开始在星期一看Android平台,我遇到了一个主要问题。我使用OpenGL来完成所有绘图,因为它提供了最佳性能。但是,有几个地方需要渲染到纹理中,然后使用纹理。例如:

  1. 使用刷子的质地和精灵的行来创建纹理黑色涂料冲程甲
  2. 穿戴刷色+α的glColor4f然后绘制纹理阿到屏幕上。

在iPhone上,随着用户的手指移动,我可以持续这样做,我可以在第一代iPod Touch上实现12-15fps。这是必要的,因为将颜色和alpha应用于构成画笔描边的单个精灵并不会产生正确的结果(因为精灵重叠并且使笔画太暗)。

Android平台支持OpenGL ES 1.0,但似乎忽略了处理帧缓冲区的关键函数。我无法找到将纹理绑定到帧缓冲区并使用OpenGL进行绘制的方法。

以下是我通常会去了解它在iPhone上:

// generate a secondary framebuffer and bind it to OpenGL so we don't mess with existing output. 
glGenFramebuffers(1, &compositingFramebuffer); 
glBindFramebuffer(GL_FRAMEBUFFER, compositingFramebuffer); 

// attach a texture to the framebuffer. 
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0); 

// subsequent drawing operations are rendered into the texture 

// restore the primary framebuffer and (possibly) draw the rendered texture 
glBindFramebuffer(GL_FRAMEBUFFER, originalActiveFramebuffer); 

有没有这样的事情在Android平台上?在iPhone上,OpenGL比基于软件的绘图要快得多,而且是唯一可行的解​​决方案(相信我 - 我也写了一个CoreGraphics绘画应用程序......)。也许我可以在Android上采用另一条路线?我愿意跳过任何必要的箍环,但我不会发布应用程序,除非性能为(当您在屏幕上绘制时为10fps +)。

回答

7

我对所有Android设备都支持完全相同的OpenGL ES扩展集或者他们都支持完全相同版本的OpenGL ES表示怀疑。

帧缓冲区对象(FBO)是OpenGL ES 2.0核心规范的一部分;如果你的android设备支持ES 2.0,那么它支持FBO。

如果你的Android设备支持ES 1.1,然后检查扩展字符串使用glGetString(GL_EXTENSIONS)GL_OES_framebuffer_object

+3

刚兴趣的人,下面是几个不同的Android设备的GL_EXTENSIONS: http://www.rbgrn.net/content/345-hands-on-motorola-droid-opengl-es-specs 它看起来像DROID是目前唯一支持帧缓存的Android手机。 – 2009-11-29 17:56:48