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