1*90c8c64dSAndroid Build Coastguard Worker /* 2*90c8c64dSAndroid Build Coastguard Worker * Copyright (C) 2014 The Android Open Source Project 3*90c8c64dSAndroid Build Coastguard Worker * 4*90c8c64dSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*90c8c64dSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*90c8c64dSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*90c8c64dSAndroid Build Coastguard Worker * 8*90c8c64dSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*90c8c64dSAndroid Build Coastguard Worker * 10*90c8c64dSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*90c8c64dSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*90c8c64dSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*90c8c64dSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*90c8c64dSAndroid Build Coastguard Worker * limitations under the License. 15*90c8c64dSAndroid Build Coastguard Worker */ 16*90c8c64dSAndroid Build Coastguard Worker 17*90c8c64dSAndroid Build Coastguard Worker package com.example.android.mediaeffects; 18*90c8c64dSAndroid Build Coastguard Worker 19*90c8c64dSAndroid Build Coastguard Worker import android.graphics.Bitmap; 20*90c8c64dSAndroid Build Coastguard Worker import android.graphics.BitmapFactory; 21*90c8c64dSAndroid Build Coastguard Worker import android.graphics.Color; 22*90c8c64dSAndroid Build Coastguard Worker import android.media.effect.Effect; 23*90c8c64dSAndroid Build Coastguard Worker import android.media.effect.EffectContext; 24*90c8c64dSAndroid Build Coastguard Worker import android.media.effect.EffectFactory; 25*90c8c64dSAndroid Build Coastguard Worker import android.opengl.GLES20; 26*90c8c64dSAndroid Build Coastguard Worker import android.opengl.GLSurfaceView; 27*90c8c64dSAndroid Build Coastguard Worker import android.opengl.GLUtils; 28*90c8c64dSAndroid Build Coastguard Worker import android.os.Bundle; 29*90c8c64dSAndroid Build Coastguard Worker import android.support.annotation.Nullable; 30*90c8c64dSAndroid Build Coastguard Worker import android.support.v4.app.Fragment; 31*90c8c64dSAndroid Build Coastguard Worker import android.view.LayoutInflater; 32*90c8c64dSAndroid Build Coastguard Worker import android.view.Menu; 33*90c8c64dSAndroid Build Coastguard Worker import android.view.MenuInflater; 34*90c8c64dSAndroid Build Coastguard Worker import android.view.MenuItem; 35*90c8c64dSAndroid Build Coastguard Worker import android.view.View; 36*90c8c64dSAndroid Build Coastguard Worker import android.view.ViewGroup; 37*90c8c64dSAndroid Build Coastguard Worker 38*90c8c64dSAndroid Build Coastguard Worker import javax.microedition.khronos.egl.EGLConfig; 39*90c8c64dSAndroid Build Coastguard Worker import javax.microedition.khronos.opengles.GL10; 40*90c8c64dSAndroid Build Coastguard Worker 41*90c8c64dSAndroid Build Coastguard Worker public class MediaEffectsFragment extends Fragment implements GLSurfaceView.Renderer { 42*90c8c64dSAndroid Build Coastguard Worker 43*90c8c64dSAndroid Build Coastguard Worker private static final String STATE_CURRENT_EFFECT = "current_effect"; 44*90c8c64dSAndroid Build Coastguard Worker 45*90c8c64dSAndroid Build Coastguard Worker private GLSurfaceView mEffectView; 46*90c8c64dSAndroid Build Coastguard Worker private int[] mTextures = new int[2]; 47*90c8c64dSAndroid Build Coastguard Worker private EffectContext mEffectContext; 48*90c8c64dSAndroid Build Coastguard Worker private Effect mEffect; 49*90c8c64dSAndroid Build Coastguard Worker private TextureRenderer mTexRenderer = new TextureRenderer(); 50*90c8c64dSAndroid Build Coastguard Worker private int mImageWidth; 51*90c8c64dSAndroid Build Coastguard Worker private int mImageHeight; 52*90c8c64dSAndroid Build Coastguard Worker private boolean mInitialized = false; 53*90c8c64dSAndroid Build Coastguard Worker private int mCurrentEffect; 54*90c8c64dSAndroid Build Coastguard Worker 55*90c8c64dSAndroid Build Coastguard Worker @Override onCreate(Bundle savedInstanceState)56*90c8c64dSAndroid Build Coastguard Worker public void onCreate(Bundle savedInstanceState) { 57*90c8c64dSAndroid Build Coastguard Worker super.onCreate(savedInstanceState); 58*90c8c64dSAndroid Build Coastguard Worker setHasOptionsMenu(true); 59*90c8c64dSAndroid Build Coastguard Worker } 60*90c8c64dSAndroid Build Coastguard Worker 61*90c8c64dSAndroid Build Coastguard Worker @Override onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)62*90c8c64dSAndroid Build Coastguard Worker public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, 63*90c8c64dSAndroid Build Coastguard Worker @Nullable Bundle savedInstanceState) { 64*90c8c64dSAndroid Build Coastguard Worker return inflater.inflate(R.layout.fragment_media_effects, container, false); 65*90c8c64dSAndroid Build Coastguard Worker } 66*90c8c64dSAndroid Build Coastguard Worker 67*90c8c64dSAndroid Build Coastguard Worker @Override onViewCreated(View view, @Nullable Bundle savedInstanceState)68*90c8c64dSAndroid Build Coastguard Worker public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 69*90c8c64dSAndroid Build Coastguard Worker mEffectView = (GLSurfaceView) view.findViewById(R.id.effectsview); 70*90c8c64dSAndroid Build Coastguard Worker mEffectView.setEGLContextClientVersion(2); 71*90c8c64dSAndroid Build Coastguard Worker mEffectView.setRenderer(this); 72*90c8c64dSAndroid Build Coastguard Worker mEffectView.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); 73*90c8c64dSAndroid Build Coastguard Worker if (null != savedInstanceState && savedInstanceState.containsKey(STATE_CURRENT_EFFECT)) { 74*90c8c64dSAndroid Build Coastguard Worker setCurrentEffect(savedInstanceState.getInt(STATE_CURRENT_EFFECT)); 75*90c8c64dSAndroid Build Coastguard Worker } else { 76*90c8c64dSAndroid Build Coastguard Worker setCurrentEffect(R.id.none); 77*90c8c64dSAndroid Build Coastguard Worker } 78*90c8c64dSAndroid Build Coastguard Worker } 79*90c8c64dSAndroid Build Coastguard Worker 80*90c8c64dSAndroid Build Coastguard Worker @Override onCreateOptionsMenu(Menu menu, MenuInflater inflater)81*90c8c64dSAndroid Build Coastguard Worker public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 82*90c8c64dSAndroid Build Coastguard Worker inflater.inflate(R.menu.media_effects, menu); 83*90c8c64dSAndroid Build Coastguard Worker } 84*90c8c64dSAndroid Build Coastguard Worker 85*90c8c64dSAndroid Build Coastguard Worker @Override onOptionsItemSelected(MenuItem item)86*90c8c64dSAndroid Build Coastguard Worker public boolean onOptionsItemSelected(MenuItem item) { 87*90c8c64dSAndroid Build Coastguard Worker setCurrentEffect(item.getItemId()); 88*90c8c64dSAndroid Build Coastguard Worker mEffectView.requestRender(); 89*90c8c64dSAndroid Build Coastguard Worker return true; 90*90c8c64dSAndroid Build Coastguard Worker } 91*90c8c64dSAndroid Build Coastguard Worker 92*90c8c64dSAndroid Build Coastguard Worker @Override onSaveInstanceState(Bundle outState)93*90c8c64dSAndroid Build Coastguard Worker public void onSaveInstanceState(Bundle outState) { 94*90c8c64dSAndroid Build Coastguard Worker outState.putInt(STATE_CURRENT_EFFECT, mCurrentEffect); 95*90c8c64dSAndroid Build Coastguard Worker } 96*90c8c64dSAndroid Build Coastguard Worker 97*90c8c64dSAndroid Build Coastguard Worker @Override onSurfaceCreated(GL10 gl, EGLConfig eglConfig)98*90c8c64dSAndroid Build Coastguard Worker public void onSurfaceCreated(GL10 gl, EGLConfig eglConfig) { 99*90c8c64dSAndroid Build Coastguard Worker // Nothing to do here 100*90c8c64dSAndroid Build Coastguard Worker } 101*90c8c64dSAndroid Build Coastguard Worker 102*90c8c64dSAndroid Build Coastguard Worker @Override onSurfaceChanged(GL10 gl, int width, int height)103*90c8c64dSAndroid Build Coastguard Worker public void onSurfaceChanged(GL10 gl, int width, int height) { 104*90c8c64dSAndroid Build Coastguard Worker if (mTexRenderer != null) { 105*90c8c64dSAndroid Build Coastguard Worker mTexRenderer.updateViewSize(width, height); 106*90c8c64dSAndroid Build Coastguard Worker } 107*90c8c64dSAndroid Build Coastguard Worker } 108*90c8c64dSAndroid Build Coastguard Worker 109*90c8c64dSAndroid Build Coastguard Worker @Override onDrawFrame(GL10 gl)110*90c8c64dSAndroid Build Coastguard Worker public void onDrawFrame(GL10 gl) { 111*90c8c64dSAndroid Build Coastguard Worker if (!mInitialized) { 112*90c8c64dSAndroid Build Coastguard Worker //Only need to do this once 113*90c8c64dSAndroid Build Coastguard Worker mEffectContext = EffectContext.createWithCurrentGlContext(); 114*90c8c64dSAndroid Build Coastguard Worker mTexRenderer.init(); 115*90c8c64dSAndroid Build Coastguard Worker loadTextures(); 116*90c8c64dSAndroid Build Coastguard Worker mInitialized = true; 117*90c8c64dSAndroid Build Coastguard Worker } 118*90c8c64dSAndroid Build Coastguard Worker if (mCurrentEffect != R.id.none) { 119*90c8c64dSAndroid Build Coastguard Worker //if an effect is chosen initialize it and apply it to the texture 120*90c8c64dSAndroid Build Coastguard Worker initEffect(); 121*90c8c64dSAndroid Build Coastguard Worker applyEffect(); 122*90c8c64dSAndroid Build Coastguard Worker } 123*90c8c64dSAndroid Build Coastguard Worker renderResult(); 124*90c8c64dSAndroid Build Coastguard Worker } 125*90c8c64dSAndroid Build Coastguard Worker setCurrentEffect(int effect)126*90c8c64dSAndroid Build Coastguard Worker private void setCurrentEffect(int effect) { 127*90c8c64dSAndroid Build Coastguard Worker mCurrentEffect = effect; 128*90c8c64dSAndroid Build Coastguard Worker } 129*90c8c64dSAndroid Build Coastguard Worker loadTextures()130*90c8c64dSAndroid Build Coastguard Worker private void loadTextures() { 131*90c8c64dSAndroid Build Coastguard Worker // Generate textures 132*90c8c64dSAndroid Build Coastguard Worker GLES20.glGenTextures(2, mTextures, 0); 133*90c8c64dSAndroid Build Coastguard Worker 134*90c8c64dSAndroid Build Coastguard Worker // Load input bitmap 135*90c8c64dSAndroid Build Coastguard Worker Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.puppy); 136*90c8c64dSAndroid Build Coastguard Worker mImageWidth = bitmap.getWidth(); 137*90c8c64dSAndroid Build Coastguard Worker mImageHeight = bitmap.getHeight(); 138*90c8c64dSAndroid Build Coastguard Worker mTexRenderer.updateTextureSize(mImageWidth, mImageHeight); 139*90c8c64dSAndroid Build Coastguard Worker 140*90c8c64dSAndroid Build Coastguard Worker // Upload to texture 141*90c8c64dSAndroid Build Coastguard Worker GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextures[0]); 142*90c8c64dSAndroid Build Coastguard Worker GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0); 143*90c8c64dSAndroid Build Coastguard Worker 144*90c8c64dSAndroid Build Coastguard Worker // Set texture parameters 145*90c8c64dSAndroid Build Coastguard Worker GLToolbox.initTexParams(); 146*90c8c64dSAndroid Build Coastguard Worker } 147*90c8c64dSAndroid Build Coastguard Worker initEffect()148*90c8c64dSAndroid Build Coastguard Worker private void initEffect() { 149*90c8c64dSAndroid Build Coastguard Worker EffectFactory effectFactory = mEffectContext.getFactory(); 150*90c8c64dSAndroid Build Coastguard Worker if (mEffect != null) { 151*90c8c64dSAndroid Build Coastguard Worker mEffect.release(); 152*90c8c64dSAndroid Build Coastguard Worker } 153*90c8c64dSAndroid Build Coastguard Worker // Initialize the correct effect based on the selected menu/action item 154*90c8c64dSAndroid Build Coastguard Worker switch (mCurrentEffect) { 155*90c8c64dSAndroid Build Coastguard Worker 156*90c8c64dSAndroid Build Coastguard Worker case R.id.none: 157*90c8c64dSAndroid Build Coastguard Worker break; 158*90c8c64dSAndroid Build Coastguard Worker 159*90c8c64dSAndroid Build Coastguard Worker case R.id.autofix: 160*90c8c64dSAndroid Build Coastguard Worker mEffect = effectFactory.createEffect(EffectFactory.EFFECT_AUTOFIX); 161*90c8c64dSAndroid Build Coastguard Worker mEffect.setParameter("scale", 0.5f); 162*90c8c64dSAndroid Build Coastguard Worker break; 163*90c8c64dSAndroid Build Coastguard Worker 164*90c8c64dSAndroid Build Coastguard Worker case R.id.bw: 165*90c8c64dSAndroid Build Coastguard Worker mEffect = effectFactory.createEffect(EffectFactory.EFFECT_BLACKWHITE); 166*90c8c64dSAndroid Build Coastguard Worker mEffect.setParameter("black", .1f); 167*90c8c64dSAndroid Build Coastguard Worker mEffect.setParameter("white", .7f); 168*90c8c64dSAndroid Build Coastguard Worker break; 169*90c8c64dSAndroid Build Coastguard Worker 170*90c8c64dSAndroid Build Coastguard Worker case R.id.brightness: 171*90c8c64dSAndroid Build Coastguard Worker mEffect = effectFactory.createEffect(EffectFactory.EFFECT_BRIGHTNESS); 172*90c8c64dSAndroid Build Coastguard Worker mEffect.setParameter("brightness", 2.0f); 173*90c8c64dSAndroid Build Coastguard Worker break; 174*90c8c64dSAndroid Build Coastguard Worker 175*90c8c64dSAndroid Build Coastguard Worker case R.id.contrast: 176*90c8c64dSAndroid Build Coastguard Worker mEffect = effectFactory.createEffect(EffectFactory.EFFECT_CONTRAST); 177*90c8c64dSAndroid Build Coastguard Worker mEffect.setParameter("contrast", 1.4f); 178*90c8c64dSAndroid Build Coastguard Worker break; 179*90c8c64dSAndroid Build Coastguard Worker 180*90c8c64dSAndroid Build Coastguard Worker case R.id.crossprocess: 181*90c8c64dSAndroid Build Coastguard Worker mEffect = effectFactory.createEffect(EffectFactory.EFFECT_CROSSPROCESS); 182*90c8c64dSAndroid Build Coastguard Worker break; 183*90c8c64dSAndroid Build Coastguard Worker 184*90c8c64dSAndroid Build Coastguard Worker case R.id.documentary: 185*90c8c64dSAndroid Build Coastguard Worker mEffect = effectFactory.createEffect(EffectFactory.EFFECT_DOCUMENTARY); 186*90c8c64dSAndroid Build Coastguard Worker break; 187*90c8c64dSAndroid Build Coastguard Worker 188*90c8c64dSAndroid Build Coastguard Worker case R.id.duotone: 189*90c8c64dSAndroid Build Coastguard Worker mEffect = effectFactory.createEffect(EffectFactory.EFFECT_DUOTONE); 190*90c8c64dSAndroid Build Coastguard Worker mEffect.setParameter("first_color", Color.YELLOW); 191*90c8c64dSAndroid Build Coastguard Worker mEffect.setParameter("second_color", Color.DKGRAY); 192*90c8c64dSAndroid Build Coastguard Worker break; 193*90c8c64dSAndroid Build Coastguard Worker 194*90c8c64dSAndroid Build Coastguard Worker case R.id.filllight: 195*90c8c64dSAndroid Build Coastguard Worker mEffect = effectFactory.createEffect(EffectFactory.EFFECT_FILLLIGHT); 196*90c8c64dSAndroid Build Coastguard Worker mEffect.setParameter("strength", .8f); 197*90c8c64dSAndroid Build Coastguard Worker break; 198*90c8c64dSAndroid Build Coastguard Worker 199*90c8c64dSAndroid Build Coastguard Worker case R.id.fisheye: 200*90c8c64dSAndroid Build Coastguard Worker mEffect = effectFactory.createEffect(EffectFactory.EFFECT_FISHEYE); 201*90c8c64dSAndroid Build Coastguard Worker mEffect.setParameter("scale", .5f); 202*90c8c64dSAndroid Build Coastguard Worker break; 203*90c8c64dSAndroid Build Coastguard Worker 204*90c8c64dSAndroid Build Coastguard Worker case R.id.flipvert: 205*90c8c64dSAndroid Build Coastguard Worker mEffect = effectFactory.createEffect(EffectFactory.EFFECT_FLIP); 206*90c8c64dSAndroid Build Coastguard Worker mEffect.setParameter("vertical", true); 207*90c8c64dSAndroid Build Coastguard Worker break; 208*90c8c64dSAndroid Build Coastguard Worker 209*90c8c64dSAndroid Build Coastguard Worker case R.id.fliphor: 210*90c8c64dSAndroid Build Coastguard Worker mEffect = effectFactory.createEffect(EffectFactory.EFFECT_FLIP); 211*90c8c64dSAndroid Build Coastguard Worker mEffect.setParameter("horizontal", true); 212*90c8c64dSAndroid Build Coastguard Worker break; 213*90c8c64dSAndroid Build Coastguard Worker 214*90c8c64dSAndroid Build Coastguard Worker case R.id.grain: 215*90c8c64dSAndroid Build Coastguard Worker mEffect = effectFactory.createEffect(EffectFactory.EFFECT_GRAIN); 216*90c8c64dSAndroid Build Coastguard Worker mEffect.setParameter("strength", 1.0f); 217*90c8c64dSAndroid Build Coastguard Worker break; 218*90c8c64dSAndroid Build Coastguard Worker 219*90c8c64dSAndroid Build Coastguard Worker case R.id.grayscale: 220*90c8c64dSAndroid Build Coastguard Worker mEffect = effectFactory.createEffect(EffectFactory.EFFECT_GRAYSCALE); 221*90c8c64dSAndroid Build Coastguard Worker break; 222*90c8c64dSAndroid Build Coastguard Worker 223*90c8c64dSAndroid Build Coastguard Worker case R.id.lomoish: 224*90c8c64dSAndroid Build Coastguard Worker mEffect = effectFactory.createEffect(EffectFactory.EFFECT_LOMOISH); 225*90c8c64dSAndroid Build Coastguard Worker break; 226*90c8c64dSAndroid Build Coastguard Worker 227*90c8c64dSAndroid Build Coastguard Worker case R.id.negative: 228*90c8c64dSAndroid Build Coastguard Worker mEffect = effectFactory.createEffect(EffectFactory.EFFECT_NEGATIVE); 229*90c8c64dSAndroid Build Coastguard Worker break; 230*90c8c64dSAndroid Build Coastguard Worker 231*90c8c64dSAndroid Build Coastguard Worker case R.id.posterize: 232*90c8c64dSAndroid Build Coastguard Worker mEffect = effectFactory.createEffect(EffectFactory.EFFECT_POSTERIZE); 233*90c8c64dSAndroid Build Coastguard Worker break; 234*90c8c64dSAndroid Build Coastguard Worker 235*90c8c64dSAndroid Build Coastguard Worker case R.id.rotate: 236*90c8c64dSAndroid Build Coastguard Worker mEffect = effectFactory.createEffect(EffectFactory.EFFECT_ROTATE); 237*90c8c64dSAndroid Build Coastguard Worker mEffect.setParameter("angle", 180); 238*90c8c64dSAndroid Build Coastguard Worker break; 239*90c8c64dSAndroid Build Coastguard Worker 240*90c8c64dSAndroid Build Coastguard Worker case R.id.saturate: 241*90c8c64dSAndroid Build Coastguard Worker mEffect = effectFactory.createEffect(EffectFactory.EFFECT_SATURATE); 242*90c8c64dSAndroid Build Coastguard Worker mEffect.setParameter("scale", .5f); 243*90c8c64dSAndroid Build Coastguard Worker break; 244*90c8c64dSAndroid Build Coastguard Worker 245*90c8c64dSAndroid Build Coastguard Worker case R.id.sepia: 246*90c8c64dSAndroid Build Coastguard Worker mEffect = effectFactory.createEffect(EffectFactory.EFFECT_SEPIA); 247*90c8c64dSAndroid Build Coastguard Worker break; 248*90c8c64dSAndroid Build Coastguard Worker 249*90c8c64dSAndroid Build Coastguard Worker case R.id.sharpen: 250*90c8c64dSAndroid Build Coastguard Worker mEffect = effectFactory.createEffect(EffectFactory.EFFECT_SHARPEN); 251*90c8c64dSAndroid Build Coastguard Worker break; 252*90c8c64dSAndroid Build Coastguard Worker 253*90c8c64dSAndroid Build Coastguard Worker case R.id.temperature: 254*90c8c64dSAndroid Build Coastguard Worker mEffect = effectFactory.createEffect(EffectFactory.EFFECT_TEMPERATURE); 255*90c8c64dSAndroid Build Coastguard Worker mEffect.setParameter("scale", .9f); 256*90c8c64dSAndroid Build Coastguard Worker break; 257*90c8c64dSAndroid Build Coastguard Worker 258*90c8c64dSAndroid Build Coastguard Worker case R.id.tint: 259*90c8c64dSAndroid Build Coastguard Worker mEffect = effectFactory.createEffect(EffectFactory.EFFECT_TINT); 260*90c8c64dSAndroid Build Coastguard Worker mEffect.setParameter("tint", Color.MAGENTA); 261*90c8c64dSAndroid Build Coastguard Worker break; 262*90c8c64dSAndroid Build Coastguard Worker 263*90c8c64dSAndroid Build Coastguard Worker case R.id.vignette: 264*90c8c64dSAndroid Build Coastguard Worker mEffect = effectFactory.createEffect(EffectFactory.EFFECT_VIGNETTE); 265*90c8c64dSAndroid Build Coastguard Worker mEffect.setParameter("scale", .5f); 266*90c8c64dSAndroid Build Coastguard Worker break; 267*90c8c64dSAndroid Build Coastguard Worker 268*90c8c64dSAndroid Build Coastguard Worker default: 269*90c8c64dSAndroid Build Coastguard Worker break; 270*90c8c64dSAndroid Build Coastguard Worker } 271*90c8c64dSAndroid Build Coastguard Worker } 272*90c8c64dSAndroid Build Coastguard Worker applyEffect()273*90c8c64dSAndroid Build Coastguard Worker private void applyEffect() { 274*90c8c64dSAndroid Build Coastguard Worker mEffect.apply(mTextures[0], mImageWidth, mImageHeight, mTextures[1]); 275*90c8c64dSAndroid Build Coastguard Worker } 276*90c8c64dSAndroid Build Coastguard Worker renderResult()277*90c8c64dSAndroid Build Coastguard Worker private void renderResult() { 278*90c8c64dSAndroid Build Coastguard Worker if (mCurrentEffect != R.id.none) { 279*90c8c64dSAndroid Build Coastguard Worker // if no effect is chosen, just render the original bitmap 280*90c8c64dSAndroid Build Coastguard Worker mTexRenderer.renderTexture(mTextures[1]); 281*90c8c64dSAndroid Build Coastguard Worker } else { 282*90c8c64dSAndroid Build Coastguard Worker // render the result of applyEffect() 283*90c8c64dSAndroid Build Coastguard Worker mTexRenderer.renderTexture(mTextures[0]); 284*90c8c64dSAndroid Build Coastguard Worker } 285*90c8c64dSAndroid Build Coastguard Worker } 286*90c8c64dSAndroid Build Coastguard Worker 287*90c8c64dSAndroid Build Coastguard Worker } 288