我写iPhone上的图形应用程序,现在想将我最新的应用程序“Layers”移植到Android平台。 Layers是一款绘画应用程序,允许用户在屏幕上绘制并创建具有不同笔刷,颜色等的多层绘画,并导出为PSD文件。它具有桌面同步,涂抹工具和很多好东西... http://www.layersforiphone.com/
我开始研究Android平台,并遇到了一个主要问题。我使用OpenGL进行所有绘制,因为它提供最佳性能。然而,有几个地方需要渲染到纹理,然后再使用纹理。例如:
1. 使用笔刷纹理和一行精灵在纹理A中创建黑色绘画笔触 2. 在glColor4f中放置笔刷颜色+ alpha,然后将纹理A绘制到屏幕上。
在iPhone上,随着用户手指移动,我会持续这样做,并且能够在第一代iPod Touch上实现12-15fps。这是必要的,因为将颜色和alpha应用于组成笔刷笔触的单个精灵不会产生正确的结果(因为精灵重叠并使笔触过于黑暗)。
Android平台支持OpenGL ES 1.0,但似乎遗漏了处理帧缓冲区的关键功能。我找不到一种方法将纹理绑定到帧缓冲区并使用OpenGL将其绘制到其中。
以下是我通常在iPhone上进行的操作:
1. 使用笔刷纹理和一行精灵在纹理A中创建黑色绘画笔触 2. 在glColor4f中放置笔刷颜色+ alpha,然后将纹理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+),我不会发布该应用程序。