我为iPhone编写图形应用程序,我希望将最新的应用程序“Layers”移植到Android平台。图层是绘画应用程序,允许用户在屏幕上绘图,并创建具有不同画笔,颜色等的多层绘画......并导出到PSD。它有桌面同步,涂抹工具,很多好东西...... http://www.layersforiphone.com/
我周一开始关注Android平台,但我遇到了一个重大问题。我使用OpenGL来完成所有绘图,因为它提供了最佳性能。但是,有几个地方我需要渲染到纹理然后使用纹理。例如:
在iPhone上,当用户的手指移动时,我会不断地这样做,并且我可以在第一代iPod Touch上实现12-15fps。这是必要的,因为将颜色和alpha应用于构成画笔笔划的各个精灵不会产生正确的结果(因为精灵重叠并使笔画太暗)。
android平台支持OpenGL ES 1.0,但似乎省略了处理framebuffers的关键功能。我找不到一种方法将纹理绑定到帧缓冲区并使用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 +,因为你在屏幕上绘图)。
答案 0 :(得分:7)
我怀疑所有Android设备都支持完全相同的OpenGL ES扩展集,或者他们都支持相同版本的OpenGL ES。
Framebuffer对象(FBO)是OpenGL ES 2.0核心规范的一部分;如果您的Android设备支持ES 2.0,那么它支持FBO。
如果您的Android设备支持ES 1.1,请使用 glGetString(GL_EXTENSIONS)检查 GL_OES_framebuffer_object 的扩展字符串。