Android OpenGLES Render-to-Texture

Ich schreibe Grafik-Apps für das iPhone und möchte meine neueste App "Layer" auf die Android-Plattform portieren. Layers ist eine Mal-App, mit der Benutzer auf dem Bildschirm zeichnen und mehrschichtige Bilder mit verschiedenen Pinseln, Farben usw. erstellen und in PSD exportieren können. Es hat Desktop-Synchronisierung, ein Fleckentool, viele gute Sachen ...http://www.layersforiphone.com/

Ich habe am Montag angefangen, mir die Android-Plattform anzuschauen und bin auf ein großes Problem gestoßen. Ich benutze OpenGL, um alle Zeichnungen zu machen, weil es die beste Leistung bietet. Es gibt jedoch mehrere Stellen, an denen ich eine Textur rendern und dann die Textur verwenden muss. Zum Beispiel:

Verwenden Sie Pinseltextur und eine Reihe von Sprites, um einen schwarzen Pinselstrich in Textur A zu erstellenGib Pinselfarbe + Alpha in glColor4f ein und zeichne dann Textur A auf den Bildschirm.

Auf dem iPhone mache ich dies kontinuierlich, während sich der Finger des Benutzers bewegt und ich bin in der Lage, 12-15 fps auf einem iPod Touch der 1. Generation zu erreichen. Dies ist erforderlich, da das Anwenden von Farbe und Alpha auf die einzelnen Sprites, aus denen der Pinselstrich besteht, nicht zum richtigen Ergebnis führt (da sich Sprites überlappen und den Pinselstrich zu dunkel machen).

Die Android-Plattform unterstützt OpenGL ES 1.0, scheint jedoch wichtige Funktionen für den Umgang mit Framebuffers zu überspringen. Ich kann keine Möglichkeit finden, eine Textur an den Framebuffer zu binden und mit OpenGL darin zu zeichnen.

Auf dem iPhone würde ich normalerweise so vorgehen:

// 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);

Gibt es so etwas auf der Android-Plattform? OpenGL ist auf dem iPhone bedeutend schneller als softwarebasiertes Zeichnen und die einzige praktikable Lösung (vertrau mir - ich habe auch eine CoreGraphics-Mal-App geschrieben ...). Vielleicht gibt es einen anderen Weg, den ich auf Android nehmen könnte? Ich bin bereit, alle erforderlichen Schritte auszuführen, aber ich werde die App erst veröffentlichen, wenn die Leistung stimmtgut (10fps +, während Sie auf dem Bildschirm zeichnen).

Antworten auf die Frage(1)

Ihre Antwort auf die Frage