¿Es posible renderizar una Vista de Android a una FBO o textura de OpenGL?

¿Es posible renderizar una Vista (digamos, un WebView) a una FBO para que pueda ser utilizada como una textura en una composición de OpenGL?

Sí, es ciertamente posible, he escrito un how-to aquí; http://www.felixjones.co.uk/neo%20website/Android_View/

Sin embargo, para los elementos estáticos que no cambian, la opción de mapa de bits puede ser mejor.

El proyecto de demostración completo que ofrece una visión a las texturas GL en tiempo real de manera eficiente se puede encontrar en este repo . Muestra cómo renderizar la textura de WebView a GL en tiempo real como ejemplo.

También un breve código para esto puede parecer lo siguiente (tomado del proyecto de demostración del repo de arriba):

public class GLWebView extends WebView { private ViewToGLRenderer mViewToGLRenderer; ... // drawing magic @Override public void draw( Canvas canvas ) { //returns canvas attached to gl texture to draw on Canvas glAttachedCanvas = mViewToGLRenderer.onDrawViewBegin(); if(glAttachedCanvas != null) { //translate canvas to reflect view scrolling float xScale = glAttachedCanvas.getWidth() / (float)canvas.getWidth(); glAttachedCanvas.scale(xScale, xScale); glAttachedCanvas.translate(-getScrollX(), -getScrollY()); //draw the view to provided canvas super.draw(glAttachedCanvas); } // notify the canvas is updated mViewToGLRenderer.onDrawViewEnd(); } ... } public class ViewToGLRenderer implements GLSurfaceView.Renderer{ private SurfaceTexture mSurfaceTexture; private Surface mSurface; private int mGlSurfaceTexture; private Canvas mSurfaceCanvas; ... @Override public void onDrawFrame(GL10 gl){ synchronized (this){ // update texture mSurfaceTexture.updateTexImage(); } } @Override public void onSurfaceChanged(GL10 gl, int width, int height){ releaseSurface(); mGlSurfaceTexture = createTexture(); if (mGlSurfaceTexture > 0){ //attach the texture to a surface. //It's a clue class for rendering an android view to gl level mSurfaceTexture = new SurfaceTexture(mGlSurfaceTexture); mSurfaceTexture.setDefaultBufferSize(mTextureWidth, mTextureHeight); mSurface = new Surface(mSurfaceTexture); } } public Canvas onDrawViewBegin(){ mSurfaceCanvas = null; if (mSurface != null) { try { mSurfaceCanvas = mSurface.lockCanvas(null); }catch (Exception e){ Log.e(TAG, "error while rendering view to gl: " + e); } } return mSurfaceCanvas; } public void onDrawViewEnd(){ if(mSurfaceCanvas != null) { mSurface.unlockCanvasAndPost(mSurfaceCanvas); } mSurfaceCanvas = null; } } 

La captura de pantalla de la versión de demostración:

Al menos alguien logró hacer el texto de esta manera:

Procesamiento de texto en OpenGL en Android

Describe el método que utilicé para renderizar texto dinámico de alta calidad con OpenGL ES 1.0, con archivos de fuentes TrueType / OpenType.

[…]

Todo el proceso es bastante fácil. Generamos el mapa de bits (como textura), calculamos y almacenamos el tamaño de cada carácter, así como su ubicación en la textura (coordenadas UV). Hay algunos otros detalles más finos, pero vamos a llegar a eso.

Versión de OpenGL ES 2.0: https://github.com/d3kod/Texample2

  • ¿Qué significan los argumentos para frustum en OpenGL?
  • Android glGLStravelEurope o glDrawElements?
  • Android - tutoriales para OpenGL ES 2.0 usando el NDK?
  • Texto movible en Opengl Android
  • Android ICS: intento de error JNI para usar referencia local obsoleta 0x1
  • OpenGL ES 1.1: ¿Cómo cambiar el color de la textura sin perder luminancia?
  • ¿Cómo superponer GLSurfaceView sobre un MapView en Android?
  • Android NDK - OpenGL ES Tutorial / Bibliotecas
  • Cómo mover un cuadrado OpenGL con el dedo?
  • Coordenadas de textura en opengl android mostrando la imagen invertida
  • Tratar de dibujar triángulos con textura en el dispositivo falla, pero el emulador funciona. ¿Por qué?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.