Android OpenGL+Camera2渲染(2) —— OpenGL实现Camera2图像预览

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是一个离

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值