È possibile eseguire il rendering di una vista (ad esempio una visualizzazione Web) su un FBO in modo che possa essere utilizzato come trama in una composizione OpenGL?È possibile eseguire il rendering di una vista Android su un FBO o texture OpenGL?
risposta
Sì è certamente possibile, ho redatto un how-to qui; http://www.felixjones.co.uk/neo%20website/Android_View/
Tuttavia, per gli elementi statici che non cambieranno, l'opzione bitmap potrebbe essere migliore.
Ho trovato che non tutte le viste possono essere disegnate. TextureView non può essere disegnato in questo modo. Potresti risolverlo? – dragonfly
@fadden Se utilizzo TextureView, ho trovato onSurfaceTextureAvailable di TextureView.OnFrameAvailableListener non richiamato. Perché TextureView non può essere disegnato in questo modo? – dragonfly
Almeno qualcuno è riuscito a rendere il testo in questo modo:
Rendering Text in OpenGL on Android
Esso descrive il metodo che ho usato per il rendering di testo dinamico di alta qualità efficiente utilizzando OpenGL ES 1.0, con TrueType/OpenType file di carattere.
[...]
L'intero processo è in realtà abbastanza semplice. Generiamo la bitmap (come una trama), calcoliamo e memorizziamo le dimensioni di ciascun carattere, nonché la sua posizione sulla trama (coordinate UV). Ci sono altri dettagli più fini, ma ci arriveremo.
OpenGL ES 2.0 Versione: https://github.com/d3kod/Texample2
Il progetto di dimostrazione completo che consente di visualizzare in tempo reale le trame GL in modo efficiente è disponibile in this repo. Mostra come eseguire il rendering di WebView su GL in tempo reale come esempio.
anche una breve codice per questo può apparire come il seguente (preso dal progetto demo dal repo sopra):
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 demo uscita screenshot:
- 1. OpenGL FBO renderbuffer o texture attatchment
- 2. Android Opengl FBO offscreen
- 3. In OpenGL è possibile per un programma shader, in una chiamata di estrazione, eseguire il rendering sia su un FBO che sul framebuffer predefinito?
- 4. È possibile eseguire il rendering di script Android su GPU?
- 5. Corruzione opengl texture Android
- 6. OpenGL render-to-texture-via-FBO - visualizzazione errata rispetto al normale Texture
- 7. Compressione texture OpenGL Android
- 8. Rendering CIImage in texture OpenGL ES 2.0 su iOS
- 9. Rendering OpenGL ES su richiesta con GLKit
- 10. Android OpenGL - ES Texture bleeding
- 11. OpenGL ES Android Framebuffer - Rendering profondità del buffer di trama
- 12. OpenGL - Rendering in una trama
- 13. Rendering su texture non power-of-two su iPhone
- 14. E 'possibile associare un OpenCV GpuMat come una texture OpenGL?
- 15. Rendering su texture su iOS OpenGL ES-funziona su simulatore, ma non sul dispositivo
- 16. OpenGL ES Render to Texture
- 17. OpenGL ES black texture su Nexus S
- 18. OpenGL: Gli oggetti sono lisce se, di solito disegnato, ma bordate durante il rendering di FBO
- 19. Come eseguire il rendering su GL_TEXTURE_EXTERNAL_OES?
- 20. OpenGL Texture Mapping
- 21. OpenGL emisfero Texture Mapping
- 22. Texture OpenGL Android Trasparente Disegna Nero
- 23. Come utilizzare il multicampionamento con gli FBO OpenGL
- 24. È possibile eseguire Encog o Neuroph su Android?
- 25. È possibile posizionare una vista su un'altra in Android?
- 26. FFMPEG a OpenGL Texture
- 27. Rendering OpenGL su un elemento QML
- 28. Opengl - La modifica di glDrawBuffers è memorizzata in un FBO? No?
- 29. È possibile mascherare una vista in Android?
- 30. Come eseguire il rendering di testo dal vivo OpenGL per una GUI?
continuamente? O come una sorta di affare istantaneo di una sola volta? – kabuko
@kabuko continuamente. – bobpoekert
Per quanto ne so, no. AFAIK meglio che puoi fare è rendere View to Bitmap e assegnarlo a texture usando GLUtils. – harism