Czy można renderować widok (powiedzmy WebView) do pliku FBO, aby można go było wykorzystać jako teksturę w kompozycji OpenGL?Czy można renderować widok Androida do pliku FBO lub tekstury OpenGL?
Odpowiedz
Tak to jest z pewnością możliwe, napisałem nawet how-to tutaj; http://www.felixjones.co.uk/neo%20website/Android_View/
Jednak w przypadku elementów statycznych, które nie ulegną zmianie, opcja bitmapy może być lepsza.
Znalazłem, że nie wszystkie widoki można narysować. TextureView nie może być rysowany w ten sposób. Czy możesz to rozwiązać? – dragonfly
@fadden Jeśli używam TextureView, znalazłem OnSurfaceTextureAvailable z TextureView.OnFrameAvailableListener nie oddzwonił. Dlaczego nie można rysować TextureView w ten sposób? – dragonfly
Przynajmniej ktoś zdołał uczynić tekst w następujący sposób:
Rendering Text in OpenGL on Android
To opisuje metodę użyłem do świadczenia wysokiej jakości tekst dynamiczny sprawnie użyciu OpenGL ES 1.0, TrueType/OpenType pliki czcionek.
[...]
Cały proces jest całkiem proste. Generujemy mapę bitową (jako teksturę), obliczamy i przechowujemy rozmiar każdego znaku, a także jego położenie na fakturze (współrzędne UV). Jest kilka innych drobniejszych szczegółów, ale do tego dojdziemy.
OpenGL ES 2.0 Wersja: https://github.com/d3kod/Texample2
Cały projekt demonstracyjny, który renderuje widok tekstur GL w czasie rzeczywistym w efektywny sposób, można znaleźć w this repo. Pokazuje, jak renderować WebView do tekstury GL w czasie rzeczywistym jako przykład.
również krótki kod może wyglądać następująco (zaczerpnięte z projektu demo z repo powyżej):
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;
}
}
wyjście ekranu Demo:
- 1. Przetwarzanie bufora renderowania OpenGL FBO lub tekstura
- 2. Replikacja ramek FBO do tekstury jest bardzo powolna, używając OpenGL ES 2.0 na Androida, dlaczego?
- 3. Czy jest możliwe dołączenie domyślnego bufora renderowania do pliku FBO?
- 4. OpenGL ES Renderowanie do tekstury
- 5. Czy należy odwrócić tekstury OpenGL?
- 6. Czy można użyć losowego identyfikatora tekstury?
- 7. Jakie kroki należy wykonać, aby renderować moją scenę do obiektu bufora ramki (FBO), a następnie renderować FBO na ekran?
- 8. Kompresja tekstury OpenGL systemu Android
- 9. Android OpenGL FBO poza ekranem
- 10. Android korupcja tekstury OpenGL
- 11. Czy renderowanie DirectComposition do tekstury?
- 12. Tekstury OpenGL losowo nie pokazano
- 13. OpenGL ES Tekstury asynchroniczne ładowanie
- 14. Zmiana przezroczystości tekstury w OpenGL
- 15. Dynamiczna zmiana tekstury w OpenGL
- 16. Jaki jest najlepszy sposób na obsługę wiadomości FBO w OpenGL?
- 17. Jak renderować częściowy widok asynchronicznie?
- 18. Przesyłanie tekstury OpenGL: UNSIGNED_BYTE kontra UNSIGNED_INT_8_8_8_8
- 19. OpenGL: Przedmioty są gładkie jeśli normalnie wyciągnąć, ale krawędziach przy renderowaniu do FBO
- 20. Piksele odczytu Androida od GL_TEXTURE_EXTERNAL_OES
- 21. Tekstury zmiennoprzecinkowe w OpenGL ES 2.0
- 22. Ładowanie tekstury dla OpenGL z OpenCV
- 23. Jaki jest zakres identyfikatora tekstury OpenGL?
- 24. widok Androida lub surfaceView, którego powinienem użyć?
- 25. Tekstury zmiennoprzecinkowe w OpenGL ES 2.0 na iOS bez mocowania ich do [0, 1]
- 26. int array OpenGL tekstury w android
- 27. Cieniowanie OpenGL GeoHigter integer tekstury nie działa.
- 28. OpenGL ES: Odcień tekstury w kolorze
- 29. OpenGL - Jak uzyskać dostęp do wartości bufora głębokości? - Lub: gl_FragCoord.z vs. Renderowanie głębi do tekstury
- 30. OpenGL, tekstury mają zawsze ten sam rozmiar
ciągły? Lub jako jednorazowy rodzaj migawki? – kabuko
@kabuko Ciągle. – bobpoekert
O ile wiem, nie. Najlepiej, aby AFAIK renderował widok do bitmapy i przypisywał go do tekstury za pomocą GLUtils. – harism