2013-01-17 15 views
6

Sto sviluppando un tipo di applicazione Android finger paint. Sto usando OpenGL ES 2.0. Fondamentalmente ho un'immagine in cui ogni touch screen dovrebbe corrispondere a un cerchio alfa da applicare dove viene mostrata l'altra immagine che si trova al di sotto. Ho provato diverse tecniche ma sono piuttosto lento perché funziona come l'uso di glTexSubImage2D organico che rallenta la fase di rendering. Sto cercando di capire l'uso di FBO in quanto consentono il rendering fuori schermo. Qualcuno può spiegare meglio cosa vuol dire rendere off-screen e quali vantaggi potrebbero ottenere per velocizzare il mio metodo?Android Opengl FBO offscreen

Suppongo che off-screen significa che è possibile modificare il framebuffer creato da me, fuori strada suDrawFrame? In un'altra discussione?

risposta

0

L'approccio richiede molta larghezza di banda di memoria in quanto è necessario leggere (parte) lo schermo e riscrivere la stessa quantità di dati nella memoria della GPU. Questo è molto lento e fa aspettare il codice del disegno prima che l'immagine sia stata spostata nella GPU prima del rendering. Hai pensato di disegnare quad per ogni finger press o qualche tipo di primitivo che si avvicini alle tue esigenze? Perché hai bisogno di OpenGL per questo?

1

Oltre ad essere in grado di rendere in una finestra sullo schermo utilizzando OpenGL ES 2.0 , si può anche rendere in non visibili superfici off-screen chiamato pbuffers (abbreviazione di buffer di pixel). I Pbuffer possono sfruttare al massimo qualsiasi accelerazione hardware disponibile per OpenGL ES 2.0, proprio come fa una finestra. I Pbuffer sono spesso usati per generare mappe di texture. Se tutto quello che vuoi fare è rendere una texture a , ti consigliamo di utilizzare oggetti framebuffer (coperti da nel capitolo 12, "Oggetti framebuffer") invece di pbuffer perché sono più efficienti . Tuttavia, i pbuffer possono ancora essere utili in alcuni casi in cui non è possibile utilizzare gli oggetti framebuffer , ad esempio quando si esegue il rendering di una superficie fuori schermo con OpenGL ES e quindi si utilizza come trama in un'altra API come come OpenVG.

[fonte: OpenGL ES guida di programmazione 2.0]

Spero che questo aiuta. Leggi attentamente - "Pbuffer può ancora essere utile per il rendering su una superficie fuori schermo con OpenGL ES"

+0

Tuttavia, ho visto menzionare che l'approccio di pbuffer è lento su Android, a causa della necessità di passare tra due contesti EGL. Cerca invece le risposte StackOverflow che utilizzano "oggetto framebuffer" come buffer fuori schermo. – ToolmakerSteve