@deck.gl/extensions 9.4.0-beta.4 → 9.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dist.dev.js +98 -109
- package/dist/index.cjs +103 -94
- package/dist/index.cjs.map +1 -1
- package/dist/path-style/path-style-extension.d.ts.map +1 -1
- package/dist/path-style/path-style-extension.js +5 -2
- package/dist/path-style/path-style-extension.js.map +1 -1
- package/dist/path-style/shaders.glsl.d.ts +20 -9
- package/dist/path-style/shaders.glsl.d.ts.map +1 -1
- package/dist/path-style/shaders.glsl.js +76 -69
- package/dist/path-style/shaders.glsl.js.map +1 -1
- package/dist/utils/projection-utils.d.ts +28 -1
- package/dist/utils/projection-utils.d.ts.map +1 -1
- package/dist/utils/projection-utils.js +97 -1
- package/dist/utils/projection-utils.js.map +1 -1
- package/dist.min.js +108 -112
- package/package.json +7 -7
- package/src/path-style/path-style-extension.ts +5 -1
- package/src/path-style/shaders.glsl.ts +102 -115
- package/src/utils/projection-utils.ts +136 -2
package/dist.min.js
CHANGED
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
else if (typeof define === 'function' && define.amd) define([], factory);
|
|
5
5
|
else if (typeof exports === 'object') exports['deck'] = factory();
|
|
6
6
|
else root['deck'] = factory();})(globalThis, function () {
|
|
7
|
-
"use strict";var __exports__=(()=>{var
|
|
7
|
+
"use strict";var __exports__=(()=>{var Ti=Object.create;var de=Object.defineProperty;var Si=Object.getOwnPropertyDescriptor;var Li=Object.getOwnPropertyNames;var Fi=Object.getPrototypeOf,Oi=Object.prototype.hasOwnProperty;var Ge=(t,e)=>()=>{try{return e||t((e={exports:{}}).exports,e),e.exports}catch(i){throw e=0,i}},Le=(t,e)=>{for(var i in e)de(t,i,{get:e[i],enumerable:!0})},ue=(t,e,i,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Li(e))!Oi.call(t,n)&&n!==i&&de(t,n,{get:()=>e[n],enumerable:!(r=Si(e,n))||r.enumerable});return t},B=(t,e,i)=>(ue(t,e,"default"),i&&ue(i,e,"default")),_=(t,e,i)=>(i=t!=null?Ti(Fi(t)):{},ue(e||!t||!t.__esModule?de(i,"default",{value:t,enumerable:!0}):i,t)),Bi=t=>ue(de({},"__esModule",{value:!0}),t);var h=Ge((ho,qe)=>{qe.exports=globalThis.deck});var st=Ge((yo,at)=>{at.exports=globalThis.luma});var ce={};Le(ce,{BrushingExtension:()=>Xe,ClipExtension:()=>ti,CollisionFilterExtension:()=>si,DataFilterExtension:()=>pt,FillStyleExtension:()=>Qt,Fp64Extension:()=>Nt,MaskExtension:()=>di,PathStyleExtension:()=>Gt,_TerrainExtension:()=>Pi,project64:()=>ge});var E={},We=_(h(),1);B(E,_(h(),1));if(!We.Layer)throw new Error("@deck.gl/core is not found");B(ce,E);var $e=_(h(),1);var Ye=_(h(),1),Ke=`layout(std140) uniform brushingUniforms {
|
|
8
8
|
bool enabled;
|
|
9
9
|
highp int target;
|
|
10
10
|
vec2 mousePos;
|
|
11
11
|
float radius;
|
|
12
12
|
} brushing;
|
|
13
|
-
`,
|
|
13
|
+
`,wi=`
|
|
14
14
|
in vec2 brushingTargets;
|
|
15
15
|
|
|
16
16
|
out float brushing_isVisible;
|
|
@@ -33,15 +33,15 @@
|
|
|
33
33
|
void brushing_setVisible(bool visible) {
|
|
34
34
|
brushing_isVisible = float(visible);
|
|
35
35
|
}
|
|
36
|
-
`,
|
|
36
|
+
`,Ci=`
|
|
37
37
|
${Ke}
|
|
38
|
-
${
|
|
38
|
+
${wi}
|
|
39
39
|
`,Ii=`
|
|
40
40
|
in float brushing_isVisible;
|
|
41
|
-
`,
|
|
41
|
+
`,Ri=`
|
|
42
42
|
${Ke}
|
|
43
43
|
${Ii}
|
|
44
|
-
`,
|
|
44
|
+
`,ki={source:0,target:1,custom:2,source_target:3},Ni={"vs:DECKGL_FILTER_GL_POSITION":`
|
|
45
45
|
vec2 brushingTarget;
|
|
46
46
|
vec2 brushingSource;
|
|
47
47
|
if (brushing.target == 3) {
|
|
@@ -65,7 +65,7 @@ ${Ii}
|
|
|
65
65
|
if (brushing.enabled && brushing_isVisible < 0.5) {
|
|
66
66
|
discard;
|
|
67
67
|
}
|
|
68
|
-
`},Ze={name:"brushing",dependencies:[Ye.project],vs:
|
|
68
|
+
`},Ze={name:"brushing",dependencies:[Ye.project],vs:Ci,fs:Ri,inject:Ni,getUniforms:t=>{if(!t||!("viewport"in t))return{};let{brushingEnabled:e=!0,brushingRadius:i=1e4,brushingTarget:r="source",mousePosition:n,viewport:o}=t;return{enabled:!!(e&&n&&o.containsPixel(n)),radius:i,target:ki[r]||0,mousePos:n?o.unproject([n.x-o.x,n.y-o.y]):[0,0]}},uniformTypes:{enabled:"i32",target:"i32",mousePos:"vec2<f32>",radius:"f32"}};var Di={getBrushingTarget:{type:"accessor",value:[0,0]},brushingTarget:"source",brushingEnabled:!0,brushingRadius:1e4},W=class extends $e.LayerExtension{getShaders(){return{modules:[Ze]}}initializeState(e,i){let r=this.getAttributeManager();r&&r.add({brushingTargets:{size:2,stepMode:"dynamic",accessor:"getBrushingTarget"}});let n=()=>{this.getCurrentLayer()?.setNeedsRedraw()};this.state.onMouseMove=n,e.deck&&e.deck.eventManager.on({pointermove:n,pointerleave:n})}finalizeState(e,i){if(e.deck){let r=this.state.onMouseMove;e.deck.eventManager.off({pointermove:r,pointerleave:r})}}draw(e,i){let{viewport:r,mousePosition:n}=e.context,{brushingEnabled:o,brushingRadius:a,brushingTarget:s}=this.props,l={viewport:r,mousePosition:n,brushingEnabled:o,brushingRadius:a,brushingTarget:s};this.setShaderModuleProps({brushing:l})}};W.defaultProps=Di;W.extensionName="BrushingExtension";var Xe=W;var z=_(h(),1);var Qe=`layout(std140) uniform dataFilterUniforms {
|
|
69
69
|
bool useSoftMargin;
|
|
70
70
|
bool enabled;
|
|
71
71
|
bool transformSize;
|
|
@@ -78,7 +78,7 @@ ${Ii}
|
|
|
78
78
|
vec4 max64High;
|
|
79
79
|
highp uvec4 categoryBitMask;
|
|
80
80
|
} dataFilter;
|
|
81
|
-
`,
|
|
81
|
+
`,zi=`
|
|
82
82
|
#ifdef DATAFILTER_TYPE
|
|
83
83
|
in DATAFILTER_TYPE filterValues;
|
|
84
84
|
#ifdef DATAFILTER_DOUBLE
|
|
@@ -241,13 +241,13 @@ float dataFilter_reduceValue(vec4 value) {
|
|
|
241
241
|
#endif
|
|
242
242
|
`,Je=`
|
|
243
243
|
${Qe}
|
|
244
|
-
${
|
|
245
|
-
`,
|
|
244
|
+
${zi}
|
|
245
|
+
`,Ui=`
|
|
246
246
|
in float dataFilter_value;
|
|
247
247
|
`,et=`
|
|
248
248
|
${Qe}
|
|
249
|
-
${
|
|
250
|
-
`;function tt(t){if(!t||!("extensions"in t))return{};let{filterRange:e=[-1,1],filterEnabled:i=!0,filterTransformSize:r=!0,filterTransformColor:n=!0,categoryBitMask:o}=t,a=t.filterSoftRange||e,s=l=>Array.isArray(l)?[l[0]||0,l[1]||0,l[2]||0,l[3]||0]:[l,0,0,0];return{...Number.isFinite(e[0])?{min:s(e[0]),softMin:s(a[0]),softMax:s(a[1]),max:s(e[1])}:{min:s(e.map(l=>l[0])),softMin:s(a.map(l=>l[0])),softMax:s(a.map(l=>l[1])),max:s(e.map(l=>l[1]))},enabled:i,useSoftMargin:!!t.filterSoftRange,transformSize:i&&r,transformColor:i&&n,...o&&{categoryBitMask:o}}}function
|
|
249
|
+
${Ui}
|
|
250
|
+
`;function tt(t){if(!t||!("extensions"in t))return{};let{filterRange:e=[-1,1],filterEnabled:i=!0,filterTransformSize:r=!0,filterTransformColor:n=!0,categoryBitMask:o}=t,a=t.filterSoftRange||e,s=l=>Array.isArray(l)?[l[0]||0,l[1]||0,l[2]||0,l[3]||0]:[l,0,0,0];return{...Number.isFinite(e[0])?{min:s(e[0]),softMin:s(a[0]),softMax:s(a[1]),max:s(e[1])}:{min:s(e.map(l=>l[0])),softMin:s(a.map(l=>l[0])),softMax:s(a.map(l=>l[1])),max:s(e.map(l=>l[1]))},enabled:i,useSoftMargin:!!t.filterSoftRange,transformSize:i&&r,transformColor:i&&n,...o&&{categoryBitMask:o}}}function Vi(t){if(!t||!("extensions"in t))return{};let e=tt(t),i=e.min.map(Math.fround);e.min=e.min.map((n,o)=>n-i[o]),e.softMin=e.softMin.map((n,o)=>n-i[o]),e.min64High=i;let r=e.max.map(Math.fround);return e.max=e.max.map((n,o)=>n-r[o]),e.softMax=e.softMax.map((n,o)=>n-r[o]),e.max64High=r,e}var it={"vs:#main-start":`
|
|
251
251
|
dataFilter_value = 1.0;
|
|
252
252
|
if (dataFilter.enabled) {
|
|
253
253
|
#ifdef DATAFILTER_TYPE
|
|
@@ -278,7 +278,7 @@ ${zi}
|
|
|
278
278
|
if (dataFilter.transformColor) {
|
|
279
279
|
color.a *= dataFilter_value;
|
|
280
280
|
}
|
|
281
|
-
`};function rt(t){return{useSoftMargin:"i32",enabled:"i32",transformSize:"i32",transformColor:"i32",min:"vec4<f32>",softMin:"vec4<f32>",softMax:"vec4<f32>",max:"vec4<f32>",min64High:"vec4<f32>",max64High:"vec4<f32>",categoryBitMask:"vec4<u32>"}}var nt={name:"dataFilter",vs:Je,fs:et,inject:it,getUniforms:tt,uniformTypesFromOptions:rt},ot={name:"dataFilter",vs:Je,fs:et,inject:it,getUniforms:
|
|
281
|
+
`};function rt(t){return{useSoftMargin:"i32",enabled:"i32",transformSize:"i32",transformColor:"i32",min:"vec4<f32>",softMin:"vec4<f32>",softMax:"vec4<f32>",max:"vec4<f32>",min64High:"vec4<f32>",max64High:"vec4<f32>",categoryBitMask:"vec4<u32>"}}var nt={name:"dataFilter",vs:Je,fs:et,inject:it,getUniforms:tt,uniformTypesFromOptions:rt},ot={name:"dataFilter",vs:Je,fs:et,inject:it,getUniforms:Vi,uniformTypesFromOptions:rt};var lt=_(st(),1),ji=`#version 300 es
|
|
282
282
|
#define SHADER_NAME data-filter-vertex-shader
|
|
283
283
|
|
|
284
284
|
#ifdef FLOAT_TARGET
|
|
@@ -309,7 +309,7 @@ void main() {
|
|
|
309
309
|
#endif
|
|
310
310
|
gl_PointSize = 1.0;
|
|
311
311
|
}
|
|
312
|
-
`,
|
|
312
|
+
`,Hi=`#version 300 es
|
|
313
313
|
#define SHADER_NAME data-filter-fragment-shader
|
|
314
314
|
precision highp float;
|
|
315
315
|
|
|
@@ -323,7 +323,7 @@ void main() {
|
|
|
323
323
|
}
|
|
324
324
|
fragColor = vColor;
|
|
325
325
|
}
|
|
326
|
-
`,Hi=["float32-renderable-webgl","texture-blend-float-webgl"];function ft(t){return Hi.every(e=>t.features.has(e))}function ct(t,e){return e?t.createFramebuffer({width:1,height:1,colorAttachments:[t.createTexture({format:"rgba32float",dimension:"2d",width:1,height:1})]}):t.createFramebuffer({width:256,height:64,colorAttachments:[t.createTexture({format:"rgba8unorm",dimension:"2d",width:256,height:64})]})}function ut(t,e,i,r){return i.defines.NON_INSTANCED_MODEL=1,r&&(i.defines.FLOAT_TARGET=1),new lt.Model(t,{id:"data-filter-aggregation-model",vertexCount:1,isInstanced:!1,topology:"point-list",disableWarnings:!0,vs:Vi,fs:ji,bufferLayout:e,...i})}var dt={blend:!0,blendColorSrcFactor:"one",blendColorDstFactor:"one",blendAlphaSrcFactor:"one",blendAlphaDstFactor:"one",blendColorOperation:"add",blendAlphaOperation:"add",depthCompare:"never"};var qi={getFilterValue:{type:"accessor",value:0},getFilterCategory:{type:"accessor",value:0},onFilteredItemsChange:{type:"function",value:null,optional:!0},filterEnabled:!0,filterRange:[-1,1],filterSoftRange:null,filterCategories:[0],filterTransformSize:!0,filterTransformColor:!0},Wi={categorySize:0,filterSize:1,fp64:!1,countItems:!1},Yi={1:"uint",2:"uvec2",3:"uvec3",4:"uvec4"},Ki={1:"float",2:"vec2",3:"vec3",4:"vec4"},W=class extends D.LayerExtension{constructor(e={}){super({...Wi,...e})}getShaders(e){let{categorySize:i,filterSize:r,fp64:n}=e.opts,o={};i&&(o.DATACATEGORY_TYPE=Yi[i],o.DATACATEGORY_CHANNELS=i),r&&(o.DATAFILTER_TYPE=Ki[r],o.DATAFILTER_DOUBLE=!!n);let a=n?ot:nt;return a.uniformTypes=a.uniformTypesFromOptions(e.opts),{modules:[a],defines:o}}initializeState(e,i){let r=this.getAttributeManager(),{categorySize:n,filterSize:o,fp64:a}=i.opts;r&&(o&&r.add({filterValues:{size:o,type:a?"float64":"float32",stepMode:"dynamic",accessor:"getFilterValue"}}),n&&r.add({filterCategoryValues:{size:n,stepMode:"dynamic",accessor:"getFilterCategory",type:"uint32",transform:n===1?l=>i._getCategoryKey.call(this,l,0):l=>l.map((f,c)=>i._getCategoryKey.call(this,f,c))}}));let{device:s}=this.context;if(r&&i.opts.countItems){let l=ft(s);r.add({filterVertexIndices:{size:l?1:2,vertexOffset:1,type:"unorm8",accessor:(u,{index:d})=>{let p=u&&u.__source?u.__source.index:d;return l?(p+1)%255:[(p+1)%255,Math.floor(p/255)%255]},shaderAttributes:{filterPrevIndices:{vertexOffset:0},filterIndices:{vertexOffset:1}}}});let f=ct(s,l),c=ut(s,r.getBufferLayouts({isInstanced:!1}),i.getShaders.call(this,i),l);this.setState({filterFBO:f,filterModel:c})}}updateState({props:e,oldProps:i,changeFlags:r},n){let o=this.getAttributeManager(),{categorySize:a}=n.opts;if(this.state.filterModel){let s=o.attributes.filterValues?.needsUpdate()||o.attributes.filterCategoryValues?.needsUpdate()||e.filterEnabled!==i.filterEnabled||e.filterRange!==i.filterRange||e.filterSoftRange!==i.filterSoftRange||e.filterCategories!==i.filterCategories;s&&this.setState({filterNeedsUpdate:s})}o?.attributes.filterCategoryValues&&((o.attributes.filterCategoryValues.needsUpdate()||!(0,D._deepEqual)(e.filterCategories,i.filterCategories,2))&&this.setState({categoryBitMask:null}),r.dataChanged&&(this.setState({categoryMap:Array(a).fill(0).map(()=>({}))}),o.attributes.filterCategoryValues.setNeedsUpdate("categoryMap")))}draw(e,i){let r=this.state.filterFBO,n=this.state.filterModel,o=this.state.filterNeedsUpdate;this.state.categoryBitMask||i._updateCategoryBitMask.call(this,e,i);let{onFilteredItemsChange:a,extensions:s,filterEnabled:l,filterRange:f,filterSoftRange:c,filterTransformSize:u,filterTransformColor:d,filterCategories:p}=this.props,m={extensions:s,filterEnabled:l,filterRange:f,filterSoftRange:c,filterTransformSize:u,filterTransformColor:d,filterCategories:p};if(this.state.categoryBitMask&&(m.categoryBitMask=this.state.categoryBitMask),this.setShaderModuleProps({dataFilter:m}),o&&a&&n){let F=this.getAttributeManager(),{attributes:{filterValues:v,filterCategoryValues:O,filterVertexIndices:R}}=F;n.setVertexCount(this.getNumInstances());let P={...v?.getValue(),...O?.getValue(),...R?.getValue()};n.setAttributes(P),n.shaderInputs.setProps({dataFilter:m});let k=[0,0,r.width,r.height],G=n.device.beginRenderPass({id:"data-filter-aggregation",framebuffer:r,parameters:{viewport:k},clearColor:[0,0,0,0]});n.setParameters(dt),n.draw(G),G.end();let x=n.device.readPixelsToArrayWebGL(r),A=0;for(let N=0;N<x.length;N++)A+=x[N];a({id:this.id,count:A}),this.state.filterNeedsUpdate=!1}}finalizeState(){let e=this.state.filterFBO,i=this.state.filterModel;e?.destroy(),i?.destroy()}_updateCategoryBitMask(e,i){let{categorySize:r}=i.opts;if(!r)return;let{filterCategories:n}=this.props,o=new Uint32Array([0,0,0,0]),a=r===1?[n]:n,s=r===1?128:r===2?64:32;for(let l=0;l<a.length;l++){let f=a[l];for(let c of f){let u=i._getCategoryKey.call(this,c,l);if(u<s){let d=l*(s/32)+Math.floor(u/32);o[d]+=Math.pow(2,u%32)}else D.log.warn(`Exceeded maximum number of categories (${s})`)()}}this.state.categoryBitMask=o}_getCategoryKey(e,i){let r=this.state.categoryMap[i];return e in r||(r[e]=Object.keys(r).length),r[e]}};W.defaultProps=qi;W.extensionName="DataFilterExtension";var pt=W;var kt=_(h(),1);var Po=1/Math.PI*180,Eo=1/180*Math.PI,Zi={EPSILON:1e-12,debug:!1,precision:4,printTypes:!1,printDegrees:!1,printRowMajor:!0,_cartographicRadians:!1};globalThis.mathgl=globalThis.mathgl||{config:{...Zi}};var Y=globalThis.mathgl.config;function Fe(t){return Array.isArray(t)||ArrayBuffer.isView(t)&&!(t instanceof DataView)}function z(t,e,i){let r=Y.EPSILON;i&&(Y.EPSILON=i);try{if(t===e)return!0;if(Fe(t)&&Fe(e)){if(t.length!==e.length)return!1;for(let n=0;n<t.length;++n)if(!z(t[n],e[n]))return!1;return!0}return t&&t.equals?t.equals(e):e&&e.equals?e.equals(t):typeof t=="number"&&typeof e=="number"?Math.abs(t-e)<=Y.EPSILON*Math.max(1,Math.abs(t),Math.abs(e)):!1}finally{Y.EPSILON=r}}var M=typeof Float32Array<"u"?Float32Array:Array,w=Math.random;function S(t){return t>=0?Math.round(t):t%.5===0?Math.floor(t):Math.round(t)}var Ao=Math.PI/180;var L={};Le(L,{add:()=>er,angle:()=>Er,bezier:()=>hr,ceil:()=>tr,clone:()=>$i,copy:()=>Qi,create:()=>ht,cross:()=>ur,dist:()=>Br,distance:()=>bt,div:()=>Or,divide:()=>xt,dot:()=>Oe,equals:()=>Sr,exactEquals:()=>Tr,floor:()=>ir,forEach:()=>Rr,fromValues:()=>Xi,hermite:()=>_r,inverse:()=>fr,len:()=>Ir,length:()=>mt,lerp:()=>dr,max:()=>nr,min:()=>rr,mul:()=>Fr,multiply:()=>vt,negate:()=>lr,normalize:()=>cr,random:()=>mr,rotateX:()=>br,rotateY:()=>yr,rotateZ:()=>Pr,round:()=>or,scale:()=>ar,scaleAndAdd:()=>sr,set:()=>Ji,slerp:()=>pr,sqrDist:()=>wr,sqrLen:()=>Cr,squaredDistance:()=>yt,squaredLength:()=>Pt,str:()=>Ar,sub:()=>Lr,subtract:()=>gt,transformMat3:()=>vr,transformMat4:()=>gr,transformQuat:()=>xr,zero:()=>Mr});function ht(){let t=new M(3);return M!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t}function $i(t){let e=new M(3);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function mt(t){let e=t[0],i=t[1],r=t[2];return Math.sqrt(e*e+i*i+r*r)}function Xi(t,e,i){let r=new M(3);return r[0]=t,r[1]=e,r[2]=i,r}function Qi(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function Ji(t,e,i,r){return t[0]=e,t[1]=i,t[2]=r,t}function er(t,e,i){return t[0]=e[0]+i[0],t[1]=e[1]+i[1],t[2]=e[2]+i[2],t}function gt(t,e,i){return t[0]=e[0]-i[0],t[1]=e[1]-i[1],t[2]=e[2]-i[2],t}function vt(t,e,i){return t[0]=e[0]*i[0],t[1]=e[1]*i[1],t[2]=e[2]*i[2],t}function xt(t,e,i){return t[0]=e[0]/i[0],t[1]=e[1]/i[1],t[2]=e[2]/i[2],t}function tr(t,e){return t[0]=Math.ceil(e[0]),t[1]=Math.ceil(e[1]),t[2]=Math.ceil(e[2]),t}function ir(t,e){return t[0]=Math.floor(e[0]),t[1]=Math.floor(e[1]),t[2]=Math.floor(e[2]),t}function rr(t,e,i){return t[0]=Math.min(e[0],i[0]),t[1]=Math.min(e[1],i[1]),t[2]=Math.min(e[2],i[2]),t}function nr(t,e,i){return t[0]=Math.max(e[0],i[0]),t[1]=Math.max(e[1],i[1]),t[2]=Math.max(e[2],i[2]),t}function or(t,e){return t[0]=S(e[0]),t[1]=S(e[1]),t[2]=S(e[2]),t}function ar(t,e,i){return t[0]=e[0]*i,t[1]=e[1]*i,t[2]=e[2]*i,t}function sr(t,e,i,r){return t[0]=e[0]+i[0]*r,t[1]=e[1]+i[1]*r,t[2]=e[2]+i[2]*r,t}function bt(t,e){let i=e[0]-t[0],r=e[1]-t[1],n=e[2]-t[2];return Math.sqrt(i*i+r*r+n*n)}function yt(t,e){let i=e[0]-t[0],r=e[1]-t[1],n=e[2]-t[2];return i*i+r*r+n*n}function Pt(t){let e=t[0],i=t[1],r=t[2];return e*e+i*i+r*r}function lr(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t}function fr(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t}function cr(t,e){let i=e[0],r=e[1],n=e[2],o=i*i+r*r+n*n;return o>0&&(o=1/Math.sqrt(o)),t[0]=e[0]*o,t[1]=e[1]*o,t[2]=e[2]*o,t}function Oe(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function ur(t,e,i){let r=e[0],n=e[1],o=e[2],a=i[0],s=i[1],l=i[2];return t[0]=n*l-o*s,t[1]=o*a-r*l,t[2]=r*s-n*a,t}function dr(t,e,i,r){let n=e[0],o=e[1],a=e[2];return t[0]=n+r*(i[0]-n),t[1]=o+r*(i[1]-o),t[2]=a+r*(i[2]-a),t}function pr(t,e,i,r){let n=Math.acos(Math.min(Math.max(Oe(e,i),-1),1)),o=Math.sin(n),a=Math.sin((1-r)*n)/o,s=Math.sin(r*n)/o;return t[0]=a*e[0]+s*i[0],t[1]=a*e[1]+s*i[1],t[2]=a*e[2]+s*i[2],t}function _r(t,e,i,r,n,o){let a=o*o,s=a*(2*o-3)+1,l=a*(o-2)+o,f=a*(o-1),c=a*(3-2*o);return t[0]=e[0]*s+i[0]*l+r[0]*f+n[0]*c,t[1]=e[1]*s+i[1]*l+r[1]*f+n[1]*c,t[2]=e[2]*s+i[2]*l+r[2]*f+n[2]*c,t}function hr(t,e,i,r,n,o){let a=1-o,s=a*a,l=o*o,f=s*a,c=3*o*s,u=3*l*a,d=l*o;return t[0]=e[0]*f+i[0]*c+r[0]*u+n[0]*d,t[1]=e[1]*f+i[1]*c+r[1]*u+n[1]*d,t[2]=e[2]*f+i[2]*c+r[2]*u+n[2]*d,t}function mr(t,e){e=e===void 0?1:e;let i=w()*2*Math.PI,r=w()*2-1,n=Math.sqrt(1-r*r)*e;return t[0]=Math.cos(i)*n,t[1]=Math.sin(i)*n,t[2]=r*e,t}function gr(t,e,i){let r=e[0],n=e[1],o=e[2],a=i[3]*r+i[7]*n+i[11]*o+i[15];return a=a||1,t[0]=(i[0]*r+i[4]*n+i[8]*o+i[12])/a,t[1]=(i[1]*r+i[5]*n+i[9]*o+i[13])/a,t[2]=(i[2]*r+i[6]*n+i[10]*o+i[14])/a,t}function vr(t,e,i){let r=e[0],n=e[1],o=e[2];return t[0]=r*i[0]+n*i[3]+o*i[6],t[1]=r*i[1]+n*i[4]+o*i[7],t[2]=r*i[2]+n*i[5]+o*i[8],t}function xr(t,e,i){let r=i[0],n=i[1],o=i[2],a=i[3],s=e[0],l=e[1],f=e[2],c=n*f-o*l,u=o*s-r*f,d=r*l-n*s,p=n*d-o*u,m=o*c-r*d,F=r*u-n*c,v=a*2;return c*=v,u*=v,d*=v,p*=2,m*=2,F*=2,t[0]=s+c+p,t[1]=l+u+m,t[2]=f+d+F,t}function br(t,e,i,r){let n=[],o=[];return n[0]=e[0]-i[0],n[1]=e[1]-i[1],n[2]=e[2]-i[2],o[0]=n[0],o[1]=n[1]*Math.cos(r)-n[2]*Math.sin(r),o[2]=n[1]*Math.sin(r)+n[2]*Math.cos(r),t[0]=o[0]+i[0],t[1]=o[1]+i[1],t[2]=o[2]+i[2],t}function yr(t,e,i,r){let n=[],o=[];return n[0]=e[0]-i[0],n[1]=e[1]-i[1],n[2]=e[2]-i[2],o[0]=n[2]*Math.sin(r)+n[0]*Math.cos(r),o[1]=n[1],o[2]=n[2]*Math.cos(r)-n[0]*Math.sin(r),t[0]=o[0]+i[0],t[1]=o[1]+i[1],t[2]=o[2]+i[2],t}function Pr(t,e,i,r){let n=[],o=[];return n[0]=e[0]-i[0],n[1]=e[1]-i[1],n[2]=e[2]-i[2],o[0]=n[0]*Math.cos(r)-n[1]*Math.sin(r),o[1]=n[0]*Math.sin(r)+n[1]*Math.cos(r),o[2]=n[2],t[0]=o[0]+i[0],t[1]=o[1]+i[1],t[2]=o[2]+i[2],t}function Er(t,e){let i=t[0],r=t[1],n=t[2],o=e[0],a=e[1],s=e[2],l=Math.sqrt((i*i+r*r+n*n)*(o*o+a*a+s*s)),f=l&&Oe(t,e)/l;return Math.acos(Math.min(Math.max(f,-1),1))}function Mr(t){return t[0]=0,t[1]=0,t[2]=0,t}function Ar(t){return`vec3(${t[0]}, ${t[1]}, ${t[2]})`}function Tr(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]}function Sr(t,e){let i=t[0],r=t[1],n=t[2],o=e[0],a=e[1],s=e[2];return Math.abs(i-o)<=1e-6*Math.max(1,Math.abs(i),Math.abs(o))&&Math.abs(r-a)<=1e-6*Math.max(1,Math.abs(r),Math.abs(a))&&Math.abs(n-s)<=1e-6*Math.max(1,Math.abs(n),Math.abs(s))}var Lr=gt,Fr=vt,Or=xt,Br=bt,wr=yt,Ir=mt,Cr=Pt,Rr=(function(){let t=ht();return function(e,i,r,n,o,a){let s,l;for(i||(i=3),r||(r=0),n?l=Math.min(n*i+r,e.length):l=e.length,s=r;s<l;s+=i)t[0]=e[s],t[1]=e[s+1],t[2]=e[s+2],o(t,t,a),e[s]=t[0],e[s+1]=t[1],e[s+2]=t[2];return e}})();var pe={};Le(pe,{add:()=>Ur,ceil:()=>Vr,clone:()=>kr,copy:()=>Dr,create:()=>Et,cross:()=>Qr,dist:()=>un,distance:()=>St,div:()=>cn,divide:()=>Tt,dot:()=>Xr,equals:()=>sn,exactEquals:()=>an,floor:()=>jr,forEach:()=>hn,fromValues:()=>Nr,inverse:()=>Zr,len:()=>pn,length:()=>Ft,lerp:()=>Jr,max:()=>Gr,min:()=>Hr,mul:()=>fn,multiply:()=>At,negate:()=>Kr,normalize:()=>$r,random:()=>en,round:()=>qr,scale:()=>Wr,scaleAndAdd:()=>Yr,set:()=>zr,sqrDist:()=>dn,sqrLen:()=>_n,squaredDistance:()=>Lt,squaredLength:()=>Ot,str:()=>on,sub:()=>ln,subtract:()=>Mt,transformMat4:()=>tn,transformQuat:()=>rn,zero:()=>nn});function Et(){let t=new M(4);return M!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0,t[3]=0),t}function kr(t){let e=new M(4);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e}function Nr(t,e,i,r){let n=new M(4);return n[0]=t,n[1]=e,n[2]=i,n[3]=r,n}function Dr(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}function zr(t,e,i,r,n){return t[0]=e,t[1]=i,t[2]=r,t[3]=n,t}function Ur(t,e,i){return t[0]=e[0]+i[0],t[1]=e[1]+i[1],t[2]=e[2]+i[2],t[3]=e[3]+i[3],t}function Mt(t,e,i){return t[0]=e[0]-i[0],t[1]=e[1]-i[1],t[2]=e[2]-i[2],t[3]=e[3]-i[3],t}function At(t,e,i){return t[0]=e[0]*i[0],t[1]=e[1]*i[1],t[2]=e[2]*i[2],t[3]=e[3]*i[3],t}function Tt(t,e,i){return t[0]=e[0]/i[0],t[1]=e[1]/i[1],t[2]=e[2]/i[2],t[3]=e[3]/i[3],t}function Vr(t,e){return t[0]=Math.ceil(e[0]),t[1]=Math.ceil(e[1]),t[2]=Math.ceil(e[2]),t[3]=Math.ceil(e[3]),t}function jr(t,e){return t[0]=Math.floor(e[0]),t[1]=Math.floor(e[1]),t[2]=Math.floor(e[2]),t[3]=Math.floor(e[3]),t}function Hr(t,e,i){return t[0]=Math.min(e[0],i[0]),t[1]=Math.min(e[1],i[1]),t[2]=Math.min(e[2],i[2]),t[3]=Math.min(e[3],i[3]),t}function Gr(t,e,i){return t[0]=Math.max(e[0],i[0]),t[1]=Math.max(e[1],i[1]),t[2]=Math.max(e[2],i[2]),t[3]=Math.max(e[3],i[3]),t}function qr(t,e){return t[0]=S(e[0]),t[1]=S(e[1]),t[2]=S(e[2]),t[3]=S(e[3]),t}function Wr(t,e,i){return t[0]=e[0]*i,t[1]=e[1]*i,t[2]=e[2]*i,t[3]=e[3]*i,t}function Yr(t,e,i,r){return t[0]=e[0]+i[0]*r,t[1]=e[1]+i[1]*r,t[2]=e[2]+i[2]*r,t[3]=e[3]+i[3]*r,t}function St(t,e){let i=e[0]-t[0],r=e[1]-t[1],n=e[2]-t[2],o=e[3]-t[3];return Math.sqrt(i*i+r*r+n*n+o*o)}function Lt(t,e){let i=e[0]-t[0],r=e[1]-t[1],n=e[2]-t[2],o=e[3]-t[3];return i*i+r*r+n*n+o*o}function Ft(t){let e=t[0],i=t[1],r=t[2],n=t[3];return Math.sqrt(e*e+i*i+r*r+n*n)}function Ot(t){let e=t[0],i=t[1],r=t[2],n=t[3];return e*e+i*i+r*r+n*n}function Kr(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=-e[3],t}function Zr(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t[3]=1/e[3],t}function $r(t,e){let i=e[0],r=e[1],n=e[2],o=e[3],a=i*i+r*r+n*n+o*o;return a>0&&(a=1/Math.sqrt(a)),t[0]=i*a,t[1]=r*a,t[2]=n*a,t[3]=o*a,t}function Xr(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]}function Qr(t,e,i,r){let n=i[0]*r[1]-i[1]*r[0],o=i[0]*r[2]-i[2]*r[0],a=i[0]*r[3]-i[3]*r[0],s=i[1]*r[2]-i[2]*r[1],l=i[1]*r[3]-i[3]*r[1],f=i[2]*r[3]-i[3]*r[2],c=e[0],u=e[1],d=e[2],p=e[3];return t[0]=u*f-d*l+p*s,t[1]=-(c*f)+d*a-p*o,t[2]=c*l-u*a+p*n,t[3]=-(c*s)+u*o-d*n,t}function Jr(t,e,i,r){let n=e[0],o=e[1],a=e[2],s=e[3];return t[0]=n+r*(i[0]-n),t[1]=o+r*(i[1]-o),t[2]=a+r*(i[2]-a),t[3]=s+r*(i[3]-s),t}function en(t,e){e=e===void 0?1:e;let i,r,n,o,a,s;do i=w()*2-1,r=w()*2-1,a=i*i+r*r;while(a>=1);do n=w()*2-1,o=w()*2-1,s=n*n+o*o;while(s>=1);let l=Math.sqrt((1-a)/s);return t[0]=e*i,t[1]=e*r,t[2]=e*n*l,t[3]=e*o*l,t}function tn(t,e,i){let r=e[0],n=e[1],o=e[2],a=e[3];return t[0]=i[0]*r+i[4]*n+i[8]*o+i[12]*a,t[1]=i[1]*r+i[5]*n+i[9]*o+i[13]*a,t[2]=i[2]*r+i[6]*n+i[10]*o+i[14]*a,t[3]=i[3]*r+i[7]*n+i[11]*o+i[15]*a,t}function rn(t,e,i){let r=e[0],n=e[1],o=e[2],a=i[0],s=i[1],l=i[2],f=i[3],c=f*r+s*o-l*n,u=f*n+l*r-a*o,d=f*o+a*n-s*r,p=-a*r-s*n-l*o;return t[0]=c*f+p*-a+u*-l-d*-s,t[1]=u*f+p*-s+d*-a-c*-l,t[2]=d*f+p*-l+c*-s-u*-a,t[3]=e[3],t}function nn(t){return t[0]=0,t[1]=0,t[2]=0,t[3]=0,t}function on(t){return`vec4(${t[0]}, ${t[1]}, ${t[2]}, ${t[3]})`}function an(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]&&t[3]===e[3]}function sn(t,e){let i=t[0],r=t[1],n=t[2],o=t[3],a=e[0],s=e[1],l=e[2],f=e[3];return Math.abs(i-a)<=1e-6*Math.max(1,Math.abs(i),Math.abs(a))&&Math.abs(r-s)<=1e-6*Math.max(1,Math.abs(r),Math.abs(s))&&Math.abs(n-l)<=1e-6*Math.max(1,Math.abs(n),Math.abs(l))&&Math.abs(o-f)<=1e-6*Math.max(1,Math.abs(o),Math.abs(f))}var ln=Mt,fn=At,cn=Tt,un=St,dn=Lt,pn=Ft,_n=Ot,hn=(function(){let t=Et();return function(e,i,r,n,o,a){let s,l;for(i||(i=4),r||(r=0),n?l=Math.min(n*i+r,e.length):l=e.length,s=r;s<l;s+=i)t[0]=e[s],t[1]=e[s+1],t[2]=e[s+2],t[3]=e[s+3],o(t,t,a),e[s]=t[0],e[s+1]=t[1],e[s+2]=t[2],e[s+3]=t[3];return e}})();function _e(t,e=[],i=0){let r=Math.fround(t),n=t-r;return e[i]=r,e[i+1]=n,e}function Be(t){return t-Math.fround(t)}function we(t){let e=new Float32Array(32);for(let i=0;i<4;++i)for(let r=0;r<4;++r){let n=i*4+r;_e(t[r*4+i],e,n*2)}return e}var Ie=`
|
|
326
|
+
`,Gi=["float32-renderable-webgl","texture-blend-float-webgl"];function ft(t){return Gi.every(e=>t.features.has(e))}function ct(t,e){return e?t.createFramebuffer({width:1,height:1,colorAttachments:[t.createTexture({format:"rgba32float",dimension:"2d",width:1,height:1})]}):t.createFramebuffer({width:256,height:64,colorAttachments:[t.createTexture({format:"rgba8unorm",dimension:"2d",width:256,height:64})]})}function ut(t,e,i,r){return i.defines.NON_INSTANCED_MODEL=1,r&&(i.defines.FLOAT_TARGET=1),new lt.Model(t,{id:"data-filter-aggregation-model",vertexCount:1,isInstanced:!1,topology:"point-list",disableWarnings:!0,vs:ji,fs:Hi,bufferLayout:e,...i})}var dt={blend:!0,blendColorSrcFactor:"one",blendColorDstFactor:"one",blendAlphaSrcFactor:"one",blendAlphaDstFactor:"one",blendColorOperation:"add",blendAlphaOperation:"add",depthCompare:"never"};var Wi={getFilterValue:{type:"accessor",value:0},getFilterCategory:{type:"accessor",value:0},onFilteredItemsChange:{type:"function",value:null,optional:!0},filterEnabled:!0,filterRange:[-1,1],filterSoftRange:null,filterCategories:[0],filterTransformSize:!0,filterTransformColor:!0},Yi={categorySize:0,filterSize:1,fp64:!1,countItems:!1},Ki={1:"uint",2:"uvec2",3:"uvec3",4:"uvec4"},Zi={1:"float",2:"vec2",3:"vec3",4:"vec4"},Y=class extends z.LayerExtension{constructor(e={}){super({...Yi,...e})}getShaders(e){let{categorySize:i,filterSize:r,fp64:n}=e.opts,o={};i&&(o.DATACATEGORY_TYPE=Ki[i],o.DATACATEGORY_CHANNELS=i),r&&(o.DATAFILTER_TYPE=Zi[r],o.DATAFILTER_DOUBLE=!!n);let a=n?ot:nt;return a.uniformTypes=a.uniformTypesFromOptions(e.opts),{modules:[a],defines:o}}initializeState(e,i){let r=this.getAttributeManager(),{categorySize:n,filterSize:o,fp64:a}=i.opts;r&&(o&&r.add({filterValues:{size:o,type:a?"float64":"float32",stepMode:"dynamic",accessor:"getFilterValue"}}),n&&r.add({filterCategoryValues:{size:n,stepMode:"dynamic",accessor:"getFilterCategory",type:"uint32",transform:n===1?l=>i._getCategoryKey.call(this,l,0):l=>l.map((f,c)=>i._getCategoryKey.call(this,f,c))}}));let{device:s}=this.context;if(r&&i.opts.countItems){let l=ft(s);r.add({filterVertexIndices:{size:l?1:2,vertexOffset:1,type:"unorm8",accessor:(u,{index:d})=>{let p=u&&u.__source?u.__source.index:d;return l?(p+1)%255:[(p+1)%255,Math.floor(p/255)%255]},shaderAttributes:{filterPrevIndices:{vertexOffset:0},filterIndices:{vertexOffset:1}}}});let f=ct(s,l),c=ut(s,r.getBufferLayouts({isInstanced:!1}),i.getShaders.call(this,i),l);this.setState({filterFBO:f,filterModel:c})}}updateState({props:e,oldProps:i,changeFlags:r},n){let o=this.getAttributeManager(),{categorySize:a}=n.opts;if(this.state.filterModel){let s=o.attributes.filterValues?.needsUpdate()||o.attributes.filterCategoryValues?.needsUpdate()||e.filterEnabled!==i.filterEnabled||e.filterRange!==i.filterRange||e.filterSoftRange!==i.filterSoftRange||e.filterCategories!==i.filterCategories;s&&this.setState({filterNeedsUpdate:s})}o?.attributes.filterCategoryValues&&((o.attributes.filterCategoryValues.needsUpdate()||!(0,z._deepEqual)(e.filterCategories,i.filterCategories,2))&&this.setState({categoryBitMask:null}),r.dataChanged&&(this.setState({categoryMap:Array(a).fill(0).map(()=>({}))}),o.attributes.filterCategoryValues.setNeedsUpdate("categoryMap")))}draw(e,i){let r=this.state.filterFBO,n=this.state.filterModel,o=this.state.filterNeedsUpdate;this.state.categoryBitMask||i._updateCategoryBitMask.call(this,e,i);let{onFilteredItemsChange:a,extensions:s,filterEnabled:l,filterRange:f,filterSoftRange:c,filterTransformSize:u,filterTransformColor:d,filterCategories:p}=this.props,m={extensions:s,filterEnabled:l,filterRange:f,filterSoftRange:c,filterTransformSize:u,filterTransformColor:d,filterCategories:p};if(this.state.categoryBitMask&&(m.categoryBitMask=this.state.categoryBitMask),this.setShaderModuleProps({dataFilter:m}),o&&a&&n){let F=this.getAttributeManager(),{attributes:{filterValues:v,filterCategoryValues:O,filterVertexIndices:k}}=F;n.setVertexCount(this.getNumInstances());let P={...v?.getValue(),...O?.getValue(),...k?.getValue()};n.setAttributes(P),n.shaderInputs.setProps({dataFilter:m});let N=[0,0,r.width,r.height],q=n.device.beginRenderPass({id:"data-filter-aggregation",framebuffer:r,parameters:{viewport:N},clearColor:[0,0,0,0]});n.setParameters(dt),n.draw(q),q.end();let x=n.device.readPixelsToArrayWebGL(r),A=0;for(let D=0;D<x.length;D++)A+=x[D];a({id:this.id,count:A}),this.state.filterNeedsUpdate=!1}}finalizeState(){let e=this.state.filterFBO,i=this.state.filterModel;e?.destroy(),i?.destroy()}_updateCategoryBitMask(e,i){let{categorySize:r}=i.opts;if(!r)return;let{filterCategories:n}=this.props,o=new Uint32Array([0,0,0,0]),a=r===1?[n]:n,s=r===1?128:r===2?64:32;for(let l=0;l<a.length;l++){let f=a[l];for(let c of f){let u=i._getCategoryKey.call(this,c,l);if(u<s){let d=l*(s/32)+Math.floor(u/32);o[d]+=Math.pow(2,u%32)}else z.log.warn(`Exceeded maximum number of categories (${s})`)()}}this.state.categoryBitMask=o}_getCategoryKey(e,i){let r=this.state.categoryMap[i];return e in r||(r[e]=Object.keys(r).length),r[e]}};Y.defaultProps=Wi;Y.extensionName="DataFilterExtension";var pt=Y;var kt=_(h(),1);var Mo=1/Math.PI*180,Ao=1/180*Math.PI,$i={EPSILON:1e-12,debug:!1,precision:4,printTypes:!1,printDegrees:!1,printRowMajor:!0,_cartographicRadians:!1};globalThis.mathgl=globalThis.mathgl||{config:{...$i}};var K=globalThis.mathgl.config;function Fe(t){return Array.isArray(t)||ArrayBuffer.isView(t)&&!(t instanceof DataView)}function U(t,e,i){let r=K.EPSILON;i&&(K.EPSILON=i);try{if(t===e)return!0;if(Fe(t)&&Fe(e)){if(t.length!==e.length)return!1;for(let n=0;n<t.length;++n)if(!U(t[n],e[n]))return!1;return!0}return t&&t.equals?t.equals(e):e&&e.equals?e.equals(t):typeof t=="number"&&typeof e=="number"?Math.abs(t-e)<=K.EPSILON*Math.max(1,Math.abs(t),Math.abs(e)):!1}finally{K.EPSILON=r}}var M=typeof Float32Array<"u"?Float32Array:Array,w=Math.random;function S(t){return t>=0?Math.round(t):t%.5===0?Math.floor(t):Math.round(t)}var So=Math.PI/180;var L={};Le(L,{add:()=>tr,angle:()=>Mr,bezier:()=>mr,ceil:()=>ir,clone:()=>Xi,copy:()=>Ji,create:()=>ht,cross:()=>dr,dist:()=>wr,distance:()=>bt,div:()=>Br,divide:()=>xt,dot:()=>Oe,equals:()=>Lr,exactEquals:()=>Sr,floor:()=>rr,forEach:()=>kr,fromValues:()=>Qi,hermite:()=>hr,inverse:()=>cr,len:()=>Ir,length:()=>mt,lerp:()=>pr,max:()=>or,min:()=>nr,mul:()=>Or,multiply:()=>vt,negate:()=>fr,normalize:()=>ur,random:()=>gr,rotateX:()=>yr,rotateY:()=>Pr,rotateZ:()=>Er,round:()=>ar,scale:()=>sr,scaleAndAdd:()=>lr,set:()=>er,slerp:()=>_r,sqrDist:()=>Cr,sqrLen:()=>Rr,squaredDistance:()=>yt,squaredLength:()=>Pt,str:()=>Tr,sub:()=>Fr,subtract:()=>gt,transformMat3:()=>xr,transformMat4:()=>vr,transformQuat:()=>br,zero:()=>Ar});function ht(){let t=new M(3);return M!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t}function Xi(t){let e=new M(3);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function mt(t){let e=t[0],i=t[1],r=t[2];return Math.sqrt(e*e+i*i+r*r)}function Qi(t,e,i){let r=new M(3);return r[0]=t,r[1]=e,r[2]=i,r}function Ji(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function er(t,e,i,r){return t[0]=e,t[1]=i,t[2]=r,t}function tr(t,e,i){return t[0]=e[0]+i[0],t[1]=e[1]+i[1],t[2]=e[2]+i[2],t}function gt(t,e,i){return t[0]=e[0]-i[0],t[1]=e[1]-i[1],t[2]=e[2]-i[2],t}function vt(t,e,i){return t[0]=e[0]*i[0],t[1]=e[1]*i[1],t[2]=e[2]*i[2],t}function xt(t,e,i){return t[0]=e[0]/i[0],t[1]=e[1]/i[1],t[2]=e[2]/i[2],t}function ir(t,e){return t[0]=Math.ceil(e[0]),t[1]=Math.ceil(e[1]),t[2]=Math.ceil(e[2]),t}function rr(t,e){return t[0]=Math.floor(e[0]),t[1]=Math.floor(e[1]),t[2]=Math.floor(e[2]),t}function nr(t,e,i){return t[0]=Math.min(e[0],i[0]),t[1]=Math.min(e[1],i[1]),t[2]=Math.min(e[2],i[2]),t}function or(t,e,i){return t[0]=Math.max(e[0],i[0]),t[1]=Math.max(e[1],i[1]),t[2]=Math.max(e[2],i[2]),t}function ar(t,e){return t[0]=S(e[0]),t[1]=S(e[1]),t[2]=S(e[2]),t}function sr(t,e,i){return t[0]=e[0]*i,t[1]=e[1]*i,t[2]=e[2]*i,t}function lr(t,e,i,r){return t[0]=e[0]+i[0]*r,t[1]=e[1]+i[1]*r,t[2]=e[2]+i[2]*r,t}function bt(t,e){let i=e[0]-t[0],r=e[1]-t[1],n=e[2]-t[2];return Math.sqrt(i*i+r*r+n*n)}function yt(t,e){let i=e[0]-t[0],r=e[1]-t[1],n=e[2]-t[2];return i*i+r*r+n*n}function Pt(t){let e=t[0],i=t[1],r=t[2];return e*e+i*i+r*r}function fr(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t}function cr(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t}function ur(t,e){let i=e[0],r=e[1],n=e[2],o=i*i+r*r+n*n;return o>0&&(o=1/Math.sqrt(o)),t[0]=e[0]*o,t[1]=e[1]*o,t[2]=e[2]*o,t}function Oe(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function dr(t,e,i){let r=e[0],n=e[1],o=e[2],a=i[0],s=i[1],l=i[2];return t[0]=n*l-o*s,t[1]=o*a-r*l,t[2]=r*s-n*a,t}function pr(t,e,i,r){let n=e[0],o=e[1],a=e[2];return t[0]=n+r*(i[0]-n),t[1]=o+r*(i[1]-o),t[2]=a+r*(i[2]-a),t}function _r(t,e,i,r){let n=Math.acos(Math.min(Math.max(Oe(e,i),-1),1)),o=Math.sin(n),a=Math.sin((1-r)*n)/o,s=Math.sin(r*n)/o;return t[0]=a*e[0]+s*i[0],t[1]=a*e[1]+s*i[1],t[2]=a*e[2]+s*i[2],t}function hr(t,e,i,r,n,o){let a=o*o,s=a*(2*o-3)+1,l=a*(o-2)+o,f=a*(o-1),c=a*(3-2*o);return t[0]=e[0]*s+i[0]*l+r[0]*f+n[0]*c,t[1]=e[1]*s+i[1]*l+r[1]*f+n[1]*c,t[2]=e[2]*s+i[2]*l+r[2]*f+n[2]*c,t}function mr(t,e,i,r,n,o){let a=1-o,s=a*a,l=o*o,f=s*a,c=3*o*s,u=3*l*a,d=l*o;return t[0]=e[0]*f+i[0]*c+r[0]*u+n[0]*d,t[1]=e[1]*f+i[1]*c+r[1]*u+n[1]*d,t[2]=e[2]*f+i[2]*c+r[2]*u+n[2]*d,t}function gr(t,e){e=e===void 0?1:e;let i=w()*2*Math.PI,r=w()*2-1,n=Math.sqrt(1-r*r)*e;return t[0]=Math.cos(i)*n,t[1]=Math.sin(i)*n,t[2]=r*e,t}function vr(t,e,i){let r=e[0],n=e[1],o=e[2],a=i[3]*r+i[7]*n+i[11]*o+i[15];return a=a||1,t[0]=(i[0]*r+i[4]*n+i[8]*o+i[12])/a,t[1]=(i[1]*r+i[5]*n+i[9]*o+i[13])/a,t[2]=(i[2]*r+i[6]*n+i[10]*o+i[14])/a,t}function xr(t,e,i){let r=e[0],n=e[1],o=e[2];return t[0]=r*i[0]+n*i[3]+o*i[6],t[1]=r*i[1]+n*i[4]+o*i[7],t[2]=r*i[2]+n*i[5]+o*i[8],t}function br(t,e,i){let r=i[0],n=i[1],o=i[2],a=i[3],s=e[0],l=e[1],f=e[2],c=n*f-o*l,u=o*s-r*f,d=r*l-n*s,p=n*d-o*u,m=o*c-r*d,F=r*u-n*c,v=a*2;return c*=v,u*=v,d*=v,p*=2,m*=2,F*=2,t[0]=s+c+p,t[1]=l+u+m,t[2]=f+d+F,t}function yr(t,e,i,r){let n=[],o=[];return n[0]=e[0]-i[0],n[1]=e[1]-i[1],n[2]=e[2]-i[2],o[0]=n[0],o[1]=n[1]*Math.cos(r)-n[2]*Math.sin(r),o[2]=n[1]*Math.sin(r)+n[2]*Math.cos(r),t[0]=o[0]+i[0],t[1]=o[1]+i[1],t[2]=o[2]+i[2],t}function Pr(t,e,i,r){let n=[],o=[];return n[0]=e[0]-i[0],n[1]=e[1]-i[1],n[2]=e[2]-i[2],o[0]=n[2]*Math.sin(r)+n[0]*Math.cos(r),o[1]=n[1],o[2]=n[2]*Math.cos(r)-n[0]*Math.sin(r),t[0]=o[0]+i[0],t[1]=o[1]+i[1],t[2]=o[2]+i[2],t}function Er(t,e,i,r){let n=[],o=[];return n[0]=e[0]-i[0],n[1]=e[1]-i[1],n[2]=e[2]-i[2],o[0]=n[0]*Math.cos(r)-n[1]*Math.sin(r),o[1]=n[0]*Math.sin(r)+n[1]*Math.cos(r),o[2]=n[2],t[0]=o[0]+i[0],t[1]=o[1]+i[1],t[2]=o[2]+i[2],t}function Mr(t,e){let i=t[0],r=t[1],n=t[2],o=e[0],a=e[1],s=e[2],l=Math.sqrt((i*i+r*r+n*n)*(o*o+a*a+s*s)),f=l&&Oe(t,e)/l;return Math.acos(Math.min(Math.max(f,-1),1))}function Ar(t){return t[0]=0,t[1]=0,t[2]=0,t}function Tr(t){return`vec3(${t[0]}, ${t[1]}, ${t[2]})`}function Sr(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]}function Lr(t,e){let i=t[0],r=t[1],n=t[2],o=e[0],a=e[1],s=e[2];return Math.abs(i-o)<=1e-6*Math.max(1,Math.abs(i),Math.abs(o))&&Math.abs(r-a)<=1e-6*Math.max(1,Math.abs(r),Math.abs(a))&&Math.abs(n-s)<=1e-6*Math.max(1,Math.abs(n),Math.abs(s))}var Fr=gt,Or=vt,Br=xt,wr=bt,Cr=yt,Ir=mt,Rr=Pt,kr=(function(){let t=ht();return function(e,i,r,n,o,a){let s,l;for(i||(i=3),r||(r=0),n?l=Math.min(n*i+r,e.length):l=e.length,s=r;s<l;s+=i)t[0]=e[s],t[1]=e[s+1],t[2]=e[s+2],o(t,t,a),e[s]=t[0],e[s+1]=t[1],e[s+2]=t[2];return e}})();var pe={};Le(pe,{add:()=>Vr,ceil:()=>jr,clone:()=>Nr,copy:()=>zr,create:()=>Et,cross:()=>Jr,dist:()=>dn,distance:()=>St,div:()=>un,divide:()=>Tt,dot:()=>Qr,equals:()=>ln,exactEquals:()=>sn,floor:()=>Hr,forEach:()=>mn,fromValues:()=>Dr,inverse:()=>$r,len:()=>_n,length:()=>Ft,lerp:()=>en,max:()=>qr,min:()=>Gr,mul:()=>cn,multiply:()=>At,negate:()=>Zr,normalize:()=>Xr,random:()=>tn,round:()=>Wr,scale:()=>Yr,scaleAndAdd:()=>Kr,set:()=>Ur,sqrDist:()=>pn,sqrLen:()=>hn,squaredDistance:()=>Lt,squaredLength:()=>Ot,str:()=>an,sub:()=>fn,subtract:()=>Mt,transformMat4:()=>rn,transformQuat:()=>nn,zero:()=>on});function Et(){let t=new M(4);return M!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0,t[3]=0),t}function Nr(t){let e=new M(4);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e}function Dr(t,e,i,r){let n=new M(4);return n[0]=t,n[1]=e,n[2]=i,n[3]=r,n}function zr(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}function Ur(t,e,i,r,n){return t[0]=e,t[1]=i,t[2]=r,t[3]=n,t}function Vr(t,e,i){return t[0]=e[0]+i[0],t[1]=e[1]+i[1],t[2]=e[2]+i[2],t[3]=e[3]+i[3],t}function Mt(t,e,i){return t[0]=e[0]-i[0],t[1]=e[1]-i[1],t[2]=e[2]-i[2],t[3]=e[3]-i[3],t}function At(t,e,i){return t[0]=e[0]*i[0],t[1]=e[1]*i[1],t[2]=e[2]*i[2],t[3]=e[3]*i[3],t}function Tt(t,e,i){return t[0]=e[0]/i[0],t[1]=e[1]/i[1],t[2]=e[2]/i[2],t[3]=e[3]/i[3],t}function jr(t,e){return t[0]=Math.ceil(e[0]),t[1]=Math.ceil(e[1]),t[2]=Math.ceil(e[2]),t[3]=Math.ceil(e[3]),t}function Hr(t,e){return t[0]=Math.floor(e[0]),t[1]=Math.floor(e[1]),t[2]=Math.floor(e[2]),t[3]=Math.floor(e[3]),t}function Gr(t,e,i){return t[0]=Math.min(e[0],i[0]),t[1]=Math.min(e[1],i[1]),t[2]=Math.min(e[2],i[2]),t[3]=Math.min(e[3],i[3]),t}function qr(t,e,i){return t[0]=Math.max(e[0],i[0]),t[1]=Math.max(e[1],i[1]),t[2]=Math.max(e[2],i[2]),t[3]=Math.max(e[3],i[3]),t}function Wr(t,e){return t[0]=S(e[0]),t[1]=S(e[1]),t[2]=S(e[2]),t[3]=S(e[3]),t}function Yr(t,e,i){return t[0]=e[0]*i,t[1]=e[1]*i,t[2]=e[2]*i,t[3]=e[3]*i,t}function Kr(t,e,i,r){return t[0]=e[0]+i[0]*r,t[1]=e[1]+i[1]*r,t[2]=e[2]+i[2]*r,t[3]=e[3]+i[3]*r,t}function St(t,e){let i=e[0]-t[0],r=e[1]-t[1],n=e[2]-t[2],o=e[3]-t[3];return Math.sqrt(i*i+r*r+n*n+o*o)}function Lt(t,e){let i=e[0]-t[0],r=e[1]-t[1],n=e[2]-t[2],o=e[3]-t[3];return i*i+r*r+n*n+o*o}function Ft(t){let e=t[0],i=t[1],r=t[2],n=t[3];return Math.sqrt(e*e+i*i+r*r+n*n)}function Ot(t){let e=t[0],i=t[1],r=t[2],n=t[3];return e*e+i*i+r*r+n*n}function Zr(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=-e[3],t}function $r(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t[3]=1/e[3],t}function Xr(t,e){let i=e[0],r=e[1],n=e[2],o=e[3],a=i*i+r*r+n*n+o*o;return a>0&&(a=1/Math.sqrt(a)),t[0]=i*a,t[1]=r*a,t[2]=n*a,t[3]=o*a,t}function Qr(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]}function Jr(t,e,i,r){let n=i[0]*r[1]-i[1]*r[0],o=i[0]*r[2]-i[2]*r[0],a=i[0]*r[3]-i[3]*r[0],s=i[1]*r[2]-i[2]*r[1],l=i[1]*r[3]-i[3]*r[1],f=i[2]*r[3]-i[3]*r[2],c=e[0],u=e[1],d=e[2],p=e[3];return t[0]=u*f-d*l+p*s,t[1]=-(c*f)+d*a-p*o,t[2]=c*l-u*a+p*n,t[3]=-(c*s)+u*o-d*n,t}function en(t,e,i,r){let n=e[0],o=e[1],a=e[2],s=e[3];return t[0]=n+r*(i[0]-n),t[1]=o+r*(i[1]-o),t[2]=a+r*(i[2]-a),t[3]=s+r*(i[3]-s),t}function tn(t,e){e=e===void 0?1:e;let i,r,n,o,a,s;do i=w()*2-1,r=w()*2-1,a=i*i+r*r;while(a>=1);do n=w()*2-1,o=w()*2-1,s=n*n+o*o;while(s>=1);let l=Math.sqrt((1-a)/s);return t[0]=e*i,t[1]=e*r,t[2]=e*n*l,t[3]=e*o*l,t}function rn(t,e,i){let r=e[0],n=e[1],o=e[2],a=e[3];return t[0]=i[0]*r+i[4]*n+i[8]*o+i[12]*a,t[1]=i[1]*r+i[5]*n+i[9]*o+i[13]*a,t[2]=i[2]*r+i[6]*n+i[10]*o+i[14]*a,t[3]=i[3]*r+i[7]*n+i[11]*o+i[15]*a,t}function nn(t,e,i){let r=e[0],n=e[1],o=e[2],a=i[0],s=i[1],l=i[2],f=i[3],c=f*r+s*o-l*n,u=f*n+l*r-a*o,d=f*o+a*n-s*r,p=-a*r-s*n-l*o;return t[0]=c*f+p*-a+u*-l-d*-s,t[1]=u*f+p*-s+d*-a-c*-l,t[2]=d*f+p*-l+c*-s-u*-a,t[3]=e[3],t}function on(t){return t[0]=0,t[1]=0,t[2]=0,t[3]=0,t}function an(t){return`vec4(${t[0]}, ${t[1]}, ${t[2]}, ${t[3]})`}function sn(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]&&t[3]===e[3]}function ln(t,e){let i=t[0],r=t[1],n=t[2],o=t[3],a=e[0],s=e[1],l=e[2],f=e[3];return Math.abs(i-a)<=1e-6*Math.max(1,Math.abs(i),Math.abs(a))&&Math.abs(r-s)<=1e-6*Math.max(1,Math.abs(r),Math.abs(s))&&Math.abs(n-l)<=1e-6*Math.max(1,Math.abs(n),Math.abs(l))&&Math.abs(o-f)<=1e-6*Math.max(1,Math.abs(o),Math.abs(f))}var fn=Mt,cn=At,un=Tt,dn=St,pn=Lt,_n=Ft,hn=Ot,mn=(function(){let t=Et();return function(e,i,r,n,o,a){let s,l;for(i||(i=4),r||(r=0),n?l=Math.min(n*i+r,e.length):l=e.length,s=r;s<l;s+=i)t[0]=e[s],t[1]=e[s+1],t[2]=e[s+2],t[3]=e[s+3],o(t,t,a),e[s]=t[0],e[s+1]=t[1],e[s+2]=t[2],e[s+3]=t[3];return e}})();function _e(t,e=[],i=0){let r=Math.fround(t),n=t-r;return e[i]=r,e[i+1]=n,e}function Be(t){return t-Math.fround(t)}function we(t){let e=new Float32Array(32);for(let i=0;i<4;++i)for(let r=0;r<4;++r){let n=i*4+r;_e(t[r*4+i],e,n*2)}return e}var Ce=`
|
|
327
327
|
layout(std140) uniform fp64arithmeticUniforms {
|
|
328
328
|
uniform float ONE;
|
|
329
329
|
uniform float SPLIT;
|
|
@@ -1871,7 +1871,7 @@ fn compare_fp64(a: vec2f, b: vec2f) -> i32 {
|
|
|
1871
1871
|
return fp64_compare_f32_bits(aLowBits, bLowBits);
|
|
1872
1872
|
}
|
|
1873
1873
|
#endif
|
|
1874
|
-
`;var
|
|
1874
|
+
`;var Ct=`const vec2 E_FP64 = vec2(2.7182817459106445e+00, 8.254840366817007e-08);
|
|
1875
1875
|
const vec2 LOG2_FP64 = vec2(0.6931471824645996e+00, -1.9046542121259336e-09);
|
|
1876
1876
|
const vec2 PI_FP64 = vec2(3.1415927410125732, -8.742278012618954e-8);
|
|
1877
1877
|
const vec2 TWO_PI_FP64 = vec2(6.2831854820251465, -1.7484556025237907e-7);
|
|
@@ -2540,7 +2540,7 @@ void mat4_vec4_mul_fp64(vec2 b[16], vec2 a[4], out vec2 out_val[4]) {
|
|
|
2540
2540
|
vec4_dot_fp64(a, tmp, out_val[i]);
|
|
2541
2541
|
}
|
|
2542
2542
|
}
|
|
2543
|
-
`;var
|
|
2543
|
+
`;var gn={ONE:1,SPLIT:4097},It={name:"fp64arithmetic",source:wt,fs:Ce,vs:Ce,defaultUniforms:gn,uniformTypes:{ONE:"f32",SPLIT:"f32"},fp64ify:_e,fp64LowPart:Be,fp64ifyMatrix4:we},he={name:"fp64",vs:Ct,dependencies:[It],fp64ify:_e,fp64LowPart:Be,fp64ifyMatrix4:we};var me=_(h(),1);var Rt=`const vec2 WORLD_SCALE_FP64 = vec2(81.4873275756836, 0.0000032873668232014097);
|
|
2544
2544
|
layout(std140) uniform project64Uniforms {
|
|
2545
2545
|
vec2 scale;
|
|
2546
2546
|
mat4 viewProjectionMatrix;
|
|
@@ -2613,24 +2613,28 @@ return project_position_to_clipspace(
|
|
|
2613
2613
|
position, position64xyLow, offset, commonPosition
|
|
2614
2614
|
);
|
|
2615
2615
|
}
|
|
2616
|
-
`;var{fp64ify:
|
|
2617
|
-
|
|
2618
|
-
|
|
2619
|
-
|
|
2616
|
+
`;var{fp64ify:vn,fp64ifyMatrix4:xn}=he,ge={name:"project64",dependencies:[me.project,he],vs:Rt,getUniforms:yn,uniformTypes:{scale:"vec2<f32>",viewProjectionMatrix:"mat4x4<f32>",viewProjectionMatrix64Low:"mat4x4<f32>"}},bn=(0,me._memoize)(Pn);function yn(t){if(t&&"viewport"in t){let{viewProjectionMatrix:e,scale:i}=t.viewport;return bn({viewProjectionMatrix:e,scale:i})}return{}}function Pn({viewProjectionMatrix:t,scale:e}){let i=xn(t),r=new Float32Array(16),n=new Float32Array(16);for(let o=0;o<4;o++)for(let a=0;a<4;a++){let s=4*o+a,l=4*a+o;r[l]=i[2*s],n[l]=i[2*s+1]}return{scale:vn(e),viewProjectionMatrix:[...r],viewProjectionMatrix64Low:[...n]}}var ve=class extends kt.LayerExtension{getShaders(){let{coordinateSystem:e}=this.props;if(e!=="lnglat"&&e!=="default")throw new Error("fp64: coordinateSystem must be LNGLAT");return{modules:[ge]}}draw(e,i){let{viewport:r}=e.context;this.setShaderModuleProps({project64:{viewport:r}})}};ve.extensionName="Fp64Extension";var Nt=ve;var b=_(h(),1);var Dt={inject:{"vs:#main-end":`
|
|
2617
|
+
#ifdef PATH_STYLE_OFFSET
|
|
2618
|
+
float offsetWidth = abs(instanceOffsets * 2.0) + 1.0;
|
|
2619
|
+
float offsetDir = sign(instanceOffsets);
|
|
2620
|
+
vPathPosition.x = (vPathPosition.x + offsetDir) * offsetWidth - offsetDir;
|
|
2621
|
+
vPathPosition.y *= offsetWidth;
|
|
2622
|
+
vPathLength *= offsetWidth;
|
|
2623
|
+
#ifdef DASH_ENABLED
|
|
2624
|
+
vPathBounds *= offsetWidth;
|
|
2625
|
+
#endif
|
|
2626
|
+
#endif
|
|
2627
|
+
#ifdef DASH_ENABLED
|
|
2628
|
+
float strokeHalfWidth = width.x;
|
|
2629
|
+
#ifdef PATH_STYLE_OFFSET
|
|
2630
|
+
strokeHalfWidth /= offsetWidth;
|
|
2620
2631
|
#endif
|
|
2621
|
-
out vec2 vDashArray;
|
|
2622
|
-
out float vDashOffset;
|
|
2623
|
-
out float vDashPathLength;
|
|
2624
|
-
layout(std140) uniform pathStyleUniforms {
|
|
2625
|
-
float dashAlignMode;
|
|
2626
|
-
bool dashGapPickable;
|
|
2627
|
-
highp int dashUnits;
|
|
2628
|
-
} pathStyle;
|
|
2629
|
-
`,"vs:#main-end":`
|
|
2630
2632
|
float dashWidthPixels = path.billboard
|
|
2631
|
-
?
|
|
2632
|
-
:
|
|
2633
|
-
float strokeHalfWidthPixels = path.billboard
|
|
2633
|
+
? strokeHalfWidth * project.focalDistance
|
|
2634
|
+
: strokeHalfWidth * project.scale;
|
|
2635
|
+
float strokeHalfWidthPixels = path.billboard
|
|
2636
|
+
? strokeHalfWidth
|
|
2637
|
+
: strokeHalfWidth * project.scale;
|
|
2634
2638
|
float dashUnitPixels = strokeHalfWidthPixels;
|
|
2635
2639
|
if (pathStyle.dashUnits == 1) {
|
|
2636
2640
|
dashUnitPixels = 1.0;
|
|
@@ -2652,6 +2656,46 @@ vDashOffset = dashPeriod > 0.0 ? mod(dashOffsetAndLength.x, dashPeriod) : 0.0;
|
|
|
2652
2656
|
vDashOffset = 0.0;
|
|
2653
2657
|
vDashPathLength = 0.0;
|
|
2654
2658
|
#endif
|
|
2659
|
+
#endif
|
|
2660
|
+
`,"fs:#main-end":`
|
|
2661
|
+
#ifdef DASH_ENABLED
|
|
2662
|
+
#ifdef ANTIALIASING
|
|
2663
|
+
if (inRoundedDashGap) {
|
|
2664
|
+
float pathCoverage = smoothedge(0.0, edgePixels);
|
|
2665
|
+
float resolvedCapMultiplier =
|
|
2666
|
+
min(pathCoverage, roundedDashResolvedCoverage) / max(pathCoverage, 1e-6);
|
|
2667
|
+
dashCoverage = mix(
|
|
2668
|
+
resolvedCapMultiplier,
|
|
2669
|
+
roundedDashDutyCycle,
|
|
2670
|
+
roundedDashSubPixelBlend
|
|
2671
|
+
);
|
|
2672
|
+
}
|
|
2673
|
+
#endif
|
|
2674
|
+
if (shouldDiscardDash) {
|
|
2675
|
+
discard;
|
|
2676
|
+
}
|
|
2677
|
+
fragColor.a *= dashCoverage;
|
|
2678
|
+
#endif
|
|
2679
|
+
#ifdef PATH_STYLE_OFFSET
|
|
2680
|
+
#ifndef ANTIALIASING
|
|
2681
|
+
if (abs(vPathPosition.x) > 1.0) {
|
|
2682
|
+
discard;
|
|
2683
|
+
}
|
|
2684
|
+
#endif
|
|
2685
|
+
#endif
|
|
2686
|
+
`}},zt={inject:{"vs:#decl":`
|
|
2687
|
+
in vec2 instanceDashArrays;
|
|
2688
|
+
#ifdef HIGH_PRECISION_DASH
|
|
2689
|
+
in vec2 instanceDashOffsets;
|
|
2690
|
+
#endif
|
|
2691
|
+
out vec2 vDashArray;
|
|
2692
|
+
out float vDashOffset;
|
|
2693
|
+
out float vDashPathLength;
|
|
2694
|
+
layout(std140) uniform pathStyleUniforms {
|
|
2695
|
+
float dashAlignMode;
|
|
2696
|
+
bool dashGapPickable;
|
|
2697
|
+
highp int dashUnits;
|
|
2698
|
+
} pathStyle;
|
|
2655
2699
|
`,"fs:#decl":`
|
|
2656
2700
|
layout(std140) uniform pathStyleUniforms {
|
|
2657
2701
|
float dashAlignMode;
|
|
@@ -2743,24 +2787,7 @@ dashCoverage = mix(dashCoverage, roundedDutyCycle, subPixelBlend);
|
|
|
2743
2787
|
dashCoverage = clamp(dashCoverage, 0.0, 1.0);
|
|
2744
2788
|
shouldDiscardDash = shouldDiscardDash || dashCoverage <= 0.0;
|
|
2745
2789
|
}
|
|
2746
|
-
|
|
2747
|
-
#ifdef ANTIALIASING
|
|
2748
|
-
if (inRoundedDashGap) {
|
|
2749
|
-
float pathCoverage = smoothedge(0.0, edgePixels);
|
|
2750
|
-
float resolvedCapMultiplier =
|
|
2751
|
-
min(pathCoverage, roundedDashResolvedCoverage) / max(pathCoverage, 1e-6);
|
|
2752
|
-
dashCoverage = mix(
|
|
2753
|
-
resolvedCapMultiplier,
|
|
2754
|
-
roundedDashDutyCycle,
|
|
2755
|
-
roundedDashSubPixelBlend
|
|
2756
|
-
);
|
|
2757
|
-
}
|
|
2758
|
-
#endif
|
|
2759
|
-
if (shouldDiscardDash) {
|
|
2760
|
-
discard;
|
|
2761
|
-
}
|
|
2762
|
-
fragColor.a *= dashCoverage;
|
|
2763
|
-
`}},zt={inject:{"vs:#decl":`
|
|
2790
|
+
`}},Ut={inject:{"vs:#decl":`
|
|
2764
2791
|
in vec2 instanceDashArrays;
|
|
2765
2792
|
out vec2 vDashArray;
|
|
2766
2793
|
`,"vs:#main-end":`
|
|
@@ -2802,7 +2829,7 @@ fragColor = vec4(vFillColor.rgb, vFillColor.a * alphaFactor);
|
|
|
2802
2829
|
fragColor = picking_filterPickingColor(fragColor);
|
|
2803
2830
|
fragColor = picking_filterHighlightColor(fragColor);
|
|
2804
2831
|
}
|
|
2805
|
-
`}},
|
|
2832
|
+
`}},Vt={inject:{"vs:#decl":`
|
|
2806
2833
|
in vec2 instanceDashArrays;
|
|
2807
2834
|
out vec2 vDashArray;
|
|
2808
2835
|
`,"vs:#main-end":`
|
|
@@ -2924,43 +2951,12 @@ fragColor = vec4(vFillColor.rgb, vFillColor.a * alphaFactor);
|
|
|
2924
2951
|
fragColor = picking_filterPickingColor(fragColor);
|
|
2925
2952
|
fragColor = picking_filterHighlightColor(fragColor);
|
|
2926
2953
|
}
|
|
2927
|
-
`}},
|
|
2954
|
+
`}},jt={inject:{"vs:#decl":`
|
|
2928
2955
|
in float instanceOffsets;
|
|
2929
2956
|
`,"vs:DECKGL_FILTER_SIZE":`
|
|
2930
2957
|
float offsetWidth = abs(instanceOffsets * 2.0) + 1.0;
|
|
2931
2958
|
size *= offsetWidth;
|
|
2932
|
-
|
|
2933
|
-
float offsetWidth = abs(instanceOffsets * 2.0) + 1.0;
|
|
2934
|
-
float offsetDir = sign(instanceOffsets);
|
|
2935
|
-
vPathPosition.x = (vPathPosition.x + offsetDir) * offsetWidth - offsetDir;
|
|
2936
|
-
vPathPosition.y *= offsetWidth;
|
|
2937
|
-
vPathLength *= offsetWidth;
|
|
2938
|
-
#ifdef DASH_ENABLED
|
|
2939
|
-
if (pathStyle.dashUnits != 0) {
|
|
2940
|
-
vDashArray *= offsetWidth;
|
|
2941
|
-
}
|
|
2942
|
-
vPathBounds *= offsetWidth;
|
|
2943
|
-
#ifdef HIGH_PRECISION_DASH
|
|
2944
|
-
vDashPathLength *= offsetWidth;
|
|
2945
|
-
float restoredDashUnitLength = vDashArray.x + vDashArray.y;
|
|
2946
|
-
float restoredDashPeriod = pathStyle.dashAlignMode == 0.0
|
|
2947
|
-
? restoredDashUnitLength
|
|
2948
|
-
: vDashPathLength /
|
|
2949
|
-
max(round(vDashPathLength / max(restoredDashUnitLength, 0.0001)), 1.0);
|
|
2950
|
-
vDashOffset = restoredDashPeriod > 0.0
|
|
2951
|
-
? mod(dashOffsetAndLength.x * offsetWidth, restoredDashPeriod)
|
|
2952
|
-
: 0.0;
|
|
2953
|
-
#else
|
|
2954
|
-
vDashOffset *= offsetWidth;
|
|
2955
|
-
#endif
|
|
2956
|
-
#endif
|
|
2957
|
-
`,"fs:#main-end":`
|
|
2958
|
-
#ifndef ANTIALIASING
|
|
2959
|
-
if (abs(vPathPosition.x) > 1.0) {
|
|
2960
|
-
discard;
|
|
2961
|
-
}
|
|
2962
|
-
#endif
|
|
2963
|
-
`}};var Pn={getDashArray:{type:"accessor",value:[0,0]},getOffset:{type:"accessor",value:0},dashJustified:!1,dashGapPickable:!1,dashUnits:"widths"},En={widths:0,pixels:1,meters:2,common:3},Mn=["instanceDashArrays","instanceDashOffsets","instanceOffsets"];function An({props:t,oldProps:e}){return!(0,b._deepEqual)(t.modelMatrix,e.modelMatrix,2)||t.coordinateSystem!==e.coordinateSystem||!(0,b._deepEqual)(t.coordinateOrigin,e.coordinateOrigin,1)}function jt(t,e,i){let r=t.context.viewport;if(!(r instanceof b.WebMercatorViewport)||r.zoom<12)return t.projectPosition(e,{autoOffset:!1});let n=pe.transformMat4([],[e[0],e[1],e[2]||0,1],i.modelMatrix),o=t.props.coordinateSystem==="default"?"lnglat":t.props.coordinateSystem;if(o==="lnglat"){if(Math.abs(n[1]-i.coordinateOrigin[1])>.25){let l=n[0];i.wrapLongitude&&(l=((l+180)%360+360)%360-180);let f=r.projectPosition([l,n[1],0]);return[f[0]-i.commonOrigin[0],f[1]-i.commonOrigin[1],n[2]*i.commonUnitsPerMeter[2]]}L.sub(n,n,i.coordinateOrigin)}else o==="cartesian"&&L.sub(n,n,i.coordinateOrigin);let a=n[1],s=L.scaleAndAdd([],i.commonUnitsPerWorldUnit,i.commonUnitsPerWorldUnit2,a);return L.multiply([],n,s)}var K=class extends b.LayerExtension{constructor({dash:e=!1,offset:i=!1,dashMode:r,highPrecisionDash:n=!1}={}){let o=r??(n?"path":"segment");super({dash:e||n||r!==void 0,offset:i,dashMode:o,highPrecisionDash:o==="path"})}getLayerType(e){if("pathTesselator"in e.state)return"path";let i=e.constructor.layerName;return i==="ScatterplotLayer"?"scatterplot":i==="TextBackgroundLayer"?"textBackground":null}synchronizeAttributes(e){let i=e.getAttributeManager(),r=this.getLayerType(e);if(!i||!r)return!1;let n=i.getAttributes(),o=new Set;this.opts.dash&&o.add("instanceDashArrays"),r==="path"&&this.opts.dash&&this.opts.dashMode==="path"&&o.add("instanceDashOffsets"),r==="path"&&this.opts.offset&&o.add("instanceOffsets");let a=!1;for(let s of Mn)n[s]&&!o.has(s)&&(i.remove([s]),a=!0);return o.has("instanceDashArrays")&&!n.instanceDashArrays&&(i.addInstanced({instanceDashArrays:{size:2,accessor:"getDashArray"}}),a=!0),o.has("instanceDashOffsets")&&!n.instanceDashOffsets&&(i.addInstanced({instanceDashOffsets:{size:2,accessor:["getPath"],update:this.calculateDashMetrics}}),a=!0),o.has("instanceOffsets")&&!n.instanceOffsets&&(i.addInstanced({instanceOffsets:{size:1,accessor:"getOffset"}}),a=!0),a}isEnabled(e){return this.getLayerType(e)!==null}getShaders(e){let i=e.getLayerType(this);if(!i)return null;if(i==="scatterplot"||i==="textBackground")return e.opts.dash?{modules:[{name:"pathStyle",inject:i==="scatterplot"?zt.inject:Ut.inject,uniformTypes:{dashGapPickable:"i32"}}]}:null;let r={},n={};e.opts.dash&&(r=(0,b._mergeShaders)(r,Dt),n.DASH_ENABLED=!0,e.opts.dashMode==="path"&&(n.HIGH_PRECISION_DASH=!0)),e.opts.offset&&(r=(0,b._mergeShaders)(r,Vt),n.PATH_STYLE_OFFSET=!0);let{inject:o}=r,a={name:"pathStyle",inject:o};return e.opts.dash&&(a.uniformTypes={dashAlignMode:"f32",dashGapPickable:"i32",dashUnits:"i32"}),{modules:[a],defines:n}}initializeState(e,i){i.synchronizeAttributes(this)}updateState(e,i){if(i.isEnabled(this)){if(e.changeFlags.extensionsChanged){let r=i.synchronizeAttributes(this),n=this.getAttributeManager();if(n&&r){n.invalidateAll();for(let o of this.getModels())o.setBufferLayout(n.getBufferLayouts(o))}}if(i.opts.dash){let r=i.getLayerType(this);if(r==="path"&&i.opts.dashMode==="path"&&An(e)&&this.getAttributeManager()?.invalidate("instanceDashOffsets"),r==="scatterplot"||r==="textBackground"){let n={dashGapPickable:!!this.props.dashGapPickable};this.setShaderModuleProps({pathStyle:n})}else{let n={dashAlignMode:this.props.dashJustified?1:0,dashGapPickable:!!this.props.dashGapPickable,dashUnits:En[this.props.dashUnits??"widths"]};this.setShaderModuleProps({pathStyle:n})}}}}calculateDashMetrics(e,{startRow:i,endRow:r}){let n=this.state.pathTesselator,o=n?.vertexStarts,a=n?.instanceCount,s=n?.get("positions");if(!o||a===void 0||typeof n?.getPathSegmentIndices!="function")throw new Error("PathStyleExtension requires PathLayer tessellation data for path dashes.");let l=this.props.data?.attributes?.getPath,f=ArrayBuffer.isView(l)?l:l?.value,c=ArrayBuffer.isView(f),u=s&&(!l||n.normalize||n.opts?.isWebGPU);if(l&&!c||!u&&!c)throw new Error("PathStyleExtension cannot calculate whole-path dash metrics from GPU-only getPath data; supply data.attributes.instanceDashOffsets.");let d=e.value,p=e.size,m=Math.max(0,i),F=Math.min(r,o.length-1),v=3,O=3,R=0;if(!u){let x=f.BYTES_PER_ELEMENT;v=l?.size||(this.props.positionFormat==="XY"?2:3),O=l?.stride?l.stride/x:v,R=l?.offset?l.offset/x:0}let P=new Array(3),k=b.project.getUniforms({viewport:this.context.viewport,modelMatrix:this.props.modelMatrix,coordinateSystem:this.props.coordinateSystem,coordinateOrigin:this.props.coordinateOrigin,autoWrapLongitude:this.wrapLongitude}),G=x=>{if(u)P[0]=s[x*3],P[1]=s[x*3+1],P[2]=s[x*3+2];else{let A=R+x*O;P[0]=f[A],P[1]=f[A+1],P[2]=v===3?f[A+2]:0}return P};e.startIndices=o;for(let x=m;x<F;x++){let A=o[x],N=Math.min(o[x+1]??a,a);d.fill(0,A*p,N*p);let Pi=n.getPathSegmentIndices(x),Te=0,je=-2,Se=null;for(let T of Pi){let Ei=T*p;d[Ei]=Te;let Mi=T===je+1&&Se?Se:jt(this,G(T),k),He=jt(this,G(T+1),k);Te+=L.dist(Mi,He),je=T,Se=He}if(p>1)for(let T=A;T<N;T++)d[T*p+1]=Te}}getDashOffsets(e){let i=[0],r=this.props.positionFormat==="XY"?2:3,n=Array.isArray(e[0]),o=n?e.length:e.length/r,a,s;for(let l=0;l<o-1;l++)a=n?e[l]:e.slice(l*r,l*r+r),a=this.projectPosition(a,{autoOffset:!1}),l>0&&(i[l]=i[l-1]+L.dist(s,a)),s=a;return i[o-1]=0,i}};K.defaultProps=Pn;K.extensionName="PathStyleExtension";var Ht=K;var $t=_(h(),1);var U=_(h(),1),Tn=512/4e7;function Sn(t,e){switch(t){case"pixels":return 2**-Math.round(e.zoom);case"common":return 1;default:return Tn}}var Gt=`layout(std140) uniform fillUniforms {
|
|
2959
|
+
`}};var En={getDashArray:{type:"accessor",value:[0,0]},getOffset:{type:"accessor",value:0},dashJustified:!1,dashGapPickable:!1,dashUnits:"widths"},Mn={widths:0,pixels:1,meters:2,common:3},An=["instanceDashArrays","instanceDashOffsets","instanceOffsets"];function Tn({props:t,oldProps:e}){return!(0,b._deepEqual)(t.modelMatrix,e.modelMatrix,2)||t.coordinateSystem!==e.coordinateSystem||!(0,b._deepEqual)(t.coordinateOrigin,e.coordinateOrigin,1)}function Ht(t,e,i){let r=t.context.viewport;if(!(r instanceof b.WebMercatorViewport)||r.zoom<12)return t.projectPosition(e,{autoOffset:!1});let n=pe.transformMat4([],[e[0],e[1],e[2]||0,1],i.modelMatrix),o=t.props.coordinateSystem==="default"?"lnglat":t.props.coordinateSystem;if(o==="lnglat"){if(Math.abs(n[1]-i.coordinateOrigin[1])>.25){let l=n[0];i.wrapLongitude&&(l=((l+180)%360+360)%360-180);let f=r.projectPosition([l,n[1],0]);return[f[0]-i.commonOrigin[0],f[1]-i.commonOrigin[1],n[2]*i.commonUnitsPerMeter[2]]}L.sub(n,n,i.coordinateOrigin)}else o==="cartesian"&&L.sub(n,n,i.coordinateOrigin);let a=n[1],s=L.scaleAndAdd([],i.commonUnitsPerWorldUnit,i.commonUnitsPerWorldUnit2,a);return L.multiply([],n,s)}var Z=class extends b.LayerExtension{constructor({dash:e=!1,offset:i=!1,dashMode:r,highPrecisionDash:n=!1}={}){let o=r??(n?"path":"segment");super({dash:e||n||r!==void 0,offset:i,dashMode:o,highPrecisionDash:o==="path"})}getLayerType(e){if("pathTesselator"in e.state)return"path";let i=e.constructor.layerName;return i==="ScatterplotLayer"?"scatterplot":i==="TextBackgroundLayer"?"textBackground":null}synchronizeAttributes(e){let i=e.getAttributeManager(),r=this.getLayerType(e);if(!i||!r)return!1;let n=i.getAttributes(),o=new Set;this.opts.dash&&o.add("instanceDashArrays"),r==="path"&&this.opts.dash&&this.opts.dashMode==="path"&&o.add("instanceDashOffsets"),r==="path"&&this.opts.offset&&o.add("instanceOffsets");let a=!1;for(let s of An)n[s]&&!o.has(s)&&(i.remove([s]),a=!0);return o.has("instanceDashArrays")&&!n.instanceDashArrays&&(i.addInstanced({instanceDashArrays:{size:2,accessor:"getDashArray"}}),a=!0),o.has("instanceDashOffsets")&&!n.instanceDashOffsets&&(i.addInstanced({instanceDashOffsets:{size:2,accessor:["getPath"],update:this.calculateDashMetrics}}),a=!0),o.has("instanceOffsets")&&!n.instanceOffsets&&(i.addInstanced({instanceOffsets:{size:1,accessor:"getOffset"}}),a=!0),a}isEnabled(e){return this.getLayerType(e)!==null}getShaders(e){let i=e.getLayerType(this);if(!i)return null;if(i==="scatterplot"||i==="textBackground")return e.opts.dash?{modules:[{name:"pathStyle",inject:i==="scatterplot"?Ut.inject:Vt.inject,uniformTypes:{dashGapPickable:"i32"}}]}:null;let r={};(e.opts.dash||e.opts.offset)&&(r=(0,b._mergeShaders)(r,Dt));let n={};e.opts.dash&&(r=(0,b._mergeShaders)(r,zt),n.DASH_ENABLED=!0,e.opts.dashMode==="path"&&(n.HIGH_PRECISION_DASH=!0)),e.opts.offset&&(r=(0,b._mergeShaders)(r,jt),n.PATH_STYLE_OFFSET=!0);let{inject:o}=r,a={name:"pathStyle",inject:o};return e.opts.dash&&(a.uniformTypes={dashAlignMode:"f32",dashGapPickable:"i32",dashUnits:"i32"}),{modules:[a],defines:n}}initializeState(e,i){i.synchronizeAttributes(this)}updateState(e,i){if(i.isEnabled(this)){if(e.changeFlags.extensionsChanged){let r=i.synchronizeAttributes(this),n=this.getAttributeManager();if(n&&r){n.invalidateAll();for(let o of this.getModels())o.setBufferLayout(n.getBufferLayouts(o))}}if(i.opts.dash){let r=i.getLayerType(this);if(r==="path"&&i.opts.dashMode==="path"&&Tn(e)&&this.getAttributeManager()?.invalidate("instanceDashOffsets"),r==="scatterplot"||r==="textBackground"){let n={dashGapPickable:!!this.props.dashGapPickable};this.setShaderModuleProps({pathStyle:n})}else{let n={dashAlignMode:this.props.dashJustified?1:0,dashGapPickable:!!this.props.dashGapPickable,dashUnits:Mn[this.props.dashUnits??"widths"]};this.setShaderModuleProps({pathStyle:n})}}}}calculateDashMetrics(e,{startRow:i,endRow:r}){let n=this.state.pathTesselator,o=n?.vertexStarts,a=n?.instanceCount,s=n?.get("positions");if(!o||a===void 0||typeof n?.getPathSegmentIndices!="function")throw new Error("PathStyleExtension requires PathLayer tessellation data for path dashes.");let l=this.props.data?.attributes?.getPath,f=ArrayBuffer.isView(l)?l:l?.value,c=ArrayBuffer.isView(f),u=s&&(!l||n.normalize||n.opts?.isWebGPU);if(l&&!c||!u&&!c)throw new Error("PathStyleExtension cannot calculate whole-path dash metrics from GPU-only getPath data; supply data.attributes.instanceDashOffsets.");let d=e.value,p=e.size,m=Math.max(0,i),F=Math.min(r,o.length-1),v=3,O=3,k=0;if(!u){let x=f.BYTES_PER_ELEMENT;v=l?.size||(this.props.positionFormat==="XY"?2:3),O=l?.stride?l.stride/x:v,k=l?.offset?l.offset/x:0}let P=new Array(3),N=b.project.getUniforms({viewport:this.context.viewport,modelMatrix:this.props.modelMatrix,coordinateSystem:this.props.coordinateSystem,coordinateOrigin:this.props.coordinateOrigin,autoWrapLongitude:this.wrapLongitude}),q=x=>{if(u)P[0]=s[x*3],P[1]=s[x*3+1],P[2]=s[x*3+2];else{let A=k+x*O;P[0]=f[A],P[1]=f[A+1],P[2]=v===3?f[A+2]:0}return P};e.startIndices=o;for(let x=m;x<F;x++){let A=o[x],D=Math.min(o[x+1]??a,a);d.fill(0,A*p,D*p);let Ei=n.getPathSegmentIndices(x),Te=0,je=-2,Se=null;for(let T of Ei){let Mi=T*p;d[Mi]=Te;let Ai=T===je+1&&Se?Se:Ht(this,q(T),N),He=Ht(this,q(T+1),N);Te+=L.dist(Ai,He),je=T,Se=He}if(p>1)for(let T=A;T<D;T++)d[T*p+1]=Te}}getDashOffsets(e){let i=[0],r=this.props.positionFormat==="XY"?2:3,n=Array.isArray(e[0]),o=n?e.length:e.length/r,a,s;for(let l=0;l<o-1;l++)a=n?e[l]:e.slice(l*r,l*r+r),a=this.projectPosition(a,{autoOffset:!1}),l>0&&(i[l]=i[l-1]+L.dist(s,a)),s=a;return i[o-1]=0,i}};Z.defaultProps=En;Z.extensionName="PathStyleExtension";var Gt=Z;var Xt=_(h(),1);var V=_(h(),1),Sn=512/4e7;function Ln(t,e){switch(t){case"pixels":return 2**-Math.round(e.zoom);case"common":return 1;default:return Sn}}var qt=`layout(std140) uniform fillUniforms {
|
|
2964
2960
|
vec2 patternTextureSize;
|
|
2965
2961
|
float patternUnitScale;
|
|
2966
2962
|
bool patternEnabled;
|
|
@@ -2970,7 +2966,7 @@ discard;
|
|
|
2970
2966
|
vec2 uvCoordinateOrigin;
|
|
2971
2967
|
vec2 uvCoordinateOrigin64Low;
|
|
2972
2968
|
} fill;
|
|
2973
|
-
`,
|
|
2969
|
+
`,Fn=`
|
|
2974
2970
|
uniform sampler2D fill_patternTexture;
|
|
2975
2971
|
|
|
2976
2972
|
in vec4 fillPatternFrames;
|
|
@@ -2985,10 +2981,10 @@ out vec4 fill_backgroundColor;
|
|
|
2985
2981
|
out float fill_patternCoordinateScale;
|
|
2986
2982
|
flat out vec4 fill_patternParams0;
|
|
2987
2983
|
flat out vec4 fill_patternParams1;
|
|
2988
|
-
`,Fn=`
|
|
2989
|
-
${Gt}
|
|
2990
|
-
${Ln}
|
|
2991
2984
|
`,On=`
|
|
2985
|
+
${qt}
|
|
2986
|
+
${Fn}
|
|
2987
|
+
`,Bn=`
|
|
2992
2988
|
uniform sampler2D fill_patternTexture;
|
|
2993
2989
|
|
|
2994
2990
|
in vec4 fill_patternBounds;
|
|
@@ -3123,10 +3119,10 @@ vec4 fill_blendOverBackground(vec4 pattern, vec4 background) {
|
|
|
3123
3119
|
vec3 blendedRGB = mix(background.rgb, pattern.rgb, patternAlpha / blendedAlpha);
|
|
3124
3120
|
return vec4(blendedRGB, blendedAlpha * layer.opacity);
|
|
3125
3121
|
}
|
|
3126
|
-
`,
|
|
3127
|
-
${
|
|
3128
|
-
${
|
|
3129
|
-
`,
|
|
3122
|
+
`,wn=`
|
|
3123
|
+
${qt}
|
|
3124
|
+
${Bn}
|
|
3125
|
+
`,Cn={"vs:DECKGL_FILTER_GL_POSITION":`
|
|
3130
3126
|
if (fill.patternEnabled) {
|
|
3131
3127
|
fill_patternPlacement.xy = fillPatternOffsets;
|
|
3132
3128
|
fill_backgroundColor = fillPatternBackgroundColors;
|
|
@@ -3176,7 +3172,7 @@ ${On}
|
|
|
3176
3172
|
}
|
|
3177
3173
|
color = fill_blendOverBackground(color, fill_backgroundColor);
|
|
3178
3174
|
}
|
|
3179
|
-
`};function In(t){if(!t)return{};let e={};if("fillPatternTexture"in t){let{fillPatternTexture:i}=t;e.fill_patternTexture=i,e.patternTextureSize=[i.width,i.height]}if("project"in t){let{fillPatternMask:i=!0,fillPatternEnabled:r=!0,fillPatternSizeUnits:n="meters",fillPatternCommonFrame:o=null,procedural:a=!1}=t,s=
|
|
3175
|
+
`};function In(t){if(!t)return{};let e={};if("fillPatternTexture"in t){let{fillPatternTexture:i}=t;e.fill_patternTexture=i,e.patternTextureSize=[i.width,i.height]}if("project"in t){let{fillPatternMask:i=!0,fillPatternEnabled:r=!0,fillPatternSizeUnits:n="meters",fillPatternCommonFrame:o=null,procedural:a=!1}=t,s=V.project.getUniforms(t.project),{commonOrigin:l}=s,f=Ln(n,t.project.viewport),c=[l[0],l[1]];o&&(c[0]%=f*o[0],c[1]%=f*o[1]),e.uvCoordinateOrigin=c,e.uvCoordinateOrigin64Low=[(0,V.fp64LowPart)(c[0]),(0,V.fp64LowPart)(c[1])],e.patternUnitScale=f,e.patternMask=i,e.patternEnabled=r,e.procedural=a,e.flipY=t.project.viewport?.flipY??!1}return e}var Wt={name:"fill",vs:On,fs:wn,inject:Cn,dependencies:[V.project],getUniforms:In,uniformTypes:{patternTextureSize:"vec2<f32>",patternUnitScale:"f32",patternEnabled:"i32",patternMask:"i32",procedural:"i32",flipY:"i32",uvCoordinateOrigin:"vec2<f32>",uvCoordinateOrigin64Low:"vec2<f32>"}};var Kt="rg32float";var Ie={none:0,hatch:1,crossHatch:2,dots:3},g={type:0,size:1,gap0:2,gap1:3,angle0:4,angle1:5,elementCount:6},Yt=8,$=Math.PI/180,Re=1,ke=1,Rn=0,kn=[45,135],Nn=0,Dn=0;function Zt(t){let e=Object.entries(t),i=new Float32Array((e.length+1)*Yt),r=new Map;return e.forEach(([n,o],a)=>{let s=a+1,l=s*Yt;switch(r.set(n,s),o.type){case"hatch":{let f=o.gap===void 0?ke:o.gap,c=o.strokeWidth===void 0?Re:o.strokeWidth,u=o.angle===void 0?Rn:o.angle;if(Array.isArray(f)&&f.length!==2)throw new Error(`${n}.gap must be a number or a two-element array`);let d=Array.isArray(f)?f:[f,f];Ne(c,`${n}.strokeWidth`),xe(d[0],`${n}.gap[0]`),xe(d[1],`${n}.gap[1]`),be(u,`${n}.angle`),i[l+g.type]=Ie.hatch,i[l+g.size]=c,i[l+g.gap0]=d[0],i[l+g.gap1]=d[1],i[l+g.angle0]=u*$,i[l+g.elementCount]=Array.isArray(f)?2:1;break}case"cross-hatch":{let f=o.angles===void 0?kn:o.angles,c=o.strokeWidth===void 0?Re:o.strokeWidth,u=o.gap===void 0?ke:o.gap;if(!Array.isArray(f)||f.length!==2)throw new Error(`${n}.angles must be a two-element array`);Ne(c,`${n}.strokeWidth`),xe(u,`${n}.gap`),be(f[0],`${n}.angles[0]`),be(f[1],`${n}.angles[1]`),i[l+g.type]=Ie.crossHatch,i[l+g.size]=c,i[l+g.gap0]=u,i[l+g.gap1]=u,i[l+g.angle0]=f[0]*$,i[l+g.angle1]=f[1]*$,i[l+g.elementCount]=2;break}case"dots":{let f=o.radius===void 0?Re:o.radius,c=o.gap===void 0?ke:o.gap,u=o.angle===void 0?Nn:o.angle,d=o.skew===void 0?Dn:o.skew;Ne(f,`${n}.radius`),xe(c,`${n}.gap`),be(u,`${n}.angle`),zn(d,`${n}.skew`),i[l+g.type]=Ie.dots,i[l+g.size]=f,i[l+g.gap0]=c,i[l+g.gap1]=c,i[l+g.angle0]=u*$,i[l+g.angle1]=d*$,i[l+g.elementCount]=2;break}default:throw new Error(`${n}.type is not a supported procedural pattern type`)}}),{data:i,width:i.length/2,height:1,patternIndices:r}}function Ne(t,e){if(!Number.isFinite(t)||t<=0)throw new Error(`${e} must be a finite number greater than 0`)}function xe(t,e){if(!Number.isFinite(t)||t<0)throw new Error(`${e} must be a finite number greater than or equal to 0`)}function be(t,e){if(!Number.isFinite(t))throw new Error(`${e} must be a finite number`)}function zn(t,e){if(!Number.isFinite(t)||t<=-90||t>=90)throw new Error(`${e} must be a finite number greater than -90 and less than 90`)}function $t(t,e){if(!Number.isInteger(e)||e<=0)return 0;if(t===0)return e;let[i,r]=[t,e];for(;r>0;)[i,r]=[r,i%r];return t/i*e}var Un={fillPatternEnabled:!0,fillPatternAtlas:{type:"image",value:null,async:!0},fillPatternMapping:{type:"object",value:{},async:!0},fillPatternMask:!0,fillPatternSizeUnits:"meters",getFillPattern:{type:"accessor",value:t=>t.pattern},getFillPatternScale:{type:"accessor",value:1},getFillPatternOffset:{type:"accessor",value:[0,0]},getFillPatternBackgroundColor:{type:"accessor",value:[0,0,0,0]}},X=class extends Xt.LayerExtension{constructor({pattern:e=!1,proceduralPattern:i=!1}={}){super({pattern:e||i,proceduralPattern:i})}isEnabled(e){return e.getAttributeManager()!==null&&!("pathTesselator"in e.state)}getShaders(e){return e.isEnabled(this)?{modules:[e.opts.pattern&&Wt].filter(Boolean)}:null}initializeState(e,i){if(!i.isEnabled(this))return;let r=this.getAttributeManager();i.opts.pattern&&r.add({fillPatternFrames:{size:4,stepMode:"dynamic",accessor:"getFillPattern",transform:i.opts.proceduralPattern?i.getProceduralPatternIndex.bind(this):i.getPatternFrame.bind(this)},fillPatternScales:{size:1,stepMode:"dynamic",accessor:"getFillPatternScale",defaultValue:1},fillPatternOffsets:{size:2,stepMode:"dynamic",accessor:"getFillPatternOffset"},fillPatternBackgroundColors:{size:4,type:"unorm8",stepMode:"dynamic",accessor:"getFillPatternBackgroundColor",defaultValue:[0,0,0,255]}}),this.setState({emptyTexture:this.context.device.createTexture({data:new Uint8Array(4),width:1,height:1}),...i.opts.proceduralPattern&&i.createProceduralPatternTexture.call(this,{})})}updateState({props:e,oldProps:i},r){if(r.isEnabled(this)){if(e.fillPatternMapping&&e.fillPatternMapping!==i.fillPatternMapping){if(r.opts.proceduralPattern&&typeof e.fillPatternMapping!="string"){let n=this.state.proceduralPatternTexture;this.setState(r.createProceduralPatternTexture.call(this,e.fillPatternMapping)),n?.delete()}this.getAttributeManager().invalidate("getFillPattern")}(e.fillPatternMapping!==i.fillPatternMapping||e.getFillPatternScale!==i.getFillPatternScale)&&this.setState({commonFrame:r.getCommonFrame(e)})}}draw(e,i){if(!i.isEnabled(this))return;let{fillPatternAtlas:r,fillPatternEnabled:n,fillPatternMask:o,fillPatternSizeUnits:a}=this.props,s={project:e.shaderModuleProps.project,fillPatternEnabled:n,fillPatternMask:o,fillPatternSizeUnits:a,procedural:i.opts.proceduralPattern,fillPatternTexture:i.opts.proceduralPattern?this.state.proceduralPatternTexture||this.state.emptyTexture:r||this.state.emptyTexture,fillPatternCommonFrame:this.state.commonFrame};this.setShaderModuleProps({fill:s})}finalizeState(){this.state.emptyTexture?.delete(),this.state.proceduralPatternTexture?.delete()}getPatternFrame(e){let{fillPatternMapping:i}=this.getCurrentLayer().props,r=i&&i[e];return r&&"x"in r?[r.x,r.y,r.width,r.height]:[0,0,0,0]}getCommonFrame(e){let{fillPatternMapping:i,getFillPatternScale:r}=e;if(typeof r!="number"||!(r>0)||typeof i!="object")return null;let n=0,o=0;for(let a in i){let s=i[a];if(!("width"in s)||(n=$t(n,s.width),o=$t(o,s.height),!n||!o))return null}return n?[r*n,r*o]:null}getProceduralPatternIndex(e){return[this.state.proceduralPatternIndices?.get(e)??0,0,0,0]}createProceduralPatternTexture(e){let i=Zt(e);return{proceduralPatternIndices:i.patternIndices,proceduralPatternTexture:this.context.device.createTexture({data:i.data,width:i.width,height:i.height,format:Kt,sampler:{minFilter:"nearest",magFilter:"nearest"}})}}};X.defaultProps=Un;X.extensionName="FillStyleExtension";var Qt=X;var Jt=_(h(),1),Vn={clipBounds:[0,0,1,1],clipByInstance:void 0},ei=`
|
|
3180
3176
|
layout(std140) uniform clipUniforms {
|
|
3181
3177
|
vec4 bounds;
|
|
3182
3178
|
} clip;
|
|
@@ -3184,7 +3180,7 @@ layout(std140) uniform clipUniforms {
|
|
|
3184
3180
|
bool clip_isInBounds(vec2 position) {
|
|
3185
3181
|
return position.x >= clip.bounds[0] && position.y >= clip.bounds[1] && position.x < clip.bounds[2] && position.y < clip.bounds[3];
|
|
3186
3182
|
}
|
|
3187
|
-
`,
|
|
3183
|
+
`,jn={name:"clip",vs:ei,uniformTypes:{bounds:"vec4<f32>"}},Hn={"vs:#decl":`
|
|
3188
3184
|
out float clip_isVisible;
|
|
3189
3185
|
`,"vs:DECKGL_FILTER_GL_POSITION":`
|
|
3190
3186
|
clip_isVisible = float(clip_isInBounds(geometry.worldPosition.xy));
|
|
@@ -3192,7 +3188,7 @@ out float clip_isVisible;
|
|
|
3192
3188
|
in float clip_isVisible;
|
|
3193
3189
|
`,"fs:DECKGL_FILTER_COLOR":`
|
|
3194
3190
|
if (clip_isVisible < 0.5) discard;
|
|
3195
|
-
`},
|
|
3191
|
+
`},Gn={name:"clip",fs:ei,uniformTypes:{bounds:"vec4<f32>"}},qn={"vs:#decl":`
|
|
3196
3192
|
out vec2 clip_commonPosition;
|
|
3197
3193
|
`,"vs:DECKGL_FILTER_GL_POSITION":`
|
|
3198
3194
|
clip_commonPosition = geometry.position.xy;
|
|
@@ -3200,7 +3196,7 @@ out vec2 clip_commonPosition;
|
|
|
3200
3196
|
in vec2 clip_commonPosition;
|
|
3201
3197
|
`,"fs:DECKGL_FILTER_COLOR":`
|
|
3202
3198
|
if (!clip_isInBounds(clip_commonPosition)) discard;
|
|
3203
|
-
`},
|
|
3199
|
+
`},Q=class extends Jt.LayerExtension{getShaders(){let e="instancePositions"in this.getAttributeManager().attributes;return this.props.clipByInstance!==void 0&&(e=!!this.props.clipByInstance),this.state.clipByInstance=e,this.context.device.type==="webgpu"?{}:e?{modules:[jn],inject:Hn}:{modules:[Gn],inject:qn}}draw(){let{clipBounds:e}=this.props,i={};if(this.state.clipByInstance)i.bounds=e;else{let r=this.projectPosition([e[0],e[1],0]),n=this.projectPosition([e[2],e[3],0]);i.bounds=[Math.min(r[0],n[0]),Math.min(r[1],n[1]),Math.max(r[0],n[0]),Math.max(r[1],n[1])]}this.context.device.type==="webgpu"&&(i.enabled=!0,i.mode=this.state.clipByInstance?"instance":"geometry"),this.setShaderModuleProps({clip:i})}};Q.defaultProps=Vn;Q.extensionName="ClipExtension";var ti=Q;var ai=_(h(),1);var ii=_(h(),1),Wn=`
|
|
3204
3200
|
in float collisionPriorities;
|
|
3205
3201
|
|
|
3206
3202
|
uniform sampler2D collision_texture;
|
|
@@ -3248,7 +3244,7 @@ float collision_isVisible(vec2 texCoords, vec3 pickingColor) {
|
|
|
3248
3244
|
float W = 2.0 * floatN + 1.0;
|
|
3249
3245
|
return pow(accumulator / (W * W), 2.2);
|
|
3250
3246
|
}
|
|
3251
|
-
`,
|
|
3247
|
+
`,Yn={"vs:#decl":`
|
|
3252
3248
|
float collision_fade = 1.0;
|
|
3253
3249
|
`,"vs:DECKGL_FILTER_GL_POSITION":`
|
|
3254
3250
|
if (collision.sort) {
|
|
@@ -3267,21 +3263,21 @@ float collision_isVisible(vec2 texCoords, vec3 pickingColor) {
|
|
|
3267
3263
|
}
|
|
3268
3264
|
`,"vs:DECKGL_FILTER_COLOR":`
|
|
3269
3265
|
color.a *= collision_fade;
|
|
3270
|
-
`},
|
|
3266
|
+
`},Kn=t=>{if(!t||!("dummyCollisionMap"in t))return{};let{enabled:e,collisionFBO:i,drawToCollisionMap:r,dummyCollisionMap:n}=t;return{enabled:e&&!r,sort:!!r,collision_texture:!r&&i?i.colorAttachments[0]:n}},ri={name:"collision",dependencies:[ii.project],vs:Wn,inject:Yn,getUniforms:Kn,uniformTypes:{sort:"i32",enabled:"i32"}};var oi=_(h(),1);var ni=_(h(),1),J=class extends ni._LayersPass{renderCollisionMap(e,i){let n=[0,0,0,0],o=[1,1,e.width-2,e.height-2];this.render({...i,clearColor:n,scissorRect:o,target:e,pass:"collision"})}getLayerParameters(e,i,r){return{...e.props.parameters,blend:!1,depthWriteEnabled:!0,depthCompare:"less-equal"}}getShaderModuleProps(){return{collision:{drawToCollisionMap:!0},picking:{isActive:1,isAttribute:!1},lighting:{enabled:!1}}}};var De=2,ee=class{constructor(){this.id="collision-filter-effect",this.props=null,this.useInPicking=!0,this.order=1,this.channels={},this.collisionFBOs={}}setup(e){this.context=e;let{device:i}=e;this.dummyCollisionMap=i.createTexture({width:1,height:1}),this.collisionFilterPass=new J(i,{id:"default-collision-filter"})}preRender({effects:e,layers:i,layerFilter:r,viewports:n,onViewportActive:o,views:a,isPicking:s,preRenderStats:l={}}){let{device:f}=this.context;if(s)return;let c=i.filter(({props:{visible:v,collisionEnabled:O}})=>v&&O);if(c.length===0){this.channels={};return}let u=e?.filter(v=>v.useInPicking&&l[v.id]),d=l["mask-effect"]?.didRender,p=this._groupByCollisionGroup(f,c),m=n[0],F=!this.lastViewport||!this.lastViewport.equals(m)||d;for(let v in p){let O=this.collisionFBOs[v],k=p[v],[P,N]=f.canvasContext.getPixelSize();O.resize({width:P/De,height:N/De}),this._render(k,{effects:u,layerFilter:r,onViewportActive:o,views:a,viewport:m,viewportChanged:F})}}_render(e,{effects:i,layerFilter:r,onViewportActive:n,views:o,viewport:a,viewportChanged:s}){let{collisionGroup:l}=e,f=this.channels[l];if(!f)return;let c=s||e===f||!(0,oi._deepEqual)(f.layers,e.layers,1)||e.layerBounds.some((u,d)=>!U(u,f.layerBounds[d]))||e.allLayersLoaded!==f.allLayersLoaded||e.layers.some(u=>u.props.transitions);if(this.channels[l]=e,c){this.lastViewport=a;let u=this.collisionFBOs[l];this.collisionFilterPass.renderCollisionMap(u,{pass:"collision-filter",isPicking:!0,layers:e.layers,effects:i,layerFilter:r,viewports:a?[a]:[],onViewportActive:n,views:o,shaderModuleProps:{collision:{enabled:!0,dummyCollisionMap:this.dummyCollisionMap},project:{devicePixelRatio:u.device.canvasContext.getDevicePixelRatio()/De}}})}}_groupByCollisionGroup(e,i){let r={};for(let n of i){let o=n.props.collisionGroup,a=r[o];a||(a={collisionGroup:o,layers:[],layerBounds:[],allLayersLoaded:!0},r[o]=a),a.layers.push(n),a.layerBounds.push(n.getBounds()),n.isLoaded||(a.allLayersLoaded=!1)}for(let n of Object.keys(r))this.collisionFBOs[n]||this.createFBO(e,n),this.channels[n]||(this.channels[n]=r[n]);for(let n of Object.keys(this.collisionFBOs))r[n]||this.destroyFBO(n);return r}getShaderModuleProps(e){let{collisionGroup:i,collisionEnabled:r}=e.props,{collisionFBOs:n,dummyCollisionMap:o}=this,a=n[i];return{collision:{enabled:r&&!!a,collisionFBO:a,dummyCollisionMap:o}}}cleanup(){this.dummyCollisionMap&&(this.dummyCollisionMap.delete(),this.dummyCollisionMap=void 0),this.channels={};for(let e of Object.keys(this.collisionFBOs))this.destroyFBO(e);this.collisionFBOs={},this.lastViewport=void 0}createFBO(e,i){let{width:r,height:n}=e.getDefaultCanvasContext().canvas,o=e.createTexture({format:"rgba8unorm",width:r,height:n,sampler:{minFilter:"nearest",magFilter:"nearest",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}}),a=e.createTexture({format:"depth16unorm",width:r,height:n});this.collisionFBOs[i]=e.createFramebuffer({id:`collision-${i}`,width:r,height:n,colorAttachments:[o],depthStencilAttachment:a})}destroyFBO(e){let i=this.collisionFBOs[e];i.colorAttachments[0]?.destroy(),i.depthStencilAttachment?.destroy(),i.destroy(),delete this.collisionFBOs[e]}};var Zn={getCollisionPriority:{type:"accessor",value:0},collisionEnabled:!0,collisionGroup:{type:"string",value:"default"},collisionTestProps:{}},te=class extends ai.LayerExtension{getShaders(){return{modules:[ri]}}draw({shaderModuleProps:e}){e.collision?.drawToCollisionMap&&(this.props=this.clone(this.props.collisionTestProps).props)}initializeState(e,i){if(this.getAttributeManager()===null)return;this.context.deck?._addDefaultEffect(new ee),this.getAttributeManager().add({collisionPriorities:{size:1,stepMode:"dynamic",accessor:"getCollisionPriority"}})}getNeedsPickingBuffer(){return this.props.collisionEnabled}};te.defaultProps=Zn;te.extensionName="CollisionFilterExtension";var si=te;var I=_(h(),1);var li=_(h(),1),fi=`layout(std140) uniform maskUniforms {
|
|
3271
3267
|
vec4 bounds;
|
|
3272
3268
|
highp int channel;
|
|
3273
3269
|
bool enabled;
|
|
3274
3270
|
bool inverted;
|
|
3275
3271
|
bool maskByInstance;
|
|
3276
3272
|
} mask;
|
|
3277
|
-
|
|
3273
|
+
`,$n=`
|
|
3278
3274
|
vec2 mask_getCoords(vec4 position) {
|
|
3279
3275
|
return (position.xy - mask.bounds.xy) / (mask.bounds.zw - mask.bounds.xy);
|
|
3280
3276
|
}
|
|
3281
|
-
`,$n=`
|
|
3282
|
-
${li}
|
|
3283
|
-
${Zn}
|
|
3284
3277
|
`,Xn=`
|
|
3278
|
+
${fi}
|
|
3279
|
+
${$n}
|
|
3280
|
+
`,Qn=`
|
|
3285
3281
|
uniform sampler2D mask_texture;
|
|
3286
3282
|
|
|
3287
3283
|
bool mask_isInBounds(vec2 texCoords) {
|
|
@@ -3306,10 +3302,10 @@ bool mask_isInBounds(vec2 texCoords) {
|
|
|
3306
3302
|
return maskValue < 0.5;
|
|
3307
3303
|
}
|
|
3308
3304
|
}
|
|
3309
|
-
`,
|
|
3310
|
-
${
|
|
3311
|
-
${
|
|
3312
|
-
`,
|
|
3305
|
+
`,Jn=`
|
|
3306
|
+
${fi}
|
|
3307
|
+
${Qn}
|
|
3308
|
+
`,eo={"vs:#decl":`
|
|
3313
3309
|
out vec2 mask_texCoords;
|
|
3314
3310
|
`,"vs:#main-end":`
|
|
3315
3311
|
vec4 mask_common_position;
|
|
@@ -3331,15 +3327,15 @@ in vec2 mask_texCoords;
|
|
|
3331
3327
|
|
|
3332
3328
|
if (!mask) discard;
|
|
3333
3329
|
}
|
|
3334
|
-
`},
|
|
3335
|
-
`),
|
|
3330
|
+
`},to=t=>t&&"maskMap"in t?{mask_texture:t.maskMap}:t||{},ci={name:"mask",dependencies:[li.project],vs:Xn,fs:Jn,inject:eo,getUniforms:to,uniformTypes:{bounds:"vec4<f32>",channel:"i32",enabled:"i32",inverted:"i32",maskByInstance:"i32"}};var Ue=_(h(),1);var ui=_(h(),1),io={blendColorOperation:"subtract",blendColorSrcFactor:"zero",blendColorDstFactor:"one",blendAlphaOperation:"subtract",blendAlphaSrcFactor:"zero",blendAlphaDstFactor:"one"},ie=class extends ui._LayersPass{constructor(e,i){super(e,i);let{mapSize:r=2048}=i;this.maskMap=e.createTexture({format:"rgba8unorm",width:r,height:r,sampler:{minFilter:"linear",magFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}}),this.fbo=e.createFramebuffer({id:"maskmap",width:r,height:r,colorAttachments:[this.maskMap]})}render(e){let i=2**e.channel,r=[255,255,255,255];super.render({...e,clearColor:r,colorMask:i,target:this.fbo,pass:"mask"})}getLayerParameters(e,i,r){return{...e.props.parameters,blend:!0,depthCompare:"always",...io}}shouldDrawLayer(e){return e.props.operation.includes("mask")}delete(){this.fbo.delete(),this.maskMap.delete()}};var R=_(h(),1);var Na=256/6370972,ze=new R.WebMercatorViewport({width:1,height:1,longitude:0,latitude:0,zoom:0});function re(t){let[e,i]=ze.projectPosition(t);return[e,i]}function ye(t){return t.isGeospatial?ze:t}function ro(t){return!(t instanceof R._GlobeViewport)}function j(t,e){let i=[1/0,1/0,-1/0,-1/0];for(let r of t){let n=r.getBounds();if(n){let o=r.projectPosition(n[0],{viewport:e,autoOffset:!1}),a=r.projectPosition(n[1],{viewport:e,autoOffset:!1});i[0]=Math.min(i[0],o[0]),i[1]=Math.min(i[1],o[1]),i[2]=Math.max(i[2],a[0]),i[3]=Math.max(i[3],a[1])}}return Number.isFinite(i[0])?i:null}var no=2048;function H(t){let{bounds:e,viewport:i,border:r=0}=t,{isGeospatial:n}=i;if(e[2]<=e[0]||e[3]<=e[1])return null;let o=n?ze.unprojectPosition([(e[0]+e[2])/2,(e[1]+e[3])/2,0]):i.unprojectPosition([(e[0]+e[2])/2,(e[1]+e[3])/2,0]),{width:a,height:s,zoom:l}=t;if(l===void 0){a=a-r*2,s=s-r*2;let f=Math.min(a/(e[2]-e[0]),s/(e[3]-e[1]));l=Math.min(Math.log2(f),20)}else if(!a||!s){let f=2**l;a=Math.round(Math.abs(e[2]-e[0])*f),s=Math.round(Math.abs(e[3]-e[1])*f);let c=no-r*2;if(a>c||s>c){let u=c/Math.max(a,s);a=Math.round(a*u),s=Math.round(s*u),l+=Math.log2(u)}}return n?new R.WebMercatorViewport({id:i.id,x:r,y:r,width:a,height:s,longitude:o[0],latitude:o[1],zoom:l,orthographic:!0}):new R.OrthographicViewport({id:i.id,x:r,y:r,width:a,height:s,target:o,zoom:l,flipY:!1})}function oo(t,e){let i;if(e&&e.length===2){let[o,a]=e,s=t.getBounds({z:o}),l=t.getBounds({z:a});i=[Math.min(s[0],l[0]),Math.min(s[1],l[1]),Math.max(s[2],l[2]),Math.max(s[3],l[3])]}else i=t.getBounds();let r=t.projectPosition(i.slice(0,2)),n=t.projectPosition(i.slice(2,4));return[r[0],r[1],n[0],n[1]]}function G(t,e,i){if(!t)return[0,0,1,1];if(!ro(e))return t;let r=oo(e,i),n=ao(r);return t[2]-t[0]<=n[2]-n[0]&&t[3]-t[1]<=n[3]-n[1]?t:[Math.max(t[0],n[0]),Math.max(t[1],n[1]),Math.min(t[2],n[2]),Math.min(t[3],n[3])]}function ao(t){let e=t[2]-t[0],i=t[3]-t[1],r=(t[0]+t[2])/2,n=(t[1]+t[3])/2;return[r-e,n-i,r+e,n+i]}var ne=class{constructor(){this.id="mask-effect",this.props=null,this.useInPicking=!0,this.order=0,this.channels=[],this.masks=null}setup({device:e}){this.dummyMaskMap=e.createTexture({width:1,height:1}),this.maskPass=new ie(e,{id:"default-mask"}),this.maskMap=this.maskPass.maskMap}preRender({layers:e,layerFilter:i,viewports:r,onViewportActive:n,views:o,effects:a,isPicking:s}){let l=!1;if(s)return{didRender:l};let f=e.filter(p=>p.props.visible&&p.props.operation.includes("mask"));if(f.length===0)return this.masks=null,this.channels.length=0,{didRender:l};this.masks={};let c=this._sortMaskChannels(f),u=r[0],d=!this.lastViewport||!this.lastViewport.equals(u);if(u.resolution!==void 0)return Ue.log.warn("MaskExtension is not supported in GlobeView")(),{didRender:l};for(let p in c){let m=this._renderChannel(c[p],{layerFilter:i,onViewportActive:n,views:o,effects:a,viewport:u,viewportChanged:d});l||(l=m)}return{didRender:l}}_renderChannel(e,{layerFilter:i,onViewportActive:r,views:n,effects:o,viewport:a,viewportChanged:s}){let l=!1,f=this.channels[e.index];if(!f)return l;let c=e===f||e.layers.length!==f.layers.length||e.layers.some((u,d)=>u!==f.layers[d]||u.props.transitions)||e.layerBounds.some((u,d)=>u!==f.layerBounds[d]);if(e.bounds=f.bounds,e.maskBounds=f.maskBounds,this.channels[e.index]=e,c||s){this.lastViewport=a;let u=j(e.layers,a);if(e.bounds=u&&G(u,a),c||!U(e.bounds,f.bounds)){let{maskPass:d,maskMap:p}=this,m=u&&H({bounds:e.bounds,viewport:a,width:p.width,height:p.height,border:1});e.maskBounds=m?m.getBounds():[0,0,1,1],d.render({pass:"mask",channel:e.index,layers:e.layers,layerFilter:i,viewports:m?[m]:[],onViewportActive:r,views:n,effects:o,shaderModuleProps:{project:{devicePixelRatio:1}}}),l=!0}}return this.masks[e.id]={index:e.index,bounds:e.maskBounds,coordinateOrigin:e.coordinateOrigin,coordinateSystem:e.coordinateSystem},l}_sortMaskChannels(e){let i={},r=0;for(let n of e){let{id:o}=n.root,a=i[o];if(!a){if(++r>4){Ue.log.warn("Too many mask layers. The max supported is 4")();continue}a={id:o,index:this.channels.findIndex(s=>s?.id===o),layers:[],layerBounds:[],coordinateOrigin:n.root.props.coordinateOrigin,coordinateSystem:n.root.props.coordinateSystem},i[o]=a}a.layers.push(n),a.layerBounds.push(n.getBounds())}for(let n=0;n<4;n++){let o=this.channels[n];(!o||!(o.id in i))&&(this.channels[n]=null)}for(let n in i){let o=i[n];o.index<0&&(o.index=this.channels.findIndex(a=>!a),this.channels[o.index]=o)}return i}getShaderModuleProps(){return{mask:{maskMap:this.masks?this.maskMap:this.dummyMaskMap,maskChannels:this.masks}}}cleanup(){this.dummyMaskMap&&(this.dummyMaskMap.delete(),this.dummyMaskMap=void 0),this.maskPass&&(this.maskPass.delete(),this.maskPass=void 0,this.maskMap=void 0),this.lastViewport=void 0,this.masks=null,this.channels.length=0}};var so={maskId:"",maskByInstance:void 0,maskInverted:!1},oe=class extends I.LayerExtension{initializeState(){this.context.deck?._addDefaultEffect(new ne)}getShaders(){let e="instancePositions"in this.getAttributeManager().attributes;return this.props.maskByInstance!==void 0&&(e=!!this.props.maskByInstance),this.state.maskByInstance=e,{modules:[ci]}}draw({context:e,shaderModuleProps:i}){let r={};r.maskByInstance=!!this.state.maskByInstance;let{maskId:n,maskInverted:o}=this.props,{maskChannels:a}=i.mask||{},{viewport:s}=e;if(a&&a[n]){let{index:l,bounds:f,coordinateOrigin:c}=a[n],{coordinateSystem:u}=a[n];r.enabled=!0,r.channel=l,r.inverted=o,u===I.COORDINATE_SYSTEM.DEFAULT&&(u=s.isGeospatial?I.COORDINATE_SYSTEM.LNGLAT:I.COORDINATE_SYSTEM.CARTESIAN);let d={modelMatrix:null,fromCoordinateOrigin:c,fromCoordinateSystem:u},p=this.projectPosition([f[0],f[1],0],d),m=this.projectPosition([f[2],f[3],0],d);r.bounds=[p[0],p[1],m[0],m[1]]}else n&&I.log.warn(`Could not find a mask layer with id: ${n}`)(),r.enabled=!1;this.setShaderModuleProps({mask:r})}};oe.defaultProps=so;oe.extensionName="MaskExtension";var di=oe;var yi=_(h(),1);var bi=_(h(),1);var Ve=_(h(),1),y={NONE:0,WRITE_HEIGHT_MAP:1,USE_HEIGHT_MAP:2,USE_COVER:3,USE_COVER_ONLY:4,SKIP:5},lo=Object.keys(y).map(t=>`const float TERRAIN_MODE_${t} = ${y[t]}.0;`).join(`
|
|
3331
|
+
`),pi=lo+`
|
|
3336
3332
|
layout(std140) uniform terrainUniforms {
|
|
3337
3333
|
float mode;
|
|
3338
3334
|
vec4 bounds;
|
|
3339
3335
|
} terrain;
|
|
3340
3336
|
|
|
3341
3337
|
uniform sampler2D terrain_map;
|
|
3342
|
-
`,ae={name:"terrain",dependencies:[Ve.project],vs:`${
|
|
3338
|
+
`,ae={name:"terrain",dependencies:[Ve.project],vs:`${pi}
|
|
3343
3339
|
out vec3 commonPos;
|
|
3344
3340
|
// In globe mode, absolute Mercator position for terrain FBO UV lookups
|
|
3345
3341
|
out vec2 terrainMercPos;
|
|
@@ -3352,7 +3348,7 @@ vec2 terrain_globe_to_mercator(vec3 globePosition) {
|
|
|
3352
3348
|
float y = atanh(sinLat);
|
|
3353
3349
|
return (vec2(x, y) + PI) * WORLD_SCALE;
|
|
3354
3350
|
}
|
|
3355
|
-
`,fs:`${
|
|
3351
|
+
`,fs:`${pi}in vec2 terrainMercPos;
|
|
3356
3352
|
in float terrainHeight;`,inject:{"vs:#main-start":`
|
|
3357
3353
|
if (terrain.mode == TERRAIN_MODE_SKIP) {
|
|
3358
3354
|
gl_Position = vec4(0.0);
|
|
@@ -3409,6 +3405,6 @@ if ((terrain.mode == TERRAIN_MODE_USE_COVER) || (terrain.mode == TERRAIN_MODE_US
|
|
|
3409
3405
|
}
|
|
3410
3406
|
return;
|
|
3411
3407
|
}
|
|
3412
|
-
`},getUniforms:(t={})=>{if(!t.dummyHeightMap)return{};if("terrainSkipRender"in t||"drawToTerrainHeightMap"in t){let{drawToTerrainHeightMap:e,heightMap:i,heightMapBounds:r,dummyHeightMap:n,terrainCover:o,useTerrainHeightMap:a,terrainSkipRender:s}=t,l=Ve.project.getUniforms(t.project),{commonOrigin:f}=l,c=s?y.SKIP:y.NONE,u=n,d=null;if(e)c=y.WRITE_HEIGHT_MAP,d=r;else if(a&&i)c=y.USE_HEIGHT_MAP,u=i,d=r;else if(o){let m=(t.isPicking?o.getPickingFramebuffer():o.getRenderFramebuffer())?.colorAttachments[0].texture;t.isPicking&&(c=y.SKIP),m?(u=m,c=c===y.SKIP?y.USE_COVER_ONLY:y.USE_COVER,d=o.bounds):t.isPicking&&!s&&(c=y.NONE)}return{mode:c,terrain_map:u,bounds:d?[d[0]-f[0],d[1]-f[1],d[2]-d[0],d[3]-d[1]]:[0,0,0,0]}}return{mode:y.NONE,terrain_map:t.dummyHeightMap,bounds:[0,0,0,0]}},uniformTypes:{mode:"f32",bounds:"vec4<f32>"}};var pi=_(h(),1);function se(t,e){return t.createFramebuffer({id:e.id,colorAttachments:[t.createTexture({id:e.id,...e.float&&{format:"rgba32float",type:5126},dimension:"2d",width:1,height:1,sampler:e.interpolate===!1?{minFilter:"nearest",magFilter:"nearest"}:{minFilter:"linear",magFilter:"linear"}})]})}var Pe=class{constructor(e){this.isDirty=!0,this.renderViewport=null,this.bounds=null,this.layers=[],this.targetBounds=null,this.targetBoundsCommon=null,this.targetLayer=e,this.tile=_i(e)}get id(){return this.targetLayer.id}get isActive(){return!!this.targetLayer.getCurrentLayer()}shouldUpdate({targetLayer:e,viewport:i,layers:r,layerNeedsRedraw:n}){e&&(this.targetLayer=e);let o=i?this._updateViewport(i):!1,a=r?this._updateLayers(r):!1;if(n){for(let s of this.layers)if(n[s]){a=!0;break}}return a||o}_updateLayers(e){let i=!1;if(e=this.tile?so(this.tile,e):e,e.length!==this.layers.length)i=!0;else for(let r=0;r<e.length;r++)if(e[r].id!==this.layers[r]){i=!0;break}return i&&(this.layers=e.map(r=>r.id)),i}_updateViewport(e){let i=this.targetLayer,r=!1;if(this.tile&&"boundingBox"in this.tile){if(!this.targetBounds){r=!0,this.targetBounds=this.tile.boundingBox;let o=re(this.targetBounds[0]),a=re(this.targetBounds[1]);this.targetBoundsCommon=[o[0],o[1],a[0],a[1]]}}else this.targetBounds!==i.getBounds()&&(r=!0,this.targetBounds=i.getBounds(),this.targetBoundsCommon=V([i],ye(e)));if(!this.targetBoundsCommon)return!1;let n=Math.ceil(e.zoom+.5);if(this.tile)this.bounds=this.targetBoundsCommon;else{let o=this.renderViewport?.zoom;r=r||n!==o;let a=e instanceof pi._GlobeViewport?this.targetBoundsCommon:H(this.targetBoundsCommon,e),s=this.bounds;r=r||!s||a.some((l,f)=>l!==s[f]),this.bounds=a}return r&&(this.renderViewport=j({bounds:this.bounds,zoom:n,viewport:e})),r}getRenderFramebuffer(){return!this.renderViewport||this.layers.length===0?null:(this.fbo||(this.fbo=se(this.targetLayer.context.device,{id:this.id})),this.fbo)}getPickingFramebuffer(){return!this.renderViewport||this.layers.length===0&&!this.targetLayer.props.pickable?null:(this.pickingFbo||(this.pickingFbo=se(this.targetLayer.context.device,{id:`${this.id}-picking`,interpolate:!1})),this.pickingFbo)}filterLayers(e){return e.filter(({id:i})=>this.layers.includes(i))}delete(){let{fbo:e,pickingFbo:i}=this;e&&(e.colorAttachments[0].destroy(),e.destroy()),i&&(i.colorAttachments[0].destroy(),i.destroy())}};function so(t,e){return e.filter(i=>{let r=_i(i);return r?lo(t.boundingBox,r.boundingBox):!0})}function _i(t){for(;t;){let{tile:e}=t.props;if(e)return e;t=t.parent}return null}function lo(t,e){return t&&e?t[0][0]<e[1][0]&&e[0][0]<t[1][0]&&t[0][1]<e[1][1]&&e[0][1]<t[1][1]:!1}var hi=_(h(),1),fo={blendColorOperation:"max",blendColorSrcFactor:"one",blendColorDstFactor:"one",blendAlphaOperation:"max",blendAlphaSrcFactor:"one",blendAlphaDstFactor:"one"},Ee=class extends hi._LayersPass{getRenderableLayers(e,i){let{layers:r}=i,n=[],o=this._getDrawLayerParams(e,i,!0);for(let a=0;a<r.length;a++){let s=r[a];!s.isComposite&&o[a].shouldDrawLayer&&n.push(s)}return n}renderHeightMap(e,i){let r=e.getRenderFramebuffer(),n=e.renderViewport;!r||!n||(r.resize(n),this.render({...i,target:r,pass:"terrain-height-map",layers:i.layers,viewports:[n],effects:[],clearColor:[0,0,0,0]}))}renderTerrainCover(e,i){let r=e.getRenderFramebuffer(),n=e.renderViewport;if(!r||!n)return;let o=e.filterLayers(i.layers);r.resize(n),this.render({...i,target:r,pass:`terrain-cover-${e.id}`,layers:o,viewports:[n],clearColor:[0,0,0,0]})}getLayerParameters(e,i,r){return{...e.props.parameters,blend:!0,depthCompare:"always",...e.props.operation.includes("terrain")&&fo}}getShaderModuleProps(e,i,r){return{terrain:{project:r.project}}}};var mi=_(h(),1),Me=class extends mi._PickLayersPass{constructor(){super(...arguments),this.drawParameters={}}getRenderableLayers(e,i){let{layers:r}=i,n=[];this.drawParameters={},this._resetColorEncoder(i.pickZ);let o=this._getDrawLayerParams(e,i);for(let a=0;a<r.length;a++){let s=r[a];!s.isComposite&&o[a].shouldDrawLayer&&(n.push(s),this.drawParameters[s.id]=o[a].layerParameters)}return n}renderTerrainCover(e,i){let r=e.getPickingFramebuffer(),n=e.renderViewport;if(!r||!n)return;let o=e.filterLayers(i.layers),a=e.targetLayer;a.props.pickable&&o.unshift(a),r.resize(n);let l=this.drawParameters[a.id]?.blendColor?.[3]??0;this.render({...i,pickingFBO:r,pass:`terrain-cover-picking-${e.id}`,layers:o,viewports:[n],cullRect:void 0,deviceRect:n,pickZ:!1,clearColor:[0,0,0,l]})}getLayerParameters(e,i,r){let n;return this.drawParameters[e.id]?n=this.drawParameters[e.id]:(n=super.getLayerParameters(e,i,r),n.blend=!0),{...n,depthCompare:"always",blendAlphaSrcFactor:"constant"}}getShaderModuleProps(e,i,r){return{...super.getShaderModuleProps(e,i,r),terrain:{project:r.project}}}};var vi=_(h(),1),gi=2048,le=class{static isSupported(e){return e.isTextureFormatRenderable("rgba32float")}constructor(e){this.renderViewport=null,this.bounds=null,this.layers=[],this.layersBounds=[],this.layersBoundsCommon=null,this.lastViewport=null,this.device=e}getRenderFramebuffer(){return this.renderViewport?(this.fbo||(this.fbo=se(this.device,{id:"height-map",float:!0})),this.fbo):null}shouldUpdate({layers:e,viewport:i}){let r=e.length!==this.layers.length||e.some((o,a)=>o!==this.layers[a]||o.props.transitions||o.getBounds()!==this.layersBounds[a]);r&&(this.layers=e,this.layersBounds=e.map(o=>o.getBounds()),this.layersBoundsCommon=V(e,ye(i)));let n=!this.lastViewport||!i.equals(this.lastViewport);if(!this.layersBoundsCommon)this.renderViewport=null;else if(r||n){let o=i instanceof vi._GlobeViewport?this.layersBoundsCommon:H(this.layersBoundsCommon,i);if(o[2]<=o[0]||o[3]<=o[1])return this.renderViewport=null,!1;this.bounds=o,this.lastViewport=i;let a=i.scale,s=(o[2]-o[0])*a,l=(o[3]-o[1])*a,f=i.isGeospatial?re([i.longitude??0,i.latitude??0]):[i.center[0],i.center[1]];return this.renderViewport=s>0||l>0?j({bounds:[f[0]-1,f[1]-1,f[0]+1,f[1]+1],zoom:i.zoom,width:Math.min(s,gi),height:Math.min(l,gi),viewport:i}):null,!0}return!1}delete(){this.fbo&&(this.fbo.colorAttachments[0].delete(),this.fbo.delete())}};var Ae=class{constructor(){this.id="terrain-effect",this.props=null,this.useInPicking=!0,this.isPicking=!1,this.isDrapingEnabled=!1,this.terrainCovers=new Map}setup({device:e,deck:i}){this.dummyHeightMap=e.createTexture({width:1,height:1,data:new Uint8Array([0,0,0,0])}),this.terrainPass=new Ee(e,{id:"terrain"}),this.terrainPickingPass=new Me(e,{id:"terrain-picking"}),le.isSupported(e)?this.heightMap=new le(e):xi.log.warn("Terrain offset mode is not supported by this browser")(),i._addDefaultShaderModule(ae)}preRender(e){if(e.pickZ){this.isDrapingEnabled=!1;return}let{viewports:i}=e,r=e.pass.startsWith("picking");this.isPicking=r,this.isDrapingEnabled=!0;let n=i[0],o=(r?this.terrainPickingPass:this.terrainPass).getRenderableLayers(n,e),a=o.filter(f=>f.props.operation.includes("terrain"));if(a.length===0)return;r||o.filter(c=>c.state.terrainDrawMode==="offset").length>0&&this._updateHeightMap(a,n,e);let s=o.filter(f=>f.state.terrainDrawMode==="drape"),l=e.effects?.filter(f=>f!==this);this._updateTerrainCovers(a,s,n,{...e,effects:l})}getShaderModuleProps(e,i){if(e.props.operation.includes("mask"))return{terrain:{dummyHeightMap:this.dummyHeightMap}};let{terrainDrawMode:r}=e.state,n=this.isDrapingEnabled?this.terrainCovers.get(e.id)??null:null;return this.isPicking&&e.props.operation.includes("terrain")&&(e.state._hasPickingCover=!!n?.getPickingFramebuffer()),{terrain:{project:i.project,isPicking:this.isPicking,heightMap:this.heightMap?.getRenderFramebuffer()?.colorAttachments[0].texture||null,heightMapBounds:this.heightMap?.bounds,dummyHeightMap:this.dummyHeightMap,terrainCover:n,useTerrainHeightMap:r==="offset",terrainSkipRender:r==="drape"||!e.props.operation.includes("draw")}}}cleanup({deck:e}){this.dummyHeightMap&&(this.dummyHeightMap.delete(),this.dummyHeightMap=void 0),this.heightMap&&(this.heightMap.delete(),this.heightMap=void 0);for(let i of this.terrainCovers.values())i.delete();this.terrainCovers.clear(),e._removeDefaultShaderModule(ae)}_updateHeightMap(e,i,r){!this.heightMap||!this.heightMap.shouldUpdate({layers:e,viewport:i})||this.terrainPass.renderHeightMap(this.heightMap,{...r,layers:e,shaderModuleProps:{terrain:{heightMapBounds:this.heightMap.bounds,dummyHeightMap:this.dummyHeightMap,drawToTerrainHeightMap:!0},project:{devicePixelRatio:1}}})}_updateTerrainCovers(e,i,r,n){let o={};for(let a of i)a.state.terrainCoverNeedsRedraw&&(o[a.id]=!0,a.state.terrainCoverNeedsRedraw=!1);for(let a of this.terrainCovers.values())a.isDirty=a.isDirty||a.shouldUpdate({layerNeedsRedraw:o});for(let a of e)this._updateTerrainCover(a,i,r,n);this.isPicking||this._pruneTerrainCovers()}_updateTerrainCover(e,i,r,n){let o=this.isPicking?this.terrainPickingPass:this.terrainPass,a=this.terrainCovers.get(e.id);a||(a=new Pe(e),this.terrainCovers.set(e.id,a));try{let s=a.shouldUpdate({targetLayer:e,viewport:r,layers:i});(this.isPicking||a.isDirty||s)&&(o.renderTerrainCover(a,{...n,layers:i,shaderModuleProps:{terrain:{dummyHeightMap:this.dummyHeightMap,terrainSkipRender:!1},project:{devicePixelRatio:1}}}),this.isPicking||(a.isDirty=!1))}catch(s){e.raiseError(s,`Error rendering terrain cover ${a.id}`)}}_pruneTerrainCovers(){let e=[];for(let[i,r]of this.terrainCovers)r.isActive||e.push(i);for(let i of e)this.terrainCovers.delete(i)}};var co={terrainDrawMode:void 0},fe=class extends bi.LayerExtension{getShaders(){return{modules:[ae]}}initializeState(){this.context.deck?._addDefaultEffect(new Ae)}updateState(e){let{props:i,oldProps:r}=e;if(this.state.terrainDrawMode&&i.terrainDrawMode===r.terrainDrawMode&&i.extruded===r.extruded)return;let{terrainDrawMode:n}=i;if(!n){let o=this.props.extruded,a=this.getAttributeManager()?.attributes,s=a&&"instancePositions"in a;n=o||s?"offset":"drape"}this.setState({terrainDrawMode:n})}onNeedsRedraw(){let e=this.state;e.terrainDrawMode==="drape"&&(e.terrainCoverNeedsRedraw=!0)}};fe.defaultProps=co;fe.extensionName="TerrainExtension";var yi=fe;return Oi(ce);})();
|
|
3408
|
+
`},getUniforms:(t={})=>{if(!t.dummyHeightMap)return{};if("terrainSkipRender"in t||"drawToTerrainHeightMap"in t){let{drawToTerrainHeightMap:e,heightMap:i,heightMapBounds:r,dummyHeightMap:n,terrainCover:o,useTerrainHeightMap:a,terrainSkipRender:s}=t,l=Ve.project.getUniforms(t.project),{commonOrigin:f}=l,c=s?y.SKIP:y.NONE,u=n,d=null;if(e)c=y.WRITE_HEIGHT_MAP,d=r;else if(a&&i)c=y.USE_HEIGHT_MAP,u=i,d=r;else if(o){let m=(t.isPicking?o.getPickingFramebuffer():o.getRenderFramebuffer())?.colorAttachments[0].texture;t.isPicking&&(c=y.SKIP),m?(u=m,c=c===y.SKIP?y.USE_COVER_ONLY:y.USE_COVER,d=o.bounds):t.isPicking&&!s&&(c=y.NONE)}return{mode:c,terrain_map:u,bounds:d?[d[0]-f[0],d[1]-f[1],d[2]-d[0],d[3]-d[1]]:[0,0,0,0]}}return{mode:y.NONE,terrain_map:t.dummyHeightMap,bounds:[0,0,0,0]}},uniformTypes:{mode:"f32",bounds:"vec4<f32>"}};var _i=_(h(),1);function se(t,e){return t.createFramebuffer({id:e.id,colorAttachments:[t.createTexture({id:e.id,...e.float&&{format:"rgba32float",type:5126},dimension:"2d",width:1,height:1,sampler:e.interpolate===!1?{minFilter:"nearest",magFilter:"nearest"}:{minFilter:"linear",magFilter:"linear"}})]})}var Pe=class{constructor(e){this.isDirty=!0,this.renderViewport=null,this.bounds=null,this.layers=[],this.targetBounds=null,this.targetBoundsCommon=null,this.targetLayer=e,this.tile=hi(e)}get id(){return this.targetLayer.id}get isActive(){return!!this.targetLayer.getCurrentLayer()}shouldUpdate({targetLayer:e,viewport:i,layers:r,layerNeedsRedraw:n}){e&&(this.targetLayer=e);let o=i?this._updateViewport(i):!1,a=r?this._updateLayers(r):!1;if(n){for(let s of this.layers)if(n[s]){a=!0;break}}return a||o}_updateLayers(e){let i=!1;if(e=this.tile?fo(this.tile,e):e,e.length!==this.layers.length)i=!0;else for(let r=0;r<e.length;r++)if(e[r].id!==this.layers[r]){i=!0;break}return i&&(this.layers=e.map(r=>r.id)),i}_updateViewport(e){let i=this.targetLayer,r=!1;if(this.tile&&"boundingBox"in this.tile){if(!this.targetBounds){r=!0,this.targetBounds=this.tile.boundingBox;let o=re(this.targetBounds[0]),a=re(this.targetBounds[1]);this.targetBoundsCommon=[o[0],o[1],a[0],a[1]]}}else this.targetBounds!==i.getBounds()&&(r=!0,this.targetBounds=i.getBounds(),this.targetBoundsCommon=j([i],ye(e)));if(!this.targetBoundsCommon)return!1;let n=Math.ceil(e.zoom+.5);if(this.tile)this.bounds=this.targetBoundsCommon;else{let o=this.renderViewport?.zoom;r=r||n!==o;let a=e instanceof _i._GlobeViewport?this.targetBoundsCommon:G(this.targetBoundsCommon,e),s=this.bounds;r=r||!s||a.some((l,f)=>l!==s[f]),this.bounds=a}return r&&(this.renderViewport=H({bounds:this.bounds,zoom:n,viewport:e})),r}getRenderFramebuffer(){return!this.renderViewport||this.layers.length===0?null:(this.fbo||(this.fbo=se(this.targetLayer.context.device,{id:this.id})),this.fbo)}getPickingFramebuffer(){return!this.renderViewport||this.layers.length===0&&!this.targetLayer.props.pickable?null:(this.pickingFbo||(this.pickingFbo=se(this.targetLayer.context.device,{id:`${this.id}-picking`,interpolate:!1})),this.pickingFbo)}filterLayers(e){return e.filter(({id:i})=>this.layers.includes(i))}delete(){let{fbo:e,pickingFbo:i}=this;e&&(e.colorAttachments[0].destroy(),e.destroy()),i&&(i.colorAttachments[0].destroy(),i.destroy())}};function fo(t,e){return e.filter(i=>{let r=hi(i);return r?co(t.boundingBox,r.boundingBox):!0})}function hi(t){for(;t;){let{tile:e}=t.props;if(e)return e;t=t.parent}return null}function co(t,e){return t&&e?t[0][0]<e[1][0]&&e[0][0]<t[1][0]&&t[0][1]<e[1][1]&&e[0][1]<t[1][1]:!1}var mi=_(h(),1),uo={blendColorOperation:"max",blendColorSrcFactor:"one",blendColorDstFactor:"one",blendAlphaOperation:"max",blendAlphaSrcFactor:"one",blendAlphaDstFactor:"one"},Ee=class extends mi._LayersPass{getRenderableLayers(e,i){let{layers:r}=i,n=[],o=this._getDrawLayerParams(e,i,!0);for(let a=0;a<r.length;a++){let s=r[a];!s.isComposite&&o[a].shouldDrawLayer&&n.push(s)}return n}renderHeightMap(e,i){let r=e.getRenderFramebuffer(),n=e.renderViewport;!r||!n||(r.resize(n),this.render({...i,target:r,pass:"terrain-height-map",layers:i.layers,viewports:[n],effects:[],clearColor:[0,0,0,0]}))}renderTerrainCover(e,i){let r=e.getRenderFramebuffer(),n=e.renderViewport;if(!r||!n)return;let o=e.filterLayers(i.layers);r.resize(n),this.render({...i,target:r,pass:`terrain-cover-${e.id}`,layers:o,viewports:[n],clearColor:[0,0,0,0]})}getLayerParameters(e,i,r){return{...e.props.parameters,blend:!0,depthCompare:"always",...e.props.operation.includes("terrain")&&uo}}getShaderModuleProps(e,i,r){return{terrain:{project:r.project}}}};var gi=_(h(),1),Me=class extends gi._PickLayersPass{constructor(){super(...arguments),this.drawParameters={}}getRenderableLayers(e,i){let{layers:r}=i,n=[];this.drawParameters={},this._resetColorEncoder(i.pickZ);let o=this._getDrawLayerParams(e,i);for(let a=0;a<r.length;a++){let s=r[a];!s.isComposite&&o[a].shouldDrawLayer&&(n.push(s),this.drawParameters[s.id]=o[a].layerParameters)}return n}renderTerrainCover(e,i){let r=e.getPickingFramebuffer(),n=e.renderViewport;if(!r||!n)return;let o=e.filterLayers(i.layers),a=e.targetLayer;a.props.pickable&&o.unshift(a),r.resize(n);let l=this.drawParameters[a.id]?.blendColor?.[3]??0;this.render({...i,pickingFBO:r,pass:`terrain-cover-picking-${e.id}`,layers:o,viewports:[n],cullRect:void 0,deviceRect:n,pickZ:!1,clearColor:[0,0,0,l]})}getLayerParameters(e,i,r){let n;return this.drawParameters[e.id]?n=this.drawParameters[e.id]:(n=super.getLayerParameters(e,i,r),n.blend=!0),{...n,depthCompare:"always",blendAlphaSrcFactor:"constant"}}getShaderModuleProps(e,i,r){return{...super.getShaderModuleProps(e,i,r),terrain:{project:r.project}}}};var xi=_(h(),1),vi=2048,le=class{static isSupported(e){return e.isTextureFormatRenderable("rgba32float")}constructor(e){this.renderViewport=null,this.bounds=null,this.layers=[],this.layersBounds=[],this.layersBoundsCommon=null,this.lastViewport=null,this.device=e}getRenderFramebuffer(){return this.renderViewport?(this.fbo||(this.fbo=se(this.device,{id:"height-map",float:!0})),this.fbo):null}shouldUpdate({layers:e,viewport:i}){let r=e.length!==this.layers.length||e.some((o,a)=>o!==this.layers[a]||o.props.transitions||o.getBounds()!==this.layersBounds[a]);r&&(this.layers=e,this.layersBounds=e.map(o=>o.getBounds()),this.layersBoundsCommon=j(e,ye(i)));let n=!this.lastViewport||!i.equals(this.lastViewport);if(!this.layersBoundsCommon)this.renderViewport=null;else if(r||n){let o=i instanceof xi._GlobeViewport?this.layersBoundsCommon:G(this.layersBoundsCommon,i);if(o[2]<=o[0]||o[3]<=o[1])return this.renderViewport=null,!1;this.bounds=o,this.lastViewport=i;let a=i.scale,s=(o[2]-o[0])*a,l=(o[3]-o[1])*a,f=i.isGeospatial?re([i.longitude??0,i.latitude??0]):[i.center[0],i.center[1]];return this.renderViewport=s>0||l>0?H({bounds:[f[0]-1,f[1]-1,f[0]+1,f[1]+1],zoom:i.zoom,width:Math.min(s,vi),height:Math.min(l,vi),viewport:i}):null,!0}return!1}delete(){this.fbo&&(this.fbo.colorAttachments[0].delete(),this.fbo.delete())}};var Ae=class{constructor(){this.id="terrain-effect",this.props=null,this.useInPicking=!0,this.isPicking=!1,this.isDrapingEnabled=!1,this.terrainCovers=new Map}setup({device:e,deck:i}){this.dummyHeightMap=e.createTexture({width:1,height:1,data:new Uint8Array([0,0,0,0])}),this.terrainPass=new Ee(e,{id:"terrain"}),this.terrainPickingPass=new Me(e,{id:"terrain-picking"}),le.isSupported(e)?this.heightMap=new le(e):bi.log.warn("Terrain offset mode is not supported by this browser")(),i._addDefaultShaderModule(ae)}preRender(e){if(e.pickZ){this.isDrapingEnabled=!1;return}let{viewports:i}=e,r=e.pass.startsWith("picking");this.isPicking=r,this.isDrapingEnabled=!0;let n=i[0],o=(r?this.terrainPickingPass:this.terrainPass).getRenderableLayers(n,e),a=o.filter(f=>f.props.operation.includes("terrain"));if(a.length===0)return;r||o.filter(c=>c.state.terrainDrawMode==="offset").length>0&&this._updateHeightMap(a,n,e);let s=o.filter(f=>f.state.terrainDrawMode==="drape"),l=e.effects?.filter(f=>f!==this);this._updateTerrainCovers(a,s,n,{...e,effects:l})}getShaderModuleProps(e,i){if(e.props.operation.includes("mask"))return{terrain:{dummyHeightMap:this.dummyHeightMap}};let{terrainDrawMode:r}=e.state,n=this.isDrapingEnabled?this.terrainCovers.get(e.id)??null:null;return this.isPicking&&e.props.operation.includes("terrain")&&(e.state._hasPickingCover=!!n?.getPickingFramebuffer()),{terrain:{project:i.project,isPicking:this.isPicking,heightMap:this.heightMap?.getRenderFramebuffer()?.colorAttachments[0].texture||null,heightMapBounds:this.heightMap?.bounds,dummyHeightMap:this.dummyHeightMap,terrainCover:n,useTerrainHeightMap:r==="offset",terrainSkipRender:r==="drape"||!e.props.operation.includes("draw")}}}cleanup({deck:e}){this.dummyHeightMap&&(this.dummyHeightMap.delete(),this.dummyHeightMap=void 0),this.heightMap&&(this.heightMap.delete(),this.heightMap=void 0);for(let i of this.terrainCovers.values())i.delete();this.terrainCovers.clear(),e._removeDefaultShaderModule(ae)}_updateHeightMap(e,i,r){!this.heightMap||!this.heightMap.shouldUpdate({layers:e,viewport:i})||this.terrainPass.renderHeightMap(this.heightMap,{...r,layers:e,shaderModuleProps:{terrain:{heightMapBounds:this.heightMap.bounds,dummyHeightMap:this.dummyHeightMap,drawToTerrainHeightMap:!0},project:{devicePixelRatio:1}}})}_updateTerrainCovers(e,i,r,n){let o={};for(let a of i)a.state.terrainCoverNeedsRedraw&&(o[a.id]=!0,a.state.terrainCoverNeedsRedraw=!1);for(let a of this.terrainCovers.values())a.isDirty=a.isDirty||a.shouldUpdate({layerNeedsRedraw:o});for(let a of e)this._updateTerrainCover(a,i,r,n);this.isPicking||this._pruneTerrainCovers()}_updateTerrainCover(e,i,r,n){let o=this.isPicking?this.terrainPickingPass:this.terrainPass,a=this.terrainCovers.get(e.id);a||(a=new Pe(e),this.terrainCovers.set(e.id,a));try{let s=a.shouldUpdate({targetLayer:e,viewport:r,layers:i});(this.isPicking||a.isDirty||s)&&(o.renderTerrainCover(a,{...n,layers:i,shaderModuleProps:{terrain:{dummyHeightMap:this.dummyHeightMap,terrainSkipRender:!1},project:{devicePixelRatio:1}}}),this.isPicking||(a.isDirty=!1))}catch(s){e.raiseError(s,`Error rendering terrain cover ${a.id}`)}}_pruneTerrainCovers(){let e=[];for(let[i,r]of this.terrainCovers)r.isActive||e.push(i);for(let i of e)this.terrainCovers.delete(i)}};var po={terrainDrawMode:void 0},fe=class extends yi.LayerExtension{getShaders(){return{modules:[ae]}}initializeState(){this.context.deck?._addDefaultEffect(new Ae)}updateState(e){let{props:i,oldProps:r}=e;if(this.state.terrainDrawMode&&i.terrainDrawMode===r.terrainDrawMode&&i.extruded===r.extruded)return;let{terrainDrawMode:n}=i;if(!n){let o=this.props.extruded,a=this.getAttributeManager()?.attributes,s=a&&"instancePositions"in a;n=o||s?"offset":"drape"}this.setState({terrainDrawMode:n})}onNeedsRedraw(){let e=this.state;e.terrainDrawMode==="drape"&&(e.terrainCoverNeedsRedraw=!0)}};fe.defaultProps=po;fe.extensionName="TerrainExtension";var Pi=fe;return Bi(ce);})();
|
|
3413
3409
|
return __exports__;
|
|
3414
3410
|
});
|