diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/filter/MultiFilter.java b/cameraview/src/main/java/com/otaliastudios/cameraview/filter/MultiFilter.java index 4cd3f3ec..1213cce3 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/filter/MultiFilter.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/filter/MultiFilter.java @@ -252,7 +252,13 @@ public class MultiFilter implements Filter, OneParameterFilter, TwoParameterFilt } // Perform the actual drawing. - filter.draw(transformMatrix); + // The first filter should apply all the transformations. Then, + // since they are applied, we should use a no-op matrix. + if (isFirst) { + filter.draw(transformMatrix); + } else { + filter.draw(GlUtils.IDENTITY_MATRIX); + } // Set the input for the next cycle: // It is the framebuffer texture from this cycle. If this is the last diff --git a/demo/src/main/java/com/otaliastudios/cameraview/demo/CameraActivity.java b/demo/src/main/java/com/otaliastudios/cameraview/demo/CameraActivity.java index 959b4faa..3d8c8078 100644 --- a/demo/src/main/java/com/otaliastudios/cameraview/demo/CameraActivity.java +++ b/demo/src/main/java/com/otaliastudios/cameraview/demo/CameraActivity.java @@ -342,7 +342,7 @@ public class CameraActivity extends AppCompatActivity implements View.OnClickLis // DuotoneFilter duotone = new DuotoneFilter(); // duotone.setFirstColor(Color.RED); // duotone.setSecondColor(Color.GREEN); - // camera.setFilter(new MultiFilter(filter.newInstance(), duotone)); + // camera.setFilter(new MultiFilter(duotone, filter.newInstance())); } @Override