diff --git a/library/src/main/java/com/seu/magicfilter/base/gpuimage/GPUImageFilter.java b/library/src/main/java/com/seu/magicfilter/base/gpuimage/GPUImageFilter.java index ece02bd..bac9a30 100644 --- a/library/src/main/java/com/seu/magicfilter/base/gpuimage/GPUImageFilter.java +++ b/library/src/main/java/com/seu/magicfilter/base/gpuimage/GPUImageFilter.java @@ -49,11 +49,6 @@ public class GPUImageFilter { private int mGLTextureCoordinateIndex; private int mGLTextureTransformIndex; - private int mGLScreenProgId; - private int mGLScreenPositionIndex; - private int mGLScreenInputImageTextureIndex; - private int mGLScreenTextureCoordinateIndex; - protected int mInputWidth; protected int mInputHeight; protected int mOutputWidth; @@ -74,11 +69,11 @@ public class GPUImageFilter { } public GPUImageFilter(MagicFilterType type) { - this(type, R.raw.vertex_oes, R.raw.fragment_oes); + this(type, R.raw.vertex, R.raw.fragment); } public GPUImageFilter(MagicFilterType type, int fragmentShaderId) { - this(type, R.raw.vertex_oes, fragmentShaderId); + this(type, R.raw.vertex, fragmentShaderId); } public GPUImageFilter(MagicFilterType type, int vertexShaderId, int fragmentShaderId) { @@ -106,8 +101,7 @@ public class GPUImageFilter { protected void onInit() { initVbo(); - loadExternalSamplerShader(); - loadInternalSamplerShader(); + loadSamplerShader(); } protected void onInitialized() { @@ -119,7 +113,6 @@ public class GPUImageFilter { destroyFboTexture(); destoryVbo(); GLES20.glDeleteProgram(mGLProgId); - GLES20.glDeleteProgram(mGLScreenProgId); onDestroy(); } @@ -137,7 +130,7 @@ public class GPUImageFilter { mOutputHeight = height; } - private void loadExternalSamplerShader() { + private void loadSamplerShader() { mGLProgId = OpenGLUtils.loadProgram(OpenGLUtils.readShaderFromRawResource(getContext(), mVertexShaderId), OpenGLUtils.readShaderFromRawResource(getContext(), mFragmentShaderId)); mGLPositionIndex = GLES20.glGetAttribLocation(mGLProgId, "position"); @@ -146,14 +139,6 @@ public class GPUImageFilter { mGLInputImageTextureIndex = GLES20.glGetUniformLocation(mGLProgId, "inputImageTexture"); } - private void loadInternalSamplerShader() { - mGLScreenProgId = OpenGLUtils.loadProgram(OpenGLUtils.readShaderFromRawResource(getContext(), R.raw.vertex_default), - OpenGLUtils.readShaderFromRawResource(getContext(), R.raw.fragment_default)); - mGLScreenPositionIndex = GLES20.glGetAttribLocation(mGLScreenProgId, "position"); - mGLScreenTextureCoordinateIndex = GLES20.glGetAttribLocation(mGLScreenProgId,"inputTextureCoordinate"); - mGLScreenInputImageTextureIndex = GLES20.glGetUniformLocation(mGLScreenProgId, "inputImageTexture"); - } - private void initVbo() { mGLCubeId = new int[1]; mGLTextureCoordinateId = new int[1]; @@ -245,11 +230,6 @@ public class GPUImageFilter { } public int onDrawFrame(int cameraTextureId) { - int fboTexId = DrawToFboTexture(cameraTextureId); - return DrawToScreen(fboTexId); - } - - private int DrawToFboTexture(int textureId) { if (!mIsInitialized) { return OpenGLUtils.NOT_INIT; } @@ -272,7 +252,7 @@ public class GPUImageFilter { GLES20.glUniformMatrix4fv(mGLTextureTransformIndex, 1, false, mGLTextureTransformMatrix, 0); GLES20.glActiveTexture(GLES20.GL_TEXTURE0); - GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, textureId); + GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, cameraTextureId); GLES20.glUniform1i(mGLInputImageTextureIndex, 0); onDrawArraysPre(); @@ -284,6 +264,8 @@ public class GPUImageFilter { GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0); GLES20.glViewport(0, 0, mOutputWidth, mOutputHeight); + GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4); + onDrawArraysAfter(); GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, 0); @@ -296,41 +278,6 @@ public class GPUImageFilter { return mGLFboTexId[0]; } - private int DrawToScreen(int textureId) { - if (!mIsInitialized) { - return OpenGLUtils.NOT_INIT; - } - - if (mGLFboId == null) { - return OpenGLUtils.NO_TEXTURE; - } - - GLES20.glUseProgram(mGLScreenProgId); - - GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, mGLCubeId[0]); - GLES20.glEnableVertexAttribArray(mGLScreenPositionIndex); - GLES20.glVertexAttribPointer(mGLScreenPositionIndex, 2, GLES20.GL_FLOAT, false, 4 * 2, 0); - - GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, mGLTextureCoordinateId[0]); - GLES20.glEnableVertexAttribArray(mGLScreenTextureCoordinateIndex); - GLES20.glVertexAttribPointer(mGLScreenTextureCoordinateIndex, 2, GLES20.GL_FLOAT, false, 4 * 2, 0); - - GLES20.glActiveTexture(GLES20.GL_TEXTURE0); - GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureId); - GLES20.glUniform1i(mGLScreenInputImageTextureIndex, 0); - - GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4); - - GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 0); - - GLES20.glDisableVertexAttribArray(mGLScreenPositionIndex); - GLES20.glDisableVertexAttribArray(mGLScreenTextureCoordinateIndex); - - GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0); - - return OpenGLUtils.ON_DRAWN; - } - protected void onDrawArraysPre() {} protected void onDrawArraysAfter() {} diff --git a/library/src/main/res/raw/fragment_oes.glsl b/library/src/main/res/raw/fragment.glsl similarity index 100% rename from library/src/main/res/raw/fragment_oes.glsl rename to library/src/main/res/raw/fragment.glsl diff --git a/library/src/main/res/raw/fragment_default.glsl b/library/src/main/res/raw/fragment_default.glsl deleted file mode 100644 index 87f3b32..0000000 --- a/library/src/main/res/raw/fragment_default.glsl +++ /dev/null @@ -1,9 +0,0 @@ -precision mediump float; - -varying mediump vec2 textureCoordinate; - -uniform sampler2D inputImageTexture; - -void main() { - gl_FragColor = texture2D(inputImageTexture, textureCoordinate); -} diff --git a/library/src/main/res/raw/vertex_oes.glsl b/library/src/main/res/raw/vertex.glsl similarity index 100% rename from library/src/main/res/raw/vertex_oes.glsl rename to library/src/main/res/raw/vertex.glsl diff --git a/library/src/main/res/raw/vertex_default.glsl b/library/src/main/res/raw/vertex_default.glsl deleted file mode 100644 index 720aa9d..0000000 --- a/library/src/main/res/raw/vertex_default.glsl +++ /dev/null @@ -1,9 +0,0 @@ -attribute vec4 position; -attribute vec4 inputTextureCoordinate; - -varying vec2 textureCoordinate; - -void main() { - textureCoordinate = inputTextureCoordinate.xy; - gl_Position = position; -}