@tolokoban/tgd
Version:
ToloGameDev library for WebGL2
35 lines • 2.46 kB
JavaScript
import { TgdFilter } from "./filter.js";
export class TgdFilterChromaticAberration extends TgdFilter {
constructor(options = {}) {
const { strength = 1 } = options;
super({
name: `TgdFilterChromaticAberration/${TgdFilter.id++}`,
fragmentShaderCode: [
options.mode === "circular"
? "vec2 dir = (varUV - vec2(0.5)) * varPixel * 2.0 * uniStrength;"
: "vec2 dir = vec2(varPixel.x, 0.0) * uniStrength;",
"float r = texture(uniTexture, varUV + dir).r;",
"float g = texture(uniTexture, varUV).g;",
"float b = texture(uniTexture, varUV - dir).b;",
`FragColor = vec4(r, g, b, 1);`,
],
uniforms: {
uniStrength: "float",
},
setUniforms: ({ program }) => {
program.uniform1f("uniStrength", this.strength);
},
});
/**
* Percentage of displacement of the color or the border of the image.
* The blue is push await from the center, and the red is pulled to
* the center. But if you use a negative `strength`, the process is
* reversed.
*
* Default to 1.0 (means 1% of displacement).
*/
this.strength = 1;
this.strength = strength;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hyb21hdGljLWFiZXJyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmlsdGVyL2Nocm9tYXRpYy1hYmVycmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFlcEMsTUFBTSxPQUFPLDRCQUE2QixTQUFRLFNBQVM7SUFXdkQsWUFBWSxVQUF3RCxFQUFFO1FBQ2xFLE1BQU0sRUFBRSxRQUFRLEdBQUcsQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFBO1FBQ2hDLEtBQUssQ0FBQztZQUNGLElBQUksRUFBRSxnQ0FBZ0MsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFO1lBQ3RELGtCQUFrQixFQUFFO2dCQUNoQixPQUFPLENBQUMsSUFBSSxLQUFLLFVBQVU7b0JBQ3ZCLENBQUMsQ0FBQyxnRUFBZ0U7b0JBQ2xFLENBQUMsQ0FBQyxpREFBaUQ7Z0JBQ3ZELCtDQUErQztnQkFDL0MseUNBQXlDO2dCQUN6QywrQ0FBK0M7Z0JBQy9DLCtCQUErQjthQUNsQztZQUNELFFBQVEsRUFBRTtnQkFDTixXQUFXLEVBQUUsT0FBTzthQUN2QjtZQUNELFdBQVcsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRTtnQkFDekIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQ25ELENBQUM7U0FDSixDQUFDLENBQUE7UUE3Qk47Ozs7Ozs7V0FPRztRQUNJLGFBQVEsR0FBRyxDQUFDLENBQUE7UUFzQmYsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7SUFDNUIsQ0FBQztDQUNKIn0=