pixi.js
Version:
<p align="center"> <a href="https://pixijs.com" target="_blank" rel="noopener noreferrer"> <img height="150" src="https://files.pixijs.download/branding/pixijs-logo-transparent-dark.svg?v=1" alt="PixiJS logo"> </a> </p> <br/> <p align="center">
43 lines (39 loc) • 1.72 kB
JavaScript
;
var GpuProgram = require('../../../../rendering/renderers/gpu/shader/GpuProgram.js');
var _const = require('../const.js');
var blurTemplate = require('./blur-template.wgsl.js');
;
function generateBlurProgram(horizontal, kernelSize) {
const kernel = _const.GAUSSIAN_VALUES[kernelSize];
const halfLength = kernel.length;
const blurStructSource = [];
const blurOutSource = [];
const blurSamplingSource = [];
for (let i = 0; i < kernelSize; i++) {
blurStructSource[i] = `@location(${i}) offset${i}: vec2<f32>,`;
if (horizontal) {
blurOutSource[i] = `filteredCord + vec2(${i - halfLength + 1} * pixelStrength, 0.0),`;
} else {
blurOutSource[i] = `filteredCord + vec2(0.0, ${i - halfLength + 1} * pixelStrength),`;
}
const kernelIndex = i < halfLength ? i : kernelSize - i - 1;
const kernelValue = kernel[kernelIndex].toString();
blurSamplingSource[i] = `finalColor += textureSample(uTexture, uSampler, offset${i}) * ${kernelValue};`;
}
const blurStruct = blurStructSource.join("\n");
const blurOut = blurOutSource.join("\n");
const blurSampling = blurSamplingSource.join("\n");
const finalSource = blurTemplate.default.replace("%blur-struct%", blurStruct).replace("%blur-vertex-out%", blurOut).replace("%blur-fragment-in%", blurStruct).replace("%blur-sampling%", blurSampling).replace("%dimension%", horizontal ? "z" : "w");
return GpuProgram.GpuProgram.from({
vertex: {
source: finalSource,
entryPoint: "mainVertex"
},
fragment: {
source: finalSource,
entryPoint: "mainFragment"
}
});
}
exports.generateBlurProgram = generateBlurProgram;
//# sourceMappingURL=generateBlurProgram.js.map