{"version":3,"file":"SoftLightBlend.mjs","sources":["../../src/advanced-blend-modes/SoftLightBlend.ts"],"sourcesContent":["/* eslint-disable max-len */\n\nimport { ExtensionType } from '../extensions/Extensions';\nimport { BlendModeFilter } from '../filters/blend-modes/BlendModeFilter';\n\nimport type { ExtensionMetadata } from '../extensions/Extensions';\n\n/**\n * The final color is similar to hard-light, but softer. This blend mode behaves similar to hard-light.\n * The effect is similar to shining a diffused spotlight on the backdrop.\n *\n * Available as `container.blendMode = 'soft-light'` after importing `pixi.js/advanced-blend-modes`.\n * @example\n * import 'pixi.js/advanced-blend-modes';\n * import { Sprite } from 'pixi.js';\n *\n * const sprite = Sprite.from('something.png');\n * sprite.blendMode = 'soft-light'\n * @category filters\n * @noInheritDoc\n */\nexport class SoftLightBlend extends BlendModeFilter\n{\n    /** @ignore */\n    public static extension: ExtensionMetadata = {\n        name: 'soft-light',\n        type: ExtensionType.BlendMode\n    };\n\n    constructor()\n    {\n        super({\n            gl: {\n                functions: `\n                float softLight(float base, float blend)\n                {\n                    return (blend < 0.5) ? (2.0 * base * blend + base * base * (1.0 - 2.0 * blend)) : (sqrt(base) * (2.0 * blend - 1.0) + 2.0 * base * (1.0 - blend));\n                }\n\n                vec3 blendSoftLight(vec3 base, vec3 blend, float opacity)\n                {\n                    vec3 blended = vec3(\n                        softLight(base.r, blend.r),\n                        softLight(base.g, blend.g),\n                        softLight(base.b, blend.b)\n                    );\n\n                    return (blended * opacity + base * (1.0 - opacity));\n                }\n                `,\n                main: `\n                finalColor = vec4(blendSoftLight(back.rgb, front.rgb, front.a), blendedAlpha) * uBlend;\n                `\n            },\n            gpu: {\n                functions: `\n                fn softLight(base: f32, blend: f32) -> f32\n                {\n                    return select(2.0 * base * blend + base * base * (1.0 - 2.0 * blend), sqrt(base) * (2.0 * blend - 1.0) + 2.0 * base * (1.0 - blend), blend < 0.5);\n                }\n\n                fn blendSoftLight(base:vec3<f32>,  blend:vec3<f32>,  opacity:f32) -> vec3<f32>\n                {\n                    let blended: vec3<f32> = vec3<f32>(\n                        softLight(base.r, blend.r),\n                        softLight(base.g, blend.g),\n                        softLight(base.b, blend.b)\n                    );\n\n                    return (blended * opacity + base * (1.0 - opacity));\n                }\n                `,\n                main: `\n                out = vec4<f32>(blendSoftLight(back.rgb, front.rgb, front.a), blendedAlpha) * blendUniforms.uBlend;\n                `\n            }\n        });\n    }\n}\n"],"names":[],"mappings":";;;;AAqBO,MAAM,uBAAuB,eAAA,CACpC;AAAA,EAOI,WAAA,GACA;AACI,IAAA,KAAA,CAAM;AAAA,MACF,EAAA,EAAI;AAAA,QACA,SAAA,EAAW;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,gBAAA,CAAA;AAAA,QAiBX,IAAA,EAAM;AAAA;AAAA,gBAAA;AAAA,OAGV;AAAA,MACA,GAAA,EAAK;AAAA,QACD,SAAA,EAAW;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,gBAAA,CAAA;AAAA,QAiBX,IAAA,EAAM;AAAA;AAAA,gBAAA;AAAA;AAGV,KACH,CAAA;AAAA,EACL;AACJ;AAAA;AAzDa,cAAA,CAGK,SAAA,GAA+B;AAAA,EACzC,IAAA,EAAM,YAAA;AAAA,EACN,MAAM,aAAA,CAAc;AACxB,CAAA;;;;"}