@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
3 lines (2 loc) • 6.83 kB
JavaScript
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.19/LICENSE.txt */
import{__decorate as t,__param as l}from"tslib";import{GraphShaderModule as e,FragmentOutput as r,location as n,uniform as i,define as a,input as o,VertexInput as u,UniformGroup as p,FragmentInput as c}from"../../GraphShaderModule.js";import{Vec4 as s,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 T,dot as j,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 q}from"./utils.js";class z extends u{}t([n(0,O)],z.prototype,"position",void 0);class A extends c{}class D extends p{}t([i(S)],D.prototype,"layerTexture",void 0),t([i(S)],D.prototype,"backbufferTexture",void 0),t([i(w)],D.prototype,"opacity",void 0),t([i(w)],D.prototype,"inFadeOpacity",void 0);class E extends e{constructor(){super(...arguments),this.type="BlendShader"}vertex(t){return{uv:t.position,glPosition:new s(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 s(i.multiply(o).multiply(G(u)).add(a.multiply(u)),o.add(u).subtract(o.multiply(u)));break;case"source-in":{const t=new s(i.multiply(o).multiply(u),o.multiply(u)),e=new s(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 s(a.multiply(u).multiply(o),u.multiply(o)),e=new s(a.multiply(u),u).multiply(new s(G(this.config.opacity).multiply(this.config.inFadeOpacity)));l.fragColor=t.add(e)}break;case"source-out":l.fragColor=new s(i.multiply(o).multiply(G(u)),o.multiply(G(u)));break;case"destination-out":l.fragColor=new s(a.multiply(u).multiply(G(o)),u.multiply(G(o)));break;case"source-atop":l.fragColor=new s(i.multiply(o).multiply(u).add(a.multiply(u.multiply(G(o)))),u);break;case"destination-atop":l.fragColor=new s(i.multiply(o.multiply(G(u))).add(a.multiply(u).multiply(o)),o);break;case"xor":l.fragColor=new s(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 s(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 s(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(I(a.r,i.r),I(a.g,i.g),I(a.b,i.b));l.fragColor=H(t,i,a,o,u)}break;case"darken":{const t=C(i,a);l.fragColor=H(t,i,a,o,u)}break;case"lighter":l.fragColor=new s(i.multiply(o).add(a.multiply(u)),o.add(u));break;case"lighten":{const t=k(i,a);l.fragColor=H(t,i,a,o,u)}break;case"color-dodge":{const t=b(new g(J(a.r,i.r),J(a.g,i.g),J(a.b,i.b)),new g(0),new g(1));l.fragColor=H(t,i,a,o,u)}break;case"color-burn":{const t=new g(K(a.r,i.r),K(a.g,i.g),K(a.b,i.b));l.fragColor=H(t,i,a,o,u)}break;case"hard-light":{const t=new g(L(a.r,i.r),L(a.g,i.g),L(a.b,i.b));l.fragColor=H(t,i,a,o,u)}break;case"soft-light":{const t=new g(N(a.r,i.r),N(a.g,i.g),N(a.b,i.b));l.fragColor=H(t,i,a,o,u)}break;case"difference":{const t=f(a.subtract(i));l.fragColor=H(t,i,a,o,u)}break;case"exclusion":{const t=i.add(a).subtract(new w(2).multiply(i).multiply(a));l.fragColor=H(t,i,a,o,u)}break;case"invert":l.fragColor=new s(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(Q(a.r,i.r),new w(0),new w(1)),b(Q(a.g,i.g),new w(0),new w(1)),b(Q(a.b,i.b),new w(0),new w(1)));l.fragColor=H(t,i,a,o,u)}break;case"hue":{const t=Z(i,a,a);l.fragColor=H(t,i,a,o,u)}break;case"saturation":{const t=Z(a,i,a);l.fragColor=H(t,i,a,o,u)}break;case"color":{const t=Y(i,a);l.fragColor=H(t,i,a,o,u)}break;case"luminosity":{const t=Y(a,i);l.fragColor=H(t,i,a,o,u)}break;case"plus":l.fragColor=b(new s(e.r.add(a.r),e.g.add(a.g),e.b.add(a.b),o.add(u)),new s(0),new s(1));break;case"minus":l.fragColor=new s(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=H(t,i,a,o,u)}break;case"reflect":{const t=b(new g($(a.r,i.r),$(a.g,i.g),$(a.b,i.b)),new g(0),new g(1));l.fragColor=H(t,i,a,o,u)}break;default:l.fragColor=e.multiply(this.config.opacity)}return l}}function H(t,l,e,r,n){return new s(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 I(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 J(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 K(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 L(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 N(t,l){return x([T(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))}],[T(t,new w(.25)),()=>{const e=new w(2).multiply(l),r=q(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=q(e),n=M(t).subtract(t);return t.add(r.multiply(n))}])}function Q(t,l){const e=G(h(new w(.5),l)).multiply(K(t,new w(2).multiply(l))),r=h(new w(.5),l).multiply(J(t,new w(2).multiply(P(l,.5))));return e.add(r)}function R(t){return C(C(t.r,t.g),t.b)}function U(t){return k(k(t.r,t.g),t.b)}function V(t){return j(t,new g(.3,.59,.11))}function W(t){return U(t).subtract(R(t))}function X(t){const l=V(t),e=R(t),r=U(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 Y(t,l){const e=V(t),r=V(l).subtract(e);return X(t.add(new g(r)))}function Z(t,l,e){const r=R(t),n=W(t),i=W(l);return Y(y(v(n,new w(0)),()=>t.subtract(r).multiply(i).divide(n),new g(0)),e)}function $(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],E.prototype,"blendMode",void 0),t([i(D)],E.prototype,"config",void 0),t([l(0,o(z))],E.prototype,"vertex",null),t([l(0,o(A))],E.prototype,"fragment",null);export{E as BlendShader};