Android OpenGLES渲染

我为iPhone编写图形应用程序,并且希望将最新的应用程序“Layers”移植到Android平台。 图层是绘画应用程序,允许用户在屏幕上绘制并使用不同的画笔,颜色等创建多层次的绘画......并输出到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 +)。


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

    链接地址: http://www.djcxy.com/p/33873.html

    上一篇: Android OpenGLES Render

    下一篇: Why is there ffmpeg codec noise when encoding test tone?