6

我为 iPhone 编写图形应用程序,并希望将我最近的应用程序“图层”移植到 Android 平台。Layers 是一款绘画应用程序,允许用户在屏幕上绘画并使用不同的画笔、颜色等创建多层绘画......并导出为 PSD。它有桌面同步,涂抹工具,很多好东西...... http://www.layersforiphone.com/

我周一开始研究 Android 平台,但遇到了一个大问题。我使用 OpenGL 来完成所有的绘图,因为它提供了最好的性能。但是,有几个地方我需要渲染成纹理然后使用纹理。例如:

  1. 使用画笔纹理和精灵线在纹理 A 中创建黑色笔触
  2. 将画笔颜色+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+),否则我不会发布该应用程序。

4

1 回答 1

8

我怀疑所有 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的扩展字符串。

于 2009-11-11T19:34:49.477 回答