@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
33 lines (27 loc) • 2.61 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.32/esri/copyright.txt for details.
*/
import{gauss as e}from"../core/mathUtils.js";import{ScreenSpacePass as r}from"../views/3d/webgl-engine/core/shaderLibrary/ScreenSpacePass.glsl.js";import{Gamma as o}from"../views/3d/webgl-engine/core/shaderLibrary/shading/Gamma.glsl.js";import{FloatPassUniform as t}from"../views/3d/webgl-engine/core/shaderModules/FloatPassUniform.js";import{glsl as s}from"../views/3d/webgl-engine/core/shaderModules/glsl.js";import{Texture2DPassUniform as i}from"../views/3d/webgl-engine/core/shaderModules/Texture2DPassUniform.js";import{NoParameters as l}from"../views/webgl/NoParameters.js";import{ShaderBuilder as n}from"../views/webgl/ShaderBuilder.js";var a;!function(e){e[e.Horizontal=0]="Horizontal",e[e.Vertical=1]="Vertical",e[e.COUNT=2]="COUNT"}(a||(a={}));const c={sunny:5e-4,cloudy:5e-4,rainy:.0022,snowy:.0022,foggy:.0022};class u extends l{constructor(){super(...arguments),this.blurRadius=c.sunny}}function d(l){const c=new n,u=c.fragment;c.include(r),c.include(o),u.uniforms.add(new i("colorTexture",(e=>e.color)),new t("blurRadius",(e=>e.blurRadius)));let d="";const m=15;for(let e=0;e<m;e++){d+=`locations1D[${e}] = ${(e/(m-1)*2-1).toFixed(3).toString()};`}const v=2;let f="";for(let r=0;r<m;r++){f+=`locations1DWeights[${r}] = ${e(r-Math.floor(m/2),v).toFixed(7).toString()};`}const g=l.bloomStage===a.Horizontal;return u.code.add(s`
float locations1D[${s.int(m)}];
float locations1DWeights[${s.int(m)}];
vec4 blurUniformSamples(sampler2D toBlur) {
vec4 res = vec4(0.0);
vec2 size = vec2(textureSize(toBlur, 0));
vec2 aspectCorrection = vec2(1.0, size.x / size.y);
vec2 uvInPixel = uv * size;
${d}
${f}
vec2 pixelCenterShift = 0.5 / size;
for(int i=0;i < ${s.int(m)}; i++) {
float uv1D = locations1D[i] + ${g?"pixelCenterShift.x":"pixelCenterShift.y"};
vec2 uvOffset = ${g?"vec2(uv1D, 0.0)":"vec2(0.0, uv1D)"};
vec2 uvDistorted = uv + uvOffset * blurRadius * aspectCorrection;
vec4 sampleColor = texture(toBlur, uvDistorted);
res += pow(sampleColor, vec4(GAMMA)) * locations1DWeights[i];
}
res = pow(res, vec4(INV_GAMMA));
res.a = 1.0;
return res;
}
`).main.add(s`fragColor = blurUniformSamples(colorTexture);`),c}const m=Object.freeze(Object.defineProperty({__proto__:null,BloomBlurPassParameters:u,get BlurDirection(){return a},blurRadiusPresets:c,build:d},Symbol.toStringTag,{value:"Module"}));export{m as B,a,u as b,c,d};