基于video texture(camera流,视频流) 创建一个纹理


public int createTexture(){

  
    int[] mTextures = new int[1];
    GLES20.glGenTextures(1, mTextures , 0);
      
GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, mTextures[0]);
GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES,
        GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE);
GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES,
        GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE);
GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES,
        GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST);
GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES,
        GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_NEAREST);
     return mTextures[0];
   
}
//比如对于camera preview 的时候,在创建SurfaceTexture的时候,就要基于这个textureId 去创建,这样就可以连接到camera preview 数据流到这个纹理上。
大概的过程如下:
1)
int texture =createTexture();
surfaceTexture=new SurfaceTexture(texture);
2)

mCamera2.setPreviewTexture(surfaceTexture);//设置到camera 数据流
surfaceTexture.setOnFrameAvailableListener(new SurfaceTexture.OnFrameAvailableListener() {
@Override public void onFrameAvailable(SurfaceTexture surfaceTexture) { requestRender(); }});

3)

public void onDrawFrame(GL10 gl) {
    if(surfaceTexture!=null){
        surfaceTexture.updateTexImage();  //更新数据流到opengl 纹理上面去。
    }
   
}
4)顶点着色器,片元着色去要进行如下设置

private final String mVss =
        "attribute vec2 a_Position;\n" +
        "attribute vec2 a_TexCoord;\n" +
        "varying vec2 v_TexCoord;\n" +
        "void main() {\n" +
        "  v_TexCoord = a_TexCoord;\n" +
        "  gl_Position = vec4(a_Position.x, a_Position.y, 0.0, 1.0);\n" +
        "}";

private final String mFss =
        "#extension GL_OES_EGL_image_external : require\n" +
        "precision mediump float;\n" +
        "uniform samplerExternalOES u_Texture;\n" +
        "varying vec2 v_TexCoord;\n" +
        "void main() {\n" +
        "  gl_FragColor = texture2D(u_Texture,v_TexCoord);\n" +
        "}";


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值