package com.marshalchen.common.uimodule.imageprocessing.filter.processing;
import com.marshalchen.common.uimodule.imageprocessing.filter.TwoPassMultiPixelFilter;
/**
* A hardware-accelerated 9-hit box blur of an image
* @author Chris Batt
*/
public class BoxBlurFilter extends TwoPassMultiPixelFilter {
@Override
protected String getFragmentShader() {
return
"precision mediump float;\n"
+"uniform sampler2D "+UNIFORM_TEXTURE0+";\n"
+"varying vec2 "+VARYING_TEXCOORD+";\n"
+"uniform float "+UNIFORM_TEXELWIDTH+";\n"
+"uniform float "+UNIFORM_TEXELHEIGHT+";\n"
+"void main(){\n"
+" vec2 firstOffset = vec2(1.5 * "+UNIFORM_TEXELWIDTH+", 1.5 * "+UNIFORM_TEXELHEIGHT+");\n"
+" vec2 secondOffset = vec2(3.5 * "+UNIFORM_TEXELWIDTH+", 3.5 * "+UNIFORM_TEXELHEIGHT+");\n"
+" vec4 sum = vec4(0,0,0,0);\n"
+" sum += texture2D("+UNIFORM_TEXTURE0+", "+VARYING_TEXCOORD+") * 0.2;"
+" sum += texture2D("+UNIFORM_TEXTURE0+", "+VARYING_TEXCOORD+" - firstOffset) * 0.2;"
+" sum += texture2D("+UNIFORM_TEXTURE0+", "+VARYING_TEXCOORD+" + firstOffset) * 0.2;"
+" sum += texture2D("+UNIFORM_TEXTURE0+", "+VARYING_TEXCOORD+" - secondOffset) * 0.2;"
+" sum += texture2D("+UNIFORM_TEXTURE0+", "+VARYING_TEXCOORD+" + secondOffset) * 0.2;"
+" gl_FragColor = sum;\n"
+"}\n";
}
}