Skip to content

Commit 08aefa1

Browse files
committed
Add 11 filter modes.
1 parent c2d152a commit 08aefa1

26 files changed

+856
-53
lines changed

app/src/main/java/cn/nekocode/camerafilter/CameraRenderer.java

+22
Original file line numberDiff line numberDiff line change
@@ -38,24 +38,35 @@
3838
import cn.nekocode.camerafilter.filter.BlackAndWhiteFilter;
3939
import cn.nekocode.camerafilter.filter.BlueorangeFilter;
4040
import cn.nekocode.camerafilter.filter.CameraFilter;
41+
import cn.nekocode.camerafilter.filter.CartoonFilter;
42+
import cn.nekocode.camerafilter.filter.CastingFilter;
4143
import cn.nekocode.camerafilter.filter.ChromaticAberrationFilter;
4244
import cn.nekocode.camerafilter.filter.ContrastFilter;
4345
import cn.nekocode.camerafilter.filter.CrackedFilter;
4446
import cn.nekocode.camerafilter.filter.CrosshatchFilter;
4547
import cn.nekocode.camerafilter.filter.EMInterferenceFilter;
4648
import cn.nekocode.camerafilter.filter.EdgeDetectionFilter;
49+
import cn.nekocode.camerafilter.filter.GrayFilter;
50+
import cn.nekocode.camerafilter.filter.HexagonMosaicFilter;
4751
import cn.nekocode.camerafilter.filter.JFAVoronoiFilter;
4852
import cn.nekocode.camerafilter.filter.LegofiedFilter;
4953
import cn.nekocode.camerafilter.filter.LichtensteinEsqueFilter;
5054
import cn.nekocode.camerafilter.filter.MappingFilter;
55+
import cn.nekocode.camerafilter.filter.MirrorFilter;
5156
import cn.nekocode.camerafilter.filter.MoneyFilter;
57+
import cn.nekocode.camerafilter.filter.NegativeFilter;
5258
import cn.nekocode.camerafilter.filter.NoiseWarpFilter;
59+
import cn.nekocode.camerafilter.filter.NostalgiaFilter;
5360
import cn.nekocode.camerafilter.filter.OriginalFilter;
5461
import cn.nekocode.camerafilter.filter.PixelizeFilter;
5562
import cn.nekocode.camerafilter.filter.PolygonizationFilter;
5663
import cn.nekocode.camerafilter.filter.RefractionFilter;
64+
import cn.nekocode.camerafilter.filter.ReliefFilter;
65+
import cn.nekocode.camerafilter.filter.SwirlFilter;
5766
import cn.nekocode.camerafilter.filter.TileMosaicFilter;
5867
import cn.nekocode.camerafilter.filter.TrianglesMosaicFilter;
68+
import cn.nekocode.camerafilter.filter.TripleFilter;
69+
import cn.nekocode.camerafilter.filter.WaterReflectionFilter;
5970

6071
/**
6172
* @author nekocode ([email protected])
@@ -165,6 +176,17 @@ public void run() {
165176
cameraFilterMap.append(R.id.filter19, new PolygonizationFilter(context));
166177
cameraFilterMap.append(R.id.filter20, new JFAVoronoiFilter(context));
167178
cameraFilterMap.append(R.id.filter21, new BlackAndWhiteFilter(context));
179+
cameraFilterMap.append(R.id.filter22, new GrayFilter(context));
180+
cameraFilterMap.append(R.id.filter23, new NegativeFilter(context));
181+
cameraFilterMap.append(R.id.filter24, new NostalgiaFilter(context));
182+
cameraFilterMap.append(R.id.filter25, new CastingFilter(context));
183+
cameraFilterMap.append(R.id.filter26, new ReliefFilter(context));
184+
cameraFilterMap.append(R.id.filter27, new SwirlFilter(context));
185+
cameraFilterMap.append(R.id.filter28, new HexagonMosaicFilter(context));
186+
cameraFilterMap.append(R.id.filter29, new MirrorFilter(context));
187+
cameraFilterMap.append(R.id.filter30, new TripleFilter(context));
188+
cameraFilterMap.append(R.id.filter31, new CartoonFilter(context));
189+
cameraFilterMap.append(R.id.filter32, new WaterReflectionFilter(context));
168190
setSelectedFilter(selectedFilterId);
169191

170192
// Create texture for camera preview

app/src/main/java/cn/nekocode/camerafilter/MainActivity.java

+7-2
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,18 @@ public class MainActivity extends AppCompatActivity implements GestureDetector.O
5959
"BasicDeform", "Contrast", "NoiseWarp", "Refraction",
6060
"Mapping", "Crosshatch", "LichtensteinEsque",
6161
"AsciiArt", "MoneyFilter", "Cracked", "Polygonization",
62-
"JFAVoronoi", "BlackAndWhite"};
62+
"JFAVoronoi", "BlackAndWhite", "Gray", "Negative",
63+
"Nostalgia", "Casting", "Relief", "Swirl", "HexagonMosaic",
64+
"Mirror", "Triple", "Cartoon", "WaterReflection"
65+
};
6366

6467
Integer[] FILTER_RES_IDS = {R.id.filter0, R.id.filter1, R.id.filter2, R.id.filter3, R.id.filter4,
6568
R.id.filter5, R.id.filter6, R.id.filter7, R.id.filter8, R.id.filter9, R.id.filter10,
6669
R.id.filter11, R.id.filter12, R.id.filter13, R.id.filter14, R.id.filter15, R.id.filter16,
6770
R.id.filter17, R.id.filter18, R.id.filter19, R.id.filter20,
68-
R.id.filter21};
71+
R.id.filter21, R.id.filter22, R.id.filter23, R.id.filter24,
72+
R.id.filter25, R.id.filter26, R.id.filter27, R.id.filter28,
73+
R.id.filter29, R.id.filter30, R.id.filter31, R.id.filter32};
6974

7075
ArrayList<Integer> mFilterArray = new ArrayList<>(Arrays.asList(FILTER_RES_IDS));
7176

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
* Copyright 2016 nekocode
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package cn.nekocode.camerafilter.filter;
17+
18+
import android.content.Context;
19+
import android.opengl.GLES20;
20+
21+
import cn.nekocode.camerafilter.MyGLUtils;
22+
import cn.nekocode.camerafilter.R;
23+
24+
/**
25+
* @author nekocode ([email protected])
26+
*/
27+
public class CartoonFilter extends CameraFilter {
28+
private int program;
29+
30+
public CartoonFilter(Context context) {
31+
super(context);
32+
program = MyGLUtils.buildProgram(context, R.raw.vertext, R.raw.cartoon);
33+
}
34+
35+
@Override
36+
public void onDraw(int cameraTexId, int canvasWidth, int canvasHeight) {
37+
setupShaderInputs(program,
38+
new int[]{canvasWidth, canvasHeight},
39+
new int[]{cameraTexId},
40+
new int[][]{});
41+
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
42+
}
43+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
* Copyright 2016 nekocode
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package cn.nekocode.camerafilter.filter;
17+
18+
import android.content.Context;
19+
import android.opengl.GLES20;
20+
21+
import cn.nekocode.camerafilter.MyGLUtils;
22+
import cn.nekocode.camerafilter.R;
23+
24+
/**
25+
* @author nekocode ([email protected])
26+
*/
27+
public class CastingFilter extends CameraFilter {
28+
private int program;
29+
30+
public CastingFilter(Context context) {
31+
super(context);
32+
program = MyGLUtils.buildProgram(context, R.raw.vertext, R.raw.casting);
33+
}
34+
35+
@Override
36+
public void onDraw(int cameraTexId, int canvasWidth, int canvasHeight) {
37+
setupShaderInputs(program,
38+
new int[]{canvasWidth, canvasHeight},
39+
new int[]{cameraTexId},
40+
new int[][]{});
41+
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
42+
}
43+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
* Copyright 2016 nekocode
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package cn.nekocode.camerafilter.filter;
17+
18+
import android.content.Context;
19+
import android.opengl.GLES20;
20+
21+
import cn.nekocode.camerafilter.MyGLUtils;
22+
import cn.nekocode.camerafilter.R;
23+
24+
/**
25+
* @author nekocode ([email protected])
26+
*/
27+
public class GrayFilter extends CameraFilter {
28+
private int program;
29+
30+
public GrayFilter(Context context) {
31+
super(context);
32+
program = MyGLUtils.buildProgram(context, R.raw.vertext, R.raw.gray);
33+
}
34+
35+
@Override
36+
public void onDraw(int cameraTexId, int canvasWidth, int canvasHeight) {
37+
setupShaderInputs(program,
38+
new int[]{canvasWidth, canvasHeight},
39+
new int[]{cameraTexId},
40+
new int[][]{});
41+
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
42+
}
43+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
* Copyright 2016 nekocode
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package cn.nekocode.camerafilter.filter;
17+
18+
import android.content.Context;
19+
import android.opengl.GLES20;
20+
21+
import cn.nekocode.camerafilter.MyGLUtils;
22+
import cn.nekocode.camerafilter.R;
23+
24+
/**
25+
* @author nekocode ([email protected])
26+
*/
27+
public class HexagonMosaicFilter extends CameraFilter {
28+
private int program;
29+
30+
public HexagonMosaicFilter(Context context) {
31+
super(context);
32+
program = MyGLUtils.buildProgram(context, R.raw.vertext, R.raw.hexagon_mosaic);
33+
}
34+
35+
@Override
36+
public void onDraw(int cameraTexId, int canvasWidth, int canvasHeight) {
37+
setupShaderInputs(program,
38+
new int[]{canvasWidth, canvasHeight},
39+
new int[]{cameraTexId},
40+
new int[][]{});
41+
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
42+
}
43+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
* Copyright 2016 nekocode
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package cn.nekocode.camerafilter.filter;
17+
18+
import android.content.Context;
19+
import android.opengl.GLES20;
20+
21+
import cn.nekocode.camerafilter.MyGLUtils;
22+
import cn.nekocode.camerafilter.R;
23+
24+
/**
25+
* @author nekocode ([email protected])
26+
*/
27+
public class MirrorFilter extends CameraFilter {
28+
private int program;
29+
30+
public MirrorFilter(Context context) {
31+
super(context);
32+
program = MyGLUtils.buildProgram(context, R.raw.vertext, R.raw.mirror);
33+
}
34+
35+
@Override
36+
public void onDraw(int cameraTexId, int canvasWidth, int canvasHeight) {
37+
setupShaderInputs(program,
38+
new int[]{canvasWidth, canvasHeight},
39+
new int[]{cameraTexId},
40+
new int[][]{});
41+
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
42+
}
43+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
* Copyright 2016 nekocode
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package cn.nekocode.camerafilter.filter;
17+
18+
import android.content.Context;
19+
import android.opengl.GLES20;
20+
21+
import cn.nekocode.camerafilter.MyGLUtils;
22+
import cn.nekocode.camerafilter.R;
23+
24+
/**
25+
* @author nekocode ([email protected])
26+
*/
27+
public class NegativeFilter extends CameraFilter {
28+
private int program;
29+
30+
public NegativeFilter(Context context) {
31+
super(context);
32+
program = MyGLUtils.buildProgram(context, R.raw.vertext, R.raw.negative);
33+
}
34+
35+
@Override
36+
public void onDraw(int cameraTexId, int canvasWidth, int canvasHeight) {
37+
setupShaderInputs(program,
38+
new int[]{canvasWidth, canvasHeight},
39+
new int[]{cameraTexId},
40+
new int[][]{});
41+
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
42+
}
43+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
* Copyright 2016 nekocode
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package cn.nekocode.camerafilter.filter;
17+
18+
import android.content.Context;
19+
import android.opengl.GLES20;
20+
21+
import cn.nekocode.camerafilter.MyGLUtils;
22+
import cn.nekocode.camerafilter.R;
23+
24+
/**
25+
* @author nekocode ([email protected])
26+
*/
27+
public class NostalgiaFilter extends CameraFilter {
28+
private int program;
29+
30+
public NostalgiaFilter(Context context) {
31+
super(context);
32+
program = MyGLUtils.buildProgram(context, R.raw.vertext, R.raw.nostalgia);
33+
}
34+
35+
@Override
36+
public void onDraw(int cameraTexId, int canvasWidth, int canvasHeight) {
37+
setupShaderInputs(program,
38+
new int[]{canvasWidth, canvasHeight},
39+
new int[]{cameraTexId},
40+
new int[][]{});
41+
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
42+
}
43+
}

0 commit comments

Comments
 (0)