HeatmapDensity.glsl.js 1.9 KB

1234567891011121314151617181920212223242526
  1. /*
  2. All material copyright ESRI, All Rights Reserved, unless otherwise specified.
  3. See https://js.arcgis.com/4.25/esri/copyright.txt for details.
  4. */
  5. import{addProjViewLocalOrigin as e}from"../views/3d/webgl-engine/core/shaderLibrary/util/View.glsl.js";import{FloatPassUniform as i}from"../views/3d/webgl-engine/core/shaderModules/FloatPassUniform.js";import{glsl as o}from"../views/3d/webgl-engine/core/shaderModules/interfaces.js";import{ShaderBuilder as r}from"../views/3d/webgl-engine/core/shaderModules/ShaderBuilder.js";import{VertexAttribute as t}from"../views/3d/webgl-engine/lib/VertexAttribute.js";function a(a){const s=new r,{vertex:d,fragment:u}=s;e(d,a);const{isAttributeDriven:n,usesHalfFloat:l}=a;return s.attributes.add(t.POSITION,"vec3"),s.attributes.add(t.UV0,"vec2"),n&&(s.attributes.add(t.FEATUREATTRIBUTE,"float"),s.varyings.add("attributeValue","float")),l&&s.constants.add("compressionFactor","float",.25),s.varyings.add("unitCirclePos","vec2"),d.uniforms.add(new i("radius",(({resolutionForScale:e,searchRadius:i},{camera:o,screenToWorldRatio:r})=>2*i*(0===e?1:e/r)*o.pixelRatio/o.fullViewport[2]))),d.code.add(o`
  6. void main() {
  7. unitCirclePos = uv0;
  8. vec4 posProj = proj * (view * vec4(${t.POSITION}, 1.0));
  9. vec4 quadOffset = vec4(unitCirclePos * radius, 0.0, 0.0);
  10. ${n?o`attributeValue = ${t.FEATUREATTRIBUTE};`:""}
  11. gl_Position = posProj + quadOffset;
  12. }
  13. `),u.code.add(o`
  14. void main() {
  15. float radiusRatioSquared = dot(unitCirclePos, unitCirclePos);
  16. if (radiusRatioSquared > 1.0) {
  17. discard;
  18. }
  19. float oneMinusRadiusRatioSquared = 1.0 - radiusRatioSquared;
  20. float density = oneMinusRadiusRatioSquared * oneMinusRadiusRatioSquared ${n?o` * attributeValue`:""} ${l?o` * compressionFactor`:""};
  21. gl_FragColor = vec4(density);
  22. }
  23. `),s}const s=Object.freeze(Object.defineProperty({__proto__:null,build:a},Symbol.toStringTag,{value:"Module"}));export{s as H,a as b};