@tolokoban/tgd
Version:
ToloGameDev library for WebGL2
39 lines • 3.07 kB
JavaScript
import { TgdFilter } from "./filter.js";
export class TgdFilterAntiAliasing extends TgdFilter {
constructor(options = {}) {
const { strength = 1 } = options;
const ang = Math.atan(1 / 2);
const radius = Math.sqrt(5) / 4;
const A = Math.cos(ang) * radius;
const B = Math.sin(ang) * radius;
super({
name: `TgdFilterAntiAliasing/${TgdFilter.id++}`,
fragmentShaderCode: [
`float a = ${A.toFixed(9)} * uniStrength;`,
`float b = ${B.toFixed(9)} * uniStrength;`,
"vec4 col1 = texture(uniTexture, varUV + vec2(a, b) * varPixel);",
"vec4 col2 = texture(uniTexture, varUV + vec2(-b, a) * varPixel);",
"vec4 col3 = texture(uniTexture, varUV + vec2(-a, -b) * varPixel);",
"vec4 col4 = texture(uniTexture, varUV + vec2(b, -a) * varPixel);",
`FragColor = 0.25 * (col1 + col2 + col3 + col4);`,
],
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW50aS1hbGlhc2luZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9maWx0ZXIvYW50aS1hbGlhc2luZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBTXBDLE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxTQUFTO0lBV2hELFlBQVksVUFBaUQsRUFBRTtRQUMzRCxNQUFNLEVBQUUsUUFBUSxHQUFHLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQTtRQUNoQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUM1QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUMvQixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQTtRQUNoQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQTtRQUNoQyxLQUFLLENBQUM7WUFDRixJQUFJLEVBQUUseUJBQXlCLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUMvQyxrQkFBa0IsRUFBRTtnQkFDaEIsYUFBYSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxpQkFBaUI7Z0JBQzFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsaUJBQWlCO2dCQUMxQyxpRUFBaUU7Z0JBQ2pFLGtFQUFrRTtnQkFDbEUsbUVBQW1FO2dCQUNuRSxrRUFBa0U7Z0JBQ2xFLGlEQUFpRDthQUNwRDtZQUNELFFBQVEsRUFBRTtnQkFDTixXQUFXLEVBQUUsT0FBTzthQUN2QjtZQUNELFdBQVcsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRTtnQkFDekIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQ25ELENBQUM7U0FDSixDQUFDLENBQUE7UUFqQ047Ozs7Ozs7V0FPRztRQUNJLGFBQVEsR0FBRyxDQUFDLENBQUE7UUEwQmYsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7SUFDNUIsQ0FBQztDQUNKIn0=