Autore Topic: GLSurfaceView.Renderer eseguito in un thread separato ?  (Letto 933 volte)

Offline aeroxr1

  • Utente junior
  • **
  • Post: 76
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    galaxy nexus
  • Sistema operativo:
    window 8.1
GLSurfaceView.Renderer eseguito in un thread separato ?
« il: 28 Agosto 2014, 12:50:30 CEST »
0
Ciao,
guardando le guide di openGl sul sito di android e i reference, mi rimane un dubbio.

Tutto ciò che è all'interno della classe GLSurfaceView.REnderer viene eseguito automaticamente in un thread separato ? O devo farlo io manualmente ?


Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:GLSurfaceView.Renderer eseguito in un thread separato ?
« Risposta #1 il: 28 Agosto 2014, 14:01:48 CEST »
+1
È eseguito in un thread separato. Il compito del thread può essere continuo o richiamato in modo asincrono, di solito quando cambia qualcosa e si vuole visualizzare i cambiamenti.

Il comportamento del thread è configurabile:

http://developer.android.com/reference/android/opengl/GLSurfaceView.html#setRenderMode(int)

Inviato dal mio Nexus 5 utilizzando Tapatalk

adb logcat | tee /tmp/logcat | grep TAG

Offline aeroxr1

  • Utente junior
  • **
  • Post: 76
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    galaxy nexus
  • Sistema operativo:
    window 8.1
Re:GLSurfaceView.Renderer eseguito in un thread separato ?
« Risposta #2 il: 28 Agosto 2014, 15:29:37 CEST »
0
Allora ho capito bene :D

I comandi quindi vengono intercettati tramite UIthread e poi passati all'altro thread ?
 
Se voglio che l'animazione sia all'interno di un fragments il GLSurfaceView e l'onTouchEvent(MotionEvent me) per prendere i comandi mi creeranno problemi ?

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:GLSurfaceView.Renderer eseguito in un thread separato ?
« Risposta #3 il: 28 Agosto 2014, 15:40:39 CEST »
+1
Non capisco cosa intendi per <comandi>, le OpenGL-ES sono delle librerie che gestiscono oggetti grafici a basso livello.

Anche la seconda parte non è chiara, se scrivi del codice corretto non hai sicuramente problemi.


Inviato dal mio Nexus 5 utilizzando Tapatalk

adb logcat | tee /tmp/logcat | grep TAG

Offline aeroxr1

  • Utente junior
  • **
  • Post: 76
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    galaxy nexus
  • Sistema operativo:
    window 8.1
Re:GLSurfaceView.Renderer eseguito in un thread separato ?
« Risposta #4 il: 05 Settembre 2014, 13:51:59 CEST »
0
per comandi intendevo gli eventi intercettati dall'onTouchEvent :)

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:GLSurfaceView.Renderer eseguito in un thread separato ?
« Risposta #5 il: 05 Settembre 2014, 14:04:03 CEST »
+1
Ok, così è più chiaro, comunque si chiamano eventi più che comandi. Ti ricordo che con le OpenGL-ES ignorano totalmente le periferiche di input, devi usare le API di Android per catturare gli eventi, elaborarli se necessario e passarli al codice che utilizza le OpenGL-ES.

Inviato dal mio Nexus 5 utilizzando Tapatalk

adb logcat | tee /tmp/logcat | grep TAG

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:GLSurfaceView.Renderer eseguito in un thread separato ?
« Risposta #6 il: 08 Settembre 2014, 12:45:42 CEST »
+1
Io partirei dal "caso peggiore", cioè dal rendering continuo.

Il tuo thread di rendering gira e disegna qualcosa, per esempio un semplice triangolo.
Per disegnare questo triangolo in una certa posizione devi avere dei parametri (sespostare il punto di vista e lasciare fermo il triangolo il concetto è lo stesso).

Poi hai un thread separato in cui ti arriva un evento tal dei tali che deve modificare quei parametri.

Semplicemente NON devi modificare quei parametri mentre stai calcolando la matrice/attributo o altro. Si tratta di ridurre tutto a delle operazioni atomiche. Per il resto la modifica dei parametri la fai sul thread della ui mentre ogni chiamata opengl deve per forza stare nel thread opengl.

Poi che tu ottenga l'atomicità delle operazioni con degli attributi synchronized, con delle copie dei parametri o altro poco importa... l'importante è che se modifichi un parametro tu non lo faccia mentre stai costruendo la matrice o passando l'attributo.

 :-)

Offline aeroxr1

  • Utente junior
  • **
  • Post: 76
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    galaxy nexus
  • Sistema operativo:
    window 8.1
Re:GLSurfaceView.Renderer eseguito in un thread separato ?
« Risposta #7 il: 16 Settembre 2014, 00:53:13 CEST »
0
Si ora ho il dubbio se disegnare solo quando mi arriva il dato o in maniera continua . Devo ancora provare la prima soluzione, con la seconda sembra funzionare.
Ora volevo modificare il layout della glsurfaceview e farla più piccola, e ho visto che dovrebbe essere facilmente fattibile.
Un po meno fattibile (ma non impossibile) è metterla all'interno di un fragment o sbaglio ?
« Ultima modifica: 16 Settembre 2014, 01:02:43 CEST da aeroxr1 »