2013-01-17 7 views
6

Ich entwickle eine Android-Anwendung Typ Fingerfarbe. Ich benutze OpenGL ES 2.0. Grundsätzlich habe ich ein Bild, bei dem jeder Touchscreen einem Kreis-Alpha entsprechen sollte, um dort angewendet zu werden, wo das andere Bild darunter angezeigt wird. Ich habe verschiedene Techniken ausprobiert, bin aber eher langsam, weil es funktioniert wie organische glTexSubImage2D, die die Rendering-Phase verlangsamen. Ich versuche die Verwendung von FBO zu verstehen, da sie das Off-Screen-Rendering ermöglichen. Kann jemand besser erklären, was es bedeutet, vom Bildschirm zu rendern, und welche Vorteile könnten sich ergeben, um meine Methode zu beschleunigen?Android OpenGL FBO Offscreen

Ich vermute außerhalb des Bildschirms bedeutet, dass Sie den Framebuffer, der von mir erstellt wurde, aus dem Weg onDrawFrame ändern können? In einem anderen Thread?

Antwort

0

Sie nähern sich viel Speicherbandbreite, da Sie den Bildschirm (teilweise) zurücklesen und die gleiche Menge an Daten wieder in den GPU-Speicher zurückschreiben müssen. Das ist sehr langsam und lässt den Zeichnungscode warten, bis das Bild vor dem Rendern wieder auf die GPU verschoben wurde. Haben Sie in Betracht gezogen, Quads für jeden Fingerdruck oder irgendeine Art von Primitiven zu zeichnen, die Ihren Bedürfnissen entsprechen? Warum brauchst du OpenGL dafür?

1

Sie können nicht nur mit OpenGL ES 2.0 in ein On-Screen-Fenster rendern, sondern auch in nicht sichtbare Off-Screen-Oberflächen mit der Bezeichnung pbuffers (kurz für Pixelpuffer) rendern. Pbuffer können die gesamte für OpenGL ES 2.0 verfügbare Hardware ausnutzen, so wie es ein Fenster tut. Pbuffer werden am häufigsten zur Erzeugung von Texturkarten verwendet. Wenn Sie nur in eine Textur rendern möchten, empfehlen wir die Verwendung von Framebuffer-Objekten (abgedeckte in Kapitel 12, "Framebuffer Objects") anstelle von pbuffers, weil sie effizienter sind. Pbuffer können jedoch in einigen Fällen nützlich sein, in denen Framebuffer-Objekte nicht verwendet werden können, z. B. beim Rendern einer off-screen -Oberfläche mit OpenGL ES und dann als Textur in einer anderen API wie als OpenVG.

[Quelle: OpenGL ES 2.0 Programmieranleitung]

Ich hoffe, das hilft. Lesen Sie dies sorgfältig - "pbuffers kann immer noch nützlich sein für das Rendern auf eine Off-Screen-Oberfläche mit OpenGL ES"

+0

Allerdings habe ich erwähnt, dass pbuffer Ansatz ist langsam auf Android, aufgrund der zwischen zwei EGL-Kontexte wechseln müssen. Suchen Sie stattdessen nach Stackoverflow-Antworten, bei denen "Framebuffer-Objekt" als Offscreen-Puffer verwendet wird. – ToolmakerSteve

Verwandte Themen