{"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\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\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":";;;;;;;;;;AAsBO,MAAM,wBAAwB,MACrC,CAAA;AAAA,EACI,YAAY,OACZ,EAAA;AACI,IAAA,MAAM,aAAa,OAAQ,CAAA,GAAA,CAAA;AAE3B,IAAA,MAAM,YAAY,sBAAuB,CAAA,EAAE,QAAQ,aAAe,EAAA,GAAG,YAAY,CAAA,CAAA;AAEjF,IAAM,MAAA,UAAA,GAAa,WAAW,IAAK,CAAA;AAAA,MAC/B,MAAQ,EAAA;AAAA,QACJ,MAAQ,EAAA,SAAA;AAAA,QACR,UAAY,EAAA,YAAA;AAAA,OAChB;AAAA,MACA,QAAU,EAAA;AAAA,QACN,MAAQ,EAAA,SAAA;AAAA,QACR,UAAY,EAAA,cAAA;AAAA,OAChB;AAAA,KACH,CAAA,CAAA;AAED,IAAA,MAAM,YAAY,OAAQ,CAAA,EAAA,CAAA;AAE1B,IAAA,MAAM,WAAW,sBAAuB,CAAA,EAAE,QAAQ,iBAAmB,EAAA,GAAG,WAAW,CAAA,CAAA;AAEnF,IAAM,MAAA,SAAA,GAAY,UAAU,IAAK,CAAA;AAAA,MAC7B,MAAQ,EAAA,iBAAA;AAAA,MACR,QAAU,EAAA,QAAA;AAAA,KACb,CAAA,CAAA;AAED,IAAM,MAAA,YAAA,GAAe,IAAI,YAAa,CAAA;AAAA,MAClC,MAAQ,EAAA;AAAA,QACJ,KAAO,EAAA,CAAA;AAAA,QACP,IAAM,EAAA,KAAA;AAAA,OACV;AAAA,KACH,CAAA,CAAA;AAED,IAAM,KAAA,CAAA;AAAA,MACF,UAAA;AAAA,MACA,SAAA;AAAA,MACA,aAAe,EAAA,IAAA;AAAA,MACf,SAAW,EAAA;AAAA,QACP,aAAe,EAAA,YAAA;AAAA,QACf,cAAc,OAAQ,CAAA,KAAA;AAAA,OAC1B;AAAA,KACH,CAAA,CAAA;AAAA,GACL;AACJ,CAAA;AAEA,SAAS,uBAAuB,OAChC,EAAA;AACI,EAAA,MAAM,EAAE,MAAA,EAAQ,SAAW,EAAA,IAAA,EAAS,GAAA,OAAA,CAAA;AAEpC,EAAA,OAAO,OAAO,OAAQ,CAAA,aAAA,EAAe,SAAS,CAAE,CAAA,OAAA,CAAQ,UAAU,IAAI,CAAA,CAAA;AAC1E;;;;"}