You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
23 lines
2.6 KiB
23 lines
2.6 KiB
// All material copyright Esri, All Rights Reserved, unless otherwise specified. |
|
// See https://js.arcgis.com/4.30/esri/copyright.txt for details. |
|
//>>built |
|
define("exports ../core/screenUtils ./vec42 ../core/libs/gl-matrix-2/factories/vec4f64 ../views/3d/webgl-engine/core/shaderModules/BooleanPassUniform ../views/3d/webgl-engine/core/shaderModules/Float4PassUniform ../views/3d/webgl-engine/core/shaderModules/interfaces ../views/3d/webgl-engine/core/shaderModules/ShaderBuilder ../views/3d/webgl-engine/core/shaderModules/Texture2DPassUniform ../views/3d/webgl-engine/lib/VertexAttribute".split(" "),function(e,f,r,g,l,t,h,u,k,v){function m(){const b=new u.ShaderBuilder; |
|
b.attributes.add(v.VertexAttribute.POSITION,"vec2");b.vertex.uniforms.add(new t.Float4PassUniform("drawPosition",(a,c)=>{var d=c.camera.pixelRatio;const w=a.magnifier.offset.x*d,x=a.magnifier.offset.y*d;f.screenPointObjectToArray(a.magnifier.position,n);const p=c.camera.screenToRender(n,y);a=Math.ceil(d*a.magnifier.size);d=c.camera.fullWidth;c=c.camera.fullHeight;return r.set(z,-1+(p[0]+w)/d*2,-1+(p[1]-x)/c*2,a/d*2,a/c*2)}));b.varyings.add("vUV","vec2");b.vertex.code.add(h.glsl`void main(void) { |
|
vUV = position; |
|
gl_Position = vec4(drawPosition.xy + vec2(position - 0.5) * drawPosition.zw, 0.0, 1.0); |
|
}`);b.fragment.uniforms.add(new k.Texture2DPassUniform("textureInput",a=>a.input));b.fragment.uniforms.add(new k.Texture2DPassUniform("textureMask",a=>a.mask));b.fragment.uniforms.add(new k.Texture2DPassUniform("textureOverlay",a=>a.overlay));b.fragment.uniforms.add(new l.BooleanPassUniform("maskEnabled",a=>a.magnifier.maskEnabled));b.fragment.uniforms.add(new l.BooleanPassUniform("overlayEnabled",a=>a.magnifier.overlayEnabled));b.fragment.code.add(h.glsl`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; |
|
} |
|
void main() { |
|
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; |
|
}`);return b}class q extends h.NoParameters{constructor(){super(...arguments);this.input=this.overlay=this.mask=null;this.size=0}}const n=f.createScreenPointArray(),y=f.createRenderScreenPointArray(),z=g.create();g=Object.freeze(Object.defineProperty({__proto__:null,MagnifierPassParameters:q,build:m},Symbol.toStringTag,{value:"Module"}));e.Magnifier=g;e.MagnifierPassParameters=q;e.build=m}); |