diff --git a/app/src/main/java/com/seu/magicfilter/utils/OpenGlUtils.java b/app/src/main/java/com/seu/magicfilter/utils/OpenGlUtils.java index 92d7ae9..80d834e 100644 --- a/app/src/main/java/com/seu/magicfilter/utils/OpenGlUtils.java +++ b/app/src/main/java/com/seu/magicfilter/utils/OpenGlUtils.java @@ -18,17 +18,17 @@ import android.opengl.GLUtils; import android.util.Log; public class OpenGlUtils { - public static final int NO_TEXTURE = -1; - public static final int NOT_INIT = -1; - public static final int ON_DRAWN = 1; - - public static int loadTexture(final Bitmap img, final int usedTexId) { - return loadTexture(img, usedTexId, false); + public static final int NO_TEXTURE = -1; + public static final int NOT_INIT = -1; + public static final int ON_DRAWN = 1; + + public static int loadTexture(final Bitmap img, final int usedTexId) { + return loadTexture(img, usedTexId, false); } - - public static int loadTexture(final Bitmap img, final int usedTexId, boolean recyled) { - if(img == null) - return NO_TEXTURE; + + public static int loadTexture(final Bitmap img, final int usedTexId, boolean recyled) { + if(img == null) + return NO_TEXTURE; int textures[] = new int[1]; if (usedTexId == NO_TEXTURE) { GLES20.glGenTextures(1, textures, 0); @@ -49,108 +49,108 @@ public class OpenGlUtils { textures[0] = usedTexId; } if(recyled) - img.recycle(); + img.recycle(); return textures[0]; } - - public static int loadTexture(final Buffer data, final int width,final int height, final int usedTexId) { - if(data == null) - return NO_TEXTURE; - int textures[] = new int[1]; - if (usedTexId == NO_TEXTURE) { - GLES20.glGenTextures(1, textures, 0); - GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textures[0]); - GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, - GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); - GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, - GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR); - GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, - GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE); - GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, - GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE); - GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, width, height, - 0, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, data); - } else { - GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, usedTexId); - GLES20.glTexSubImage2D(GLES20.GL_TEXTURE_2D, 0, 0, 0, width, - height, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, data); - textures[0] = usedTexId; - } - return textures[0]; + + public static int loadTexture(final Buffer data, final int width,final int height, final int usedTexId) { + if(data == null) + return NO_TEXTURE; + int textures[] = new int[1]; + if (usedTexId == NO_TEXTURE) { + GLES20.glGenTextures(1, textures, 0); + GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textures[0]); + GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, + GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); + GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, + GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR); + GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, + GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE); + GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, + GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE); + GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, width, height, + 0, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, data); + } else { + GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, usedTexId); + GLES20.glTexSubImage2D(GLES20.GL_TEXTURE_2D, 0, 0, 0, width, + height, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, data); + textures[0] = usedTexId; + } + return textures[0]; } - - public static int loadTexture(final Buffer data, final int width,final int height, final int usedTexId,final int type) { - if(data == null) - return NO_TEXTURE; - int textures[] = new int[1]; - if (usedTexId == NO_TEXTURE) { - GLES20.glGenTextures(1, textures, 0); - GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textures[0]); - GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, - GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); - GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, - GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR); - GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, - GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE); - GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, - GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE); - GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, width, height, - 0, GLES20.GL_RGBA, type, data); - } else { - GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, usedTexId); - GLES20.glTexSubImage2D(GLES20.GL_TEXTURE_2D, 0, 0, 0, width, - height, GLES20.GL_RGBA, type, data); - textures[0] = usedTexId; - } - return textures[0]; + + public static int loadTexture(final Buffer data, final int width,final int height, final int usedTexId,final int type) { + if(data == null) + return NO_TEXTURE; + int textures[] = new int[1]; + if (usedTexId == NO_TEXTURE) { + GLES20.glGenTextures(1, textures, 0); + GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textures[0]); + GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, + GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); + GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, + GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR); + GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, + GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE); + GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, + GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE); + GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, width, height, + 0, GLES20.GL_RGBA, type, data); + } else { + GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, usedTexId); + GLES20.glTexSubImage2D(GLES20.GL_TEXTURE_2D, 0, 0, 0, width, + height, GLES20.GL_RGBA, type, data); + textures[0] = usedTexId; + } + return textures[0]; } - + public static int loadTexture(final Context context, final String name){ - final int[] textureHandle = new int[1]; - - GLES20.glGenTextures(1, textureHandle, 0); - - if (textureHandle[0] != 0){ - - // Read in the resource - final Bitmap bitmap = getImageFromAssetsFile(context,name); - - // Bind to the texture in OpenGL - GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureHandle[0]); - - // Set filtering - GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); - GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR); - GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE); - GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE); - // Load the bitmap into the bound texture. - GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0); - - // Recycle the bitmap, since its data has been loaded into OpenGL. - bitmap.recycle(); - } - - if (textureHandle[0] == 0){ - throw new RuntimeException("Error loading texture."); - } - - return textureHandle[0]; - } - - private static Bitmap getImageFromAssetsFile(Context context,String fileName){ - Bitmap image = null; - AssetManager am = context.getResources().getAssets(); - try{ - InputStream is = am.open(fileName); - image = BitmapFactory.decodeStream(is); - is.close(); - }catch (IOException e){ - e.printStackTrace(); - } - return image; - } - - public static int loadProgram(final String strVSource, final String strFSource) { + final int[] textureHandle = new int[1]; + + GLES20.glGenTextures(1, textureHandle, 0); + + if (textureHandle[0] != 0){ + + // Read in the resource + final Bitmap bitmap = getImageFromAssetsFile(context,name); + + // Bind to the texture in OpenGL + GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureHandle[0]); + + // Set filtering + GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); + GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR); + GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE); + GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE); + // Load the bitmap into the bound texture. + GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0); + + // Recycle the bitmap, since its data has been loaded into OpenGL. + bitmap.recycle(); + } + + if (textureHandle[0] == 0){ + throw new RuntimeException("Error loading texture."); + } + + return textureHandle[0]; + } + + private static Bitmap getImageFromAssetsFile(Context context,String fileName){ + Bitmap image = null; + AssetManager am = context.getResources().getAssets(); + try{ + InputStream is = am.open(fileName); + image = BitmapFactory.decodeStream(is); + is.close(); + }catch (IOException e){ + e.printStackTrace(); + } + return image; + } + + public static int loadProgram(final String strVSource, final String strFSource) { int iVShader; int iFShader; int iProgId; @@ -179,8 +179,8 @@ public class OpenGlUtils { GLES20.glDeleteShader(iFShader); return iProgId; } - - private static int loadShader(final String strSource, final int iType) { + + private static int loadShader(final String strSource, final int iType) { int[] compiled = new int[1]; int iShader = GLES20.glCreateShader(iType); GLES20.glShaderSource(iShader, strSource); @@ -192,39 +192,39 @@ public class OpenGlUtils { } return iShader; } - - public static int getExternalOESTextureID(){ - int[] texture = new int[1]; - GLES20.glGenTextures(1, texture, 0); - GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, texture[0]); - GLES20.glTexParameterf(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, - GL10.GL_TEXTURE_MIN_FILTER,GL10.GL_LINEAR); - GLES20.glTexParameterf(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, + + public static int getExternalOESTextureID(){ + int[] texture = new int[1]; + GLES20.glGenTextures(1, texture, 0); + GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, texture[0]); + GLES20.glTexParameterf(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, + GL10.GL_TEXTURE_MIN_FILTER,GL10.GL_LINEAR); + GLES20.glTexParameterf(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR); - GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, + GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE); - GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, + GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE); - return texture[0]; - } - - public static String readShaderFromRawResource(final int resourceId){ - final InputStream inputStream = MagicFilterFactory.getCurrentContext().getResources().openRawResource(resourceId); - final InputStreamReader inputStreamReader = new InputStreamReader(inputStream); - final BufferedReader bufferedReader = new BufferedReader(inputStreamReader); - - String nextLine; - final StringBuilder body = new StringBuilder(); - - try{ - while ((nextLine = bufferedReader.readLine()) != null){ - body.append(nextLine); - body.append('\n'); - } - } - catch (IOException e){ - return null; - } - return body.toString(); - } + return texture[0]; + } + + public static String readShaderFromRawResource(final int resourceId){ + final InputStream inputStream = MagicFilterFactory.getCurrentContext().getResources().openRawResource(resourceId); + final InputStreamReader inputStreamReader = new InputStreamReader(inputStream); + final BufferedReader bufferedReader = new BufferedReader(inputStreamReader); + + String nextLine; + final StringBuilder body = new StringBuilder(); + + try{ + while ((nextLine = bufferedReader.readLine()) != null){ + body.append(nextLine); + body.append('\n'); + } + } + catch (IOException e){ + return null; + } + return body.toString(); + } }