{"version":3,"file":"BlendModeFilter.mjs","sources":["../../../src/filters/blend-modes/BlendModeFilter.ts"],"sourcesContent":["import { GlProgram } from '../../rendering/renderers/gl/shader/GlProgram';\nimport { GpuProgram } from '../../rendering/renderers/gpu/shader/GpuProgram';\nimport { UniformGroup } from '../../rendering/renderers/shared/shader/UniformGroup';\nimport { Texture } from '../../rendering/renderers/shared/texture/Texture';\nimport { Filter } from '../Filter';\nimport blendTemplateFrag from './blend-template.frag';\nimport blendTemplateVert from './blend-template.vert';\nimport blendTemplate from './blend-template.wgsl';\n\n/** @internal */\nexport interface BlendModeFilterOptions\n{\n    source?: string;\n    gpu?: {\n        functions?: string;\n        main?: string;\n    }\n    gl?: {\n        functions?: string;\n        main?: string;\n    }\n}\n\n/** @internal */\nexport class BlendModeFilter extends Filter\n{\n    constructor(options: BlendModeFilterOptions)\n    {\n        const gpuOptions = options.gpu;\n\n        const gpuSource = compileBlendModeShader({ source: blendTemplate, ...gpuOptions });\n\n        const gpuProgram = GpuProgram.from({\n            vertex: {\n                source: gpuSource,\n                entryPoint: 'mainVertex',\n            },\n            fragment: {\n                source: gpuSource,\n                entryPoint: 'mainFragment',\n            },\n        });\n\n        const glOptions = options.gl;\n\n        const glSource = compileBlendModeShader({ source: blendTemplateFrag, ...glOptions });\n\n        const glProgram = GlProgram.from({\n            vertex: blendTemplateVert,\n            fragment: glSource\n        });\n\n        const uniformGroup = new UniformGroup({\n            uBlend: {\n                value: 1,\n                type: 'f32'\n            }\n        });\n\n        super({\n            gpuProgram,\n            glProgram,\n            blendRequired: true,\n            resources: {\n                blendUniforms: uniformGroup,\n                uBackTexture: Texture.EMPTY\n            }\n        });\n    }\n}\n\nfunction compileBlendModeShader(options: {source: string, functions?: string, main?: string}): string\n{\n    const { source, functions, main } = options;\n\n    return source.replace('{FUNCTIONS}', functions).replace('{MAIN}', main);\n}\n"],"names":[],"mappings":";;;;;;;;;;AAwBO,MAAM,wBAAwB,MAAA,CACrC;AAAA,EACI,YAAY,OAAA,EACZ;AACI,IAAA,MAAM,aAAa,OAAA,CAAQ,GAAA;AAE3B,IAAA,MAAM,YAAY,sBAAA,CAAuB,EAAE,QAAQ,aAAA,EAAe,GAAG,YAAY,CAAA;AAEjF,IAAA,MAAM,UAAA,GAAa,WAAW,IAAA,CAAK;AAAA,MAC/B,MAAA,EAAQ;AAAA,QACJ,MAAA,EAAQ,SAAA;AAAA,QACR,UAAA,EAAY;AAAA,OAChB;AAAA,MACA,QAAA,EAAU;AAAA,QACN,MAAA,EAAQ,SAAA;AAAA,QACR,UAAA,EAAY;AAAA;AAChB,KACH,CAAA;AAED,IAAA,MAAM,YAAY,OAAA,CAAQ,EAAA;AAE1B,IAAA,MAAM,WAAW,sBAAA,CAAuB,EAAE,QAAQ,iBAAA,EAAmB,GAAG,WAAW,CAAA;AAEnF,IAAA,MAAM,SAAA,GAAY,UAAU,IAAA,CAAK;AAAA,MAC7B,MAAA,EAAQ,iBAAA;AAAA,MACR,QAAA,EAAU;AAAA,KACb,CAAA;AAED,IAAA,MAAM,YAAA,GAAe,IAAI,YAAA,CAAa;AAAA,MAClC,MAAA,EAAQ;AAAA,QACJ,KAAA,EAAO,CAAA;AAAA,QACP,IAAA,EAAM;AAAA;AACV,KACH,CAAA;AAED,IAAA,KAAA,CAAM;AAAA,MACF,UAAA;AAAA,MACA,SAAA;AAAA,MACA,aAAA,EAAe,IAAA;AAAA,MACf,SAAA,EAAW;AAAA,QACP,aAAA,EAAe,YAAA;AAAA,QACf,cAAc,OAAA,CAAQ;AAAA;AAC1B,KACH,CAAA;AAAA,EACL;AACJ;AAEA,SAAS,uBAAuB,OAAA,EAChC;AACI,EAAA,MAAM,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAK,GAAI,OAAA;AAEpC,EAAA,OAAO,OAAO,OAAA,CAAQ,aAAA,EAAe,SAAS,CAAA,CAAE,OAAA,CAAQ,UAAU,IAAI,CAAA;AAC1E;;;;"}