我为 iPhone 编写图形应用程序,并希望将我最近的应用程序“图层”移植到 Android 平台。Layers 是一款绘画应用程序,允许用户在屏幕上绘画并使用不同的画笔、颜色等创建多层绘画......并导出为 PSD。它有桌面同步,涂抹工具,很多好东西...... 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 上采取另一条路线?我愿意跳过任何必要的环节,但除非性能良好(当您在屏幕上绘制时为 10fps+),否则我不会发布该应用程序。