@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
19 lines (18 loc) • 2.76 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.32/esri/copyright.txt for details.
*/
import{screenPointObjectToArray as e,createScreenPointArray as r,createRenderScreenPointArray as t}from"../core/screenUtils.js";import{s as a}from"./vec42.js";import{create as o}from"../core/libs/gl-matrix-2/factories/vec4f64.js";import{BooleanPassUniform as n}from"../views/3d/webgl-engine/core/shaderModules/BooleanPassUniform.js";import{Float4PassUniform as i}from"../views/3d/webgl-engine/core/shaderModules/Float4PassUniform.js";import{glsl as s}from"../views/3d/webgl-engine/core/shaderModules/glsl.js";import{Texture2DPassUniform as l}from"../views/3d/webgl-engine/core/shaderModules/Texture2DPassUniform.js";import{VertexAttribute as m}from"../views/3d/webgl-engine/lib/VertexAttribute.js";import{NoParameters as u}from"../views/webgl/NoParameters.js";import{ShaderBuilder as d}from"../views/webgl/ShaderBuilder.js";class f extends u{constructor(){super(...arguments),this.mask=null,this.overlay=null,this.input=null,this.size=0}}function v(){const e=new d;return e.attributes.add(m.POSITION,"vec2"),e.vertex.uniforms.add(new i("drawPosition",((e,r)=>c(e,r)))),e.varyings.add("vUV","vec2"),e.vertex.main.add(s`vUV = position;
gl_Position = vec4(drawPosition.xy + vec2(position - 0.5) * drawPosition.zw, 0.0, 1.0);`),e.fragment.uniforms.add(new l("textureInput",(e=>e.input))),e.fragment.uniforms.add(new l("textureMask",(e=>e.mask))),e.fragment.uniforms.add(new l("textureOverlay",(e=>e.overlay))),e.fragment.uniforms.add(new n("maskEnabled",(e=>e.magnifier.maskEnabled))),e.fragment.uniforms.add(new n("overlayEnabled",(e=>e.magnifier.overlayEnabled))),e.fragment.code.add(s`const float barrelFactor = 1.1;
vec2 barrel(vec2 uv) {
vec2 uvn = uv * 2.0 - 1.0;
if (uvn.x == 0.0 && uvn.y == 0.0) {
return vec2(0.5, 0.5);
}
float theta = atan(uvn.y, uvn.x);
float r = pow(length(uvn), barrelFactor);
return r * vec2(cos(theta), sin(theta)) * 0.5 + 0.5;
}`),e.fragment.main.add(s`float mask = maskEnabled ? texture(textureMask, vUV).a : 1.0;
vec4 inputColor = texture(textureInput, barrel(vUV)) * mask;
vec4 overlayColor = overlayEnabled ? texture(textureOverlay, vUV) : vec4(0);
fragColor = overlayColor + (1.0 - overlayColor.a) * inputColor;`),e}function c(r,t){const o=t.camera.pixelRatio,n=r.magnifier.offset.x*o,i=r.magnifier.offset.y*o;e(r.magnifier.position,g);const s=t.camera.screenToRender(g,b),l=Math.ceil(o*r.magnifier.size),{fullWidth:m,fullHeight:u}=t.camera;return a(w,(s[0]+n)/m*2-1,(s[1]-i)/u*2-1,l/m*2,l/u*2)}const g=r(),b=t(),w=o(),p=Object.freeze(Object.defineProperty({__proto__:null,MagnifierPassParameters:f,build:v},Symbol.toStringTag,{value:"Module"}));export{f as M,p as a,v as b};