UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

33 lines (32 loc) 4.02 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.32/esri/copyright.txt for details. */ import{ScreenSpacePass as o}from"../views/3d/webgl-engine/core/shaderLibrary/ScreenSpacePass.glsl.js";import{ReadDepth as e}from"../views/3d/webgl-engine/core/shaderLibrary/output/ReadDepth.glsl.js";import{Gamma as r}from"../views/3d/webgl-engine/core/shaderLibrary/shading/Gamma.glsl.js";import{Float2BindUniform as l}from"../views/3d/webgl-engine/core/shaderModules/Float2BindUniform.js";import{FloatPassUniform as t}from"../views/3d/webgl-engine/core/shaderModules/FloatPassUniform.js";import{FloatsPassUniform as a}from"../views/3d/webgl-engine/core/shaderModules/FloatsPassUniform.js";import{glsl as s}from"../views/3d/webgl-engine/core/shaderModules/glsl.js";import{IntegerPassUniform as d}from"../views/3d/webgl-engine/core/shaderModules/IntegerPassUniform.js";import{Texture2DBindUniform as i}from"../views/3d/webgl-engine/core/shaderModules/Texture2DBindUniform.js";import{Texture2DPassUniform as m}from"../views/3d/webgl-engine/core/shaderModules/Texture2DPassUniform.js";import{NoParameters as n}from"../views/webgl/NoParameters.js";import{ShaderBuilder as c}from"../views/webgl/ShaderBuilder.js";class u extends n{constructor(o=p.sunny,e=[1,.8,.6,.4,.2],r=[.15,.05,.01,0,0]){super(),this.exposure=o,this.lodFactors=e,this.lodFactorsFront=r}}const p={sunny:25,cloudy:25,rainy:15,snowy:15,foggy:15},f=new u;class g extends u{constructor(){super(...arguments),this.bloomLod=-1}}function F(){const n=new c,u=n.fragment;return n.include(o),n.include(r),u.include(e),u.uniforms.add(new m("colorTexture",(o=>o.color)),new m("bloomTexture0",(o=>o.bloomTexture0)),new m("bloomTexture1",(o=>o.bloomTexture1)),new m("bloomTexture2",(o=>o.bloomTexture2)),new m("bloomTexture3",(o=>o.bloomTexture3)),new m("bloomTexture4",(o=>o.bloomTexture4)),new t("exposure",(o=>o.exposure)),new d("bloomLod",(o=>o.bloomLod)),new i("depthTexture",(o=>o.mainDepth)),new l("nearFar",(o=>o.camera.nearFar)),new a("lodFactors",(o=>o.lodFactors),5),new a("lodFactorsFront",(o=>o.lodFactorsFront),5)).code.add(s`vec3 simpleExposureTonemap(vec3 hdrColor, float exposure) { vec3 mapped = vec3(1.0) - exp(-hdrColor * exposure); return mapped; }`).main.add(s`vec4 color = texture(colorTexture, uv); color = vec4(linearizeGamma(color.rgb), color.a); vec4 lod0 = pow(texture(bloomTexture0, uv), vec4(GAMMA)); vec4 lod1 = pow(texture(bloomTexture1, uv), vec4(GAMMA)); vec4 lod2 = pow(texture(bloomTexture2, uv), vec4(GAMMA)); vec4 lod3 = pow(texture(bloomTexture3, uv), vec4(GAMMA)); vec4 lod4 = pow(texture(bloomTexture4, uv), vec4(GAMMA)); float depthSample = depthFromTexture(depthTexture, uv); float modifierFactors = 0.0; float linearDepthNorm = 0.0; if(depthSample < 1.0 && depthSample > 0.0) { float linearDepth = -linearizeDepth(depthSample); float distNearFar = (nearFar[1] - nearFar[0]); linearDepthNorm = 1.0 - ((linearDepth - nearFar[0]) / distNearFar); modifierFactors = pow(linearDepthNorm, 8.0) / 1.0; } fragColor = mix(lodFactors[0], lodFactorsFront[0], modifierFactors) * lod0; fragColor += mix(lodFactors[1], lodFactorsFront[1], modifierFactors) * lod1; fragColor += mix(lodFactors[2], lodFactorsFront[2], modifierFactors) * lod2; fragColor += mix(lodFactors[3], lodFactorsFront[3], modifierFactors) * lod3; fragColor += mix(lodFactors[4], lodFactorsFront[4], modifierFactors) * lod4; fragColor = bloomLod == 0 ? lodFactors[0] * lod0 : bloomLod == 1 ? lodFactors[1] * lod1 : bloomLod == 2 ? lodFactors[2] * lod2 : bloomLod == 3 ? lodFactors[3] * lod3 : bloomLod == 4 ? lodFactors[4] * lod4 : fragColor; fragColor = vec4(simpleExposureTonemap(fragColor.rgb, exposure), fragColor.a); fragColor += color; fragColor = delinearizeGamma(fragColor);`),n}const x=Object.freeze(Object.defineProperty({__proto__:null,BloomCompositionPassParameters:g,build:F,defaultCompositionParameters:f,exposurePresets:p},Symbol.toStringTag,{value:"Module"}));export{x as B,g as a,F as b,f as d,p as e};