Có thể hiển thị Chế độ xem (nói, một WebView) thành FBO để nó có thể được sử dụng làm kết cấu trong một thành phần OpenGL không?Có thể hiển thị Chế độ xem Android cho OpenGL FBO hoặc kết cấu không?
Trả lời
Yes là nó chắc chắn có thể, tôi đã viết lên một cách để ở đây; http://www.felixjones.co.uk/neo%20website/Android_View/
Tuy nhiên đối với các phần tử tĩnh không thay đổi, tùy chọn bitmap có thể tốt hơn.
Tôi thấy không phải tất cả các chế độ xem đều có thể vẽ. TextureView không thể vẽ như thế này. Bạn có thể giải quyết nó? – dragonfly
@fadden Nếu tôi sử dụng TextureView, tôi tìm thấy trênSurfaceTextureAvailable của TextureView.OnFrameAvailableListener không được gọi lại. Tại sao TextureView không thể vẽ như thế này? – dragonfly
Ít nhất một người quản lý để làm cho văn bản theo cách này:
Rendering Text in OpenGL on Android
Nó mô tả các phương pháp tôi đã sử dụng để biểu diễn chất lượng cao văn bản động hiệu quả sử dụng OpenGL ES 1.0, với TrueType/OpenType tệp phông chữ.
[...]
Toàn bộ quá trình thực sự là khá dễ dàng. Chúng tôi tạo bitmap (như một kết cấu), tính toán và lưu trữ kích thước của mỗi nhân vật, cũng như vị trí của nó trên kết cấu (tọa độ UV). Có một số chi tiết khác tốt hơn, nhưng chúng tôi sẽ nhận được điều đó.
OpenGL ES 2.0 Version: https://github.com/d3kod/Texample2
Dự án trình diễn hoàn chỉnh hiển thị chế độ xem kết cấu GL theo thời gian thực theo cách hiệu quả có thể được tìm thấy trong this repo. Nó cho thấy làm thế nào để render WebView thành GL texture trong thời gian thực như là một ví dụ.
Ngoài ra một mã ngắn gọn cho điều này có thể trông giống như sau (lấy từ dự án trình diễn từ repo trên):
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;
}
}
Bản demo đầu ra ảnh chụp màn hình:
- 1. OpenGL FBO renderbuffer hoặc kết cấu attatchment
- 2. WebGL - hiển thị độ sâu cho kết cấu fbo không hoạt động
- 3. Kết cấu không hiển thị chính xác - có thể tọa độ không đúng OpenGL, C++
- 4. Chế độ xem hiển thị Android GONE
- 5. Hiển thị chế độ xem từ chế độ không xem/chế độ xem trong mvvmcross
- 6. ViewModel của tôi có thể xem ObservableCollection của Chế độ xem hoặc Chế độ xem không?
- 7. phát video ở đầu chế độ xem OpenGL trong android
- 8. Trình xem phân cấp Android không hiển thị chỉ báo hiệu suất cho chế độ xem
- 9. Kết cấu OpenGL có nhiều ngữ cảnh hiển thị
- 10. Android: Có thể tạo bản sao Chế độ xem không?
- 11. Hiển thị văn bản động trong chế độ xem Android
- 12. OpenGL ES có thể hiển thị kết cấu của kích thước không cơ sở 2 không?
- 13. Cách hiển thị chế độ xem không có mẫu?
- 14. Có thể che giấu Chế độ xem trong Android không?
- 15. Android - Nhận diện tích hiển thị của chế độ xem?
- 16. Chế độ xem và hiển thị
- 17. Hiển thị chế độ xem Rails thành chuỗi cho email
- 18. UIView bringSubviewToFront: không * không * hiển thị chế độ xem trước
- 19. Chế độ xem trong Nhóm tùy chỉnh Chế độ xem không hiển thị
- 20. hiển thị định nghĩa chế độ xem
- 21. Có thể đặt một chế độ xem trên một chế độ xem khác trong Android không?
- 22. Tôi có thể cung cấp cho chế độ xem hoạt ảnh hiển thị trong emberjs
- 23. bố cục Android có chế độ hiển thị GONE
- 24. Android Hiển thị thông báo trên thanh trạng thái mà không có chế độ xem có thể mở rộng
- 25. hiển thị kết quả của nhiều truy vấn DB/mongoose cho chế độ xem trong express.js
- 26. Ember.js - Hiển thị chế độ xem phương thức với URL và chế độ xem gốc vẫn hiển thị
- 27. Lỗi ModelState không hiển thị trong chế độ xem
- 28. Cách tải chế độ xem cho một mục trong chế độ xem danh sách trong Android?
- 29. Django, hiển thị chế độ xem ở chế độ xem khác?
- 30. Có chế độ xem web tốt hơn cho Android
liên tục? Hoặc như một loại hình chụp nhanh một lần thỏa thuận? – kabuko
@kabuko Liên tục. – bobpoekert
Theo như tôi biết, không. AFAIK tốt nhất bạn có thể làm là render View to Bitmap và gán nó cho texture bằng GLUtils. – harism