2011-02-14 16 views
13

¿Alguien ha logrado que OpenGL ES 2.0 trabaje en un fondo de pantalla en vivo? Tengo una clase que usa OpenGL ES 2.0 y funciona bien como un Renderer para GLSurfaceView. Sin embargo, quiero que funcione como un fondo de pantalla en vivo. Encontré el GLWallpaperService de Robert Green, pero está basado en una versión anterior de GLSurfaceView y no es compatible con setEGLContextClientVersion, que es necesario para ejecutar OpenGL ES 2.0.Android Live Wallpapers con OpenGL ES 2.0?

+5

He encontrado una respuesta a mi propia pregunta en https://github.com/ghisguth/blurred-lines-live/blob/master/src/cxa/lineswallpaper/Wallpaper.java –

+0

Gracias por el enlace, I He estado buscando lo mismo :) – kusma

+0

@MJP: ¡Agradable! Por favor responda su propia pregunta con el enlace. – Macarse

Respuesta

9

He logrado hacer funcionar un LWP basado en OpenGL extendiendo GLSurfaceView y luego envolviéndolo en un servicio de fondos de pantalla. No he probado específicamente si OpenGL es 2.0 funciona con este método, pero no veo ninguna razón por la que no lo haga.

Puede encontrar los archivos específicos de LWP en https://github.com/JesusFreke/Penroser/tree/master/src/org/jf/GLWallpaper. Deben ser genéricos y utilizables como están en otros proyectos. Para un ejemplo de cómo utilizar estas clases, consulte https://github.com/JesusFreke/Penroser/blob/master/src/org/jf/Penroser/PenroserLiveWallpaper.java

+0

Después de leer la fuente GLSurfaceView por un tiempo, terminé con una implementación/idea algo similar para obtener soporte OpenGL para WallpaperService. Pero la razón para comentar tu respuesta es que creo que estás perdiendo GLThread en tu implementación de GLWallpaper. Se cancela solo una vez que se llama a GLSurfaceView.onDetachedFromWindow() (o puede llamarlo manualmente en este caso), onSurfaceDestroyed() lo pone solo en estado de espera. – harism

+0

@harism: ¿cómo lo implementó de manera diferente? He trabajado con el servicio de fondo de pantalla de JesusFreke por un tiempo, y funcionó muy bien. El único problema es cuando se aplica el fondo de pantalla desde el modo de vista previa, donde GLThread a veces arroja una excepción, pero no puedo entender cómo resolverlo. –

+1

@Daniel Schuler La única diferencia es que implementé un método '' onDestroy() '' para GLSurfaceView que simplemente se escribe como '' void onDestroy() {super.onDetachedFromWindow()} ''. Llamar a esto matará la hebra GL subyacente, de lo contrario se dejará en estado inactivo en el fondo. Sin embargo, no puedo decir si tiene algo con el problema al que te enfrentas. – harism

1

El código en this blog post adapta GLWallpaperService de Robert Green para trabajar con OpenGL ES 2.0. Puede tener cierto éxito al usarlo, sin embargo, probablemente sea más fácil para usted utilizar la implementación de JesusFreke.

Si tiene éxito en mejorar GLWallpaperService, por favor submit your changes back to the project para que todos podamos beneficiarnos.

Cuestiones relacionadas