安卓OpenGLES渲染到纹理

6
我写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上进行的操作:
// 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+),我不会发布该应用程序。

1个回答

8
我持怀疑态度,认为并非所有Android设备都支持完全相同的OpenGL ES扩展,或者它们都支持完全相同的OpenGL ES版本。
帧缓冲对象(FBO)是OpenGL ES 2.0核心规范的一部分;如果您的Android设备支持ES 2.0,则它支持FBOs。
如果您的Android设备支持ES 1.1,则使用 glGetString(GL_EXTENSIONS) 检查扩展字符串 GL_OES_framebuffer_object

3
对于任何有兴趣的人,以下是一些不同安卓设备上的 GL_EXTENSIONS 列表: http://www.rbgrn.net/content/345-hands-on-motorola-droid-opengl-es-specs目前看来,DROID 是唯一支持帧缓存的安卓手机。 - Ben Gotow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接