| 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; | 
|     } | 
|   | 
| } |