2011-01-02 13 views
37

non ho trovato una spiegazione chiara su come funziona il sistema grafico di Android, in particolare, fa uso di un server di visualizzazione, si è basata su DirectFB o X11, eccAndroid grafiche Internals

Da quello che ho riuscito a mettere insieme, Android dipende dal Linux frame buffer. Non ho trovato molto sul tipo di server di visualizzazione o su Android window manager che utilizza l'accesso multiplex al framebuffer, quindi qualsiasi suggerimento sarebbe molto apprezzato!

Infine, da quello che ho capito il set di istruzioni ARM fornisce istruzioni per accelerare OpenGL, ma come questo si integri con il server di visualizzazione non è chiaro, vale a dire. le applicazioni client negoziano un buffer di memoria condiviso in cui il client scrive direttamente?

Le librerie OpenGL per l'acceleratore di piattaforma sono open source? Ho trovato alcuni riferimenti che suggeriscono che sono binari a sorgente chiusa. Ancora una volta, qualsiasi suggerimento sarebbe apprezzato.

+0

+1. Molto utile per le persone come me che hanno improvvisamente problemi legati alla visualizzazione .. :) potresti modificare il link del buffer del frame di linux. È stato cambiato e non più supportato sembra. Grazie in anticipo .. –

risposta

38

Ci sono due elementi fondamentali nella grafica Android: SurfaceFlinger e Skia. SurfaceFlinger è il compositore di Android, utilizzato dal gestore di finestre per creare e visualizzare finestre (in realtà chiamate superfici). SurfaceFlinger è attualmente implementato su OpenGL ES 1.x e può anche utilizzare altre tecniche di accelerazione hardware quando disponibili (MDP, un blitter 2D su il T-Mobile G1 o gli overlay hardware sullo Xoom)

Ogni applicazione esegue il rendering nelle sue finestre (o superfici) utilizzando principalmente Skia. Skia è la libreria grafica 2D di Android. È inoltre possibile utilizzare OpenGL ES 1.xe 2.0 per eseguire il rendering su una superficie.

Android non utilizza DirectFB o X11 o qualsiasi altra soluzione Linux esistente.

+0

E il window manager è un processo distinto condiviso da tutti i programmi, simile a un display server tradizionale? Possiede un accesso esclusivo al dispositivo di visualizzazione, ecc. – naasking

+0

Il gestore di finestre vive in system_process ma SurfaceFlinger possiede il dispositivo di visualizzazione, non il gestore di finestre. –

+0

Sono curioso del tuo commento su DirectFB. Se guardate la presentazione alla [presentazione di Jim Huang] (http://www.slideshare.net/jserv/design-and-concepts-of-android-graphics) noterete un riferimento ai framebuffer sulle diapositive 30 e 31. Come si differenziano da DirectFB? – CyberFonic

4

Romain Guy era sicuramente giusto. Ma la cosa è cambiata da Android 3.0. Skia non è più così importante, la maggior parte del disegno 2D viene accelerata usando openGL, un componente HWUI a.k.a.

+0

Quale potrebbe essere un buon punto di partenza per imparare lo stack grafico Android? – control

+0

@ppu una promozione spudorata del mio blog http://pierrchen.blogspot.com/, che ha parlato parecchio di grafica interna Android – pierrotlefou

+1

Voglio eseguire il debug di HWUI ma non so come farlo. Qualsiasi registro non può uscire. (PS: Sei un cinese e anche io, quindi per favore dai una mano.) – kangear

Problemi correlati