(function (global, factory) { if (typeof define === "function" && define.amd) { define(["exports", "three"], factory); } else if (typeof exports !== "undefined") { factory(exports, require("three")); } else { var mod = { exports: {} }; factory(mod.exports, global.three); global.ConvolutionShader = mod.exports; } })(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function (_exports, _three) { "use strict"; Object.defineProperty(_exports, "__esModule", { value: true }); _exports.ConvolutionShader = void 0; /** * Convolution shader * ported from o3d sample to WebGL / GLSL * http://o3d.googlecode.com/svn/trunk/samples/convolution.html */ var ConvolutionShader = { defines: { 'KERNEL_SIZE_FLOAT': '25.0', 'KERNEL_SIZE_INT': '25' }, uniforms: { 'tDiffuse': { value: null }, 'uImageIncrement': { value: new _three.Vector2(0.001953125, 0.0) }, 'cKernel': { value: [] } }, vertexShader: /* glsl */ "\n\n\t\tuniform vec2 uImageIncrement;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv - ( ( KERNEL_SIZE_FLOAT - 1.0 ) / 2.0 ) * uImageIncrement;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}", fragmentShader: /* glsl */ "\n\n\t\tuniform float cKernel[ KERNEL_SIZE_INT ];\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform vec2 uImageIncrement;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec2 imageCoord = vUv;\n\t\t\tvec4 sum = vec4( 0.0, 0.0, 0.0, 0.0 );\n\n\t\t\tfor( int i = 0; i < KERNEL_SIZE_INT; i ++ ) {\n\n\t\t\t\tsum += texture2D( tDiffuse, imageCoord ) * cKernel[ i ];\n\t\t\t\timageCoord += uImageIncrement;\n\n\t\t\t}\n\n\t\t\tgl_FragColor = sum;\n\n\t\t}", buildKernel: function buildKernel(sigma) { // We lop off the sqrt(2 * pi) * sigma term, since we're going to normalize anyway. var kMaxKernelSize = 25; var kernelSize = 2 * Math.ceil(sigma * 3.0) + 1; if (kernelSize > kMaxKernelSize) kernelSize = kMaxKernelSize; var halfWidth = (kernelSize - 1) * 0.5; var values = new Array(kernelSize); var sum = 0.0; for (var i = 0; i < kernelSize; ++i) { values[i] = gauss(i - halfWidth, sigma); sum += values[i]; } // normalize the kernel for (var _i = 0; _i < kernelSize; ++_i) { values[_i] /= sum; } return values; } }; _exports.ConvolutionShader = ConvolutionShader; function gauss(x, sigma) { return Math.exp(-(x * x) / (2.0 * sigma * sigma)); } });