5

Tôi đang cố gắng gửi bản xem trước máy ảnh đến một đối tượng surfacetexture và hiển thị nó trên một hình vuông. Tôi đã chạy mã cho GLES20 nhưng didnt tìm thấy bất cứ điều gì cho 1.x. Về cơ bản nó sẽ hoạt động như thế này, phải không?android OpenGLES 1.x CameraPreview để Surfacetexture

// setup texture 
gl.glActiveTexture(GL10.GL_TEXTURE0); 
gl.glGenTextures(1, textures, 0); 
gl.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, textures[0]); 
gl.glTexParameterf(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, ...); 
... 

// setup surfacetexture object 
surface = new SurfaceTexture(textures[0]); 
surface.setOnFrameAvailableListener(this); 


// setup camera 
mCamera = Camera.open(0); 
Camera.Parameters param = mCamera.getParameters(); 
List<Size> psize = param.getSupportedPreviewSizes(); 
//find previewsize to match glsurface from renderer 
param.setPreviewSize(psize.get(i).width, psize.get(i).height); 
mCamera.setParameters(param); 

// set the texture and start preview 
mCamera.setPreviewTexture(surface); 
mCamera.startPreview(); 


// in the "onFrameAvailable" handler, i switch a flag to mark a new frame 
updateSurface = true; 


// and in the renderloop i update and redraw 
if (updateSurface) { 
    surface.updateTexImage(); 
    updateSurface = false; 
} 
gl.glActiveTexture(GL10.GL_TEXTURE0); 
gl.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, textures[0]); 

// Draw square 
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBufferFloor); 
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer); 
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, vertices.length/3); 

Hình vuông được vẽ nhưng hoàn toàn trắng. Tôi không nhận được glErrors hoặc các ngoại lệ khác. Trình xử lý "onFrameAvailable" cũng được gọi. Nếu tôi sử dụng glTeximage với bitmap đã tải, nó được vẽ chính xác trên hình vuông.

BẤT K ideas ý tưởng nào? Cảm ơn bạn!

Trả lời

7

Tôi đang gặp phải vấn đề tương tự. Có lẽ tôi sai, nhưng có vẻ như SurfaceTexture không tương thích với GLES10. Kết cấu bề mặt sử dụng GL_TEXTURE_EXTERNAL_OES, do đó nó là một trình đổ bóng đoạn tùy chỉnh có thể sử dụng kết cấu này ("#extension GL_OES_EGL_image_external: require").

Vì glUseProgram (...), v.v. không có trong GLES10, chúng tôi không thể sử dụng các trình đổ bóng tùy chỉnh.

Như tôi đã nói, có thể tôi sai ... Chúc may mắn

EDIT: Tôi cuối cùng làm cho nó hoạt động. Bạn nên sử dụng "gl.glEnable (GLES11Ext.GL_TEXTURE_EXTERNAL_OES);"

+0

Dude, chỉnh sửa của bạn là nội dung khiến nó hoạt động sau 4 giờ tìm kiếm câu trả lời. Cảm ơn. – Mikle

+0

Cảm ơn bạn. Chỉ cần đọc nó, không thể xác minh tại thời điểm này. Vì cả hai đều đồng ý rằng nó hoạt động, tôi gắn cờ nó. –