UNPKG

@tolokoban/tgd

Version:

ToloGameDev library for WebGL2

39 lines 3.07 kB
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=