@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
16 lines (15 loc) • 2.61 kB
JavaScript
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */
import{screenPointObjectToArray as e,createScreenPointArray as r,createRenderScreenPointArray as a}from"../core/screenUtils.js";import{set as o}from"../core/libs/gl-matrix-2/math/vec4.js";import{create as t}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{NoParameters as m}from"../views/webgl/NoParameters.js";import{ShaderBuilder as u}from"../views/webgl/ShaderBuilder.js";class d extends m{constructor(){super(...arguments),this.mask=null,this.overlay=null,this.input=null,this.size=0}}function f(){const e=new u;return e.attributes.add("position","vec2"),e.vertex.uniforms.add(new i("drawPosition",(e,r)=>v(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 v(r,a){const t=a.camera.pixelRatio,n=r.magnifier.offset.x*t,i=r.magnifier.offset.y*t;e(r.magnifier.position,c);const s=a.camera.screenToRender(c,g),l=Math.ceil(t*r.magnifier.size),{fullWidth:m,fullHeight:u}=a.camera;return o(p,(s[0]+n)/m*2-1,(s[1]-i)/u*2-1,l/m*2,l/u*2)}const c=r(),g=a(),p=t(),b=Object.freeze(Object.defineProperty({__proto__:null,MagnifierPassParameters:d,build:f},Symbol.toStringTag,{value:"Module"}));export{d as M,b as a,f as b};