From 27e12ef5724bb02b9913bf32a2b676fdcc53b438 Mon Sep 17 00:00:00 2001 From: Suneet Agrawal Date: Wed, 24 Jul 2019 17:54:11 +0530 Subject: [PATCH] added setting shaders --- .../com/otaliastudios/cameraview/CameraView.java | 16 ++++++++++++++++ .../cameraview/internal/egl/EglViewport.java | 9 +++++---- .../cameraview/preview/GlCameraPreview.java | 4 ++++ 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java index e54bfaab..b1f070be 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java @@ -26,6 +26,7 @@ import androidx.annotation.ColorInt; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import android.util.AttributeSet; +import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; @@ -67,6 +68,8 @@ import com.otaliastudios.cameraview.preview.CameraPreview; import com.otaliastudios.cameraview.preview.GlCameraPreview; import com.otaliastudios.cameraview.preview.SurfaceCameraPreview; import com.otaliastudios.cameraview.preview.TextureCameraPreview; +import com.otaliastudios.cameraview.shadereffects.ShaderInterface; +import com.otaliastudios.cameraview.shadereffects.effects.BlackAndWhiteEffect; import com.otaliastudios.cameraview.size.AspectRatio; import com.otaliastudios.cameraview.size.Size; import com.otaliastudios.cameraview.size.SizeSelector; @@ -2129,4 +2132,17 @@ public class CameraView extends FrameLayout implements LifecycleObserver { } //endregion + + //region Effects + + public void changeEffect(ShaderInterface shader) { + if (mCameraPreview instanceof GlCameraPreview) { + String effect = shader.getShader(((GlCameraPreview) mCameraPreview).getView()); + ((GlCameraPreview) mCameraPreview).setEffectFragmentShader(effect); + } else { + LOG.e("changeEffect", "changeEffect is supported only for GLSurfaceView"); + } + } + + //endregion } diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/internal/egl/EglViewport.java b/cameraview/src/main/java/com/otaliastudios/cameraview/internal/egl/EglViewport.java index e015cb7b..0840de77 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/internal/egl/EglViewport.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/internal/egl/EglViewport.java @@ -79,10 +79,7 @@ public class EglViewport extends EglElement { public EglViewport() { mTextureTarget = GLES11Ext.GL_TEXTURE_EXTERNAL_OES; - //mProgramHandle = createProgram(SIMPLE_VERTEX_SHADER, SIMPLE_FRAGMENT_SHADER); - - ShaderInterface effect = new BlackAndWhiteEffect(); - mProgramHandle = createProgram(SIMPLE_VERTEX_SHADER, effect.getShader(null)); + mProgramHandle = createProgram(SIMPLE_VERTEX_SHADER, SIMPLE_FRAGMENT_SHADER); maPositionLocation = GLES20.glGetAttribLocation(mProgramHandle, "aPosition"); checkLocation(maPositionLocation, "aPosition"); @@ -124,6 +121,10 @@ public class EglViewport extends EglElement { return texId; } + public void changeEffectFragmentShader(String fragmentShader){ + mProgramHandle = createProgram(SIMPLE_VERTEX_SHADER, fra); + } + public void drawFrame(int textureId, float[] textureMatrix) { drawFrame(textureId, textureMatrix, mVertexCoordinatesArray, diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/preview/GlCameraPreview.java b/cameraview/src/main/java/com/otaliastudios/cameraview/preview/GlCameraPreview.java index 525c579d..c88a921a 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/preview/GlCameraPreview.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/preview/GlCameraPreview.java @@ -308,4 +308,8 @@ public class GlCameraPreview extends CameraPreview