• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * Copyright (c) 2011, Novyon Events
3  *
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions are met:
8  *
9  * - Redistributions of source code must retain the above copyright notice, this
10  * list of conditions and the following disclaimer.
11  *
12  * - Redistributions in binary form must reproduce the above copyright notice,
13  * this list of conditions and the following disclaimer in the documentation
14  * and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
25  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
26  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  *
28  * @author Anthyon
29  */
30 package com.jme3.terrain.noise.filter;
31 
32 import java.nio.FloatBuffer;
33 import java.util.ArrayList;
34 import java.util.List;
35 
36 import com.jme3.terrain.noise.Filter;
37 
38 public abstract class AbstractFilter implements Filter {
39 
40 	protected List<Filter> preFilters = new ArrayList<Filter>();
41 	protected List<Filter> postFilters = new ArrayList<Filter>();
42 
43 	private boolean enabled = true;
44 
45 	@Override
addPreFilter(Filter filter)46 	public Filter addPreFilter(Filter filter) {
47 		this.preFilters.add(filter);
48 		return this;
49 	}
50 
51 	@Override
addPostFilter(Filter filter)52 	public Filter addPostFilter(Filter filter) {
53 		this.postFilters.add(filter);
54 		return this;
55 	}
56 
57 	@Override
doFilter(float sx, float sy, float base, FloatBuffer data, int size)58 	public FloatBuffer doFilter(float sx, float sy, float base, FloatBuffer data, int size) {
59 		if (!this.isEnabled()) {
60 			return data;
61 		}
62 		FloatBuffer retval = data;
63 		for (Filter f : this.preFilters) {
64 			retval = f.doFilter(sx, sy, base, retval, size);
65 		}
66 		retval = this.filter(sx, sy, base, retval, size);
67 		for (Filter f : this.postFilters) {
68 			retval = f.doFilter(sx, sy, base, retval, size);
69 		}
70 		return retval;
71 	}
72 
filter(float sx, float sy, float base, FloatBuffer buffer, int size)73 	public abstract FloatBuffer filter(float sx, float sy, float base, FloatBuffer buffer, int size);
74 
75 	@Override
getMargin(int size, int margin)76 	public int getMargin(int size, int margin) {
77 		// TODO sums up all the margins from filters... maybe there's a more
78 		// efficient algorithm
79 		if (!this.isEnabled()) {
80 			return margin;
81 		}
82 		for (Filter f : this.preFilters) {
83 			margin = f.getMargin(size, margin);
84 		}
85 		for (Filter f : this.postFilters) {
86 			margin = f.getMargin(size, margin);
87 		}
88 		return margin;
89 	}
90 
91 	@Override
isEnabled()92 	public boolean isEnabled() {
93 		return this.enabled;
94 	}
95 
setEnabled(boolean enabled)96 	public void setEnabled(boolean enabled) {
97 		this.enabled = enabled;
98 	}
99 
100 }
101