Ho bisogno di applicare alcuni shader di pixel a un bitmap (usando OpenGL) e inviare i risultati al server. Il rendering dovrebbe essere fatto in background, quindi non posso creare GLSurfaceView per questo scopo. Quindi la mia domanda è: è possibile rendere il rendering OpenGL su Android senza utilizzare GLSurfaceView? Come eseguire il rendering direttamente su bitmap, canvas o una sorta di buffer/array? Oppure è possibile utilizzare una sorta di dummy GLSurfaceView?OpenGl renderizza direttamente in bitmap (senza alcuna vista)
risposta
This SO post contiene un link al an anddev post. Un po 'verso il basso, qualcuno ha creato una classe PixelBuffer
che riutilizza l'interfaccia GLSurfaceView.Renderer
, ma a parte questo, solo EGL.
Fortunatamente ho appena finito il mio renderer basato sulla stessa idea. Grazie per la risposta e il link pensato. Può essere utile per gli altri. –
L'oggetto PixelBuffer menzionato contiene una buona dimostrazione del concetto, ma presenta un problema di prestazioni critiche: una volta eseguito il rendering del buffer, viene eseguita una seconda copia della bitmap copiando ciascun pixel in un ciclo che può causare un 100% o più aumento del tempo di esecuzione! Basta mostrare che è importante mantenere i frame di riferimento direttamente in OGL. – tomwhipple
Inoltre, PixelBuffer funziona su alcuni telefoni ma non su altri. Yay frammentazione! – tomwhipple
Sembra che si desideri eseguire il rendering su un oggetto frame buffer (ovvero direttamente su una trama). Questo è sicuramente possibile. Basta cercare la risposta qui o sul web. Ho trovato questo senza tentare troppo. Non sono sicuro che tu stia utilizzando GL ES 1.1 o 2.0.
http://blog.shayanjaved.com/2011/05/13/android-opengl-es-2-0-render-to-texture/
Sembra anche APIDemos nel SDK è un campione per 1,1
Grazie per la risposta. Come posso vedere entrambi i metodi dipende da GLSurfaceView. Ho bisogno che il mio rendering venga realizzato senza alcuna schermata/attività/layout disponibile. Intendo in qualche thread in background. Mi chiedo se GLSurfaceView sia in grado di creare il contesto GL senza essere in grado di inizializzare la sua superficie (in quanto richiede uno schermo per disegnare a). Grazie per il suggerimento comunque questo sembra essere utile. –
@boulder GLSurfaceView non si inizializza se è fuori dallo schermo? Cosa succede se è sullo schermo di 1px? –
@BradMoore Non ricordo ora. Puoi controllarlo da solo abbastanza facilmente. Per quanto mi ricordo non è possibile usare GLSurfaceView senza uno schermo. 1px non era un'opzione in quanto il rendering avrebbe dovuto essere eseguito in servizio. –
Possibile duplicato di [Esegui Android OpenGL in background come risorsa di rendering per l'app?] (Http://stackoverflow.com/questions/6524212/run-android-opengl-in-background-as-rendering-resource-for- app) –