Android OpenGL+Camera2渲染(1) —— OpenGL简单介绍
Android OpenGL+Camera2渲染(2) —— OpenGL实现Camera2图像预览
Android OpenGL+Camera2渲染(3) —— 大眼,贴纸功能实现
Android OpenGL+Camera2渲染(4) —— 美颜功能实现
Android OpenGL+Camera2渲染(5) —— 录制视频,实现快录慢录
使用GlRenderView(继承自GLSurfaceView)来进行预览。
构造方法中配置EGL版本和渲染模式,通过setRenderer设置GlSurfaceView中渲染监听 GLSurfaceView.Renderer。
public GlRenderView(Context context, AttributeSet attrs) {
super(context, attrs);
//设置EGL 版本
setEGLContextClientVersion(2);
glRender = new GlRenderWrapper(this);
setRenderer(glRender);
//手动渲染模式
setRenderMode(RENDERMODE_WHEN_DIRTY);
}
GLSurfaceView.Renderer
public interface Renderer {
//surface 创建监听
void onSurfaceCreated(GL10 gl, EGLConfig config);
//surface改变监听
void onSurfaceChanged(GL10 gl, int width, int height);
//负责纹理绘制
void onDrawFrame(GL10 gl);
}
我们配置的是手动渲染模式,这里如果想执行onDrawFrame方法,需要每来一帧图像,调用 requestRender()。
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
camera2Helper = new Camera2Helper((Activity) glRenderView.getContext());
mTextures = new int[1];
//创建一个纹理
GLES20.glGenTextures(mTextures.length, mTextures, 0);
//将纹理和离屏buffer绑定
mSurfaceTexture = new SurfaceTexture(mTextures[0]);
//监听有新图像到来
mSurfaceTexture.setOnFrameAvailableListener(this);
//使用fbo 将samplerExternalOES 输入到sampler2D中
cameraFilter = new CameraFilter(glRenderView.getContext());
//负责将图像绘制到屏幕上
screenFilter = new ScreenFilter(glRenderView.getContext());
}
onSurfaceCreated中,实例Camera2Helper对象,创建一个SurfaceTexture和纹理,并进行绑定。这个SurfaceTexture会传给Camera2中,camera2负责输入图像到SurfaceTexture中,这里的SurfaceTexture是一个离