Skip to content

Instantly share code, notes, and snippets.

@AtsushiSuzuki
Created January 18, 2016 16:38
Show Gist options
  • Save AtsushiSuzuki/2803904ee78730576d80 to your computer and use it in GitHub Desktop.
Save AtsushiSuzuki/2803904ee78730576d80 to your computer and use it in GitHub Desktop.
pixi.js用移動平均フィルタ
class MovingAverageFilter extends PIXI.AbstractFilter {
static fragmentSrc(size: number, width: number, height: number, direction: string) {
return `
precision lowp float;
varying vec2 vTextureCoord;
varying vec4 vColor;
uniform sampler2D uSampler;
void main(void)
{
gl_FragColor = vec4(0.0);
for (int i = 0; i < ${size}; i++) {
float offset = float(i - ${size} / 2) / float(${(direction === 'x') ? width : height});
gl_FragColor += texture2D(uSampler, vec2(vTextureCoord.s${(direction === 'x') ? ' + offset' : ''}, vTextureCoord.t${(direction === 'y') ? ' + offset' : ''})) / float(${size});
}
}
`;
};
xFilter: PIXI.AbstractFilter;
yFilter: PIXI.AbstractFilter;
constructor(size: number, width: number, height: number) {
super();
this.xFilter = new PIXI.AbstractFilter(null, MovingAverageFilter.fragmentSrc(size, width, height, 'x'));
this.yFilter = new PIXI.AbstractFilter(null, MovingAverageFilter.fragmentSrc(size, width, height, 'y'));
}
applyFilter(renderer: PIXI.WebGLRenderer, input: PIXI.RenderTarget, output: PIXI.RenderTarget) {
const renderTarget = renderer.filterManager.getRenderTarget(true);
this.xFilter.applyFilter(renderer, input, renderTarget);
this.yFilter.applyFilter(renderer, renderTarget, output);
(<any>renderer.filterManager).returnRenderTarget(renderTarget);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment