diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java index b1f070be..b652e326 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java @@ -575,6 +575,13 @@ public class CameraView extends FrameLayout implements LifecycleObserver { LOG.i("onTouchEvent", "tap!"); onGesture(mTapGestureFinder, options); } + + if( MotionEvent.ACTION_UP == event.getAction()) { + Log.d("Suneet Agrawal", "onTouchEvent " + event.getAction()); + + changeEffect(new BlackAndWhiteEffect()); + } + return true; } @@ -2139,8 +2146,10 @@ public class CameraView extends FrameLayout implements LifecycleObserver { if (mCameraPreview instanceof GlCameraPreview) { String effect = shader.getShader(((GlCameraPreview) mCameraPreview).getView()); ((GlCameraPreview) mCameraPreview).setEffectFragmentShader(effect); + + //doInstantiatePreview(); } else { - LOG.e("changeEffect", "changeEffect is supported only for GLSurfaceView"); + LOG.w("changeEffect", "changeEffect is supported only for GLSurfaceView"); } } 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 c9b21670..8567adca 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 @@ -76,10 +76,19 @@ public class EglViewport extends EglElement { // private int muTexOffsetLoc; // Used for filtering // private int muColorAdjustLoc; // Used for filtering + private String vertexShader = SIMPLE_VERTEX_SHADER; + private String fragmentShader = SIMPLE_FRAGMENT_SHADER; + + private boolean isShaderChanged = false; + public EglViewport() { mTextureTarget = GLES11Ext.GL_TEXTURE_EXTERNAL_OES; + initProgram(); + } - mProgramHandle = createProgram(SIMPLE_VERTEX_SHADER, SIMPLE_FRAGMENT_SHADER); + private void initProgram(){ + + mProgramHandle = createProgram(vertexShader, fragmentShader); maPositionLocation = GLES20.glGetAttribLocation(mProgramHandle, "aPosition"); checkLocation(maPositionLocation, "aPosition"); @@ -91,7 +100,6 @@ public class EglViewport extends EglElement { checkLocation(muTexMatrixLocation, "uTexMatrix"); // Stuff from Drawable2d.FULL_RECTANGLE - } public void release(boolean doEglCleanup) { @@ -122,9 +130,12 @@ public class EglViewport extends EglElement { } public void changeEffectFragmentShader(String fragmentShader){ - mProgramHandle = createProgram(SIMPLE_VERTEX_SHADER, fragmentShader); + this.fragmentShader = fragmentShader; + isShaderChanged = true; } + + public void drawFrame(int textureId, float[] textureMatrix) { drawFrame(textureId, textureMatrix, mVertexCoordinatesArray, @@ -147,6 +158,12 @@ public class EglViewport extends EglElement { private void drawFrame(int textureId, float[] textureMatrix, FloatBuffer vertexBuffer, FloatBuffer texBuffer) { + + if (isShaderChanged){ + initProgram(); + isShaderChanged = false; + } + check("draw start"); // Select the program.