UNPKG

@arcgis/core

Version:

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

30 lines (29 loc) 2.74 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.32/esri/copyright.txt for details. */ import{invert as e,translate as a}from"../core/libs/gl-matrix-2/math/mat4.js";import{create as r}from"../core/libs/gl-matrix-2/factories/mat4f64.js";import{ScreenSpacePass as o}from"../views/3d/webgl-engine/core/shaderLibrary/ScreenSpacePass.glsl.js";import{ReadDepth as i}from"../views/3d/webgl-engine/core/shaderLibrary/output/ReadDepth.glsl.js";import{ReadShadowMapPass as t}from"../views/3d/webgl-engine/core/shaderLibrary/shading/ReadShadowMap.glsl.js";import{CameraSpace as s}from"../views/3d/webgl-engine/core/shaderLibrary/util/CameraSpace.glsl.js";import{RgbaFloatEncoding as d}from"../views/3d/webgl-engine/core/shaderLibrary/util/RgbaFloatEncoding.glsl.js";import{glsl as l}from"../views/3d/webgl-engine/core/shaderModules/glsl.js";import{Matrix4BindUniform as n}from"../views/3d/webgl-engine/core/shaderModules/Matrix4BindUniform.js";import{Texture2DBindUniform as p}from"../views/3d/webgl-engine/core/shaderModules/Texture2DBindUniform.js";import{ReadShadowMapConfiguration as c}from"../views/3d/webgl-engine/shaders/ReadShadowMapConfiguration.js";import{ShaderBuilder as h}from"../views/webgl/ShaderBuilder.js";const m=255,w=1/m;function u(){const r=new h,c=r.fragment;return c.include(d),c.include(i),r.include(s),r.include(o),r.include(t,v),c.uniforms.add(new p("shadowMap",(e=>e.shadowMap.depthTexture)),new p("depthMap",(e=>e.depth?.attachment)),new n("inverseViewMatrix",(r=>e(g,a(g,r.camera.viewMatrix,r.camera.center))))),c.constants.add("sampleValue","float",w),r.outputs.add("sampleCount","float"),c.main.add(l`sampleCount = 0.0; float depth = depthFromTexture(depthMap, uv); if (depth >= 1.0 || depth <= 0.0) { return; } float currentPixelDepth = linearizeDepth(depth); vec4 currentPixelPos = vec4(reconstructPosition(gl_FragCoord.xy, currentPixelDepth), 1.0); vec4 worldSpacePos = inverseViewMatrix * currentPixelPos; mat4 shadowMatrix; float linearDepth = -currentPixelDepth; int i = chooseCascade(linearDepth, shadowMatrix); if (i >= numCascades) { return; } vec3 lvpos = lightSpacePosition(worldSpacePos.xyz, shadowMatrix); if (lvpos.z >= 1.0 || lvpos.x < 0.0 || lvpos.x > 1.0 || lvpos.y < 0.0 || lvpos.y > 1.0) { return; } ivec2 texSize = textureSize(shadowMap, 0); ivec2 uvShadow = ivec2(cascadeCoordinates(i, texSize, lvpos) * vec2(texSize)); float depthShadow = readShadowMapDepth(uvShadow, shadowMap); bool shadow = depthShadow < lvpos.z; if (shadow) { sampleCount = sampleValue; }`),r}const g=r(),v=new c,f=Object.freeze(Object.defineProperty({__proto__:null,ShadowCastMaxSamples:m,build:u},Symbol.toStringTag,{value:"Module"}));export{m as S,f as a,u as b};