{"version":3,"file":"generateBlurProgram.mjs","sources":["../../../../../src/filters/defaults/blur/gpu/generateBlurProgram.ts"],"sourcesContent":["import { GpuProgram } from '../../../../rendering/renderers/gpu/shader/GpuProgram';\nimport { GAUSSIAN_VALUES } from '../const';\nimport source from './blur-template.wgsl';\n\n/**\n * @internal\n * @param horizontal - Whether to generate a horizontal or vertical blur program.\n * @param kernelSize - The size of the kernel.\n */\nexport function generateBlurProgram(horizontal: boolean, kernelSize: number)\n{\n    const kernel = GAUSSIAN_VALUES[kernelSize];\n    const halfLength = kernel.length;\n\n    const blurStructSource: string[] = [];\n    const blurOutSource: string[] = [];\n    const blurSamplingSource: string[] = [];\n\n    for (let i = 0; i < kernelSize; i++)\n    {\n        blurStructSource[i] = `@location(${i}) offset${i}: vec2<f32>,`;\n\n        if (horizontal)\n        {\n            blurOutSource[i] = `filteredCord + vec2(${i - halfLength + 1} * pixelStrength, 0.0),`;\n        }\n        else\n        {\n            blurOutSource[i] = `filteredCord + vec2(0.0, ${i - halfLength + 1} * pixelStrength),`;\n        }\n\n        const kernelIndex = i < halfLength ? i : (kernelSize - i - 1);\n        const kernelValue = kernel[kernelIndex].toString();\n\n        blurSamplingSource[i] = `finalColor += textureSample(uTexture, uSampler, offset${i}) * ${kernelValue};`;\n    }\n\n    const blurStruct = blurStructSource.join('\\n');\n    const blurOut = blurOutSource.join('\\n');\n    const blurSampling = blurSamplingSource.join('\\n');\n\n    const finalSource = source\n        .replace('%blur-struct%', blurStruct)\n        .replace('%blur-vertex-out%', blurOut)\n        .replace('%blur-fragment-in%', blurStruct)\n        .replace('%blur-sampling%', blurSampling)\n        .replace('%dimension%', horizontal ? 'z' : 'w');\n\n    return GpuProgram.from({\n        vertex: {\n            source: finalSource,\n            entryPoint: 'mainVertex',\n        },\n        fragment: {\n            source: finalSource,\n            entryPoint: 'mainFragment',\n        },\n    });\n}\n\n"],"names":[],"mappings":";;;;;AASO,SAAS,mBAAA,CAAoB,YAAqB,UAAA,EACzD;AACI,EAAA,MAAM,MAAA,GAAS,gBAAgB,UAAU,CAAA;AACzC,EAAA,MAAM,aAAa,MAAA,CAAO,MAAA;AAE1B,EAAA,MAAM,mBAA6B,EAAC;AACpC,EAAA,MAAM,gBAA0B,EAAC;AACjC,EAAA,MAAM,qBAA+B,EAAC;AAEtC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,UAAA,EAAY,CAAA,EAAA,EAChC;AACI,IAAA,gBAAA,CAAiB,CAAC,CAAA,GAAI,CAAA,UAAA,EAAa,CAAC,WAAW,CAAC,CAAA,YAAA,CAAA;AAEhD,IAAA,IAAI,UAAA,EACJ;AACI,MAAA,aAAA,CAAc,CAAC,CAAA,GAAI,CAAA,oBAAA,EAAuB,CAAA,GAAI,aAAa,CAAC,CAAA,uBAAA,CAAA;AAAA,IAChE,CAAA,MAEA;AACI,MAAA,aAAA,CAAc,CAAC,CAAA,GAAI,CAAA,yBAAA,EAA4B,CAAA,GAAI,aAAa,CAAC,CAAA,kBAAA,CAAA;AAAA,IACrE;AAEA,IAAA,MAAM,WAAA,GAAc,CAAA,GAAI,UAAA,GAAa,CAAA,GAAK,aAAa,CAAA,GAAI,CAAA;AAC3D,IAAA,MAAM,WAAA,GAAc,MAAA,CAAO,WAAW,CAAA,CAAE,QAAA,EAAS;AAEjD,IAAA,kBAAA,CAAmB,CAAC,CAAA,GAAI,CAAA,sDAAA,EAAyD,CAAC,OAAO,WAAW,CAAA,CAAA,CAAA;AAAA,EACxG;AAEA,EAAA,MAAM,UAAA,GAAa,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAA;AAC7C,EAAA,MAAM,OAAA,GAAU,aAAA,CAAc,IAAA,CAAK,IAAI,CAAA;AACvC,EAAA,MAAM,YAAA,GAAe,kBAAA,CAAmB,IAAA,CAAK,IAAI,CAAA;AAEjD,EAAA,MAAM,WAAA,GAAc,OACf,OAAA,CAAQ,eAAA,EAAiB,UAAU,CAAA,CACnC,OAAA,CAAQ,mBAAA,EAAqB,OAAO,CAAA,CACpC,OAAA,CAAQ,sBAAsB,UAAU,CAAA,CACxC,QAAQ,iBAAA,EAAmB,YAAY,EACvC,OAAA,CAAQ,aAAA,EAAe,UAAA,GAAa,GAAA,GAAM,GAAG,CAAA;AAElD,EAAA,OAAO,WAAW,IAAA,CAAK;AAAA,IACnB,MAAA,EAAQ;AAAA,MACJ,MAAA,EAAQ,WAAA;AAAA,MACR,UAAA,EAAY;AAAA,KAChB;AAAA,IACA,QAAA,EAAU;AAAA,MACN,MAAA,EAAQ,WAAA;AAAA,MACR,UAAA,EAAY;AAAA;AAChB,GACH,CAAA;AACL;;;;"}