2012-03-21 20 views
7

Necesito aplicar algunos sombreadores de píxeles a un mapa de bits (usando OpenGL) y enviar el resultado al servidor. Se supone que la representación se realiza en segundo plano, por lo que no puedo crear GLSurfaceView para este fin. Entonces mi pregunta es: ¿es posible hacer un renderizado OpenGL en Android sin usar GLSurfaceView? ¿Como renderizar directamente en mapa de bits, o lienzo o algún tipo de búfer/matriz? ¿O puede ser posible utilizar algún tipo de GLSurfaceView ficticio?OpenGl render directamente a mapa de bits (sin ninguna vista)

+0

Posible duplicado de [Ejecute Android OpenGL en segundo plano como recurso de representación para la aplicación?] (Http://stackoverflow.com/questions/6524212/run-android-opengl-in-background-as-rendering-resource-for- aplicación) –

Respuesta

4

This SO post contiene un enlace a an anddev post. Un poco hacia abajo, alguien creó una clase PixelBuffer que reutiliza la interfaz GLSurfaceView.Renderer, pero aparte de eso, solo EGL.

+0

Afortunadamente, acabo de terminar mi propio procesador basado en la misma idea. Gracias por la respuesta y el pensamiento de enlace. Puede ser útil para otros. –

+0

El objeto PixelBuffer mencionado contiene una buena prueba de concepto, pero tiene un problema de rendimiento crítico: una vez que se representa el búfer, se realiza una segunda copia del mapa de bits copiando cada píxel en un bucle que puede causar un 100% o más Aumentar el tiempo de ejecución! Solo muestra que es importante mantener tus marcos de referencia alineados en OGL. – tomwhipple

+1

Además, PixelBuffer funciona en algunos teléfonos, pero no en otros. ¡Yay, fragmentación! – tomwhipple

0

Parece que desea procesar un objeto de búfer de cuadros (es decir, directamente a una textura). Esto es definitivamente posible. Simplemente busque la respuesta aquí o en la web. Encontré este sin esforzarme demasiado. No estoy seguro de si está usando GL ES 1.1 o 2.0.

http://blog.shayanjaved.com/2011/05/13/android-opengl-es-2-0-render-to-texture/

También se parece a APIDemos en el SDK tiene una muestra de 1,1

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/FrameBufferObjectActivity.html

+0

Gracias por la respuesta. Como puedo ver, ambos métodos dependen de GLSurfaceView. Necesito que mi representación se realice sin ninguna pantalla/actividad/diseño disponible. Quiero decir en algún hilo de fondo. Me pregunto si GLSurfaceView puede crear contexto GL sin poder inicializar su superficie (ya que requiere una pantalla para dibujar). Gracias por la pista de todos modos, esto parece ser útil. –

+0

@boulder ¿GLSurfaceView no se inicializa si está fuera de la pantalla? ¿Qué pasa si está en la pantalla por 1px? –

+0

@BradMoore No recuerdo ahora. Puede verificar esto usted mismo bastante fácil. Por lo que recuerdo, no es posible usar GLSurfaceView sin una pantalla. 1px no era una opción ya que el renderizado debería haberse realizado en el servicio. –

Cuestiones relacionadas