diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java index b652e326..c5f01edb 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java @@ -19,6 +19,7 @@ import android.graphics.PointF; import android.graphics.Rect; import android.location.Location; import android.media.MediaActionSound; +import android.opengl.GLSurfaceView; import android.os.Build; import android.os.Handler; import android.os.Looper; @@ -68,7 +69,7 @@ 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.BaseShaderEffect; import com.otaliastudios.cameraview.shadereffects.effects.BlackAndWhiteEffect; import com.otaliastudios.cameraview.size.AspectRatio; import com.otaliastudios.cameraview.size.Size; @@ -579,7 +580,8 @@ public class CameraView extends FrameLayout implements LifecycleObserver { if( MotionEvent.ACTION_UP == event.getAction()) { Log.d("Suneet Agrawal", "onTouchEvent " + event.getAction()); - changeEffect(new BlackAndWhiteEffect()); + BlackAndWhiteEffect effect = new BlackAndWhiteEffect(); + changeEffect(effect); } return true; @@ -2142,9 +2144,18 @@ public class CameraView extends FrameLayout implements LifecycleObserver { //region Effects - public void changeEffect(ShaderInterface shader) { + public GLSurfaceView getCurrentPreviewingGlSurfaceView(){ if (mCameraPreview instanceof GlCameraPreview) { - String effect = shader.getShader(((GlCameraPreview) mCameraPreview).getView()); + return ((GlCameraPreview) mCameraPreview).getView(); + } + + LOG.w("getCurrentPreviewingGlSurfaceView", "current preview is not GLSurfaceView"); + return null; + } + + public void changeEffect(BaseShaderEffect shader) { + if (mCameraPreview instanceof GlCameraPreview) { + String effect = shader.getFragmentShader(); ((GlCameraPreview) mCameraPreview).setEffectFragmentShader(effect); //doInstantiatePreview(); 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 8567adca..1859fb2e 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 @@ -5,8 +5,6 @@ import android.opengl.GLES11Ext; import android.opengl.GLES20; import com.otaliastudios.cameraview.CameraLogger; -import com.otaliastudios.cameraview.shadereffects.ShaderInterface; -import com.otaliastudios.cameraview.shadereffects.effects.BlackAndWhiteEffect; import java.nio.FloatBuffer; diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/BaseShaderEffect.java b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/BaseShaderEffect.java new file mode 100644 index 00000000..29270b9a --- /dev/null +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/BaseShaderEffect.java @@ -0,0 +1,104 @@ +package com.otaliastudios.cameraview.shadereffects; + +import android.opengl.GLSurfaceView; + +/** + * An interface that every effect must implement so that there is a common + * getFragmentShader method that every effect class is force to override + */ +public abstract class BaseShaderEffect { + + /** + * Empty default constructor + */ + public BaseShaderEffect(){ + } + + /** + * parameterized constructor with previewing GLSurfaceView as parameter + * @param glSurfaceView + */ + public BaseShaderEffect(GLSurfaceView glSurfaceView) { + this.mGlSurfaceView = glSurfaceView; + } + + /** + * Previewing GlSurfaceview. + * This will be used by a few effects. + */ + protected GLSurfaceView mGlSurfaceView; + + public void setGlSurfaceView(GLSurfaceView glSurfaceView) { + this.mGlSurfaceView = glSurfaceView; + } + + public String getPositionVariableName() { + return mPositionVariableName; + } + + /** + * Local variable name which were used in the shader code. + * These will be used by openGL program to render these vertex and fragment shader + */ + private String mPositionVariableName = "aPosition"; + private String mTextureCoordinateVariableName = "aTextureCoord"; + private String mMVPMatrixVariableName = "uMVPMatrix"; + private String mTextureMatrixVariableName = "uTexMatrix"; + + + public void setPositionVariableName(String positionVariableName) { + this.mPositionVariableName = positionVariableName; + } + + public String getTexttureCoordinateVariableName() { + return mTextureCoordinateVariableName; + } + + public void setTexttureCoordinateVariableName(String texttureCoordinateVariableName) { + this.mTextureCoordinateVariableName = texttureCoordinateVariableName; + } + + public String getMVPMatrixVariableName() { + return mMVPMatrixVariableName; + } + + public void setMVPMatrixVariableName(String mvpMatrixVariableName) { + this.mMVPMatrixVariableName = mvpMatrixVariableName; + } + + public String getTextureMatrixVariableName() { + return mTextureMatrixVariableName; + } + + public void setTextureMatrixVariableName(String textureMatrixVariableName) { + this.mTextureMatrixVariableName = textureMatrixVariableName; + } + + /** + * Get vertex Shader code + * + * @return complete shader code in C + *

+ * This is the default implementation, each effect can implement its own. + */ + public String getVertextShader() { + return "uniform mat4 uMVPMatrix;\n" + + "uniform mat4 uTexMatrix;\n" + + "attribute vec4 aPosition;\n" + + "attribute vec4 aTextureCoord;\n" + + "varying vec2 vTextureCoord;\n" + + "void main() {\n" + + " gl_Position = uMVPMatrix * aPosition;\n" + + " vTextureCoord = (uTexMatrix * aTextureCoord).xy;\n" + + "}\n"; + } + + + /** + * Get fragment Shader code + * + * @return complete shader code in C + */ + public abstract String getFragmentShader(); + +} diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/ShaderInterface.java b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/ShaderInterface.java deleted file mode 100644 index 09a39c24..00000000 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/ShaderInterface.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.otaliastudios.cameraview.shadereffects; - -import android.opengl.GLSurfaceView; - -/** - * An interface that every effect must implement so that there is a common - * getShader method that every effect class is force to override - */ -public interface ShaderInterface { - /** - * Returns Shader code - * - * @param mGlSurfaceView - * send this for every shader but this will only be used when the - * shader needs it. - * @return complete shader code in C - */ - public String getShader(GLSurfaceView mGlSurfaceView); - -} diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/AutoFixEffect.java b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/AutoFixEffect.java index 3e9efcce..42afb1e9 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/AutoFixEffect.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/AutoFixEffect.java @@ -1,13 +1,14 @@ package com.otaliastudios.cameraview.shadereffects.effects; -import android.opengl.GLSurfaceView; - -import com.otaliastudios.cameraview.shadereffects.ShaderInterface; +import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect; /** * Attempts to auto-fix the preview based on histogram equalization. */ -public class AutoFixEffect implements ShaderInterface { +public class AutoFixEffect extends BaseShaderEffect { + + + private float scale; /** @@ -26,7 +27,7 @@ public class AutoFixEffect implements ShaderInterface { } @Override - public String getShader(GLSurfaceView mGlSurfaceView) { + public String getFragmentShader() { String shader = "#extension GL_OES_EGL_image_external : require\n" + "precision mediump float;\n" diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/BlackAndWhiteEffect.java b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/BlackAndWhiteEffect.java index cdea63b3..5e9b21c6 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/BlackAndWhiteEffect.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/BlackAndWhiteEffect.java @@ -1,21 +1,21 @@ package com.otaliastudios.cameraview.shadereffects.effects; -import android.opengl.GLSurfaceView; - -import com.otaliastudios.cameraview.shadereffects.ShaderInterface; +import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect; /** * Converts the preview into black and white colors */ -public class BlackAndWhiteEffect implements ShaderInterface { +public class BlackAndWhiteEffect extends BaseShaderEffect { + + /** - * Initialize Effect + * Initialize effect */ - public BlackAndWhiteEffect() { + public BlackAndWhiteEffect(){ } @Override - public String getShader(GLSurfaceView mGlSurfaceView) { + public String getFragmentShader() { String shader = "#extension GL_OES_EGL_image_external : require\n" + "precision mediump float;\n" diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/BrightnessEffect.java b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/BrightnessEffect.java index 0d399834..d684428b 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/BrightnessEffect.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/BrightnessEffect.java @@ -1,13 +1,11 @@ package com.otaliastudios.cameraview.shadereffects.effects; -import android.opengl.GLSurfaceView; - -import com.otaliastudios.cameraview.shadereffects.ShaderInterface; +import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect; /** * Adjusts the brightness of the preview. */ -public class BrightnessEffect implements ShaderInterface { +public class BrightnessEffect extends BaseShaderEffect { private float brightnessValue; /** @@ -25,7 +23,7 @@ public class BrightnessEffect implements ShaderInterface { } @Override - public String getShader(GLSurfaceView mGlSurfaceView) { + public String getFragmentShader() { String shader = "#extension GL_OES_EGL_image_external : require\n" + "precision mediump float;\n" diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/ContrastEffect.java b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/ContrastEffect.java index 6dddb63a..103a7955 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/ContrastEffect.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/ContrastEffect.java @@ -1,12 +1,10 @@ package com.otaliastudios.cameraview.shadereffects.effects; -import android.opengl.GLSurfaceView; - -import com.otaliastudios.cameraview.shadereffects.ShaderInterface; +import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect; /** * Adjusts the contrast of the preview. */ -public class ContrastEffect implements ShaderInterface { +public class ContrastEffect extends BaseShaderEffect { private float contrast; /** @@ -24,7 +22,7 @@ public class ContrastEffect implements ShaderInterface { } @Override - public String getShader(GLSurfaceView mGlSurfaceView) { + public String getFragmentShader() { String shader = "#extension GL_OES_EGL_image_external : require\n" + "precision mediump float;\n" diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/CrossProcessEffect.java b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/CrossProcessEffect.java index d576901d..8b327cc1 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/CrossProcessEffect.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/CrossProcessEffect.java @@ -1,14 +1,12 @@ package com.otaliastudios.cameraview.shadereffects.effects; -import android.opengl.GLSurfaceView; - -import com.otaliastudios.cameraview.shadereffects.ShaderInterface; +import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect; /** * Applies a cross process effect on preview, in which the red and green channels * are enhanced while the blue channel is restricted. */ -public class CrossProcessEffect implements ShaderInterface { +public class CrossProcessEffect extends BaseShaderEffect { /** * Initialize Effect @@ -17,7 +15,7 @@ public class CrossProcessEffect implements ShaderInterface { } @Override - public String getShader(GLSurfaceView mGlSurfaceView) { + public String getFragmentShader() { String shader = "#extension GL_OES_EGL_image_external : require\n" + "precision mediump float;\n" diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/DocumentaryEffect.java b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/DocumentaryEffect.java index 8eb0e713..b03351e7 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/DocumentaryEffect.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/DocumentaryEffect.java @@ -2,7 +2,7 @@ package com.otaliastudios.cameraview.shadereffects.effects; import android.opengl.GLSurfaceView; -import com.otaliastudios.cameraview.shadereffects.ShaderInterface; +import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect; import java.util.Date; import java.util.Random; @@ -10,22 +10,13 @@ import java.util.Random; /** * Applies black and white documentary style effect on preview. */ -public class DocumentaryEffect implements ShaderInterface { +public class DocumentaryEffect extends BaseShaderEffect { private int mWidth; private int mHeight; private Random mRandom; - /** - * Initialize Effect - */ - public DocumentaryEffect() { - - } - /** * Init all values that will be used by this shader. - * - * @param mGlSurfaceView which is responsible for displaying your video */ private void initValues(GLSurfaceView mGlSurfaceView) { mWidth = mGlSurfaceView.getWidth(); @@ -34,7 +25,7 @@ public class DocumentaryEffect implements ShaderInterface { } @Override - public String getShader(GLSurfaceView mGlSurfaceView) { + public String getFragmentShader() { initValues(mGlSurfaceView); float scale[] = new float[2]; if (mWidth > mHeight) { diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/DuotoneEffect.java b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/DuotoneEffect.java index 9ef654af..1626121e 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/DuotoneEffect.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/DuotoneEffect.java @@ -1,14 +1,13 @@ package com.otaliastudios.cameraview.shadereffects.effects; import android.graphics.Color; -import android.opengl.GLSurfaceView; -import com.otaliastudios.cameraview.shadereffects.ShaderInterface; +import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect; /** * Representation of preview using only two color tones. */ -public class DuotoneEffect implements ShaderInterface { +public class DuotoneEffect extends BaseShaderEffect { // Default values private int mFirstColor = Color.MAGENTA; private int mSecondColor = Color.YELLOW; @@ -27,7 +26,7 @@ public class DuotoneEffect implements ShaderInterface { } @Override - public String getShader(GLSurfaceView mGlSurfaceView) { + public String getFragmentShader() { float first[] = {Color.red(mFirstColor) / 255f, Color.green(mFirstColor) / 255f, Color.blue(mFirstColor) / 255f}; float second[] = {Color.red(mSecondColor) / 255f, diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/FillLightEffect.java b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/FillLightEffect.java index 99da3d2c..850674ba 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/FillLightEffect.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/FillLightEffect.java @@ -1,13 +1,11 @@ package com.otaliastudios.cameraview.shadereffects.effects; -import android.opengl.GLSurfaceView; - -import com.otaliastudios.cameraview.shadereffects.ShaderInterface; +import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect; /** * Applies back-light filling to the preview. */ -public class FillLightEffect implements ShaderInterface { +public class FillLightEffect extends BaseShaderEffect { private float strength = 0f; /** @@ -25,7 +23,7 @@ public class FillLightEffect implements ShaderInterface { } @Override - public String getShader(GLSurfaceView mGlSurfaceView) { + public String getFragmentShader() { float fade_gamma = 0.3f; float amt = 1.0f - strength; float mult = 1.0f / (amt * 0.7f + 0.3f); diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/GammaEffect.java b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/GammaEffect.java index c18293d0..a60085e4 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/GammaEffect.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/GammaEffect.java @@ -1,13 +1,11 @@ package com.otaliastudios.cameraview.shadereffects.effects; -import android.opengl.GLSurfaceView; - -import com.otaliastudios.cameraview.shadereffects.ShaderInterface; +import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect; /** * Apply Gamma Effect on preview being played */ -public class GammaEffect implements ShaderInterface { +public class GammaEffect extends BaseShaderEffect { private float gammaValue; /** @@ -25,7 +23,7 @@ public class GammaEffect implements ShaderInterface { } @Override - public String getShader(GLSurfaceView mGlSurfaceView) { + public String getFragmentShader() { String shader = "#extension GL_OES_EGL_image_external : require\n" + "precision mediump float;\n" diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/GrainEffect.java b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/GrainEffect.java index 26e7a3b9..bb1efbe1 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/GrainEffect.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/GrainEffect.java @@ -2,7 +2,7 @@ package com.otaliastudios.cameraview.shadereffects.effects; import android.opengl.GLSurfaceView; -import com.otaliastudios.cameraview.shadereffects.ShaderInterface; +import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect; import java.util.Date; import java.util.Random; @@ -10,7 +10,7 @@ import java.util.Random; /** * Applies film grain effect to preview. */ -public class GrainEffect implements ShaderInterface { +public class GrainEffect extends BaseShaderEffect { private int mWidth; private int mHeight; private float strength; @@ -42,7 +42,7 @@ public class GrainEffect implements ShaderInterface { } @Override - public String getShader(GLSurfaceView mGlSurfaceView) { + public String getFragmentShader() { initValues(mGlSurfaceView); float seed[] = {mRandom.nextFloat(), mRandom.nextFloat()}; diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/GreyScaleEffect.java b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/GreyScaleEffect.java index 2f3ed4de..2406f6ff 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/GreyScaleEffect.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/GreyScaleEffect.java @@ -1,13 +1,11 @@ package com.otaliastudios.cameraview.shadereffects.effects; -import android.opengl.GLSurfaceView; - -import com.otaliastudios.cameraview.shadereffects.ShaderInterface; +import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect; /** * Converts preview to GreyScale. */ -public class GreyScaleEffect implements ShaderInterface { +public class GreyScaleEffect extends BaseShaderEffect { /** * Initialize Effect */ @@ -15,7 +13,7 @@ public class GreyScaleEffect implements ShaderInterface { } @Override - public String getShader(GLSurfaceView mGlSurfaceView) { + public String getFragmentShader() { String shader = "#extension GL_OES_EGL_image_external : require\n" + "precision mediump float;\n" diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/HueEffect.java b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/HueEffect.java index 08582505..dbe1e669 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/HueEffect.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/HueEffect.java @@ -1,13 +1,11 @@ package com.otaliastudios.cameraview.shadereffects.effects; -import android.opengl.GLSurfaceView; - -import com.otaliastudios.cameraview.shadereffects.ShaderInterface; +import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect; /** * Apply Hue effect on the preview */ -public class HueEffect implements ShaderInterface { +public class HueEffect extends BaseShaderEffect { float hueValue; /** @@ -24,7 +22,7 @@ public class HueEffect implements ShaderInterface { } @Override - public String getShader(GLSurfaceView mGlSurfaceView) { + public String getFragmentShader() { String shader = "#extension GL_OES_EGL_image_external : require\n" + "precision mediump float;\n" diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/InvertColorsEffect.java b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/InvertColorsEffect.java index ed406e28..8510436a 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/InvertColorsEffect.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/InvertColorsEffect.java @@ -1,13 +1,11 @@ package com.otaliastudios.cameraview.shadereffects.effects; -import android.opengl.GLSurfaceView; - -import com.otaliastudios.cameraview.shadereffects.ShaderInterface; +import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect; /** * Inverts the preview colors. This can also be known as negative Effect. */ -public class InvertColorsEffect implements ShaderInterface { +public class InvertColorsEffect extends BaseShaderEffect { /** * Initialize Effect */ @@ -15,7 +13,7 @@ public class InvertColorsEffect implements ShaderInterface { } @Override - public String getShader(GLSurfaceView mGlSurfaceView) { + public String getFragmentShader() { String shader = "#extension GL_OES_EGL_image_external : require\n" + "precision mediump float;\n" diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/LamoishEffect.java b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/LamoishEffect.java index 0f1f8748..f3c9ce66 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/LamoishEffect.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/LamoishEffect.java @@ -2,7 +2,7 @@ package com.otaliastudios.cameraview.shadereffects.effects; import android.opengl.GLSurfaceView; -import com.otaliastudios.cameraview.shadereffects.ShaderInterface; +import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect; import java.util.Date; import java.util.Random; @@ -10,7 +10,7 @@ import java.util.Random; /** * Applies lomo-camera style effect to preview. */ -public class LamoishEffect implements ShaderInterface { +public class LamoishEffect extends BaseShaderEffect { private int mWidth; private int mHeight; private Random mRandom; @@ -34,7 +34,7 @@ public class LamoishEffect implements ShaderInterface { } @Override - public String getShader(GLSurfaceView mGlSurfaceView) { + public String getFragmentShader() { initValues(mGlSurfaceView); float scale[] = new float[2]; if (mWidth > mHeight) { diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/NoEffect.java b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/NoEffect.java index f5872662..08a4820c 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/NoEffect.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/NoEffect.java @@ -1,13 +1,11 @@ package com.otaliastudios.cameraview.shadereffects.effects; -import android.opengl.GLSurfaceView; - -import com.otaliastudios.cameraview.shadereffects.ShaderInterface; +import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect; /** * Displays the normal preview without any effect. */ -public class NoEffect implements ShaderInterface { +public class NoEffect extends BaseShaderEffect { /** * Initialize */ @@ -15,7 +13,7 @@ public class NoEffect implements ShaderInterface { } @Override - public String getShader(GLSurfaceView mGlSurfaceView) { + public String getFragmentShader() { String shader = "#extension GL_OES_EGL_image_external : require\n" + "precision mediump float;\n" diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/PosterizeEffect.java b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/PosterizeEffect.java index 414241be..4fd90b96 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/PosterizeEffect.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/PosterizeEffect.java @@ -1,13 +1,11 @@ package com.otaliastudios.cameraview.shadereffects.effects; -import android.opengl.GLSurfaceView; - -import com.otaliastudios.cameraview.shadereffects.ShaderInterface; +import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect; /** * Applies Posterization effect to Preview. */ -public class PosterizeEffect implements ShaderInterface { +public class PosterizeEffect extends BaseShaderEffect { /** * Initialize Effect */ @@ -15,7 +13,7 @@ public class PosterizeEffect implements ShaderInterface { } @Override - public String getShader(GLSurfaceView mGlSurfaceView) { + public String getFragmentShader() { String shader = "#extension GL_OES_EGL_image_external : require\n" + "precision mediump float;\n" diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/SaturationEffect.java b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/SaturationEffect.java index 4f919d19..a99174a8 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/SaturationEffect.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/SaturationEffect.java @@ -1,13 +1,11 @@ package com.otaliastudios.cameraview.shadereffects.effects; -import android.opengl.GLSurfaceView; - -import com.otaliastudios.cameraview.shadereffects.ShaderInterface; +import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect; /** * Adjusts color saturation of preview. */ -public class SaturationEffect implements ShaderInterface { +public class SaturationEffect extends BaseShaderEffect { private float scale = 0f; /** @@ -22,7 +20,7 @@ public class SaturationEffect implements ShaderInterface { } @Override - public String getShader(GLSurfaceView mGlSurfaceView) { + public String getFragmentShader() { float shift = 1.0f / 255.0f; float weights[] = {2f / 8f, 5f / 8f, 1f / 8f}; float exponents[] = new float[3]; diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/SepiaEffect.java b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/SepiaEffect.java index 5034b75e..821612c6 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/SepiaEffect.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/SepiaEffect.java @@ -1,13 +1,11 @@ package com.otaliastudios.cameraview.shadereffects.effects; -import android.opengl.GLSurfaceView; - -import com.otaliastudios.cameraview.shadereffects.ShaderInterface; +import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect; /** * Converts preview to Sepia tone. */ -public class SepiaEffect implements ShaderInterface { +public class SepiaEffect extends BaseShaderEffect { /** * Initialize Effect */ @@ -15,7 +13,7 @@ public class SepiaEffect implements ShaderInterface { } @Override - public String getShader(GLSurfaceView mGlSurfaceView) { + public String getFragmentShader() { float weights[] = {805.0f / 2048.0f, 715.0f / 2048.0f, 557.0f / 2048.0f, 1575.0f / 2048.0f, 1405.0f / 2048.0f, 1097.0f / 2048.0f, 387.0f / 2048.0f, 344.0f / 2048.0f, diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/SharpnessEffect.java b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/SharpnessEffect.java index 494a6136..80ef90eb 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/SharpnessEffect.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/SharpnessEffect.java @@ -1,12 +1,12 @@ package com.otaliastudios.cameraview.shadereffects.effects; import android.opengl.GLSurfaceView; -import com.otaliastudios.cameraview.shadereffects.ShaderInterface; +import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect; /** * Sharpens the preview. */ -public class SharpnessEffect implements ShaderInterface { +public class SharpnessEffect extends BaseShaderEffect { private int mWidth; private int mHeight; private float scale = 0f; @@ -36,7 +36,7 @@ public class SharpnessEffect implements ShaderInterface { } @Override - public String getShader(GLSurfaceView mGlSurfaceView) { + public String getFragmentShader() { initValues(mGlSurfaceView); String stepsizeXString = "stepsizeX = " + 1.0f / mWidth + ";\n"; diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/TemperatureEffect.java b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/TemperatureEffect.java index bf3e61b6..15621adc 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/TemperatureEffect.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/TemperatureEffect.java @@ -1,13 +1,11 @@ package com.otaliastudios.cameraview.shadereffects.effects; -import android.opengl.GLSurfaceView; - -import com.otaliastudios.cameraview.shadereffects.ShaderInterface; +import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect; /** * Adjusts color temperature of the preview. */ -public class TemperatureEffect implements ShaderInterface { +public class TemperatureEffect extends BaseShaderEffect { private float scale = 0f; /** @@ -26,7 +24,7 @@ public class TemperatureEffect implements ShaderInterface { } @Override - public String getShader(GLSurfaceView mGlSurfaceView) { + public String getFragmentShader() { String scaleString = "scale = " + (2.0f * scale - 1.0f) + ";\n"; diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/TintEffect.java b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/TintEffect.java index abfd6a7b..7ad49570 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/TintEffect.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/TintEffect.java @@ -1,15 +1,14 @@ package com.otaliastudios.cameraview.shadereffects.effects; import android.graphics.Color; -import android.opengl.GLSurfaceView; -import com.otaliastudios.cameraview.shadereffects.ShaderInterface; +import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect; /** * Tints the preview with specified color.. */ -public class TintEffect implements ShaderInterface { +public class TintEffect extends BaseShaderEffect { private int mTint = 0xFF0000FF; /** @@ -24,7 +23,7 @@ public class TintEffect implements ShaderInterface { } @Override - public String getShader(GLSurfaceView mGlSurfaceView) { + public String getFragmentShader() { float color_ratio[] = {0.21f, 0.71f, 0.07f}; String color_ratioString[] = new String[3]; color_ratioString[0] = "color_ratio[0] = " + color_ratio[0] + ";\n"; diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/VignetteEffect.java b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/VignetteEffect.java index 01792e42..ff92582d 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/VignetteEffect.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/shadereffects/effects/VignetteEffect.java @@ -2,13 +2,13 @@ package com.otaliastudios.cameraview.shadereffects.effects; import android.opengl.GLSurfaceView; -import com.otaliastudios.cameraview.shadereffects.ShaderInterface; +import com.otaliastudios.cameraview.shadereffects.BaseShaderEffect; /** * Applies lomo-camera style effect to your preview. */ -public class VignetteEffect implements ShaderInterface { +public class VignetteEffect extends BaseShaderEffect { private int mWidth = 0; private int mHeight = 0; private float mScale = 0f; @@ -39,7 +39,7 @@ public class VignetteEffect implements ShaderInterface { } @Override - public String getShader(GLSurfaceView mGlSurfaceView) { + public String getFragmentShader() { initValues(mGlSurfaceView); float scale[] = new float[2]; if (mWidth > mHeight) {