@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 6.93 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.33/esri/copyright.txt for details.
*/
import{_ as t,a as l}from"../../../../../../../chunks/tslib.es6.js";import{GraphShaderModule as e,FragmentOutput as r,location as n,uniform as i,define as a,VertexInput as o,UniformGroup as u,input as p,FragmentInput as s}from"../../GraphShaderModule.js";import{Vec4 as c,texture2D as d,ifElse as y,equal as m,Float as w,clamp as b,Vec3 as g,abs as f,max as k,min as C,greaterThan as v,step as h,cond as x,lessThanEqual as j,dot as T,lessThan as F,sqrt as M,Vec2 as O,Sampler2D as S}from"../../graph/glsl.js";import{uvToClip as B,oneMinus as G,minusScalar as P,minusOne as _}from"./utils.js";class q extends o{}t([n(0,O)],q.prototype,"position",void 0);class z extends s{}class A extends u{}t([i(S)],A.prototype,"layerTexture",void 0),t([i(S)],A.prototype,"backbufferTexture",void 0),t([i(w)],A.prototype,"opacity",void 0),t([i(w)],A.prototype,"inFadeOpacity",void 0);class D extends e{constructor(){super(...arguments),this.type="BlendShader"}vertex(t){return{uv:t.position,glPosition:new c(B(t.position),0,1)}}fragment(t){const l=new r,e=d(this.config.layerTexture,t.uv),n=d(this.config.backbufferTexture,t.uv),i=y(m(e.a,new w(0)),e.rgb,e.rgb.divide(e.a)),a=y(m(n.a,new w(0)),n.rgb,n.rgb.divide(n.a)),o=this.config.opacity.multiply(e.a),u=n.a;switch(this.blendMode){case"destination-over":l.fragColor=new c(i.multiply(o).multiply(G(u)).add(a.multiply(u)),o.add(u).subtract(o.multiply(u)));break;case"source-in":{const t=new c(i.multiply(o).multiply(u),o.multiply(u)),e=new c(a.multiply(u),u).multiply(G(this.config.opacity)).multiply(this.config.inFadeOpacity);l.fragColor=t.add(e)}break;case"destination-in":{const t=new c(a.multiply(u).multiply(o),u.multiply(o)),e=new c(a.multiply(u),u).multiply(new c(G(this.config.opacity).multiply(this.config.inFadeOpacity)));l.fragColor=t.add(e)}break;case"source-out":l.fragColor=new c(i.multiply(o).multiply(G(u)),o.multiply(G(u)));break;case"destination-out":l.fragColor=new c(a.multiply(u).multiply(G(o)),u.multiply(G(o)));break;case"source-atop":l.fragColor=new c(i.multiply(o).multiply(u).add(a.multiply(u.multiply(G(o)))),u);break;case"destination-atop":l.fragColor=new c(i.multiply(o.multiply(G(u))).add(a.multiply(u).multiply(o)),o);break;case"xor":l.fragColor=new c(i.multiply(o.multiply(G(u))).add(a.multiply(u.multiply(G(o)))),o.multiply(G(u)).add(u.multiply(G(o))));break;case"multiply":l.fragColor=new c(i.multiply(o).multiply(a.multiply(u)).add(i.multiply(o).multiply(G(u))).add(a.multiply(u).multiply(G(o))),o.add(u.multiply(G(o))));break;case"screen":l.fragColor=new c(i.add(a).subtract(i.multiply(a)).multiply(o.multiply(u)).add(i.multiply(o).multiply(G(u))).add(a.multiply(u).multiply(G(o))),o.add(u.multiply(G(o))));break;case"overlay":{const t=new g(H(a.r,i.r),H(a.g,i.g),H(a.b,i.b));l.fragColor=E(t,i,a,o,u)}break;case"darken":{const t=C(i,a);l.fragColor=E(t,i,a,o,u)}break;case"lighter":l.fragColor=new c(i.multiply(o).add(a.multiply(u)),o.add(u));break;case"lighten":{const t=k(i,a);l.fragColor=E(t,i,a,o,u)}break;case"color-dodge":{const t=b(new g(I(a.r,i.r),I(a.g,i.g),I(a.b,i.b)),new g(0),new g(1));l.fragColor=E(t,i,a,o,u)}break;case"color-burn":{const t=new g(J(a.r,i.r),J(a.g,i.g),J(a.b,i.b));l.fragColor=E(t,i,a,o,u)}break;case"hard-light":{const t=new g(K(a.r,i.r),K(a.g,i.g),K(a.b,i.b));l.fragColor=E(t,i,a,o,u)}break;case"soft-light":{const t=new g(L(a.r,i.r),L(a.g,i.g),L(a.b,i.b));l.fragColor=E(t,i,a,o,u)}break;case"difference":{const t=f(a.subtract(i));l.fragColor=E(t,i,a,o,u)}break;case"exclusion":{const t=i.add(a).subtract(new w(2).multiply(i).multiply(a));l.fragColor=E(t,i,a,o,u)}break;case"invert":l.fragColor=new c(new g(1).subtract(a).multiply(o).multiply(u).add(a.multiply(u).multiply(G(o))),u);break;case"vivid-light":{const t=new g(b(N(a.r,i.r),new w(0),new w(1)),b(N(a.g,i.g),new w(0),new w(1)),b(N(a.b,i.b),new w(0),new w(1)));l.fragColor=E(t,i,a,o,u)}break;case"hue":{const t=Y(i,a,a);l.fragColor=E(t,i,a,o,u)}break;case"saturation":{const t=Y(a,i,a);l.fragColor=E(t,i,a,o,u)}break;case"color":{const t=X(i,a);l.fragColor=E(t,i,a,o,u)}break;case"luminosity":{const t=X(a,i);l.fragColor=E(t,i,a,o,u)}break;case"plus":l.fragColor=b(new c(e.r.add(a.r),e.g.add(a.g),e.b.add(a.b),o.add(u)),new c(0),new c(1));break;case"minus":l.fragColor=new c(b(new g(a.r.subtract(e.r),a.g.subtract(e.g),a.b.subtract(e.b)),new g(0),new g(1)),u.multiply(o));break;case"average":{const t=a.add(i).divide(2);l.fragColor=E(t,i,a,o,u)}break;case"reflect":{const t=b(new g(Z(a.r,i.r),Z(a.g,i.g),Z(a.b,i.b)),new g(0),new g(1));l.fragColor=E(t,i,a,o,u)}break;default:l.fragColor=e.multiply(this.config.opacity)}return l}}function E(t,l,e,r,n){return new c(t.multiply(r).multiply(n).add(l.multiply(r).multiply(G(n))).add(e.multiply(n).multiply(G(r))),r.add(n.multiply(G(r))))}function H(t,l){return new w(1).subtract(h(new w(.5),l)).multiply(G(new w(2).multiply(G(l).multiply(G(t))))).add(h(new w(.5),l).multiply(new w(2).multiply(l).multiply(t)))}function I(t,l){return y(m(t,new w(0)),new w(0),y(m(l,new w(1)),new w(1),C(new w(1),t.divide(new w(1).subtract(l)))))}function J(t,l){return y(m(t,new w(1)),new w(1),y(m(l,new w(0)),new w(0),G(C(new w(1),G(t).divide(l)))))}function K(t,l){return new w(1).subtract(h(new w(.5),l)).multiply(new w(2).multiply(l).multiply(t)).add(h(new w(.5),l).multiply(G(new w(2).multiply(G(l).multiply(G(t))))))}function L(t,l){return x([j(l,new w(.5)),()=>{const e=new w(2).multiply(l),r=G(e),n=G(t);return t.subtract(r.multiply(t).multiply(n))}],[j(t,new w(.25)),()=>{const e=new w(2).multiply(l),r=_(e).multiply(t),n=new w(16).multiply(t).subtract(new w(12)).multiply(t).add(new w(3));return t.add(r.multiply(n))}],[!0,()=>{const e=new w(2).multiply(l),r=_(e),n=M(t).subtract(t);return t.add(r.multiply(n))}])}function N(t,l){const e=G(h(new w(.5),l)).multiply(J(t,new w(2).multiply(l))),r=h(new w(.5),l).multiply(I(t,new w(2).multiply(P(l,.5))));return e.add(r)}function Q(t){return C(C(t.r,t.g),t.b)}function R(t){return k(k(t.r,t.g),t.b)}function U(t){return T(t,new g(.3,.59,.11))}function V(t){return R(t).subtract(Q(t))}function W(t){const l=U(t),e=Q(t),r=R(t);return x([F(e,new w(0)),()=>{const r=t.subtract(l).multiply(l),n=l.subtract(e);return l.add(r.divide(n))}],[v(r,new w(1)),()=>{const e=t.subtract(l),n=G(l),i=e.multiply(n),a=r.subtract(l);return l.add(i.divide(a))}],[!0,t])}function X(t,l){const e=U(t),r=U(l).subtract(e);return W(t.add(new g(r)))}function Y(t,l,e){const r=Q(t),n=V(t),i=V(l);return X(y(v(n,new w(0)),(()=>t.subtract(r).multiply(i).divide(n)),new g(0)),e)}function Z(t,l){return y(m(l,new w(1)),l,(()=>{const e=G(l),r=t.multiply(t).divide(e);return C(r,new w(1))}))}t([a],D.prototype,"blendMode",void 0),t([i(A)],D.prototype,"config",void 0),t([l(0,p(q))],D.prototype,"vertex",null),t([l(0,p(z))],D.prototype,"fragment",null);export{D as BlendShader};