aboutsummaryrefslogtreecommitdiffstats
path: root/src/org/cyanogenmod/wallpapers/photophase/effects
diff options
context:
space:
mode:
authorJorge Ruesga <jorge@ruesga.com>2013-10-03 23:52:22 +0200
committerJorge Ruesga <jorge@ruesga.com>2013-10-03 23:52:22 +0200
commit059fa42d786915d7725e4fcf79f9de36e84f08c7 (patch)
treee2f4555011f9b61dcf25b3b2d3d8a4dee854cbdb /src/org/cyanogenmod/wallpapers/photophase/effects
parent20574cf663cc4c24d4eb64a8f879632bcddf8828 (diff)
downloadandroid_packages_wallpapers_PhotoPhase-059fa42d786915d7725e4fcf79f9de36e84f08c7.tar.gz
android_packages_wallpapers_PhotoPhase-059fa42d786915d7725e4fcf79f9de36e84f08c7.tar.bz2
android_packages_wallpapers_PhotoPhase-059fa42d786915d7725e4fcf79f9de36e84f08c7.zip
Change author and copyright
Signed-off-by: Jorge Ruesga <jorge@ruesga.com>
Diffstat (limited to 'src/org/cyanogenmod/wallpapers/photophase/effects')
-rw-r--r--src/org/cyanogenmod/wallpapers/photophase/effects/BlurEffect.java60
-rw-r--r--src/org/cyanogenmod/wallpapers/photophase/effects/Effects.java338
-rw-r--r--src/org/cyanogenmod/wallpapers/photophase/effects/EmbossEffect.java68
-rw-r--r--src/org/cyanogenmod/wallpapers/photophase/effects/GlowEffect.java69
-rw-r--r--src/org/cyanogenmod/wallpapers/photophase/effects/HalftoneEffect.java128
-rw-r--r--src/org/cyanogenmod/wallpapers/photophase/effects/MirrorEffect.java63
-rw-r--r--src/org/cyanogenmod/wallpapers/photophase/effects/NullEffect.java61
-rw-r--r--src/org/cyanogenmod/wallpapers/photophase/effects/OutlineEffect.java74
-rw-r--r--src/org/cyanogenmod/wallpapers/photophase/effects/PhotoPhaseEffect.java268
-rw-r--r--src/org/cyanogenmod/wallpapers/photophase/effects/PhotoPhaseEffectFactory.java124
-rw-r--r--src/org/cyanogenmod/wallpapers/photophase/effects/PixelateEffect.java118
-rw-r--r--src/org/cyanogenmod/wallpapers/photophase/effects/PopArtEffect.java64
-rw-r--r--src/org/cyanogenmod/wallpapers/photophase/effects/ScanlinesEffect.java59
13 files changed, 0 insertions, 1494 deletions
diff --git a/src/org/cyanogenmod/wallpapers/photophase/effects/BlurEffect.java b/src/org/cyanogenmod/wallpapers/photophase/effects/BlurEffect.java
deleted file mode 100644
index 465cb99..0000000
--- a/src/org/cyanogenmod/wallpapers/photophase/effects/BlurEffect.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (C) 2013 The CyanogenMod Project
- *
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-//
-// Based on the shaders of kodemongki:
-// http://kodemongki.blogspot.com.es/2011/06/kameraku-custom-shader-effects-example.html
-//
-
-package org.cyanogenmod.wallpapers.photophase.effects;
-
-import android.media.effect.EffectContext;
-
-/**
- * A blur effect<br/>
- * <table>
- * <tr><td>Parameter name</td><td>Meaning</td><td>Valid values</td></tr>
- * </table>
- */
-public class BlurEffect extends PhotoPhaseEffect {
-
- private static final String FRAGMENT_SHADER =
- "precision mediump float;\n" +
- "uniform sampler2D tex_sampler;\n" +
- "varying vec2 v_texcoord;\n" +
- "void main(void)\n" +
- "{\n" +
- " float step = 0.02;\n" +
- " vec3 c1 = texture2D(tex_sampler, vec2(v_texcoord.s - step, v_texcoord.t - step)).bgr;\n" +
- " vec3 c2 = texture2D(tex_sampler, vec2(v_texcoord.s + step, v_texcoord.t + step)).bgr;\n" +
- " vec3 c3 = texture2D(tex_sampler, vec2(v_texcoord.s - step, v_texcoord.t + step)).bgr;\n" +
- " vec3 c4 = texture2D(tex_sampler, vec2(v_texcoord.s + step, v_texcoord.t - step)).bgr;\n" +
- " gl_FragColor.a = 1.0;\n" +
- " gl_FragColor.rgb = (c1 + c2 + c3 + c4) / 4.0;\n" +
- "}";
-
- /**
- * Constructor of <code>BlurEffect</code>.
- *
- * @param ctx The effect context
- * @param name The effect name
- */
- public BlurEffect(EffectContext ctx, String name) {
- super(ctx, BlurEffect.class.getName());
- init(VERTEX_SHADER, FRAGMENT_SHADER);
- }
-
-}
diff --git a/src/org/cyanogenmod/wallpapers/photophase/effects/Effects.java b/src/org/cyanogenmod/wallpapers/photophase/effects/Effects.java
deleted file mode 100644
index 0ab3f6c..0000000
--- a/src/org/cyanogenmod/wallpapers/photophase/effects/Effects.java
+++ /dev/null
@@ -1,338 +0,0 @@
-/*
- * Copyright (C) 2013 The CyanogenMod Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.cyanogenmod.wallpapers.photophase.effects;
-
-import android.graphics.Color;
-import android.media.effect.Effect;
-import android.media.effect.EffectContext;
-import android.media.effect.EffectFactory;
-
-import org.cyanogenmod.wallpapers.photophase.preferences.PreferencesProvider.Preferences;
-import org.cyanogenmod.wallpapers.photophase.utils.Utils;
-
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * A class that manages all the supported effects
- */
-public class Effects {
-
- /**
- * Enumeration of the supported effects
- */
- public enum EFFECTS {
- /**
- * @see PhotoPhaseEffectFactory#EFFECT_NULL
- */
- NO_EFFECT,
- /**
- * @see EffectFactory#EFFECT_AUTOFIX
- */
- AUTOFIX,
- /**
- * @see PhotoPhaseEffectFactory#EFFECT_BLUR
- */
- BLUR,
- /**
- * @see EffectFactory#EFFECT_CROSSPROCESS
- */
- CROSSPROCESS,
- /**
- * @see EffectFactory#EFFECT_DOCUMENTARY
- */
- DOCUMENTARY,
- /**
- * @see EffectFactory#EFFECT_DUOTONE
- */
- DUOTONE,
- /**
- * @see PhotoPhaseEffectFactory#EFFECT_EMBOSS
- */
- EMBOSS,
- /**
- * @see EffectFactory#EFFECT_FISHEYE
- */
- FISHEYE,
- /**
- * @see PhotoPhaseEffectFactory#EFFECT_GLOW
- */
- GLOW,
- /**
- * @see EffectFactory#EFFECT_GRAIN
- */
- GRAIN,
- /**
- * @see EffectFactory#EFFECT_GRAYSCALE
- */
- GRAYSCALE,
- /**
- * @see PhotoPhaseEffectFactory#EFFECT_HALFTONE
- */
- HALFTONE,
- /**
- * @see EffectFactory#EFFECT_LOMOISH
- */
- LOMOISH,
- /**
- * @see PhotoPhaseEffectFactory#EFFECT_MIRROR
- */
- MIRROR,
- /**
- * @see EffectFactory#EFFECT_NEGATIVE
- */
- NEGATIVE,
- /**
- * @see PhotoPhaseEffectFactory#EFFECT_OUTLINE
- */
- OUTLINE,
- /**
- * @see PhotoPhaseEffectFactory#EFFECT_PIXELATE
- */
- PIXELATE,
- /**
- * @see PhotoPhaseEffectFactory#EFFECT_POPART
- */
- POPART,
- /**
- * @see EffectFactory#EFFECT_POSTERIZE
- */
- POSTERIZE,
- /**
- * @see EffectFactory#EFFECT_SATURATE
- */
- SATURATE,
- /**
- * @see PhotoPhaseEffectFactory#EFFECT_SCANLINES
- */
- SCANLINES,
- /**
- * @see EffectFactory#EFFECT_SEPIA
- */
- SEPIA,
- /**
- * @see EffectFactory#EFFECT_TEMPERATURE
- */
- TEMPERATURE,
- /**
- * @see EffectFactory#EFFECT_TINT
- */
- TINT,
- /**
- * @see EffectFactory#EFFECT_VIGNETTE
- */
- VIGNETTE;
-
- /**
- * Method that returns the effect from its ordinal position
- *
- * @param ordinal The ordinal position
- * @return EFFECTS The effect or null if wasn't found
- */
- public static EFFECTS fromOrdinal(int ordinal) {
- for (EFFECTS effect : EFFECTS.values()) {
- if (effect.ordinal() == ordinal) {
- return effect;
- }
- }
- return null;
- }
- }
-
- private final Map<EFFECTS, Effect> mCachedEffects;
- private final EffectContext mEffectContext;
-
- /**
- * Constructor of <code>Effects</code>
- *
- * @param effectContext The current effect context
- */
- public Effects(EffectContext effectContext) {
- super();
- mCachedEffects = new HashMap<Effects.EFFECTS, Effect>();
- mEffectContext = effectContext;
- }
-
- /**
- * Method that that release the cached data
- */
- public void release() {
- if (mCachedEffects != null) {
- for (Effect effect : mCachedEffects.values()) {
- effect.release();
- }
- mCachedEffects.clear();
- }
- }
-
- /**
- * Method that return the next effect to use with the picture.
- *
- * @return Effect The next effect to use or null if no need to apply any effect
- */
- @SuppressWarnings("boxing")
- public Effect getNextEffect() {
- // Get a new instance of a effect factory
- EffectFactory effectFactory = mEffectContext.getFactory();
- Effect effect = null;
-
- // Get an effect based on the user preference
- List<EFFECTS> effects = Arrays.asList(Preferences.General.Effects.getEffectTypes());
- EFFECTS nextEffect = null;
- if (effects.size() > 0) {
- int low = 0;
- int high = effects.size() - 1;
- int pos = Utils.getNextRandom(low, high);
- nextEffect = effects.get(pos);
- }
- if (nextEffect == null) {
- if (EffectFactory.isEffectSupported(PhotoPhaseEffectFactory.EFFECT_NULL)) {
- effect = effectFactory.createEffect(PhotoPhaseEffectFactory.EFFECT_NULL);
- mCachedEffects.put(nextEffect, effect);
- }
- return effect;
- }
-
- // Has a cached effect?
- if (mCachedEffects.containsKey(nextEffect)) {
- return mCachedEffects.get(nextEffect);
- }
-
- // Select the effect if is available
- if (nextEffect.compareTo(EFFECTS.AUTOFIX) == 0) {
- if (EffectFactory.isEffectSupported(EffectFactory.EFFECT_AUTOFIX)) {
- effect = effectFactory.createEffect(EffectFactory.EFFECT_AUTOFIX);
- effect.setParameter("scale", 0.5f);
- }
- } else if (nextEffect.compareTo(EFFECTS.BLUR) == 0) {
- if (EffectFactory.isEffectSupported(PhotoPhaseEffectFactory.EFFECT_BLUR)) {
- effect = effectFactory.createEffect(PhotoPhaseEffectFactory.EFFECT_BLUR);
- }
- } else if (nextEffect.compareTo(EFFECTS.CROSSPROCESS) == 0) {
- if (EffectFactory.isEffectSupported(EffectFactory.EFFECT_CROSSPROCESS)) {
- effect = effectFactory.createEffect(EffectFactory.EFFECT_CROSSPROCESS);
- }
- } else if (nextEffect.compareTo(EFFECTS.DOCUMENTARY) == 0) {
- if (EffectFactory.isEffectSupported(EffectFactory.EFFECT_DOCUMENTARY)) {
- effect = effectFactory.createEffect(EffectFactory.EFFECT_DOCUMENTARY);
- }
- } else if (nextEffect.compareTo(EFFECTS.DUOTONE) == 0) {
- if (EffectFactory.isEffectSupported(EffectFactory.EFFECT_DUOTONE)) {
- effect = effectFactory.createEffect(EffectFactory.EFFECT_DUOTONE);
- effect.setParameter("first_color", Color.parseColor("#FF8CACFF"));
- effect.setParameter("second_color", Color.WHITE);
- }
- } else if (nextEffect.compareTo(EFFECTS.EMBOSS) == 0) {
- if (EffectFactory.isEffectSupported(PhotoPhaseEffectFactory.EFFECT_EMBOSS)) {
- effect = effectFactory.createEffect(PhotoPhaseEffectFactory.EFFECT_EMBOSS);
- }
- } else if (nextEffect.compareTo(EFFECTS.FISHEYE) == 0) {
- if (EffectFactory.isEffectSupported(EffectFactory.EFFECT_FISHEYE)) {
- effect = effectFactory.createEffect(EffectFactory.EFFECT_FISHEYE);
- effect.setParameter("scale", 1.0f);
- }
- } else if (nextEffect.compareTo(EFFECTS.GLOW) == 0) {
- if (EffectFactory.isEffectSupported(PhotoPhaseEffectFactory.EFFECT_GLOW)) {
- effect = effectFactory.createEffect(PhotoPhaseEffectFactory.EFFECT_GLOW);
- }
- } else if (nextEffect.compareTo(EFFECTS.GRAIN) == 0) {
- if (EffectFactory.isEffectSupported(EffectFactory.EFFECT_GRAIN)) {
- effect = effectFactory.createEffect(EffectFactory.EFFECT_GRAIN);
- effect.setParameter("strength", 1.0f);
- }
- } else if (nextEffect.compareTo(EFFECTS.GRAYSCALE) == 0) {
- if (EffectFactory.isEffectSupported(EffectFactory.EFFECT_GRAYSCALE)) {
- effect = effectFactory.createEffect(EffectFactory.EFFECT_GRAYSCALE);
- }
- } else if (nextEffect.compareTo(EFFECTS.HALFTONE) == 0) {
- if (EffectFactory.isEffectSupported(PhotoPhaseEffectFactory.EFFECT_HALFTONE)) {
- effect = effectFactory.createEffect(PhotoPhaseEffectFactory.EFFECT_HALFTONE);
- effect.setParameter("strength", 8.0f);
- }
- } else if (nextEffect.compareTo(EFFECTS.MIRROR) == 0) {
- if (EffectFactory.isEffectSupported(PhotoPhaseEffectFactory.EFFECT_MIRROR)) {
- effect = effectFactory.createEffect(PhotoPhaseEffectFactory.EFFECT_MIRROR);
- }
- } else if (nextEffect.compareTo(EFFECTS.LOMOISH) == 0) {
- if (EffectFactory.isEffectSupported(EffectFactory.EFFECT_LOMOISH)) {
- effect = effectFactory.createEffect(EffectFactory.EFFECT_LOMOISH);
- }
- } else if (nextEffect.compareTo(EFFECTS.NEGATIVE) == 0) {
- if (EffectFactory.isEffectSupported(EffectFactory.EFFECT_NEGATIVE)) {
- effect = effectFactory.createEffect(EffectFactory.EFFECT_NEGATIVE);
- }
- } else if (nextEffect.compareTo(EFFECTS.OUTLINE) == 0) {
- if (EffectFactory.isEffectSupported(PhotoPhaseEffectFactory.EFFECT_OUTLINE)) {
- effect = effectFactory.createEffect(PhotoPhaseEffectFactory.EFFECT_OUTLINE);
- }
- } else if (nextEffect.compareTo(EFFECTS.PIXELATE) == 0) {
- if (EffectFactory.isEffectSupported(PhotoPhaseEffectFactory.EFFECT_PIXELATE)) {
- effect = effectFactory.createEffect(PhotoPhaseEffectFactory.EFFECT_PIXELATE);
- effect.setParameter("strength", 8.0f);
- }
- } else if (nextEffect.compareTo(EFFECTS.POPART) == 0) {
- if (EffectFactory.isEffectSupported(PhotoPhaseEffectFactory.EFFECT_POPART)) {
- effect = effectFactory.createEffect(PhotoPhaseEffectFactory.EFFECT_POPART);
- }
- } else if (nextEffect.compareTo(EFFECTS.POSTERIZE) == 0) {
- if (EffectFactory.isEffectSupported(EffectFactory.EFFECT_POSTERIZE)) {
- effect = effectFactory.createEffect(EffectFactory.EFFECT_POSTERIZE);
- }
- } else if (nextEffect.compareTo(EFFECTS.SATURATE) == 0) {
- if (EffectFactory.isEffectSupported(EffectFactory.EFFECT_SATURATE)) {
- effect = effectFactory.createEffect(EffectFactory.EFFECT_SATURATE);
- effect.setParameter("scale", .5f);
- }
- } else if (nextEffect.compareTo(EFFECTS.SCANLINES) == 0) {
- if (EffectFactory.isEffectSupported(PhotoPhaseEffectFactory.EFFECT_SCANLINES)) {
- effect = effectFactory.createEffect(PhotoPhaseEffectFactory.EFFECT_SCANLINES);
- }
- } else if (nextEffect.compareTo(EFFECTS.SEPIA) == 0) {
- if (EffectFactory.isEffectSupported(EffectFactory.EFFECT_SEPIA)) {
- effect = effectFactory.createEffect(EffectFactory.EFFECT_SEPIA);
- }
- } else if (nextEffect.compareTo(EFFECTS.TEMPERATURE) == 0) {
- if (EffectFactory.isEffectSupported(EffectFactory.EFFECT_TEMPERATURE)) {
- effect = effectFactory.createEffect(EffectFactory.EFFECT_TEMPERATURE);
- effect.setParameter("scale", .9f);
- }
- } else if (nextEffect.compareTo(EFFECTS.TINT) == 0) {
- if (EffectFactory.isEffectSupported(EffectFactory.EFFECT_TINT)) {
- effect = effectFactory.createEffect(EffectFactory.EFFECT_TINT);
- }
- } else if (nextEffect.compareTo(EFFECTS.VIGNETTE) == 0) {
- if (EffectFactory.isEffectSupported(EffectFactory.EFFECT_VIGNETTE)) {
- effect = effectFactory.createEffect(EffectFactory.EFFECT_VIGNETTE);
- effect.setParameter("scale", .5f);
- }
- }
-
- // Instead of not to apply any effect, just use one null effect to follow the same
- // effect model. This allow to use the same height when Effect.apply is applied for all
- // the frames
- if (effect == null && EffectFactory.isEffectSupported(PhotoPhaseEffectFactory.EFFECT_NULL)) {
- effect = effectFactory.createEffect(PhotoPhaseEffectFactory.EFFECT_NULL);
- nextEffect = EFFECTS.NO_EFFECT;
- }
-
- // Cache the effects
- mCachedEffects.put(nextEffect, effect);
- return effect;
- }
-}
diff --git a/src/org/cyanogenmod/wallpapers/photophase/effects/EmbossEffect.java b/src/org/cyanogenmod/wallpapers/photophase/effects/EmbossEffect.java
deleted file mode 100644
index 691ef39..0000000
--- a/src/org/cyanogenmod/wallpapers/photophase/effects/EmbossEffect.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2013 The CyanogenMod Project
- *
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-//
-// Based on the shaders of kodemongki:
-// http://kodemongki.blogspot.com.es/2011/06/kameraku-custom-shader-effects-example.html
-//
-
-package org.cyanogenmod.wallpapers.photophase.effects;
-
-import android.media.effect.EffectContext;
-
-/**
- * An emboss effect<br/>
- * <table>
- * <tr><td>Parameter name</td><td>Meaning</td><td>Valid values</td></tr>
- * </table>
- */
-public class EmbossEffect extends PhotoPhaseEffect {
-
- private static final String FRAGMENT_SHADER =
- "precision mediump float;\n" +
- "uniform sampler2D tex_sampler;\n" +
- "varying vec2 v_texcoord;\n" +
- "const float step_w = 0.0015625;\n" +
- "const float step_h = 0.0027778;\n" +
- "void main(void)\n" +
- "{\n" +
- " vec3 t1 = texture2D(tex_sampler, vec2(v_texcoord.x - step_w, v_texcoord.y - step_h)).bgr;\n" +
- " vec3 t2 = texture2D(tex_sampler, vec2(v_texcoord.x, v_texcoord.y - step_h)).bgr;\n" +
- " vec3 t3 = texture2D(tex_sampler, vec2(v_texcoord.x + step_w, v_texcoord.y - step_h)).bgr;\n" +
- " vec3 t4 = texture2D(tex_sampler, vec2(v_texcoord.x - step_w, v_texcoord.y)).bgr;\n" +
- " vec3 t5 = texture2D(tex_sampler, v_texcoord).bgr;\n" +
- " vec3 t6 = texture2D(tex_sampler, vec2(v_texcoord.x + step_w, v_texcoord.y)).bgr;\n" +
- " vec3 t7 = texture2D(tex_sampler, vec2(v_texcoord.x - step_w, v_texcoord.y + step_h)).bgr;\n" +
- " vec3 t8 = texture2D(tex_sampler, vec2(v_texcoord.x, v_texcoord.y + step_h)).bgr;\n" +
- " vec3 t9 = texture2D(tex_sampler, vec2(v_texcoord.x + step_w, v_texcoord.y + step_h)).bgr;\n" +
- " vec3 rr = -4.0 * t1 - 4.0 * t2 - 4.0 * t4 + 12.0 * t5;\n" +
- " float y = (rr.r + rr.g + rr.b) / 3.0;\n" +
- " gl_FragColor.a = 1.0;\n" +
- " gl_FragColor.rgb = vec3(y, y, y) + 0.3;\n" +
- "}";
-
- /**
- * Constructor of <code>EmbossEffect</code>.
- *
- * @param ctx The effect context
- * @param name The effect name
- */
- public EmbossEffect(EffectContext ctx, String name) {
- super(ctx, EmbossEffect.class.getName());
- init(VERTEX_SHADER, FRAGMENT_SHADER);
- }
-
-}
diff --git a/src/org/cyanogenmod/wallpapers/photophase/effects/GlowEffect.java b/src/org/cyanogenmod/wallpapers/photophase/effects/GlowEffect.java
deleted file mode 100644
index 8520e09..0000000
--- a/src/org/cyanogenmod/wallpapers/photophase/effects/GlowEffect.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (C) 2013 The CyanogenMod Project
- *
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-//
-// Based on the shaders of kodemongki:
-// http://kodemongki.blogspot.com.es/2011/06/kameraku-custom-shader-effects-example.html
-//
-
-package org.cyanogenmod.wallpapers.photophase.effects;
-
-import android.media.effect.EffectContext;
-
-/**
- * A glow effect<br/>
- * <table>
- * <tr><td>Parameter name</td><td>Meaning</td><td>Valid values</td></tr>
- * </table>
- */
-public class GlowEffect extends PhotoPhaseEffect {
-
- private static final String FRAGMENT_SHADER =
- "precision mediump float;\n" +
- "uniform sampler2D tex_sampler;\n" +
- "varying vec2 v_texcoord;\n" +
- "const float step_w = 0.0015625;\n" +
- "const float step_h = 0.0027778;\n" +
- "void main(void)\n" +
- "{\n" +
- " vec3 t1 = texture2D(tex_sampler, vec2(v_texcoord.x - step_w, v_texcoord.y - step_h)).bgr;\n" +
- " vec3 t2 = texture2D(tex_sampler, vec2(v_texcoord.x, v_texcoord.y - step_h)).bgr;\n" +
- " vec3 t3 = texture2D(tex_sampler, vec2(v_texcoord.x + step_w, v_texcoord.y - step_h)).bgr;\n" +
- " vec3 t4 = texture2D(tex_sampler, vec2(v_texcoord.x - step_w, v_texcoord.y)).bgr;\n" +
- " vec3 t5 = texture2D(tex_sampler, v_texcoord).bgr;\n" +
- " vec3 t6 = texture2D(tex_sampler, vec2(v_texcoord.x + step_w, v_texcoord.y)).bgr;\n" +
- " vec3 t7 = texture2D(tex_sampler, vec2(v_texcoord.x - step_w, v_texcoord.y + step_h)).bgr;\n" +
- " vec3 t8 = texture2D(tex_sampler, vec2(v_texcoord.x, v_texcoord.y + step_h)).bgr;\n" +
- " vec3 t9 = texture2D(tex_sampler, vec2(v_texcoord.x + step_w, v_texcoord.y + step_h)).bgr;\n" +
- " vec3 xx= t1 + 2.0*t2 + t3 - t7 - 2.0*t8 - t9;\n" +
- " vec3 yy = t1 - t3 + 2.0*t4 - 2.0*t6 + t7 - t9;\n" +
- " vec3 rr = sqrt(xx * xx + yy * yy);\n" +
- " gl_FragColor.a = 1.0;\n" +
- " gl_FragColor.rgb = rr * 2.0 * t5;\n" +
- "}";
-
- /**
- * Constructor of <code>GlowEffect</code>.
- *
- * @param ctx The effect context
- * @param name The effect name
- */
- public GlowEffect(EffectContext ctx, String name) {
- super(ctx, GlowEffect.class.getName());
- init(VERTEX_SHADER, FRAGMENT_SHADER);
- }
-
-}
diff --git a/src/org/cyanogenmod/wallpapers/photophase/effects/HalftoneEffect.java b/src/org/cyanogenmod/wallpapers/photophase/effects/HalftoneEffect.java
deleted file mode 100644
index 07da491..0000000
--- a/src/org/cyanogenmod/wallpapers/photophase/effects/HalftoneEffect.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright (C) 2013 The CyanogenMod Project
- *
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-//
-// Based on the shaders of kodemongki:
-// http://kodemongki.blogspot.com.es/2011/06/kameraku-custom-shader-effects-example.html
-//
-
-package org.cyanogenmod.wallpapers.photophase.effects;
-
-import android.media.effect.EffectContext;
-import android.opengl.GLES20;
-import android.util.Log;
-
-import org.cyanogenmod.wallpapers.photophase.utils.GLESUtil;
-
-/**
- * A halftone effect<br/>
- * <table>
- * <tr><td>Parameter name</td><td>Meaning</td><td>Valid values</td></tr>
- * <tr>
- * <td><code>strength</code></td>
- * <td>The halftone strength.</td>
- * <td>Positive float (>0). Higher numbers produce smallest points.</td>
- * </tr>
- * </table>
- */
-public class HalftoneEffect extends PhotoPhaseEffect {
-
- private static final String TAG = "HalftoneEffect";
-
- private static final String STRENGTH_PARAMETER = "strength";
-
- private static final String FRAGMENT_SHADER =
- "precision mediump float;\n" +
- "uniform sampler2D tex_sampler;\n" +
- "varying vec2 v_texcoord;\n" +
- "const float step_w = 0.0015625;\n" +
- "const float step_h = 0.0027778;\n" +
- "uniform float strength;\n" +
- "void main(void)\n" +
- "{\n" +
- " float offx = floor(v_texcoord.s / (strength * step_w));\n" +
- " float offy = floor(v_texcoord.t / (strength * step_h));\n" +
- " vec3 res = texture2D(tex_sampler, vec2(offx * strength * step_w , offy * strength * step_h)).bgr;\n" +
- " vec2 prc = fract(v_texcoord.st / vec2(strength * step_w, strength * step_h));\n" +
- " vec2 pw = pow(abs(prc - 0.5), vec2(2.0));\n" +
- " float rs = pow(0.45, 2.0);\n" +
- " float gr = smoothstep(rs - 0.1, rs + 0.1, pw.x + pw.y);\n" +
- " float y = (res.r + res.g + res.b) / 3.0; \n" +
- " vec3 ra = res / y;\n" +
- " float ls = 0.3;\n" +
- " float lb = ceil(y / ls);\n" +
- " float lf = ls * lb + 0.3;\n" +
- " res = lf * res;\n" +
- " gl_FragColor.a = 1.0;\n" +
- " gl_FragColor.rgb = mix(res, vec3(0.1, 0.1, 0.1), gr);\n" +
- "}";
-
- private float mStrength = 16.0f;
- private int mStepsHandle;
-
- /**
- * Constructor of <code>HalftoneEffect</code>.
- *
- * @param ctx The effect context
- * @param name The effect name
- */
- public HalftoneEffect(EffectContext ctx, String name) {
- super(ctx, HalftoneEffect.class.getName());
- init(VERTEX_SHADER, FRAGMENT_SHADER);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- void init(String vertexShader, String fragmentShader) {
- super.init(vertexShader, fragmentShader);
-
- // Parameters
- mStepsHandle = GLES20.glGetUniformLocation(mProgram, "strength");
- GLESUtil.glesCheckError("glGetUniformLocation");
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- void applyParameters() {
- // Set parameters
- GLES20.glUniform1f(mStepsHandle, mStrength);
- GLESUtil.glesCheckError("glUniform1f");
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void setParameter(String parameterKey, Object value) {
- if (parameterKey.compareTo(STRENGTH_PARAMETER) == 0) {
- try {
- float strength = Float.parseFloat(value.toString());
- if (strength <= 0) {
- Log.w(TAG, "strength parameter must be >= 0");
- return;
- }
- mStrength = strength;
- } catch (NumberFormatException ex) {
- // Ignore
- }
- }
- }
-
-}
diff --git a/src/org/cyanogenmod/wallpapers/photophase/effects/MirrorEffect.java b/src/org/cyanogenmod/wallpapers/photophase/effects/MirrorEffect.java
deleted file mode 100644
index 27233d2..0000000
--- a/src/org/cyanogenmod/wallpapers/photophase/effects/MirrorEffect.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2013 The CyanogenMod Project
- *
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-//
-// Based on the shaders of kodemongki:
-// http://kodemongki.blogspot.com.es/2011/06/kameraku-custom-shader-effects-example.html
-//
-
-package org.cyanogenmod.wallpapers.photophase.effects;
-
-import android.media.effect.EffectContext;
-
-/**
- * A mirror effect<br/>
- * <table>
- * <tr><td>Parameter name</td><td>Meaning</td><td>Valid values</td></tr>
- * </table>
- */
-public class MirrorEffect extends PhotoPhaseEffect {
-
- private static final String FRAGMENT_SHADER =
- "precision mediump float;\n" +
- "uniform sampler2D tex_sampler;\n" +
- "varying vec2 v_texcoord;\n" +
- "void main(void)\n" +
- "{\n" +
- " vec2 off = vec2(0.0, 0.0);\n" +
- " if (v_texcoord.t > 0.5) {\n" +
- " off.t = 1.0 - v_texcoord.t;\n" +
- " off.s = v_texcoord.s;\n" +
- " } else {\n" +
- " off = v_texcoord;\n" +
- " }\n" +
- " vec3 color = texture2D(tex_sampler, vec2(off)).bgr;\n" +
- " gl_FragColor.a = 1.0;\n" +
- " gl_FragColor.rgb = color;\n" +
- "}";
-
- /**
- * Constructor of <code>MirrorEffect</code>.
- *
- * @param ctx The effect context
- * @param name The effect name
- */
- public MirrorEffect(EffectContext ctx, String name) {
- super(ctx, MirrorEffect.class.getName());
- init(VERTEX_SHADER, FRAGMENT_SHADER);
- }
-
-}
diff --git a/src/org/cyanogenmod/wallpapers/photophase/effects/NullEffect.java b/src/org/cyanogenmod/wallpapers/photophase/effects/NullEffect.java
deleted file mode 100644
index 5a8b520..0000000
--- a/src/org/cyanogenmod/wallpapers/photophase/effects/NullEffect.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2013 The CyanogenMod Project
- *
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-//
-// Based on the shaders of kodemongki:
-// http://kodemongki.blogspot.com.es/2011/06/kameraku-custom-shader-effects-example.html
-//
-
-package org.cyanogenmod.wallpapers.photophase.effects;
-
-import android.media.effect.EffectContext;
-
-/**
- * This effect only copies the source texture to the destination texture.<br/>
- * <table>
- * <tr><td>Parameter name</td><td>Meaning</td><td>Valid values</td></tr>
- * </table>
- */
-public class NullEffect extends PhotoPhaseEffect {
-
- private static final String FRAGMENT_SHADER =
- "precision mediump float;\n" +
- "uniform sampler2D tex_sampler;\n" +
- "varying vec2 v_texcoord;\n" +
- "void main(void)\n" +
- "{\n" +
- " gl_FragColor = texture2D(tex_sampler, v_texcoord);\n" +
- "}";
-
- /**
- * Constructor of <code>NullEffect</code>.
- *
- * @param ctx The effect context
- * @param name The effect name
- */
- public NullEffect(EffectContext ctx, String name) {
- super(ctx, NullEffect.class.getName());
- init(VERTEX_SHADER, FRAGMENT_SHADER);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- void apply(int inputTexId) {
- // Nothing to draw
- }
-}
diff --git a/src/org/cyanogenmod/wallpapers/photophase/effects/OutlineEffect.java b/src/org/cyanogenmod/wallpapers/photophase/effects/OutlineEffect.java
deleted file mode 100644
index 8dc7854..0000000
--- a/src/org/cyanogenmod/wallpapers/photophase/effects/OutlineEffect.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (C) 2013 The CyanogenMod Project
- *
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-//
-// Based on the shaders of kodemongki:
-// http://kodemongki.blogspot.com.es/2011/06/kameraku-custom-shader-effects-example.html
-//
-
-package org.cyanogenmod.wallpapers.photophase.effects;
-
-import android.media.effect.EffectContext;
-
-/**
- * An outline effect (highlight edges)<br/>
- * <table>
- * <tr><td>Parameter name</td><td>Meaning</td><td>Valid values</td></tr>
- * </table>
- */
-public class OutlineEffect extends PhotoPhaseEffect {
-
- private static final String FRAGMENT_SHADER =
- "precision mediump float;\n" +
- "uniform sampler2D tex_sampler;\n" +
- "varying vec2 v_texcoord;\n" +
- "const float step_w = 0.0015625;\n" +
- "const float step_h = 0.0027778;\n" +
- "void main(void)\n" +
- "{\n" +
- " vec3 t1 = texture2D(tex_sampler, vec2(v_texcoord.x - step_w, v_texcoord.y - step_h)).bgr;\n" +
- " vec3 t2 = texture2D(tex_sampler, vec2(v_texcoord.x, v_texcoord.y - step_h)).bgr;\n" +
- " vec3 t3 = texture2D(tex_sampler, vec2(v_texcoord.x + step_w, v_texcoord.y - step_h)).bgr;\n" +
- " vec3 t4 = texture2D(tex_sampler, vec2(v_texcoord.x - step_w, v_texcoord.y)).bgr;\n" +
- " vec3 t5 = texture2D(tex_sampler, v_texcoord).bgr;\n" +
- " vec3 t6 = texture2D(tex_sampler, vec2(v_texcoord.x + step_w, v_texcoord.y)).bgr;\n" +
- " vec3 t7 = texture2D(tex_sampler, vec2(v_texcoord.x - step_w, v_texcoord.y + step_h)).bgr;\n" +
- " vec3 t8 = texture2D(tex_sampler, vec2(v_texcoord.x, v_texcoord.y + step_h)).bgr;\n" +
- " vec3 t9 = texture2D(tex_sampler, vec2(v_texcoord.x + step_w, v_texcoord.y + step_h)).bgr;\n" +
- " vec3 xx= t1 + 2.0*t2 + t3 - t7 - 2.0*t8 - t9;\n" +
- " vec3 yy = t1 - t3 + 2.0*t4 - 2.0*t6 + t7 - t9;\n" +
- " vec3 rr = sqrt(xx * xx + yy * yy);\n" +
- " float y = (rr.r + rr.g + rr.b) / 3.0;\n" +
- " if (y > 0.2)\n" +
- " rr = vec3(0.0, 0.0, 0.0);\n" +
- " else\n" +
- " rr = vec3(1.0, 1.0, 1.0);\n" +
- " gl_FragColor.a = 1.0;\n" +
- " gl_FragColor.rgb = rr;\n" +
- "}";
-
- /**
- * Constructor of <code>OutlineEffect</code>.
- *
- * @param ctx The effect context
- * @param name The effect name
- */
- public OutlineEffect(EffectContext ctx, String name) {
- super(ctx, OutlineEffect.class.getName());
- init(VERTEX_SHADER, FRAGMENT_SHADER);
- }
-
-}
diff --git a/src/org/cyanogenmod/wallpapers/photophase/effects/PhotoPhaseEffect.java b/src/org/cyanogenmod/wallpapers/photophase/effects/PhotoPhaseEffect.java
deleted file mode 100644
index 2fd0e2b..0000000
--- a/src/org/cyanogenmod/wallpapers/photophase/effects/PhotoPhaseEffect.java
+++ /dev/null
@@ -1,268 +0,0 @@
-/*
- * Copyright (C) 2013 The CyanogenMod Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.cyanogenmod.wallpapers.photophase.effects;
-
-import android.media.effect.Effect;
-import android.media.effect.EffectContext;
-import android.media.effect.EffectFactory;
-import android.opengl.GLES20;
-import android.opengl.GLUtils;
-
-import org.cyanogenmod.wallpapers.photophase.utils.GLESUtil;
-
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.nio.FloatBuffer;
-
-/**
- * An abstract class definition for all the PhotoPhase custom effects
- */
-public abstract class PhotoPhaseEffect extends Effect {
-
- private static final int FLOAT_SIZE_BYTES = 4;
-
- private static final String MCA_IDENTITY_EFFECT = "IdentityEffect";
-
- static final String VERTEX_SHADER =
- "attribute vec4 a_position;\n" +
- "attribute vec2 a_texcoord;\n" +
- "varying vec2 v_texcoord;\n" +
- "void main() {\n" +
- " gl_Position = vec4(a_position.xy, 0.0, 1.0);\n" +
- " gl_Position = sign(gl_Position);\n" +
- " v_texcoord = a_texcoord;\n" +
- "}\n";
-
- private static final float[] TEX_VERTICES = {0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f};
- private static final float[] POS_VERTICES = {-1.0f, -1.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 1.0f};
-
- private final int GL_STATE_FBO = 0;
- private final int GL_STATE_PROGRAM = 1;
- private final int GL_STATE_ARRAYBUFFER = 2;
- private final int GL_STATE_COUNT = 3;
-
- private int[] mOldState = new int[GL_STATE_COUNT];
-
- private final EffectContext mEffectContext;
- private final String mName;
-
- private Effect mIdentityEffect;
-
- int mProgram;
- int mTexSamplerHandle;
- int mTexCoordHandle;
- int mPosCoordHandle;
-
- FloatBuffer mTexVertices;
- FloatBuffer mPosVertices;
-
- /**
- * An abstract constructor of <code>Effect</code> to follow the rules
- * defined by {@link EffectFactory}.
- *
- * @param ctx The effect context
- * @param name The effect name
- */
- public PhotoPhaseEffect(EffectContext ctx, String name) {
- super();
- mEffectContext = ctx;
- mName = name;
-
- // Stand on MCA identity effect for the initialization work
- EffectFactory effectFactory = mEffectContext.getFactory();
- mIdentityEffect = effectFactory.createEffect(MCA_IDENTITY_EFFECT);
- }
-
- /**
- * Method that initializes the effect
- */
- void init(String vertexShader, String fragmentShader) {
- // Create program
- mProgram = GLESUtil.createProgram(vertexShader, fragmentShader);
-
- // Bind attributes and uniforms
- mTexSamplerHandle = GLES20.glGetUniformLocation(mProgram, "tex_sampler");
- GLESUtil.glesCheckError("glGetUniformLocation");
- mTexCoordHandle = GLES20.glGetAttribLocation(mProgram, "a_texcoord");
- GLESUtil.glesCheckError("glGetAttribLocation");
- mPosCoordHandle = GLES20.glGetAttribLocation(mProgram, "a_position");
- GLESUtil.glesCheckError("glGetAttribLocation");
-
- // Setup coordinate buffers
- mTexVertices = ByteBuffer.allocateDirect(
- TEX_VERTICES.length * FLOAT_SIZE_BYTES)
- .order(ByteOrder.nativeOrder()).asFloatBuffer();
- mTexVertices.put(TEX_VERTICES).position(0);
- mPosVertices = ByteBuffer.allocateDirect(
- POS_VERTICES.length * FLOAT_SIZE_BYTES)
- .order(ByteOrder.nativeOrder()).asFloatBuffer();
- mPosVertices.put(POS_VERTICES).position(0);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getName() {
- return mName;
- }
-
- /**
- * Method that returns the effect context
- *
- * @return EffectContext The effect context
- */
- public EffectContext getEffectContext() {
- return mEffectContext;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public final synchronized void apply(int inputTexId, int width, int height, int outputTexId) {
- // Save the GLES state
- saveGLState();
-
- try {
- // Create a framebuffer object and call the effect apply method to draw the effect
- int[] fb = new int[1];
- GLES20.glGenFramebuffers(1, fb, 0);
- GLESUtil.glesCheckError("glGenFramebuffers");
- GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, fb[0]);
- GLESUtil.glesCheckError("glBindFramebuffer");
-
- // Render on the whole framebuffer
- GLES20.glViewport(0, 0, width, height);
- GLESUtil.glesCheckError("glViewport");
-
- // Create a new output texture (Use the MCA identity to clone the input to the output)
- mIdentityEffect.apply(inputTexId, width, height, outputTexId);
-
- // Create the framebuffer
- GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0, GLES20. GL_TEXTURE_2D, outputTexId, 0);
- GLESUtil.glesCheckError("glFramebufferTexture2D");
-
- // Check if the buffer was built successfully
- if (GLES20.glCheckFramebufferStatus(GLES20.GL_FRAMEBUFFER) != GLES20.GL_FRAMEBUFFER_COMPLETE) {
- // Something when wrong. Throw an exception
- GLESUtil.glesCheckError("glCheckFramebufferStatus");
- int error = GLES20.glGetError();
- throw new android.opengl.GLException(error, GLUtils.getEGLErrorString(error));
- }
-
- // Apply the effect
- apply(inputTexId);
-
- } finally {
- // Restore the GLES state
- restoreGLState();
- }
-
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void setParameter(String parameterKey, Object value) {
- // Ignore
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void release() {
- if (GLES20.glIsProgram(mProgram)) {
- GLES20.glDeleteProgram(mProgram);
- GLESUtil.glesCheckError("glDeleteProgram");
- }
- mTexVertices = null;
- mPosVertices = null;
- }
-
- /**
- * Method that applies the effect.
- *
- * @param inputTexId The input texture
- */
- void apply(int inputTexId) {
- // Use our shader program
- GLES20.glUseProgram(mProgram);
- GLESUtil.glesCheckError("glUseProgram");
-
- // Disable blending
- GLES20.glDisable(GLES20.GL_BLEND);
- GLESUtil.glesCheckError("glDisable");
-
- // Set the vertex attributes
- GLES20.glVertexAttribPointer(mTexCoordHandle, 2, GLES20.GL_FLOAT, false, 0, mTexVertices);
- GLESUtil.glesCheckError("glVertexAttribPointer");
- GLES20.glEnableVertexAttribArray(mTexCoordHandle);
- GLESUtil.glesCheckError("glEnableVertexAttribArray");
- GLES20.glVertexAttribPointer(mPosCoordHandle, 2, GLES20.GL_FLOAT, false, 0, mPosVertices);
- GLESUtil.glesCheckError("glVertexAttribPointer");
- GLES20.glEnableVertexAttribArray(mPosCoordHandle);
- GLESUtil.glesCheckError("glEnableVertexAttribArray");
-
- // Set parameters
- applyParameters();
-
- // Set the input texture
- GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
- GLESUtil.glesCheckError("glActiveTexture");
- GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, inputTexId);
- GLESUtil.glesCheckError("glBindTexture");
- GLES20.glUniform1i(mTexSamplerHandle, 0);
- GLESUtil.glesCheckError("glUniform1i");
-
- // Draw
- GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
- GLESUtil.glesCheckError("glClearColor");
- GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
- GLESUtil.glesCheckError("glClear");
- GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
- GLESUtil.glesCheckError("glDrawArrays");
-
- // Disable attributes
- GLES20.glDisableVertexAttribArray(mTexCoordHandle);
- GLESUtil.glesCheckError("glDisableVertexAttribArray");
- GLES20.glDisableVertexAttribArray(mPosCoordHandle);
- GLESUtil.glesCheckError("glDisableVertexAttribArray");
- }
-
- /**
- * Method that applies the parameters of the effect.
- */
- void applyParameters() {
- // Do nothing
- }
-
-
- private final void saveGLState() {
- GLES20.glGetIntegerv(GLES20.GL_FRAMEBUFFER_BINDING, mOldState, GL_STATE_FBO);
- GLES20.glGetIntegerv(GLES20.GL_CURRENT_PROGRAM, mOldState, GL_STATE_PROGRAM);
- GLES20.glGetIntegerv(GLES20.GL_ARRAY_BUFFER_BINDING, mOldState, GL_STATE_ARRAYBUFFER);
- }
-
- private final void restoreGLState() {
- GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, mOldState[GL_STATE_FBO]);
- GLES20.glUseProgram(mOldState[GL_STATE_PROGRAM]);
- GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, mOldState[GL_STATE_ARRAYBUFFER]);
- }
-}
diff --git a/src/org/cyanogenmod/wallpapers/photophase/effects/PhotoPhaseEffectFactory.java b/src/org/cyanogenmod/wallpapers/photophase/effects/PhotoPhaseEffectFactory.java
deleted file mode 100644
index 450bb47..0000000
--- a/src/org/cyanogenmod/wallpapers/photophase/effects/PhotoPhaseEffectFactory.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (C) 2013 The CyanogenMod Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.cyanogenmod.wallpapers.photophase.effects;
-
-/**
- * A class that defines the own PhotoPhase's effects implementation. This class follows the
- * rules of the MCA aosp library.
- */
-public class PhotoPhaseEffectFactory {
-
- /**
- * <p>Applies a blur effect to the image.</p>
- * <p>Available parameters:</p>
- * <table>
- * <tr><td>Parameter name</td><td>Meaning</td><td>Valid values</td></tr>
- * </table>
- */
- public static final String EFFECT_BLUR = "org.cyanogenmod.wallpapers.photophase.effects.BlurEffect";
-
- /**
- * <p>Applies an emboss effect to the image.</p>
- * <p>Available parameters:</p>
- * <table>
- * <tr><td>Parameter name</td><td>Meaning</td><td>Valid values</td></tr>
- * </table>
- */
- public static final String EFFECT_EMBOSS = "org.cyanogenmod.wallpapers.photophase.effects.EmbossEffect";
-
- /**
- * <p>Applies a glow effect to the image.</p>
- * <p>Available parameters:</p>
- * <table>
- * <tr><td>Parameter name</td><td>Meaning</td><td>Valid values</td></tr>
- * </table>
- */
- public static final String EFFECT_GLOW = "org.cyanogenmod.wallpapers.photophase.effects.GlowEffect";
-
- /**
- * <p>Applies a halftone effect to the image.</p>
- * <p>Available parameters:</p>
- * <table>
- * <tr><td>Parameter name</td><td>Meaning</td><td>Valid values</td></tr>
- * <tr>
- * <td><code>strength</code></td>
- * <td>The halftone steps multiplier.</td>
- * <td>Positive float (>0). Higher numbers produce smallest points</td>
- * </tr>
- * </table>
- */
- public static final String EFFECT_HALFTONE = "org.cyanogenmod.wallpapers.photophase.effects.HalftoneEffect";
-
- /**
- * <p>Applies a mirror effect to the image.</p>
- * <p>Available parameters:</p>
- * <table>
- * <tr><td>Parameter name</td><td>Meaning</td><td>Valid values</td></tr>
- * </table>
- */
- public static final String EFFECT_MIRROR = "org.cyanogenmod.wallpapers.photophase.effects.MirrorEffect";
-
- /**
- * <p>Doesn't apply any effect.</p>
- * <p>Available parameters:</p>
- * <table>
- * <tr><td>Parameter name</td><td>Meaning</td><td>Valid values</td></tr>
- * </table>
- */
- public static final String EFFECT_NULL = "org.cyanogenmod.wallpapers.photophase.effects.NullEffect";
-
- /**
- * <p>Applies an outline effect to the image.</p>
- * <p>Available parameters:</p>
- * <table>
- * <tr><td>Parameter name</td><td>Meaning</td><td>Valid values</td></tr>
- * </table>
- */
- public static final String EFFECT_OUTLINE = "org.cyanogenmod.wallpapers.photophase.effects.OutlineEffect";
-
- /**
- * <p>Applies a pixelate effect to the image.</p>
- * <p>Available parameters:</p>
- * <table>
- * <tr><td>Parameter name</td><td>Meaning</td><td>Valid values</td></tr>
- * <tr>
- * <td><code>strength</code></td>
- * <td>The pixelate steps multiplier.</td>
- * <td>Positive float (>0). Higher numbers produce more pixelation.</td>
- * </tr>
- * </table>
- */
- public static final String EFFECT_PIXELATE = "org.cyanogenmod.wallpapers.photophase.effects.PixelateEffect";
-
- /**
- * <p>Applies a pop art (Warhol) effect to the image.</p>
- * <p>Available parameters:</p>
- * <table>
- * <tr><td>Parameter name</td><td>Meaning</td><td>Valid values</td></tr>
- * </table>
- */
- public static final String EFFECT_POPART = "org.cyanogenmod.wallpapers.photophase.effects.PopArtEffect";
-
- /**
- * <p>Applies a TV scan line effect to the image.</p>
- * <p>Available parameters:</p>
- * <table>
- * <tr><td>Parameter name</td><td>Meaning</td><td>Valid values</td></tr>
- * </table>
- */
- public static final String EFFECT_SCANLINES = "org.cyanogenmod.wallpapers.photophase.effects.ScanlinesEffect";
-}
diff --git a/src/org/cyanogenmod/wallpapers/photophase/effects/PixelateEffect.java b/src/org/cyanogenmod/wallpapers/photophase/effects/PixelateEffect.java
deleted file mode 100644
index fe37d4c..0000000
--- a/src/org/cyanogenmod/wallpapers/photophase/effects/PixelateEffect.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright (C) 2013 The CyanogenMod Project
- *
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-//
-// Based on the shaders of kodemongki:
-// http://kodemongki.blogspot.com.es/2011/06/kameraku-custom-shader-effects-example.html
-//
-
-package org.cyanogenmod.wallpapers.photophase.effects;
-
-import android.media.effect.EffectContext;
-import android.opengl.GLES20;
-import android.util.Log;
-
-import org.cyanogenmod.wallpapers.photophase.utils.GLESUtil;
-
-/**
- * A pixelate effect<br/>
- * <table>
- * <tr><td>Parameter name</td><td>Meaning</td><td>Valid values</td></tr>
- * <tr>
- * <td><code>strength</code></td>
- * <td>The pixelate strength.</td>
- * <td>Positive float (>0). Higher numbers produce more pixelation.</td>
- * </tr>
- * </table>
- */
-public class PixelateEffect extends PhotoPhaseEffect {
-
- private static final String TAG = "PixelateEffect";
-
- private static final String STRENGTH_PARAMETER = "strength";
-
- private static final String FRAGMENT_SHADER =
- "precision mediump float;\n" +
- "uniform sampler2D tex_sampler;\n" +
- "varying vec2 v_texcoord;\n" +
- "const float step_w = 0.0015625;\n" +
- "const float step_h = 0.0027778;\n" +
- "uniform float strength;\n" +
- "void main(void)\n" +
- "{\n" +
- " float offx = floor(v_texcoord.s / (strength * step_w));\n" +
- " float offy = floor(v_texcoord.t / (strength * step_h));\n" +
- " vec3 res = texture2D(tex_sampler, vec2(offx * strength * step_w , offy * strength * step_h)).bgr;\n" +
- " gl_FragColor.a = 1.0;\n" +
- " gl_FragColor.rgb = res;\n" +
- "}";
-
- private float mStrength = 8.0f;
- private int mStepsHandle;
-
- /**
- * Constructor of <code>PixelateEffect</code>.
- *
- * @param ctx The effect context
- * @param name The effect name
- */
- public PixelateEffect(EffectContext ctx, String name) {
- super(ctx, PixelateEffect.class.getName());
- init(VERTEX_SHADER, FRAGMENT_SHADER);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- void init(String vertexShader, String fragmentShader) {
- super.init(vertexShader, fragmentShader);
-
- // Parameters
- mStepsHandle = GLES20.glGetUniformLocation(mProgram, "strength");
- GLESUtil.glesCheckError("glGetUniformLocation");
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- void applyParameters() {
- // Set parameters
- GLES20.glUniform1f(mStepsHandle, mStrength);
- GLESUtil.glesCheckError("glUniform1f");
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void setParameter(String parameterKey, Object value) {
- if (parameterKey.compareTo(STRENGTH_PARAMETER) == 0) {
- try {
- float strength = Float.parseFloat(value.toString());
- if (strength <= 0) {
- Log.w(TAG, "strength parameter must be >= 0");
- return;
- }
- mStrength = strength;
- } catch (NumberFormatException ex) {
- // Ignore
- }
- }
- }
-
-}
diff --git a/src/org/cyanogenmod/wallpapers/photophase/effects/PopArtEffect.java b/src/org/cyanogenmod/wallpapers/photophase/effects/PopArtEffect.java
deleted file mode 100644
index df2b18c..0000000
--- a/src/org/cyanogenmod/wallpapers/photophase/effects/PopArtEffect.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2013 The CyanogenMod Project
- *
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-//
-// Based on the shaders of kodemongki:
-// http://kodemongki.blogspot.com.es/2011/06/kameraku-custom-shader-effects-example.html
-//
-
-package org.cyanogenmod.wallpapers.photophase.effects;
-
-import android.media.effect.EffectContext;
-
-/**
- * A pop art (Warhol) effect<br/>
- * <table>
- * <tr><td>Parameter name</td><td>Meaning</td><td>Valid values</td></tr>
- * </table>
- */
-public class PopArtEffect extends PhotoPhaseEffect {
-
- private static final String FRAGMENT_SHADER =
- "precision mediump float;\n" +
- "uniform sampler2D tex_sampler;\n" +
- "varying vec2 v_texcoord;\n" +
- "void main(void)\n" +
- "{\n" +
- " vec3 col = texture2D(tex_sampler, v_texcoord).bgr;\n" +
- " float y = 0.3 *col.r + 0.59 * col.g + 0.11 * col.b;\n" +
- " y = y < 0.3 ? 0.0 : (y < 0.6 ? 0.5 : 1.0);\n" +
- " if (y == 0.5)\n" +
- " col = vec3(0.8, 0.0, 0.0);\n" +
- " else if (y == 1.0)\n" +
- " col = vec3(0.9, 0.9, 0.0);\n" +
- " else\n" +
- " col = vec3(0.0, 0.0, 0.0);\n" +
- " gl_FragColor.a = 1.0;\n" +
- " gl_FragColor.rgb = col;\n" +
- "}";
-
- /**
- * Constructor of <code>PopArtEffect</code>.
- *
- * @param ctx The effect context
- * @param name The effect name
- */
- public PopArtEffect(EffectContext ctx, String name) {
- super(ctx, PopArtEffect.class.getName());
- init(VERTEX_SHADER, FRAGMENT_SHADER);
- }
-
-}
diff --git a/src/org/cyanogenmod/wallpapers/photophase/effects/ScanlinesEffect.java b/src/org/cyanogenmod/wallpapers/photophase/effects/ScanlinesEffect.java
deleted file mode 100644
index cd78307..0000000
--- a/src/org/cyanogenmod/wallpapers/photophase/effects/ScanlinesEffect.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2013 The CyanogenMod Project
- *
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-//
-// Based on the shaders of Max Maischein of App-VideoMixer:
-// http://cpansearch.perl.org/src/CORION/App-VideoMixer-0.02/filters/scanlines.glsl
-//
-
-package org.cyanogenmod.wallpapers.photophase.effects;
-
-import android.media.effect.EffectContext;
-
-/**
- * A TV scanline effect<br/>
- * <table>
- * <tr><td>Parameter name</td><td>Meaning</td><td>Valid values</td></tr>
- * </table>
- */
-public class ScanlinesEffect extends PhotoPhaseEffect {
-
- private static final String FRAGMENT_SHADER =
- "precision mediump float;\n" +
- "uniform sampler2D tex_sampler;\n" +
- "uniform float offset;\n" +
- "float frequency = 83.0;\n" +
- "varying vec2 v_texcoord;\n" +
- "void main(void)\n" +
- "{\n" +
- " float global_pos = (v_texcoord.y + offset) * frequency;\n" +
- " float wave_pos = cos((fract(global_pos) - 0.5)*3.14);\n" +
- " vec4 pel = texture2D(tex_sampler, v_texcoord);\n" +
- " gl_FragColor = mix(vec4(0,0,0,0), pel, wave_pos);\n" +
- "}";
-
- /**
- * Constructor of <code>ScanlinesEffect</code>.
- *
- * @param ctx The effect context
- * @param name The effect name
- */
- public ScanlinesEffect(EffectContext ctx, String name) {
- super(ctx, ScanlinesEffect.class.getName());
- init(VERTEX_SHADER, FRAGMENT_SHADER);
- }
-
-}