@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
24 lines (21 loc) • 1.89 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{addProjViewLocalOrigin as e}from"../views/3d/webgl-engine/core/shaderLibrary/util/View.glsl.js";import{FloatPassUniform as o}from"../views/3d/webgl-engine/core/shaderModules/FloatPassUniform.js";import{glsl as i}from"../views/3d/webgl-engine/core/shaderModules/glsl.js";import{VertexAttribute as r}from"../views/3d/webgl-engine/lib/VertexAttribute.js";import{ShaderBuilder as a}from"../views/webgl/ShaderBuilder.js";function t(t){const s=new a,{vertex:d,fragment:u,attributes:l,varyings:n}=s;e(d,t);const{isAttributeDriven:c,usesHalfFloat:f}=t;return l.add(r.POSITION,"vec3"),l.add(r.UV0,"vec2"),c&&(l.add(r.FEATUREATTRIBUTE,"float"),n.add("attributeValue","float")),f&&u.constants.add("compressionFactor","float",.25),n.add("unitCirclePos","vec2"),d.uniforms.add(new o("radius",(({resolutionForScale:e,searchRadius:o},{camera:i,screenToWorldRatio:r,overlayStretch:a})=>2*o*(0===e?1:e/r)*i.pixelRatio/i.fullViewport[2]/a))),d.main.add(i`
unitCirclePos = uv0;
vec4 posProj = proj * (view * vec4(${r.POSITION}, 1.0));
vec4 quadOffset = vec4(unitCirclePos * radius, 0.0, 0.0);
${c?i`attributeValue = ${r.FEATUREATTRIBUTE};`:""}
gl_Position = posProj + quadOffset;
`),u.main.add(i`
float radiusRatioSquared = dot(unitCirclePos, unitCirclePos);
if (radiusRatioSquared > 1.0) {
fragColor = vec4(0.0);
}
else {
float oneMinusRadiusRatioSquared = 1.0 - radiusRatioSquared;
float density = oneMinusRadiusRatioSquared * oneMinusRadiusRatioSquared ${c?i` * attributeValue`:""} ${f?i` * compressionFactor`:""};
fragColor = vec4(density);
}
`),s}const s=Object.freeze(Object.defineProperty({__proto__:null,build:t},Symbol.toStringTag,{value:"Module"}));export{s as H,t as b};