我为 iPhone 编写图形应用程序,并且希望将我最新的应用程序“Layers”移植到 Android 平台。 Layers 是一款绘画应用程序,允许用户在屏幕上绘画并使用不同的画笔、颜色等创建多层绘画......并导出到 PSD。它有桌面同步、涂抹工具、很多好东西......http://www.layersforiphone.com/ http://www.layersforiphone.com/
我周一开始研究 Android 平台,遇到了一个大问题。我使用 OpenGL 来完成所有绘图,因为它提供了最佳性能。然而,有几个地方我需要渲染成纹理然后使用该纹理。例如:
- 使用画笔纹理和精灵线在纹理 A 中创建黑色绘画描边
- 将笔刷颜色+alpha放入glColor4f中,然后将纹理A绘制到屏幕上。
在 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 上采取另一条路线?我愿意克服任何必要的困难,但除非性能达到要求,否则我不会发布该应用程序good(当您在屏幕上绘图时为 10fps+)。