package com.example.datalibrary.gl.shape; 
 | 
  
 | 
import android.graphics.SurfaceTexture; 
 | 
import android.opengl.GLES11Ext; 
 | 
import android.opengl.GLES20; 
 | 
  
 | 
  
 | 
public class GLFramebuffer { 
 | 
  
 | 
    private float[] mSTMatrix = new float[16]; 
 | 
  
 | 
    private int[] textures; 
 | 
  
 | 
    private SurfaceTexture surfaceTexture; 
 | 
    public void initFramebuffer(){ 
 | 
  
 | 
        textures = new int[1]; 
 | 
        GLES20.glGenTextures(1, textures, 0); 
 | 
        GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, textures[0]); 
 | 
        GLES20.glTexParameterf(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MIN_FILTER, 
 | 
                GLES20.GL_NEAREST); 
 | 
        GLES20.glTexParameterf(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MAG_FILTER, 
 | 
                GLES20.GL_LINEAR); 
 | 
        GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 0); 
 | 
    } 
 | 
  
 | 
    public SurfaceTexture getSurfaceTexture(){ 
 | 
        surfaceTexture = new SurfaceTexture(textures[0]); 
 | 
        return surfaceTexture; 
 | 
    } 
 | 
  
 | 
    public void release(){ 
 | 
        if (textures == null){ 
 | 
            return; 
 | 
        } 
 | 
        GLES20.glDeleteTextures(1 , textures , 0); 
 | 
        if (surfaceTexture != null ){ 
 | 
            surfaceTexture.release(); 
 | 
            surfaceTexture = null; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public int drawFrameBuffer(){ 
 | 
        if (surfaceTexture != null){ 
 | 
            surfaceTexture.updateTexImage(); 
 | 
            surfaceTexture.getTransformMatrix(mSTMatrix); 
 | 
        } 
 | 
        return textures[0]; 
 | 
    } 
 | 
  
 | 
    public float[] getMatrix() { 
 | 
        return mSTMatrix; 
 | 
    } 
 | 
  
 | 
} 
 |