@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
18 lines (17 loc) • 3.07 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.33/esri/copyright.txt for details.
*/
import{create as e}from"../core/libs/gl-matrix-2/factories/vec4f64.js";import{ScreenSizeScaling as r}from"../views/3d/webgl-engine/core/shaderLibrary/ScreenSizeScaling.glsl.js";import{SliceDraw as o}from"../views/3d/webgl-engine/core/shaderLibrary/Slice.glsl.js";import{Transform as i}from"../views/3d/webgl-engine/core/shaderLibrary/Transform.glsl.js";import{terrainDepthTest as n}from"../views/3d/webgl-engine/core/shaderLibrary/shading/TerrainDepthTest.glsl.js";import{ColorConversion as l}from"../views/3d/webgl-engine/core/shaderLibrary/util/ColorConversion.glsl.js";import{addProjViewLocalOrigin as s,addViewNormal as a}from"../views/3d/webgl-engine/core/shaderLibrary/util/View.glsl.js";import{Float3PassUniform as d}from"../views/3d/webgl-engine/core/shaderModules/Float3PassUniform.js";import{Float4PassUniform as t}from"../views/3d/webgl-engine/core/shaderModules/Float4PassUniform.js";import{glsl as g}from"../views/3d/webgl-engine/core/shaderModules/glsl.js";import{VertexAttribute as c}from"../views/3d/webgl-engine/lib/VertexAttribute.js";import{outputColorHighlightOID as m}from"../views/3d/webgl-engine/shaders/OutputColorHighlightOID.glsl.js";import{ShaderBuilder as v}from"../views/webgl/ShaderBuilder.js";function w(e){const w=new v;w.include(i,e),w.include(r,e),w.fragment.include(o,e),w.include(m,e),w.include(n,e);const{vertex:b,fragment:u}=w;return u.include(l),s(b,e),u.uniforms.add(new t("uColor",(e=>e.color))),w.attributes.add(c.POSITION,"vec3"),w.varyings.add("vWorldPosition","vec3"),e.screenSizeEnabled&&w.attributes.add(c.OFFSET,"vec3"),e.shadingEnabled&&(a(b),w.attributes.add(c.NORMAL,"vec3"),w.varyings.add("vViewNormal","vec3"),u.uniforms.add(new d("shadingDirection",(e=>e.shadingDirection))),u.uniforms.add(new t("shadedColor",(e=>f(e.shadingTint,e.color))))),b.main.add(g`
vWorldPosition = ${e.screenSizeEnabled?g`screenSizeScaling(offset, position)`:g`position`};
${e.shadingEnabled?g`vec3 worldNormal = normal;
vViewNormal = (viewNormal * vec4(worldNormal, 1)).xyz;`:""}
forwardViewPosDepth((view * vec4(vWorldPosition, 1.0)).xyz);
gl_Position = transformPosition(proj, view, vWorldPosition);
`),u.main.add(g`
discardBySlice(vWorldPosition);
discardByTerrainDepth();
${e.shadingEnabled?g`vec3 viewNormalNorm = normalize(vViewNormal);
float shadingFactor = 1.0 - clamp(-dot(viewNormalNorm, shadingDirection), 0.0, 1.0);
vec4 finalColor = mix(uColor, shadedColor, shadingFactor);`:g`vec4 finalColor = uColor;`}
outputColorHighlightOID(finalColor, vWorldPosition, finalColor.rgb);`),w}function f(e,r){const o=1-e[3],i=e[3]+r[3]*o;return 0===i?(b[3]=i,b):(b[0]=(e[0]*e[3]+r[0]*r[3]*o)/i,b[1]=(e[1]*e[3]+r[1]*r[3]*o)/i,b[2]=(e[2]*e[3]+r[2]*r[3]*o)/i,b[3]=r[3],b)}const b=e(),u=Object.freeze(Object.defineProperty({__proto__:null,build:w},Symbol.toStringTag,{value:"Module"}));export{u as S,w as b};