Android OpenGLES渲染到纹理

Ben*_*tow 6 android opengl-es render-to-texture

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

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

  1. 使用画笔纹理和一行精灵在纹理A中创建黑色绘画描边
  2. 将画笔颜色+ alpha放在glColor4f中,然后将纹理A绘制到屏幕上.

在iPhone上,当用户的手指移动时,我会不断地这样做,并且我能够在第一代iPod Touch上实现12-15fps.这是必要的,因为将颜色和alpha应用于构成画笔笔划的各个精灵不会产生正确的结果(因为精灵重叠并使笔画太暗).

android平台支持OpenGL ES 1.0,但似乎省略了处理framebuffers的关键函数.我找不到一种方法将纹理绑定到帧缓冲区并使用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);
Run Code Online (Sandbox Code Playgroud)

Android平台上有这样的东西吗?在iPhone上,OpenGL比基于软件的绘图快得多,并且是唯一可行的解​​决方案(相信我 - 我也写了一个CoreGraphics绘画应用程序......).也许我可以在Android上使用另一条路线?我愿意跳过任何必要的箍,但我不会发布应用程序,除非性能良好(10fps +,因为你在屏幕上绘图).

pri*_*out 7

我怀疑所有的Android设备都支持完全相同的OpenGL ES扩展,或者他们都支持完全相同的OpenGL ES版本.

Framebuffer对象(FBO)是OpenGL ES 2.0核心规范的一部分; 如果您的Android设备支持ES 2.0,那么它支持FBO.

如果你的Android设备支持ES 1.1,那么使用glGetString(GL_EXTENSIONS)检查GL_OES_framebuffer_object的扩展字符串.

  • 对于任何感兴趣的人,这里是几个不同的Android设备上的GL_EXTENSIONS:http://www.rbgrn.net/content/345-hands-on-motorola-droid-opengl-es-specs看起来DROID是到目前为止只有Android手机支持帧缓存. (3认同)