@deck.gl/extensions 9.2.7 → 9.2.9
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/brushing/brushing-extension.d.ts +1 -1
- package/dist/brushing/brushing-extension.d.ts.map +1 -1
- package/dist/clip/clip-extension.d.ts +2 -2
- package/dist/clip/clip-extension.d.ts.map +1 -1
- package/dist/data-filter/data-filter-extension.d.ts +2 -2
- package/dist/data-filter/data-filter-extension.d.ts.map +1 -1
- package/dist/dist.dev.js +18 -11
- package/dist/fill-style/fill-style-extension.d.ts +1 -1
- package/dist/fill-style/fill-style-extension.d.ts.map +1 -1
- package/dist/index.cjs +18 -11
- package/dist/index.cjs.map +2 -2
- package/dist/path-style/path-style-extension.d.ts +2 -2
- package/dist/path-style/path-style-extension.d.ts.map +1 -1
- package/dist/path-style/path-style-extension.js +12 -11
- package/dist/path-style/path-style-extension.js.map +1 -1
- package/dist/path-style/shaders.glsl.d.ts +6 -0
- package/dist/path-style/shaders.glsl.d.ts.map +1 -1
- package/dist/path-style/shaders.glsl.js +6 -0
- package/dist/path-style/shaders.glsl.js.map +1 -1
- package/dist.min.js +19 -13
- package/package.json +2 -2
- package/src/brushing/brushing-extension.ts +1 -1
- package/src/clip/clip-extension.ts +2 -2
- package/src/data-filter/data-filter-extension.ts +2 -2
- package/src/fill-style/fill-style-extension.ts +1 -1
- package/src/path-style/path-style-extension.ts +15 -14
- package/src/path-style/shaders.glsl.ts +14 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { LayerExtension } from '@deck.gl/core';
|
|
2
|
-
import type { Layer, LayerContext,
|
|
2
|
+
import type { Accessor, Layer, LayerContext, UpdateParameters } from '@deck.gl/core';
|
|
3
3
|
export type PathStyleExtensionProps<DataT = any> = {
|
|
4
4
|
/**
|
|
5
5
|
* Accessor for the dash array to draw each path with: `[dashSize, gapSize]` relative to the width of the path.
|
|
6
6
|
* Requires the `dash` option to be on.
|
|
7
7
|
*/
|
|
8
|
-
getDashArray?: Accessor<DataT, [number, number]
|
|
8
|
+
getDashArray?: Accessor<DataT, Readonly<[number, number]>>;
|
|
9
9
|
/**
|
|
10
10
|
* Accessor for the offset to draw each path with, relative to the width of the path.
|
|
11
11
|
* Negative offset is to the left hand side, and positive offset is to the right hand side.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-style-extension.d.ts","sourceRoot":"","sources":["../../src/path-style/path-style-extension.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,cAAc,EAAgC,MAAM,eAAe,CAAC;AAI5E,OAAO,KAAK,EAAC,
|
|
1
|
+
{"version":3,"file":"path-style-extension.d.ts","sourceRoot":"","sources":["../../src/path-style/path-style-extension.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,cAAc,EAAgC,MAAM,eAAe,CAAC;AAI5E,OAAO,KAAK,EAAC,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAC,MAAM,eAAe,CAAC;AAenF,MAAM,MAAM,uBAAuB,CAAC,KAAK,GAAG,GAAG,IAAI;IACjD;;;OAGG;IACH,YAAY,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3D;;;;OAIG;IACH,SAAS,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACpC;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC;;;OAGG;IACH,IAAI,EAAE,OAAO,CAAC;IACd;;;OAGG;IACH,MAAM,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,iBAAiB,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,kGAAkG;AAClG,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,cAAc,CAAC,yBAAyB,CAAC;IACvF,MAAM,CAAC,YAAY;;;;;;;;;;;MAAgB;IACnC,MAAM,CAAC,aAAa,SAAwB;gBAEhC,EACV,IAAY,EACZ,MAAc,EACd,iBAAyB,EAC1B,GAAE,OAAO,CAAC,yBAAyB,CAAM;IAI1C,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,uBAAuB,CAAC,GAAG,OAAO;IAIzD,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,uBAAuB,CAAC,EAAE,SAAS,EAAE,IAAI,GAAG,GAAG;IAiCtE,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,uBAAuB,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI;IA4B5F,WAAW,CACT,IAAI,EAAE,KAAK,CAAC,uBAAuB,CAAC,EACpC,MAAM,EAAE,gBAAgB,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,EACxD,SAAS,EAAE,IAAI;IAejB,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,uBAAuB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE;CAqB5F"}
|
|
@@ -24,8 +24,12 @@ class PathStyleExtension extends LayerExtension {
|
|
|
24
24
|
}
|
|
25
25
|
// Merge shader injection
|
|
26
26
|
let result = {};
|
|
27
|
+
const defines = {};
|
|
27
28
|
if (extension.opts.dash) {
|
|
28
29
|
result = mergeShaders(result, dashShaders);
|
|
30
|
+
if (extension.opts.highPrecisionDash) {
|
|
31
|
+
defines.HIGH_PRECISION_DASH = true;
|
|
32
|
+
}
|
|
29
33
|
}
|
|
30
34
|
if (extension.opts.offset) {
|
|
31
35
|
result = mergeShaders(result, offsetShaders);
|
|
@@ -40,7 +44,8 @@ class PathStyleExtension extends LayerExtension {
|
|
|
40
44
|
}
|
|
41
45
|
};
|
|
42
46
|
return {
|
|
43
|
-
modules: [pathStyle]
|
|
47
|
+
modules: [pathStyle],
|
|
48
|
+
defines
|
|
44
49
|
};
|
|
45
50
|
}
|
|
46
51
|
initializeState(context, extension) {
|
|
@@ -52,19 +57,15 @@ class PathStyleExtension extends LayerExtension {
|
|
|
52
57
|
if (extension.opts.dash) {
|
|
53
58
|
attributeManager.addInstanced({
|
|
54
59
|
instanceDashArrays: { size: 2, accessor: 'getDashArray' },
|
|
55
|
-
|
|
60
|
+
...(extension.opts.highPrecisionDash
|
|
56
61
|
? {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
: {
|
|
62
|
-
size: 1,
|
|
63
|
-
update: attribute => {
|
|
64
|
-
attribute.constant = true;
|
|
65
|
-
attribute.value = [0];
|
|
62
|
+
instanceDashOffsets: {
|
|
63
|
+
size: 1,
|
|
64
|
+
accessor: 'getPath',
|
|
65
|
+
transform: extension.getDashOffsets.bind(this)
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
|
+
: {})
|
|
68
69
|
});
|
|
69
70
|
}
|
|
70
71
|
if (extension.opts.offset) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-style-extension.js","sourceRoot":"","sources":["../../src/path-style/path-style-extension.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EAAC,cAAc,EAAE,aAAa,IAAI,YAAY,EAAC,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAC,IAAI,EAAC,MAAM,eAAe,CAAC;AACnC,OAAO,EAAC,WAAW,
|
|
1
|
+
{"version":3,"file":"path-style-extension.js","sourceRoot":"","sources":["../../src/path-style/path-style-extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shaders.glsl.d.ts","sourceRoot":"","sources":["../../src/path-style/shaders.glsl.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,WAAW;;;;;;;
|
|
1
|
+
{"version":3,"file":"shaders.glsl.d.ts","sourceRoot":"","sources":["../../src/path-style/shaders.glsl.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,OAAO,GAAG;IAEpB;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B,CAAC;AAEF,eAAO,MAAM,WAAW;;;;;;;CA4EvB,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;CAwBzB,CAAC"}
|
|
@@ -5,13 +5,19 @@ export const dashShaders = {
|
|
|
5
5
|
inject: {
|
|
6
6
|
'vs:#decl': `
|
|
7
7
|
in vec2 instanceDashArrays;
|
|
8
|
+
#ifdef HIGH_PRECISION_DASH
|
|
8
9
|
in float instanceDashOffsets;
|
|
10
|
+
#endif
|
|
9
11
|
out vec2 vDashArray;
|
|
10
12
|
out float vDashOffset;
|
|
11
13
|
`,
|
|
12
14
|
'vs:#main-end': `
|
|
13
15
|
vDashArray = instanceDashArrays;
|
|
16
|
+
#ifdef HIGH_PRECISION_DASH
|
|
14
17
|
vDashOffset = instanceDashOffsets / width.x;
|
|
18
|
+
#else
|
|
19
|
+
vDashOffset = 0.0;
|
|
20
|
+
#endif
|
|
15
21
|
`,
|
|
16
22
|
'fs:#decl': `
|
|
17
23
|
uniform pathStyleUniforms {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shaders.glsl.js","sourceRoot":"","sources":["../../src/path-style/shaders.glsl.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;
|
|
1
|
+
{"version":3,"file":"shaders.glsl.js","sourceRoot":"","sources":["../../src/path-style/shaders.glsl.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAUpC,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,MAAM,EAAE;QACN,UAAU,EAAE;;;;;;;CAOf;QAEG,cAAc,EAAE;;;;;;;CAOnB;QAEG,UAAU;;;;;;;CAQb;QAEG,0DAA0D;QAC1D,sDAAsD;QACtD,6CAA6C;QAC7C,aAAa;QACb,oBAAoB;QACpB,mEAAmE;QACnE,kEAAkE;QAClE,mEAAmE;QACnE,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCnB;KACE;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,MAAM,EAAE;QACN,UAAU,EAAE;;CAEf;QACG,uBAAuB;;;CAG1B;QACG,cAAc;;;;;;CAMjB;QACG,gBAAgB;;;;;;CAMnB;KACE;CACF,CAAC"}
|
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 jt=Object.create;var Q=Object.defineProperty;var Vt=Object.getOwnPropertyDescriptor;var zt=Object.getOwnPropertyNames;var Ut=Object.getPrototypeOf,Gt=Object.prototype.hasOwnProperty;var Te=(o,e)=>()=>(e||o((e={exports:{}}).exports,e),e.exports),Ae=(o,e)=>{for(var t in e)Q(o,t,{get:e[t],enumerable:!0})},X=(o,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of zt(e))!Gt.call(o,s)&&s!==t&&Q(o,s,{get:()=>e[s],enumerable:!(r=Vt(e,s))||r.enumerable});return o},y=(o,e,t)=>(X(o,e,"default"),t&&X(t,e,"default")),d=(o,e,t)=>(t=o!=null?jt(Ut(o)):{},X(e||!o||!o.__esModule?Q(t,"default",{value:o,enumerable:!0}):t,o)),
|
|
7
|
+
"use strict";var __exports__=(()=>{var jt=Object.create;var Q=Object.defineProperty;var Vt=Object.getOwnPropertyDescriptor;var zt=Object.getOwnPropertyNames;var Ut=Object.getPrototypeOf,Gt=Object.prototype.hasOwnProperty;var Te=(o,e)=>()=>(e||o((e={exports:{}}).exports,e),e.exports),Ae=(o,e)=>{for(var t in e)Q(o,t,{get:e[t],enumerable:!0})},X=(o,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of zt(e))!Gt.call(o,s)&&s!==t&&Q(o,s,{get:()=>e[s],enumerable:!(r=Vt(e,s))||r.enumerable});return o},y=(o,e,t)=>(X(o,e,"default"),t&&X(t,e,"default")),d=(o,e,t)=>(t=o!=null?jt(Ut(o)):{},X(e||!o||!o.__esModule?Q(t,"default",{value:o,enumerable:!0}):t,o)),Ht=o=>X(Q({},"__esModule",{value:!0}),o);var _=Te((Dr,Oe)=>{Oe.exports=globalThis.deck});var He=Te((Hr,Ge)=>{Ge.exports=globalThis.luma});var Z={};Ae(Z,{BrushingExtension:()=>Re,ClipExtension:()=>xt,CollisionFilterExtension:()=>Ft,DataFilterExtension:()=>Ze,FillStyleExtension:()=>ht,Fp64Extension:()=>ct,MaskExtension:()=>St,PathStyleExtension:()=>pt,_TerrainExtension:()=>Dt,project64:()=>re});var g={},Le=d(_(),1);y(g,d(_(),1));if(!Le.Layer)throw new Error("@deck.gl/core is not found");y(Z,g);var ke=d(_(),1);var Se=d(_(),1),Ce=`uniform brushingUniforms {
|
|
8
8
|
bool enabled;
|
|
9
9
|
highp int target;
|
|
10
10
|
vec2 mousePos;
|
|
11
11
|
float radius;
|
|
12
12
|
} brushing;
|
|
13
|
-
`,
|
|
13
|
+
`,qt=`
|
|
14
14
|
in vec2 brushingTargets;
|
|
15
15
|
|
|
16
16
|
out float brushing_isVisible;
|
|
@@ -34,12 +34,12 @@
|
|
|
34
34
|
brushing_isVisible = float(visible);
|
|
35
35
|
}
|
|
36
36
|
`,Yt=`
|
|
37
|
-
${
|
|
38
|
-
${
|
|
37
|
+
${Ce}
|
|
38
|
+
${qt}
|
|
39
39
|
`,Wt=`
|
|
40
40
|
in float brushing_isVisible;
|
|
41
41
|
`,Kt=`
|
|
42
|
-
${
|
|
42
|
+
${Ce}
|
|
43
43
|
${Wt}
|
|
44
44
|
`,$t={source:0,target:1,custom:2,source_target:3},Zt={"vs:DECKGL_FILTER_GL_POSITION":`
|
|
45
45
|
vec2 brushingTarget;
|
|
@@ -65,7 +65,7 @@ ${Wt}
|
|
|
65
65
|
if (brushing.enabled && brushing_isVisible < 0.5) {
|
|
66
66
|
discard;
|
|
67
67
|
}
|
|
68
|
-
`},Ie={name:"brushing",dependencies:[
|
|
68
|
+
`},Ie={name:"brushing",dependencies:[Se.project],vs:Yt,fs:Kt,inject:Zt,getUniforms:o=>{if(!o||!("viewport"in o))return{};let{brushingEnabled:e=!0,brushingRadius:t=1e4,brushingTarget:r="source",mousePosition:s,viewport:i}=o;return{enabled:Boolean(e&&s&&i.containsPixel(s)),radius:t,target:$t[r]||0,mousePos:s?i.unproject([s.x-i.x,s.y-i.y]):[0,0]}},uniformTypes:{enabled:"i32",target:"i32",mousePos:"vec2<f32>",radius:"f32"}};var Xt={getBrushingTarget:{type:"accessor",value:[0,0]},brushingTarget:"source",brushingEnabled:!0,brushingRadius:1e4},S=class extends ke.LayerExtension{getShaders(){return{modules:[Ie]}}initializeState(e,t){let r=this.getAttributeManager();r&&r.add({brushingTargets:{size:2,stepMode:"dynamic",accessor:"getBrushingTarget"}});let s=()=>{this.getCurrentLayer()?.setNeedsRedraw()};this.state.onMouseMove=s,e.deck&&e.deck.eventManager.on({pointermove:s,pointerleave:s})}finalizeState(e,t){if(e.deck){let r=this.state.onMouseMove;e.deck.eventManager.off({pointermove:r,pointerleave:r})}}draw(e,t){let{viewport:r,mousePosition:s}=e.context,{brushingEnabled:i,brushingRadius:n,brushingTarget:a}=this.props,l={viewport:r,mousePosition:s,brushingEnabled:i,brushingRadius:n,brushingTarget:a};this.setShaderModuleProps({brushing:l})}};S.defaultProps=Xt;S.extensionName="BrushingExtension";var Re=S;var E=d(_(),1);var we=`uniform dataFilterUniforms {
|
|
69
69
|
bool useSoftMargin;
|
|
70
70
|
bool enabled;
|
|
71
71
|
bool transformSize;
|
|
@@ -200,7 +200,7 @@ ${Jt}
|
|
|
200
200
|
if (dataFilter.transformColor) {
|
|
201
201
|
color.a *= dataFilter_value;
|
|
202
202
|
}
|
|
203
|
-
`};function Ve(o){let{categorySize:e,filterSize:t,fp64:r}=o,s={useSoftMargin:"i32",enabled:"i32",transformSize:"i32",transformColor:"i32"};if(t){let i=t===1?"f32":`vec${t}<f32>`;s.min=i,s.softMin=i,s.softMax=i,s.max=i,r&&(s.min64High=i,s.max64High=i)}return e&&(s.categoryBitMask="vec4<i32>"),s}var ze={name:"dataFilter",vs:Ne,fs:Be,inject:je,getUniforms:De,uniformTypesFromOptions:Ve},Ue={name:"dataFilter",vs:Ne,fs:Be,inject:je,getUniforms:eo,uniformTypesFromOptions:Ve};var
|
|
203
|
+
`};function Ve(o){let{categorySize:e,filterSize:t,fp64:r}=o,s={useSoftMargin:"i32",enabled:"i32",transformSize:"i32",transformColor:"i32"};if(t){let i=t===1?"f32":`vec${t}<f32>`;s.min=i,s.softMin=i,s.softMax=i,s.max=i,r&&(s.min64High=i,s.max64High=i)}return e&&(s.categoryBitMask="vec4<i32>"),s}var ze={name:"dataFilter",vs:Ne,fs:Be,inject:je,getUniforms:De,uniformTypesFromOptions:Ve},Ue={name:"dataFilter",vs:Ne,fs:Be,inject:je,getUniforms:eo,uniformTypesFromOptions:Ve};var qe=d(He(),1),to=`#version 300 es
|
|
204
204
|
#define SHADER_NAME data-filter-vertex-shader
|
|
205
205
|
|
|
206
206
|
#ifdef FLOAT_TARGET
|
|
@@ -245,7 +245,7 @@ void main() {
|
|
|
245
245
|
}
|
|
246
246
|
fragColor = vColor;
|
|
247
247
|
}
|
|
248
|
-
`,ro=["float32-renderable-webgl","texture-blend-float-webgl"];function Ye(o){return ro.every(e=>o.features.has(e))}function We(o,e){return e?o.createFramebuffer({width:1,height:1,colorAttachments:[o.createTexture({format:"rgba32float",dimension:"2d",width:1,height:1})]}):o.createFramebuffer({width:256,height:64,colorAttachments:[o.createTexture({format:"rgba8unorm",dimension:"2d",width:256,height:64})]})}function Ke(o,e,t,r){return t.defines.NON_INSTANCED_MODEL=1,r&&(t.defines.FLOAT_TARGET=1),new He.Model(o,{id:"data-filter-aggregation-model",vertexCount:1,isInstanced:!1,topology:"point-list",disableWarnings:!0,vs:to,fs:oo,bufferLayout:e,...t})}var $e={blend:!0,blendColorSrcFactor:"one",blendColorDstFactor:"one",blendAlphaSrcFactor:"one",blendAlphaDstFactor:"one",blendColorOperation:"add",blendAlphaOperation:"add",depthCompare:"never"};var io={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},no={categorySize:0,filterSize:1,fp64:!1,countItems:!1},ao={1:"uint",2:"uvec2",3:"uvec3",4:"uvec4"},lo={1:"float",2:"vec2",3:"vec3",4:"vec4"},S=class extends E.LayerExtension{constructor(e={}){super({...no,...e})}getShaders(e){let{categorySize:t,filterSize:r,fp64:s}=e.opts,i={};t&&(i.DATACATEGORY_TYPE=ao[t],i.DATACATEGORY_CHANNELS=t),r&&(i.DATAFILTER_TYPE=lo[r],i.DATAFILTER_DOUBLE=Boolean(s));let n=s?Ue:ze;return n.uniformTypes=n.uniformTypesFromOptions(e.opts),{modules:[n],defines:i}}initializeState(e,t){let r=this.getAttributeManager(),{categorySize:s,filterSize:i,fp64:n}=t.opts;r&&(i&&r.add({filterValues:{size:i,type:n?"float64":"float32",stepMode:"dynamic",accessor:"getFilterValue"}}),s&&r.add({filterCategoryValues:{size:s,stepMode:"dynamic",accessor:"getFilterCategory",type:"uint32",transform:s===1?l=>t._getCategoryKey.call(this,l,0):l=>l.map((c,f)=>t._getCategoryKey.call(this,c,f))}}));let{device:a}=this.context;if(r&&t.opts.countItems){let l=Ye(a);r.add({filterVertexIndices:{size:l?1:2,vertexOffset:1,type:"unorm8",accessor:(u,{index:p})=>{let m=u&&u.__source?u.__source.index:p;return l?(m+1)%255:[(m+1)%255,Math.floor(m/255)%255]},shaderAttributes:{filterPrevIndices:{vertexOffset:0},filterIndices:{vertexOffset:1}}}});let c=We(a,l),f=Ke(a,r.getBufferLayouts({isInstanced:!1}),t.getShaders.call(this,t),l);this.setState({filterFBO:c,filterModel:f})}}updateState({props:e,oldProps:t,changeFlags:r},s){let i=this.getAttributeManager(),{categorySize:n}=s.opts;if(this.state.filterModel){let a=i.attributes.filterValues?.needsUpdate()||i.attributes.filterCategoryValues?.needsUpdate()||e.filterEnabled!==t.filterEnabled||e.filterRange!==t.filterRange||e.filterSoftRange!==t.filterSoftRange||e.filterCategories!==t.filterCategories;a&&this.setState({filterNeedsUpdate:a})}i?.attributes.filterCategoryValues&&((i.attributes.filterCategoryValues.needsUpdate()||!(0,E._deepEqual)(e.filterCategories,t.filterCategories,2))&&this.setState({categoryBitMask:null}),r.dataChanged&&(this.setState({categoryMap:Array(n).fill(0).map(()=>({}))}),i.attributes.filterCategoryValues.setNeedsUpdate("categoryMap")))}draw(e,t){let r=this.state.filterFBO,s=this.state.filterModel,i=this.state.filterNeedsUpdate;this.state.categoryBitMask||t._updateCategoryBitMask.call(this,e,t);let{onFilteredItemsChange:n,extensions:a,filterEnabled:l,filterRange:c,filterSoftRange:f,filterTransformSize:u,filterTransformColor:p,filterCategories:m}=this.props,v={extensions:a,filterEnabled:l,filterRange:c,filterSoftRange:f,filterTransformSize:u,filterTransformColor:p,filterCategories:m};if(this.state.categoryBitMask&&(v.categoryBitMask=this.state.categoryBitMask),this.setShaderModuleProps({dataFilter:v}),i&&n&&s){let b=this.getAttributeManager(),{attributes:{filterValues:h,filterCategoryValues:L,filterVertexIndices:fe}}=b;s.setVertexCount(this.getNumInstances());let ue={...h?.getValue(),...L?.getValue(),...fe?.getValue()};s.setAttributes(ue),s.shaderInputs.setProps({dataFilter:v});let pe=[0,0,r.width,r.height],Ee=s.device.beginRenderPass({id:"data-filter-aggregation",framebuffer:r,parameters:{viewport:pe},clearColor:[0,0,0,0]});s.setParameters($e),s.draw(Ee),Ee.end();let Me=s.device.readPixelsToArrayWebGL(r),Fe=0;for(let de=0;de<Me.length;de++)Fe+=Me[de];n({id:this.id,count:Fe}),this.state.filterNeedsUpdate=!1}}finalizeState(){let e=this.state.filterFBO,t=this.state.filterModel;e?.destroy(),t?.destroy()}_updateCategoryBitMask(e,t){let{categorySize:r}=t.opts;if(!r)return;let{filterCategories:s}=this.props,i=new Uint32Array([0,0,0,0]),n=r===1?[s]:s,a=r===1?128:r===2?64:32;for(let l=0;l<n.length;l++){let c=n[l];for(let f of c){let u=t._getCategoryKey.call(this,f,l);if(u<a){let p=l*(a/32)+Math.floor(u/32);i[p]+=Math.pow(2,u%32)}else E.log.warn(`Exceeded maximum number of categories (${a})`)()}}this.state.categoryBitMask=i}_getCategoryKey(e,t){let r=this.state.categoryMap[t];return e in r||(r[e]=Object.keys(r).length),r[e]}};S.defaultProps=io;S.extensionName="DataFilterExtension";var Ze=S;var w=d(_(),1);var Wr=1/Math.PI*180,Kr=1/180*Math.PI,co={EPSILON:1e-12,debug:!1,precision:4,printTypes:!1,printDegrees:!1,printRowMajor:!0,_cartographicRadians:!1};globalThis.mathgl=globalThis.mathgl||{config:{...co}};var I=globalThis.mathgl.config;function _e(o){return Array.isArray(o)||ArrayBuffer.isView(o)&&!(o instanceof DataView)}function M(o,e,t){let r=I.EPSILON;t&&(I.EPSILON=t);try{if(o===e)return!0;if(_e(o)&&_e(e)){if(o.length!==e.length)return!1;for(let s=0;s<o.length;++s)if(!M(o[s],e[s]))return!1;return!0}return o&&o.equals?o.equals(e):e&&e.equals?e.equals(o):typeof o=="number"&&typeof e=="number"?Math.abs(o-e)<=I.EPSILON*Math.max(1,Math.abs(o),Math.abs(e)):!1}finally{I.EPSILON=r}}var k=typeof Float32Array<"u"?Float32Array:Array,me=Math.random;function J(o){return o>=0?Math.round(o):o%.5===0?Math.floor(o):Math.round(o)}var Zr=Math.PI/180;var R={};Ae(R,{add:()=>ho,angle:()=>jo,bezier:()=>So,ceil:()=>vo,clone:()=>uo,copy:()=>_o,create:()=>Xe,cross:()=>Ao,dist:()=>Wo,distance:()=>ot,div:()=>Yo,divide:()=>tt,dot:()=>ve,equals:()=>Go,exactEquals:()=>Uo,floor:()=>go,forEach:()=>Xo,fromValues:()=>po,hermite:()=>Co,inverse:()=>Fo,len:()=>$o,length:()=>Qe,lerp:()=>Oo,max:()=>yo,min:()=>xo,mul:()=>Ho,multiply:()=>et,negate:()=>Mo,normalize:()=>To,random:()=>Io,rotateX:()=>No,rotateY:()=>Bo,rotateZ:()=>Do,round:()=>Po,scale:()=>bo,scaleAndAdd:()=>Eo,set:()=>mo,slerp:()=>Lo,sqrDist:()=>Ko,sqrLen:()=>Zo,squaredDistance:()=>rt,squaredLength:()=>st,str:()=>zo,sub:()=>qo,subtract:()=>Je,transformMat3:()=>Ro,transformMat4:()=>ko,transformQuat:()=>wo,zero:()=>Vo});function Xe(){let o=new k(3);return k!=Float32Array&&(o[0]=0,o[1]=0,o[2]=0),o}function uo(o){let e=new k(3);return e[0]=o[0],e[1]=o[1],e[2]=o[2],e}function Qe(o){let e=o[0],t=o[1],r=o[2];return Math.sqrt(e*e+t*t+r*r)}function po(o,e,t){let r=new k(3);return r[0]=o,r[1]=e,r[2]=t,r}function _o(o,e){return o[0]=e[0],o[1]=e[1],o[2]=e[2],o}function mo(o,e,t,r){return o[0]=e,o[1]=t,o[2]=r,o}function ho(o,e,t){return o[0]=e[0]+t[0],o[1]=e[1]+t[1],o[2]=e[2]+t[2],o}function Je(o,e,t){return o[0]=e[0]-t[0],o[1]=e[1]-t[1],o[2]=e[2]-t[2],o}function et(o,e,t){return o[0]=e[0]*t[0],o[1]=e[1]*t[1],o[2]=e[2]*t[2],o}function tt(o,e,t){return o[0]=e[0]/t[0],o[1]=e[1]/t[1],o[2]=e[2]/t[2],o}function vo(o,e){return o[0]=Math.ceil(e[0]),o[1]=Math.ceil(e[1]),o[2]=Math.ceil(e[2]),o}function go(o,e){return o[0]=Math.floor(e[0]),o[1]=Math.floor(e[1]),o[2]=Math.floor(e[2]),o}function xo(o,e,t){return o[0]=Math.min(e[0],t[0]),o[1]=Math.min(e[1],t[1]),o[2]=Math.min(e[2],t[2]),o}function yo(o,e,t){return o[0]=Math.max(e[0],t[0]),o[1]=Math.max(e[1],t[1]),o[2]=Math.max(e[2],t[2]),o}function Po(o,e){return o[0]=J(e[0]),o[1]=J(e[1]),o[2]=J(e[2]),o}function bo(o,e,t){return o[0]=e[0]*t,o[1]=e[1]*t,o[2]=e[2]*t,o}function Eo(o,e,t,r){return o[0]=e[0]+t[0]*r,o[1]=e[1]+t[1]*r,o[2]=e[2]+t[2]*r,o}function ot(o,e){let t=e[0]-o[0],r=e[1]-o[1],s=e[2]-o[2];return Math.sqrt(t*t+r*r+s*s)}function rt(o,e){let t=e[0]-o[0],r=e[1]-o[1],s=e[2]-o[2];return t*t+r*r+s*s}function st(o){let e=o[0],t=o[1],r=o[2];return e*e+t*t+r*r}function Mo(o,e){return o[0]=-e[0],o[1]=-e[1],o[2]=-e[2],o}function Fo(o,e){return o[0]=1/e[0],o[1]=1/e[1],o[2]=1/e[2],o}function To(o,e){let t=e[0],r=e[1],s=e[2],i=t*t+r*r+s*s;return i>0&&(i=1/Math.sqrt(i)),o[0]=e[0]*i,o[1]=e[1]*i,o[2]=e[2]*i,o}function ve(o,e){return o[0]*e[0]+o[1]*e[1]+o[2]*e[2]}function Ao(o,e,t){let r=e[0],s=e[1],i=e[2],n=t[0],a=t[1],l=t[2];return o[0]=s*l-i*a,o[1]=i*n-r*l,o[2]=r*a-s*n,o}function Oo(o,e,t,r){let s=e[0],i=e[1],n=e[2];return o[0]=s+r*(t[0]-s),o[1]=i+r*(t[1]-i),o[2]=n+r*(t[2]-n),o}function Lo(o,e,t,r){let s=Math.acos(Math.min(Math.max(ve(e,t),-1),1)),i=Math.sin(s),n=Math.sin((1-r)*s)/i,a=Math.sin(r*s)/i;return o[0]=n*e[0]+a*t[0],o[1]=n*e[1]+a*t[1],o[2]=n*e[2]+a*t[2],o}function Co(o,e,t,r,s,i){let n=i*i,a=n*(2*i-3)+1,l=n*(i-2)+i,c=n*(i-1),f=n*(3-2*i);return o[0]=e[0]*a+t[0]*l+r[0]*c+s[0]*f,o[1]=e[1]*a+t[1]*l+r[1]*c+s[1]*f,o[2]=e[2]*a+t[2]*l+r[2]*c+s[2]*f,o}function So(o,e,t,r,s,i){let n=1-i,a=n*n,l=i*i,c=a*n,f=3*i*a,u=3*l*n,p=l*i;return o[0]=e[0]*c+t[0]*f+r[0]*u+s[0]*p,o[1]=e[1]*c+t[1]*f+r[1]*u+s[1]*p,o[2]=e[2]*c+t[2]*f+r[2]*u+s[2]*p,o}function Io(o,e){e=e===void 0?1:e;let t=me()*2*Math.PI,r=me()*2-1,s=Math.sqrt(1-r*r)*e;return o[0]=Math.cos(t)*s,o[1]=Math.sin(t)*s,o[2]=r*e,o}function ko(o,e,t){let r=e[0],s=e[1],i=e[2],n=t[3]*r+t[7]*s+t[11]*i+t[15];return n=n||1,o[0]=(t[0]*r+t[4]*s+t[8]*i+t[12])/n,o[1]=(t[1]*r+t[5]*s+t[9]*i+t[13])/n,o[2]=(t[2]*r+t[6]*s+t[10]*i+t[14])/n,o}function Ro(o,e,t){let r=e[0],s=e[1],i=e[2];return o[0]=r*t[0]+s*t[3]+i*t[6],o[1]=r*t[1]+s*t[4]+i*t[7],o[2]=r*t[2]+s*t[5]+i*t[8],o}function wo(o,e,t){let r=t[0],s=t[1],i=t[2],n=t[3],a=e[0],l=e[1],c=e[2],f=s*c-i*l,u=i*a-r*c,p=r*l-s*a,m=s*p-i*u,v=i*f-r*p,b=r*u-s*f,h=n*2;return f*=h,u*=h,p*=h,m*=2,v*=2,b*=2,o[0]=a+f+m,o[1]=l+u+v,o[2]=c+p+b,o}function No(o,e,t,r){let s=[],i=[];return s[0]=e[0]-t[0],s[1]=e[1]-t[1],s[2]=e[2]-t[2],i[0]=s[0],i[1]=s[1]*Math.cos(r)-s[2]*Math.sin(r),i[2]=s[1]*Math.sin(r)+s[2]*Math.cos(r),o[0]=i[0]+t[0],o[1]=i[1]+t[1],o[2]=i[2]+t[2],o}function Bo(o,e,t,r){let s=[],i=[];return s[0]=e[0]-t[0],s[1]=e[1]-t[1],s[2]=e[2]-t[2],i[0]=s[2]*Math.sin(r)+s[0]*Math.cos(r),i[1]=s[1],i[2]=s[2]*Math.cos(r)-s[0]*Math.sin(r),o[0]=i[0]+t[0],o[1]=i[1]+t[1],o[2]=i[2]+t[2],o}function Do(o,e,t,r){let s=[],i=[];return s[0]=e[0]-t[0],s[1]=e[1]-t[1],s[2]=e[2]-t[2],i[0]=s[0]*Math.cos(r)-s[1]*Math.sin(r),i[1]=s[0]*Math.sin(r)+s[1]*Math.cos(r),i[2]=s[2],o[0]=i[0]+t[0],o[1]=i[1]+t[1],o[2]=i[2]+t[2],o}function jo(o,e){let t=o[0],r=o[1],s=o[2],i=e[0],n=e[1],a=e[2],l=Math.sqrt((t*t+r*r+s*s)*(i*i+n*n+a*a)),c=l&&ve(o,e)/l;return Math.acos(Math.min(Math.max(c,-1),1))}function Vo(o){return o[0]=0,o[1]=0,o[2]=0,o}function zo(o){return`vec3(${o[0]}, ${o[1]}, ${o[2]})`}function Uo(o,e){return o[0]===e[0]&&o[1]===e[1]&&o[2]===e[2]}function Go(o,e){let t=o[0],r=o[1],s=o[2],i=e[0],n=e[1],a=e[2];return Math.abs(t-i)<=1e-6*Math.max(1,Math.abs(t),Math.abs(i))&&Math.abs(r-n)<=1e-6*Math.max(1,Math.abs(r),Math.abs(n))&&Math.abs(s-a)<=1e-6*Math.max(1,Math.abs(s),Math.abs(a))}var qo=Je,Ho=et,Yo=tt,Wo=ot,Ko=rt,$o=Qe,Zo=st,Xo=function(){let o=Xe();return function(e,t,r,s,i,n){let a,l;for(t||(t=3),r||(r=0),s?l=Math.min(s*t+r,e.length):l=e.length,a=r;a<l;a+=t)o[0]=e[a],o[1]=e[a+1],o[2]=e[a+2],i(o,o,n),e[a]=o[0],e[a+1]=o[1],e[a+2]=o[2];return e}}();function ee(o,e=[],t=0){let r=Math.fround(o),s=o-r;return e[t]=r,e[t+1]=s,e}function ge(o){return o-Math.fround(o)}function xe(o){let e=new Float32Array(32);for(let t=0;t<4;++t)for(let r=0;r<4;++r){let s=t*4+r;ee(o[r*4+t],e,s*2)}return e}var it=`
|
|
248
|
+
`,ro=["float32-renderable-webgl","texture-blend-float-webgl"];function Ye(o){return ro.every(e=>o.features.has(e))}function We(o,e){return e?o.createFramebuffer({width:1,height:1,colorAttachments:[o.createTexture({format:"rgba32float",dimension:"2d",width:1,height:1})]}):o.createFramebuffer({width:256,height:64,colorAttachments:[o.createTexture({format:"rgba8unorm",dimension:"2d",width:256,height:64})]})}function Ke(o,e,t,r){return t.defines.NON_INSTANCED_MODEL=1,r&&(t.defines.FLOAT_TARGET=1),new qe.Model(o,{id:"data-filter-aggregation-model",vertexCount:1,isInstanced:!1,topology:"point-list",disableWarnings:!0,vs:to,fs:oo,bufferLayout:e,...t})}var $e={blend:!0,blendColorSrcFactor:"one",blendColorDstFactor:"one",blendAlphaSrcFactor:"one",blendAlphaDstFactor:"one",blendColorOperation:"add",blendAlphaOperation:"add",depthCompare:"never"};var io={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},no={categorySize:0,filterSize:1,fp64:!1,countItems:!1},ao={1:"uint",2:"uvec2",3:"uvec3",4:"uvec4"},lo={1:"float",2:"vec2",3:"vec3",4:"vec4"},C=class extends E.LayerExtension{constructor(e={}){super({...no,...e})}getShaders(e){let{categorySize:t,filterSize:r,fp64:s}=e.opts,i={};t&&(i.DATACATEGORY_TYPE=ao[t],i.DATACATEGORY_CHANNELS=t),r&&(i.DATAFILTER_TYPE=lo[r],i.DATAFILTER_DOUBLE=Boolean(s));let n=s?Ue:ze;return n.uniformTypes=n.uniformTypesFromOptions(e.opts),{modules:[n],defines:i}}initializeState(e,t){let r=this.getAttributeManager(),{categorySize:s,filterSize:i,fp64:n}=t.opts;r&&(i&&r.add({filterValues:{size:i,type:n?"float64":"float32",stepMode:"dynamic",accessor:"getFilterValue"}}),s&&r.add({filterCategoryValues:{size:s,stepMode:"dynamic",accessor:"getFilterCategory",type:"uint32",transform:s===1?l=>t._getCategoryKey.call(this,l,0):l=>l.map((c,f)=>t._getCategoryKey.call(this,c,f))}}));let{device:a}=this.context;if(r&&t.opts.countItems){let l=Ye(a);r.add({filterVertexIndices:{size:l?1:2,vertexOffset:1,type:"unorm8",accessor:(u,{index:p})=>{let m=u&&u.__source?u.__source.index:p;return l?(m+1)%255:[(m+1)%255,Math.floor(m/255)%255]},shaderAttributes:{filterPrevIndices:{vertexOffset:0},filterIndices:{vertexOffset:1}}}});let c=We(a,l),f=Ke(a,r.getBufferLayouts({isInstanced:!1}),t.getShaders.call(this,t),l);this.setState({filterFBO:c,filterModel:f})}}updateState({props:e,oldProps:t,changeFlags:r},s){let i=this.getAttributeManager(),{categorySize:n}=s.opts;if(this.state.filterModel){let a=i.attributes.filterValues?.needsUpdate()||i.attributes.filterCategoryValues?.needsUpdate()||e.filterEnabled!==t.filterEnabled||e.filterRange!==t.filterRange||e.filterSoftRange!==t.filterSoftRange||e.filterCategories!==t.filterCategories;a&&this.setState({filterNeedsUpdate:a})}i?.attributes.filterCategoryValues&&((i.attributes.filterCategoryValues.needsUpdate()||!(0,E._deepEqual)(e.filterCategories,t.filterCategories,2))&&this.setState({categoryBitMask:null}),r.dataChanged&&(this.setState({categoryMap:Array(n).fill(0).map(()=>({}))}),i.attributes.filterCategoryValues.setNeedsUpdate("categoryMap")))}draw(e,t){let r=this.state.filterFBO,s=this.state.filterModel,i=this.state.filterNeedsUpdate;this.state.categoryBitMask||t._updateCategoryBitMask.call(this,e,t);let{onFilteredItemsChange:n,extensions:a,filterEnabled:l,filterRange:c,filterSoftRange:f,filterTransformSize:u,filterTransformColor:p,filterCategories:m}=this.props,v={extensions:a,filterEnabled:l,filterRange:c,filterSoftRange:f,filterTransformSize:u,filterTransformColor:p,filterCategories:m};if(this.state.categoryBitMask&&(v.categoryBitMask=this.state.categoryBitMask),this.setShaderModuleProps({dataFilter:v}),i&&n&&s){let b=this.getAttributeManager(),{attributes:{filterValues:h,filterCategoryValues:L,filterVertexIndices:fe}}=b;s.setVertexCount(this.getNumInstances());let ue={...h?.getValue(),...L?.getValue(),...fe?.getValue()};s.setAttributes(ue),s.shaderInputs.setProps({dataFilter:v});let pe=[0,0,r.width,r.height],Ee=s.device.beginRenderPass({id:"data-filter-aggregation",framebuffer:r,parameters:{viewport:pe},clearColor:[0,0,0,0]});s.setParameters($e),s.draw(Ee),Ee.end();let Me=s.device.readPixelsToArrayWebGL(r),Fe=0;for(let de=0;de<Me.length;de++)Fe+=Me[de];n({id:this.id,count:Fe}),this.state.filterNeedsUpdate=!1}}finalizeState(){let e=this.state.filterFBO,t=this.state.filterModel;e?.destroy(),t?.destroy()}_updateCategoryBitMask(e,t){let{categorySize:r}=t.opts;if(!r)return;let{filterCategories:s}=this.props,i=new Uint32Array([0,0,0,0]),n=r===1?[s]:s,a=r===1?128:r===2?64:32;for(let l=0;l<n.length;l++){let c=n[l];for(let f of c){let u=t._getCategoryKey.call(this,f,l);if(u<a){let p=l*(a/32)+Math.floor(u/32);i[p]+=Math.pow(2,u%32)}else E.log.warn(`Exceeded maximum number of categories (${a})`)()}}this.state.categoryBitMask=i}_getCategoryKey(e,t){let r=this.state.categoryMap[t];return e in r||(r[e]=Object.keys(r).length),r[e]}};C.defaultProps=io;C.extensionName="DataFilterExtension";var Ze=C;var w=d(_(),1);var Wr=1/Math.PI*180,Kr=1/180*Math.PI,co={EPSILON:1e-12,debug:!1,precision:4,printTypes:!1,printDegrees:!1,printRowMajor:!0,_cartographicRadians:!1};globalThis.mathgl=globalThis.mathgl||{config:{...co}};var I=globalThis.mathgl.config;function _e(o){return Array.isArray(o)||ArrayBuffer.isView(o)&&!(o instanceof DataView)}function M(o,e,t){let r=I.EPSILON;t&&(I.EPSILON=t);try{if(o===e)return!0;if(_e(o)&&_e(e)){if(o.length!==e.length)return!1;for(let s=0;s<o.length;++s)if(!M(o[s],e[s]))return!1;return!0}return o&&o.equals?o.equals(e):e&&e.equals?e.equals(o):typeof o=="number"&&typeof e=="number"?Math.abs(o-e)<=I.EPSILON*Math.max(1,Math.abs(o),Math.abs(e)):!1}finally{I.EPSILON=r}}var k=typeof Float32Array<"u"?Float32Array:Array,me=Math.random;function J(o){return o>=0?Math.round(o):o%.5===0?Math.floor(o):Math.round(o)}var Zr=Math.PI/180;var R={};Ae(R,{add:()=>ho,angle:()=>jo,bezier:()=>Co,ceil:()=>vo,clone:()=>uo,copy:()=>_o,create:()=>Xe,cross:()=>Ao,dist:()=>Wo,distance:()=>ot,div:()=>Yo,divide:()=>tt,dot:()=>ve,equals:()=>Go,exactEquals:()=>Uo,floor:()=>go,forEach:()=>Xo,fromValues:()=>po,hermite:()=>So,inverse:()=>Fo,len:()=>$o,length:()=>Qe,lerp:()=>Oo,max:()=>yo,min:()=>xo,mul:()=>qo,multiply:()=>et,negate:()=>Mo,normalize:()=>To,random:()=>Io,rotateX:()=>No,rotateY:()=>Bo,rotateZ:()=>Do,round:()=>Po,scale:()=>bo,scaleAndAdd:()=>Eo,set:()=>mo,slerp:()=>Lo,sqrDist:()=>Ko,sqrLen:()=>Zo,squaredDistance:()=>rt,squaredLength:()=>st,str:()=>zo,sub:()=>Ho,subtract:()=>Je,transformMat3:()=>Ro,transformMat4:()=>ko,transformQuat:()=>wo,zero:()=>Vo});function Xe(){let o=new k(3);return k!=Float32Array&&(o[0]=0,o[1]=0,o[2]=0),o}function uo(o){let e=new k(3);return e[0]=o[0],e[1]=o[1],e[2]=o[2],e}function Qe(o){let e=o[0],t=o[1],r=o[2];return Math.sqrt(e*e+t*t+r*r)}function po(o,e,t){let r=new k(3);return r[0]=o,r[1]=e,r[2]=t,r}function _o(o,e){return o[0]=e[0],o[1]=e[1],o[2]=e[2],o}function mo(o,e,t,r){return o[0]=e,o[1]=t,o[2]=r,o}function ho(o,e,t){return o[0]=e[0]+t[0],o[1]=e[1]+t[1],o[2]=e[2]+t[2],o}function Je(o,e,t){return o[0]=e[0]-t[0],o[1]=e[1]-t[1],o[2]=e[2]-t[2],o}function et(o,e,t){return o[0]=e[0]*t[0],o[1]=e[1]*t[1],o[2]=e[2]*t[2],o}function tt(o,e,t){return o[0]=e[0]/t[0],o[1]=e[1]/t[1],o[2]=e[2]/t[2],o}function vo(o,e){return o[0]=Math.ceil(e[0]),o[1]=Math.ceil(e[1]),o[2]=Math.ceil(e[2]),o}function go(o,e){return o[0]=Math.floor(e[0]),o[1]=Math.floor(e[1]),o[2]=Math.floor(e[2]),o}function xo(o,e,t){return o[0]=Math.min(e[0],t[0]),o[1]=Math.min(e[1],t[1]),o[2]=Math.min(e[2],t[2]),o}function yo(o,e,t){return o[0]=Math.max(e[0],t[0]),o[1]=Math.max(e[1],t[1]),o[2]=Math.max(e[2],t[2]),o}function Po(o,e){return o[0]=J(e[0]),o[1]=J(e[1]),o[2]=J(e[2]),o}function bo(o,e,t){return o[0]=e[0]*t,o[1]=e[1]*t,o[2]=e[2]*t,o}function Eo(o,e,t,r){return o[0]=e[0]+t[0]*r,o[1]=e[1]+t[1]*r,o[2]=e[2]+t[2]*r,o}function ot(o,e){let t=e[0]-o[0],r=e[1]-o[1],s=e[2]-o[2];return Math.sqrt(t*t+r*r+s*s)}function rt(o,e){let t=e[0]-o[0],r=e[1]-o[1],s=e[2]-o[2];return t*t+r*r+s*s}function st(o){let e=o[0],t=o[1],r=o[2];return e*e+t*t+r*r}function Mo(o,e){return o[0]=-e[0],o[1]=-e[1],o[2]=-e[2],o}function Fo(o,e){return o[0]=1/e[0],o[1]=1/e[1],o[2]=1/e[2],o}function To(o,e){let t=e[0],r=e[1],s=e[2],i=t*t+r*r+s*s;return i>0&&(i=1/Math.sqrt(i)),o[0]=e[0]*i,o[1]=e[1]*i,o[2]=e[2]*i,o}function ve(o,e){return o[0]*e[0]+o[1]*e[1]+o[2]*e[2]}function Ao(o,e,t){let r=e[0],s=e[1],i=e[2],n=t[0],a=t[1],l=t[2];return o[0]=s*l-i*a,o[1]=i*n-r*l,o[2]=r*a-s*n,o}function Oo(o,e,t,r){let s=e[0],i=e[1],n=e[2];return o[0]=s+r*(t[0]-s),o[1]=i+r*(t[1]-i),o[2]=n+r*(t[2]-n),o}function Lo(o,e,t,r){let s=Math.acos(Math.min(Math.max(ve(e,t),-1),1)),i=Math.sin(s),n=Math.sin((1-r)*s)/i,a=Math.sin(r*s)/i;return o[0]=n*e[0]+a*t[0],o[1]=n*e[1]+a*t[1],o[2]=n*e[2]+a*t[2],o}function So(o,e,t,r,s,i){let n=i*i,a=n*(2*i-3)+1,l=n*(i-2)+i,c=n*(i-1),f=n*(3-2*i);return o[0]=e[0]*a+t[0]*l+r[0]*c+s[0]*f,o[1]=e[1]*a+t[1]*l+r[1]*c+s[1]*f,o[2]=e[2]*a+t[2]*l+r[2]*c+s[2]*f,o}function Co(o,e,t,r,s,i){let n=1-i,a=n*n,l=i*i,c=a*n,f=3*i*a,u=3*l*n,p=l*i;return o[0]=e[0]*c+t[0]*f+r[0]*u+s[0]*p,o[1]=e[1]*c+t[1]*f+r[1]*u+s[1]*p,o[2]=e[2]*c+t[2]*f+r[2]*u+s[2]*p,o}function Io(o,e){e=e===void 0?1:e;let t=me()*2*Math.PI,r=me()*2-1,s=Math.sqrt(1-r*r)*e;return o[0]=Math.cos(t)*s,o[1]=Math.sin(t)*s,o[2]=r*e,o}function ko(o,e,t){let r=e[0],s=e[1],i=e[2],n=t[3]*r+t[7]*s+t[11]*i+t[15];return n=n||1,o[0]=(t[0]*r+t[4]*s+t[8]*i+t[12])/n,o[1]=(t[1]*r+t[5]*s+t[9]*i+t[13])/n,o[2]=(t[2]*r+t[6]*s+t[10]*i+t[14])/n,o}function Ro(o,e,t){let r=e[0],s=e[1],i=e[2];return o[0]=r*t[0]+s*t[3]+i*t[6],o[1]=r*t[1]+s*t[4]+i*t[7],o[2]=r*t[2]+s*t[5]+i*t[8],o}function wo(o,e,t){let r=t[0],s=t[1],i=t[2],n=t[3],a=e[0],l=e[1],c=e[2],f=s*c-i*l,u=i*a-r*c,p=r*l-s*a,m=s*p-i*u,v=i*f-r*p,b=r*u-s*f,h=n*2;return f*=h,u*=h,p*=h,m*=2,v*=2,b*=2,o[0]=a+f+m,o[1]=l+u+v,o[2]=c+p+b,o}function No(o,e,t,r){let s=[],i=[];return s[0]=e[0]-t[0],s[1]=e[1]-t[1],s[2]=e[2]-t[2],i[0]=s[0],i[1]=s[1]*Math.cos(r)-s[2]*Math.sin(r),i[2]=s[1]*Math.sin(r)+s[2]*Math.cos(r),o[0]=i[0]+t[0],o[1]=i[1]+t[1],o[2]=i[2]+t[2],o}function Bo(o,e,t,r){let s=[],i=[];return s[0]=e[0]-t[0],s[1]=e[1]-t[1],s[2]=e[2]-t[2],i[0]=s[2]*Math.sin(r)+s[0]*Math.cos(r),i[1]=s[1],i[2]=s[2]*Math.cos(r)-s[0]*Math.sin(r),o[0]=i[0]+t[0],o[1]=i[1]+t[1],o[2]=i[2]+t[2],o}function Do(o,e,t,r){let s=[],i=[];return s[0]=e[0]-t[0],s[1]=e[1]-t[1],s[2]=e[2]-t[2],i[0]=s[0]*Math.cos(r)-s[1]*Math.sin(r),i[1]=s[0]*Math.sin(r)+s[1]*Math.cos(r),i[2]=s[2],o[0]=i[0]+t[0],o[1]=i[1]+t[1],o[2]=i[2]+t[2],o}function jo(o,e){let t=o[0],r=o[1],s=o[2],i=e[0],n=e[1],a=e[2],l=Math.sqrt((t*t+r*r+s*s)*(i*i+n*n+a*a)),c=l&&ve(o,e)/l;return Math.acos(Math.min(Math.max(c,-1),1))}function Vo(o){return o[0]=0,o[1]=0,o[2]=0,o}function zo(o){return`vec3(${o[0]}, ${o[1]}, ${o[2]})`}function Uo(o,e){return o[0]===e[0]&&o[1]===e[1]&&o[2]===e[2]}function Go(o,e){let t=o[0],r=o[1],s=o[2],i=e[0],n=e[1],a=e[2];return Math.abs(t-i)<=1e-6*Math.max(1,Math.abs(t),Math.abs(i))&&Math.abs(r-n)<=1e-6*Math.max(1,Math.abs(r),Math.abs(n))&&Math.abs(s-a)<=1e-6*Math.max(1,Math.abs(s),Math.abs(a))}var Ho=Je,qo=et,Yo=tt,Wo=ot,Ko=rt,$o=Qe,Zo=st,Xo=function(){let o=Xe();return function(e,t,r,s,i,n){let a,l;for(t||(t=3),r||(r=0),s?l=Math.min(s*t+r,e.length):l=e.length,a=r;a<l;a+=t)o[0]=e[a],o[1]=e[a+1],o[2]=e[a+2],i(o,o,n),e[a]=o[0],e[a+1]=o[1],e[a+2]=o[2];return e}}();function ee(o,e=[],t=0){let r=Math.fround(o),s=o-r;return e[t]=r,e[t+1]=s,e}function ge(o){return o-Math.fround(o)}function xe(o){let e=new Float32Array(32);for(let t=0;t<4;++t)for(let r=0;r<4;++r){let s=t*4+r;ee(o[r*4+t],e,s*2)}return e}var it=`
|
|
249
249
|
uniform fp64arithmeticUniforms {
|
|
250
250
|
uniform float ONE;
|
|
251
251
|
} fp64;
|
|
@@ -1157,12 +1157,18 @@ position, position64xyLow, offset, commonPosition
|
|
|
1157
1157
|
}
|
|
1158
1158
|
`;var{fp64ify:Jo,fp64ifyMatrix4:er}=te,re={name:"project64",dependencies:[oe.project,te],vs:lt,getUniforms:or,uniformTypes:{scale:"vec2<f32>",viewProjectionMatrix:"mat4x4<f32>",viewProjectionMatrix64Low:"mat4x4<f32>"}},tr=(0,oe._memoize)(rr);function or(o){if(o&&"viewport"in o){let{viewProjectionMatrix:e,scale:t}=o.viewport;return tr({viewProjectionMatrix:e,scale:t})}return{}}function rr({viewProjectionMatrix:o,scale:e}){let t=er(o),r=new Float32Array(16),s=new Float32Array(16);for(let i=0;i<4;i++)for(let n=0;n<4;n++){let a=4*i+n,l=4*n+i;r[l]=t[2*a],s[l]=t[2*a+1]}return{scale:Jo(e),viewProjectionMatrix:[...r],viewProjectionMatrix64Low:[...s]}}var se=class extends w.LayerExtension{getShaders(){let{coordinateSystem:e}=this.props;if(e!==w.COORDINATE_SYSTEM.LNGLAT&&e!==w.COORDINATE_SYSTEM.DEFAULT)throw new Error("fp64: coordinateSystem must be LNGLAT");return{modules:[re]}}draw(e,t){let{viewport:r}=e.context;this.setShaderModuleProps({project64:{viewport:r}})}};se.extensionName="Fp64Extension";var ct=se;var N=d(_(),1);var ft={inject:{"vs:#decl":`
|
|
1159
1159
|
in vec2 instanceDashArrays;
|
|
1160
|
+
#ifdef HIGH_PRECISION_DASH
|
|
1160
1161
|
in float instanceDashOffsets;
|
|
1162
|
+
#endif
|
|
1161
1163
|
out vec2 vDashArray;
|
|
1162
1164
|
out float vDashOffset;
|
|
1163
1165
|
`,"vs:#main-end":`
|
|
1164
1166
|
vDashArray = instanceDashArrays;
|
|
1167
|
+
#ifdef HIGH_PRECISION_DASH
|
|
1165
1168
|
vDashOffset = instanceDashOffsets / width.x;
|
|
1169
|
+
#else
|
|
1170
|
+
vDashOffset = 0.0;
|
|
1171
|
+
#endif
|
|
1166
1172
|
`,"fs:#decl":`
|
|
1167
1173
|
uniform pathStyleUniforms {
|
|
1168
1174
|
float dashAlignMode;
|
|
@@ -1218,7 +1224,7 @@ isInside = step(-1.0, vPathPosition.x) * step(vPathPosition.x, 1.0);
|
|
|
1218
1224
|
if (isInside == 0.0) {
|
|
1219
1225
|
discard;
|
|
1220
1226
|
}
|
|
1221
|
-
`}};var sr={getDashArray:{type:"accessor",value:[0,0]},getOffset:{type:"accessor",value:0},dashJustified:!1,dashGapPickable:!1},B=class extends N.LayerExtension{constructor({dash:e=!1,offset:t=!1,highPrecisionDash:r=!1}={}){super({dash:e||r,offset:t,highPrecisionDash:r})}isEnabled(e){return"pathTesselator"in e.state}getShaders(e){if(!e.isEnabled(this))return null;let t={};e.opts.dash&&(t=(0,N._mergeShaders)(t,ft)),e.opts.offset&&(t=(0,N._mergeShaders)(t,ut));let{inject:
|
|
1227
|
+
`}};var sr={getDashArray:{type:"accessor",value:[0,0]},getOffset:{type:"accessor",value:0},dashJustified:!1,dashGapPickable:!1},B=class extends N.LayerExtension{constructor({dash:e=!1,offset:t=!1,highPrecisionDash:r=!1}={}){super({dash:e||r,offset:t,highPrecisionDash:r})}isEnabled(e){return"pathTesselator"in e.state}getShaders(e){if(!e.isEnabled(this))return null;let t={},r={};e.opts.dash&&(t=(0,N._mergeShaders)(t,ft),e.opts.highPrecisionDash&&(r.HIGH_PRECISION_DASH=!0)),e.opts.offset&&(t=(0,N._mergeShaders)(t,ut));let{inject:s}=t;return{modules:[{name:"pathStyle",inject:s,uniformTypes:{dashAlignMode:"f32",dashGapPickable:"i32"}}],defines:r}}initializeState(e,t){let r=this.getAttributeManager();!r||!t.isEnabled(this)||(t.opts.dash&&r.addInstanced({instanceDashArrays:{size:2,accessor:"getDashArray"},...t.opts.highPrecisionDash?{instanceDashOffsets:{size:1,accessor:"getPath",transform:t.getDashOffsets.bind(this)}}:{}}),t.opts.offset&&r.addInstanced({instanceOffsets:{size:1,accessor:"getOffset"}}))}updateState(e,t){if(t.isEnabled(this)&&t.opts.dash){let r={dashAlignMode:this.props.dashJustified?1:0,dashGapPickable:Boolean(this.props.dashGapPickable)};this.setShaderModuleProps({pathStyle:r})}}getDashOffsets(e){let t=[0],r=this.props.positionFormat==="XY"?2:3,s=Array.isArray(e[0]),i=s?e.length:e.length/r,n,a;for(let l=0;l<i-1;l++)n=s?e[l]:e.slice(l*r,l*r+r),n=this.projectPosition(n),l>0&&(t[l]=t[l-1]+R.dist(a,n)),a=n;return t[i-1]=0,t}};B.defaultProps=sr;B.extensionName="PathStyleExtension";var pt=B;var mt=d(_(),1);var F=d(_(),1),dt=`uniform fillUniforms {
|
|
1222
1228
|
vec2 patternTextureSize;
|
|
1223
1229
|
bool patternEnabled;
|
|
1224
1230
|
bool patternMask;
|
|
@@ -1424,15 +1430,15 @@ in vec2 mask_texCoords;
|
|
|
1424
1430
|
|
|
1425
1431
|
if (!mask) discard;
|
|
1426
1432
|
}
|
|
1427
|
-
`},Tr=o=>o&&"maskMap"in o?{mask_texture:o.maskMap}:o||{},Ot={name:"mask",dependencies:[Tt.project],vs:br,fs:Mr,inject:Fr,getUniforms:Tr,uniformTypes:{bounds:"vec4<f32>",channel:"i32",enabled:"i32",inverted:"i32",maskByInstance:"i32"}};var Pe=d(_(),1);var Lt=d(_(),1),Ar={blendColorOperation:"subtract",blendColorSrcFactor:"zero",blendColorDstFactor:"one",blendAlphaOperation:"subtract",blendAlphaSrcFactor:"zero",blendAlphaDstFactor:"one"},G=class extends Lt._LayersPass{constructor(e,t){super(e,t);let{mapSize:r=2048}=t;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 t=2**e.channel,r=[255,255,255,255];super.render({...e,clearColor:r,colorMask:t,target:this.fbo,pass:"mask"})}getLayerParameters(e,t,r){return{...e.props.parameters,blend:!0,depthCompare:"always",...Ar}}shouldDrawLayer(e){return e.props.operation.includes("mask")}delete(){this.fbo.delete(),this.maskMap.delete()}};var ie=d(_(),1);function T(o,e){let t=[1/0,1/0,-1/0,-1/0];for(let r of o){let s=r.getBounds();if(s){let i=r.projectPosition(s[0],{viewport:e,autoOffset:!1}),n=r.projectPosition(s[1],{viewport:e,autoOffset:!1});t[0]=Math.min(t[0],i[0]),t[1]=Math.min(t[1],i[1]),t[2]=Math.max(t[2],n[0]),t[3]=Math.max(t[3],n[1])}}return Number.isFinite(t[0])?t:null}var Or=2048;function A(o){let{bounds:e,viewport:t,border:r=0}=o,{isGeospatial:s}=t;if(e[2]<=e[0]||e[3]<=e[1])return null;let i=t.unprojectPosition([(e[0]+e[2])/2,(e[1]+e[3])/2,0]),{width:n,height:a,zoom:l}=o;if(l===void 0){n=n-r*2,a=a-r*2;let c=Math.min(n/(e[2]-e[0]),a/(e[3]-e[1]));l=Math.min(Math.log2(c),20)}else if(!n||!a){let c=2**l;n=Math.round(Math.abs(e[2]-e[0])*c),a=Math.round(Math.abs(e[3]-e[1])*c);let f=Or-r*2;if(n>f||a>f){let u=f/Math.max(n,a);n=Math.round(n*u),a=Math.round(a*u),l+=Math.log2(u)}}return s?new ie.WebMercatorViewport({id:t.id,x:r,y:r,width:n,height:a,longitude:i[0],latitude:i[1],zoom:l,orthographic:!0}):new ie.OrthographicViewport({id:t.id,x:r,y:r,width:n,height:a,target:i,zoom:l,flipY:!1})}function Lr(o,e){let t;if(e&&e.length===2){let[i,n]=e,a=o.getBounds({z:i}),l=o.getBounds({z:n});t=[Math.min(a[0],l[0]),Math.min(a[1],l[1]),Math.max(a[2],l[2]),Math.max(a[3],l[3])]}else t=o.getBounds();let r=o.projectPosition(t.slice(0,2)),s=o.projectPosition(t.slice(2,4));return[r[0],r[1],s[0],s[1]]}function O(o,e,t){if(!o)return[0,0,1,1];let r=Lr(e,t),s=
|
|
1428
|
-
`),
|
|
1433
|
+
`},Tr=o=>o&&"maskMap"in o?{mask_texture:o.maskMap}:o||{},Ot={name:"mask",dependencies:[Tt.project],vs:br,fs:Mr,inject:Fr,getUniforms:Tr,uniformTypes:{bounds:"vec4<f32>",channel:"i32",enabled:"i32",inverted:"i32",maskByInstance:"i32"}};var Pe=d(_(),1);var Lt=d(_(),1),Ar={blendColorOperation:"subtract",blendColorSrcFactor:"zero",blendColorDstFactor:"one",blendAlphaOperation:"subtract",blendAlphaSrcFactor:"zero",blendAlphaDstFactor:"one"},G=class extends Lt._LayersPass{constructor(e,t){super(e,t);let{mapSize:r=2048}=t;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 t=2**e.channel,r=[255,255,255,255];super.render({...e,clearColor:r,colorMask:t,target:this.fbo,pass:"mask"})}getLayerParameters(e,t,r){return{...e.props.parameters,blend:!0,depthCompare:"always",...Ar}}shouldDrawLayer(e){return e.props.operation.includes("mask")}delete(){this.fbo.delete(),this.maskMap.delete()}};var ie=d(_(),1);function T(o,e){let t=[1/0,1/0,-1/0,-1/0];for(let r of o){let s=r.getBounds();if(s){let i=r.projectPosition(s[0],{viewport:e,autoOffset:!1}),n=r.projectPosition(s[1],{viewport:e,autoOffset:!1});t[0]=Math.min(t[0],i[0]),t[1]=Math.min(t[1],i[1]),t[2]=Math.max(t[2],n[0]),t[3]=Math.max(t[3],n[1])}}return Number.isFinite(t[0])?t:null}var Or=2048;function A(o){let{bounds:e,viewport:t,border:r=0}=o,{isGeospatial:s}=t;if(e[2]<=e[0]||e[3]<=e[1])return null;let i=t.unprojectPosition([(e[0]+e[2])/2,(e[1]+e[3])/2,0]),{width:n,height:a,zoom:l}=o;if(l===void 0){n=n-r*2,a=a-r*2;let c=Math.min(n/(e[2]-e[0]),a/(e[3]-e[1]));l=Math.min(Math.log2(c),20)}else if(!n||!a){let c=2**l;n=Math.round(Math.abs(e[2]-e[0])*c),a=Math.round(Math.abs(e[3]-e[1])*c);let f=Or-r*2;if(n>f||a>f){let u=f/Math.max(n,a);n=Math.round(n*u),a=Math.round(a*u),l+=Math.log2(u)}}return s?new ie.WebMercatorViewport({id:t.id,x:r,y:r,width:n,height:a,longitude:i[0],latitude:i[1],zoom:l,orthographic:!0}):new ie.OrthographicViewport({id:t.id,x:r,y:r,width:n,height:a,target:i,zoom:l,flipY:!1})}function Lr(o,e){let t;if(e&&e.length===2){let[i,n]=e,a=o.getBounds({z:i}),l=o.getBounds({z:n});t=[Math.min(a[0],l[0]),Math.min(a[1],l[1]),Math.max(a[2],l[2]),Math.max(a[3],l[3])]}else t=o.getBounds();let r=o.projectPosition(t.slice(0,2)),s=o.projectPosition(t.slice(2,4));return[r[0],r[1],s[0],s[1]]}function O(o,e,t){if(!o)return[0,0,1,1];let r=Lr(e,t),s=Sr(r);return o[2]-o[0]<=s[2]-s[0]&&o[3]-o[1]<=s[3]-s[1]?o:[Math.max(o[0],s[0]),Math.max(o[1],s[1]),Math.min(o[2],s[2]),Math.min(o[3],s[3])]}function Sr(o){let e=o[2]-o[0],t=o[3]-o[1],r=(o[0]+o[2])/2,s=(o[1]+o[3])/2;return[r-e,s-t,r+e,s+t]}var H=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 G(e,{id:"default-mask"}),this.maskMap=this.maskPass.maskMap}preRender({layers:e,layerFilter:t,viewports:r,onViewportActive:s,views:i,isPicking:n}){let a=!1;if(n)return{didRender:a};let l=e.filter(p=>p.props.visible&&p.props.operation.includes("mask"));if(l.length===0)return this.masks=null,this.channels.length=0,{didRender:a};this.masks={};let c=this._sortMaskChannels(l),f=r[0],u=!this.lastViewport||!this.lastViewport.equals(f);if(f.resolution!==void 0)return Pe.log.warn("MaskExtension is not supported in GlobeView")(),{didRender:a};for(let p in c){let m=this._renderChannel(c[p],{layerFilter:t,onViewportActive:s,views:i,viewport:f,viewportChanged:u});a||(a=m)}return{didRender:a}}_renderChannel(e,{layerFilter:t,onViewportActive:r,views:s,viewport:i,viewportChanged:n}){let a=!1,l=this.channels[e.index];if(!l)return a;let c=e===l||e.layers.length!==l.layers.length||e.layers.some((f,u)=>f!==l.layers[u]||f.props.transitions)||e.layerBounds.some((f,u)=>f!==l.layerBounds[u]);if(e.bounds=l.bounds,e.maskBounds=l.maskBounds,this.channels[e.index]=e,c||n){this.lastViewport=i;let f=T(e.layers,i);if(e.bounds=f&&O(f,i),c||!M(e.bounds,l.bounds)){let{maskPass:u,maskMap:p}=this,m=f&&A({bounds:e.bounds,viewport:i,width:p.width,height:p.height,border:1});e.maskBounds=m?m.getBounds():[0,0,1,1],u.render({pass:"mask",channel:e.index,layers:e.layers,layerFilter:t,viewports:m?[m]:[],onViewportActive:r,views:s,shaderModuleProps:{project:{devicePixelRatio:1}}}),a=!0}}return this.masks[e.id]={index:e.index,bounds:e.maskBounds,coordinateOrigin:e.coordinateOrigin,coordinateSystem:e.coordinateSystem},a}_sortMaskChannels(e){let t={},r=0;for(let s of e){let{id:i}=s.root,n=t[i];if(!n){if(++r>4){Pe.log.warn("Too many mask layers. The max supported is 4")();continue}n={id:i,index:this.channels.findIndex(a=>a?.id===i),layers:[],layerBounds:[],coordinateOrigin:s.root.props.coordinateOrigin,coordinateSystem:s.root.props.coordinateSystem},t[i]=n}n.layers.push(s),n.layerBounds.push(s.getBounds())}for(let s=0;s<4;s++){let i=this.channels[s];(!i||!(i.id in t))&&(this.channels[s]=null)}for(let s in t){let i=t[s];i.index<0&&(i.index=this.channels.findIndex(n=>!n),this.channels[i.index]=i)}return t}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 Cr={maskId:"",maskByInstance:void 0,maskInverted:!1},q=class extends P.LayerExtension{initializeState(){this.context.deck?._addDefaultEffect(new H)}getShaders(){let e="instancePositions"in this.getAttributeManager().attributes;return this.props.maskByInstance!==void 0&&(e=Boolean(this.props.maskByInstance)),this.state.maskByInstance=e,{modules:[Ot]}}draw({context:e,shaderModuleProps:t}){let r={};r.maskByInstance=Boolean(this.state.maskByInstance);let{maskId:s,maskInverted:i}=this.props,{maskChannels:n}=t.mask||{},{viewport:a}=e;if(n&&n[s]){let{index:l,bounds:c,coordinateOrigin:f}=n[s],{coordinateSystem:u}=n[s];r.enabled=!0,r.channel=l,r.inverted=i,u===P.COORDINATE_SYSTEM.DEFAULT&&(u=a.isGeospatial?P.COORDINATE_SYSTEM.LNGLAT:P.COORDINATE_SYSTEM.CARTESIAN);let p={modelMatrix:null,fromCoordinateOrigin:f,fromCoordinateSystem:u},m=this.projectPosition([c[0],c[1],0],p),v=this.projectPosition([c[2],c[3],0],p);r.bounds=[m[0],m[1],v[0],v[1]]}else s&&P.log.warn(`Could not find a mask layer with id: ${s}`)(),r.enabled=!1;this.setShaderModuleProps({mask:r})}};q.defaultProps=Cr;q.extensionName="MaskExtension";var St=q;var Bt=d(_(),1);var Nt=d(_(),1);var be=d(_(),1),x={NONE:0,WRITE_HEIGHT_MAP:1,USE_HEIGHT_MAP:2,USE_COVER:3,USE_COVER_ONLY:4,SKIP:5},Ir=Object.keys(x).map(o=>`const float TERRAIN_MODE_${o} = ${x[o]}.0;`).join(`
|
|
1434
|
+
`),Ct=Ir+`
|
|
1429
1435
|
uniform terrainUniforms {
|
|
1430
1436
|
float mode;
|
|
1431
1437
|
vec4 bounds;
|
|
1432
1438
|
} terrain;
|
|
1433
1439
|
|
|
1434
1440
|
uniform sampler2D terrain_map;
|
|
1435
|
-
`,Y={name:"terrain",dependencies:[be.project],vs:
|
|
1441
|
+
`,Y={name:"terrain",dependencies:[be.project],vs:Ct+"out vec3 commonPos;",fs:Ct+"in vec3 commonPos;",inject:{"vs:#main-start":`
|
|
1436
1442
|
if (terrain.mode == TERRAIN_MODE_SKIP) {
|
|
1437
1443
|
gl_Position = vec4(0.0);
|
|
1438
1444
|
return;
|
|
@@ -1472,6 +1478,6 @@ if ((terrain.mode == TERRAIN_MODE_USE_COVER) || (terrain.mode == TERRAIN_MODE_US
|
|
|
1472
1478
|
}
|
|
1473
1479
|
return;
|
|
1474
1480
|
}
|
|
1475
|
-
`},getUniforms:(o={})=>{if("dummyHeightMap"in o){let{drawToTerrainHeightMap:e,heightMap:t,heightMapBounds:r,dummyHeightMap:s,terrainCover:i,useTerrainHeightMap:n,terrainSkipRender:a}=o,l=be.project.getUniforms(o.project),{commonOrigin:c}=l,f=a?x.SKIP:x.NONE,u=s,p=null;return e?(f=x.WRITE_HEIGHT_MAP,p=r):n&&t?(f=x.USE_HEIGHT_MAP,u=t,p=r):i&&(u=(o.isPicking?i.getPickingFramebuffer():i.getRenderFramebuffer())?.colorAttachments[0].texture,o.isPicking&&(f=x.SKIP),u?(f=f===x.SKIP?x.USE_COVER_ONLY:x.USE_COVER,p=i.bounds):u=s),{mode:f,terrain_map:u,bounds:p?[p[0]-c[0],p[1]-c[1],p[2]-p[0],p[3]-p[1]]:[0,0,0,0]}}return{}},uniformTypes:{mode:"f32",bounds:"vec4<f32>"}};function W(o,e){return o.createFramebuffer({id:e.id,colorAttachments:[o.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 ne=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=It(e)}get id(){return this.targetLayer.id}get isActive(){return Boolean(this.targetLayer.getCurrentLayer())}shouldUpdate({targetLayer:e,viewport:t,layers:r,layerNeedsRedraw:s}){e&&(this.targetLayer=e);let i=t?this._updateViewport(t):!1,n=r?this._updateLayers(r):!1;if(s){for(let a of this.layers)if(s[a]){n=!0;break}}return n||i}_updateLayers(e){let t=!1;if(e=this.tile?kr(this.tile,e):e,e.length!==this.layers.length)t=!0;else for(let r=0;r<e.length;r++)if(e[r].id!==this.layers[r]){t=!0;break}return t&&(this.layers=e.map(r=>r.id)),t}_updateViewport(e){let t=this.targetLayer,r=!1;if(this.tile&&"boundingBox"in this.tile){if(!this.targetBounds){r=!0,this.targetBounds=this.tile.boundingBox;let i=e.projectPosition(this.targetBounds[0]),n=e.projectPosition(this.targetBounds[1]);this.targetBoundsCommon=[i[0],i[1],n[0],n[1]]}}else this.targetBounds!==t.getBounds()&&(r=!0,this.targetBounds=t.getBounds(),this.targetBoundsCommon=T([t],e));if(!this.targetBoundsCommon)return!1;let s=Math.ceil(e.zoom+.5);if(this.tile)this.bounds=this.targetBoundsCommon;else{let i=this.renderViewport?.zoom;r=r||s!==i;let n=O(this.targetBoundsCommon,e),a=this.bounds;r=r||!a||n.some((l,c)=>l!==a[c]),this.bounds=n}return r&&(this.renderViewport=A({bounds:this.bounds,zoom:s,viewport:e})),r}getRenderFramebuffer(){return!this.renderViewport||this.layers.length===0?null:(this.fbo||(this.fbo=W(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=W(this.targetLayer.context.device,{id:`${this.id}-picking`,interpolate:!1})),this.pickingFbo)}filterLayers(e){return e.filter(({id:t})=>this.layers.includes(t))}delete(){let{fbo:e,pickingFbo:t}=this;e&&(e.colorAttachments[0].destroy(),e.destroy()),t&&(t.colorAttachments[0].destroy(),t.destroy())}};function kr(o,e){return e.filter(t=>{let r=It(t);return r?Rr(o.boundingBox,r.boundingBox):!0})}function It(o){for(;o;){let{tile:e}=o.props;if(e)return e;o=o.parent}return null}function Rr(o,e){return o&&e?o[0][0]<e[1][0]&&e[0][0]<o[1][0]&&o[0][1]<e[1][1]&&e[0][1]<o[1][1]:!1}var kt=d(_(),1),wr={blendColorOperation:"max",blendColorSrcFactor:"one",blendColorDstFactor:"one",blendAlphaOperation:"max",blendAlphaSrcFactor:"one",blendAlphaDstFactor:"one"},ae=class extends kt._LayersPass{getRenderableLayers(e,t){let{layers:r}=t,s=[],i=this._getDrawLayerParams(e,t,!0);for(let n=0;n<r.length;n++){let a=r[n];!a.isComposite&&i[n].shouldDrawLayer&&s.push(a)}return s}renderHeightMap(e,t){let r=e.getRenderFramebuffer(),s=e.renderViewport;!r||!s||(r.resize(s),this.render({...t,target:r,pass:"terrain-height-map",layers:t.layers,viewports:[s],effects:[],clearColor:[0,0,0,0]}))}renderTerrainCover(e,t){let r=e.getRenderFramebuffer(),s=e.renderViewport;if(!r||!s)return;let i=e.filterLayers(t.layers);r.resize(s),this.render({...t,target:r,pass:`terrain-cover-${e.id}`,layers:i,effects:[],viewports:[s],clearColor:[0,0,0,0]})}getLayerParameters(e,t,r){return{...e.props.parameters,blend:!0,depthCompare:"always",...e.props.operation.includes("terrain")&&wr}}getShaderModuleProps(e,t,r){return{terrain:{project:r.project}}}};var Rt=d(_(),1),le=class extends Rt._PickLayersPass{constructor(){super(...arguments),this.drawParameters={}}getRenderableLayers(e,t){let{layers:r}=t,s=[];this.drawParameters={},this._resetColorEncoder(t.pickZ);let i=this._getDrawLayerParams(e,t);for(let n=0;n<r.length;n++){let a=r[n];!a.isComposite&&i[n].shouldDrawLayer&&(s.push(a),this.drawParameters[a.id]=i[n].layerParameters)}return s}renderTerrainCover(e,t){let r=e.getPickingFramebuffer(),s=e.renderViewport;if(!r||!s)return;let i=e.filterLayers(t.layers),n=e.targetLayer;n.props.pickable&&i.unshift(n),r.resize(s),this.render({...t,pickingFBO:r,pass:`terrain-cover-picking-${e.id}`,layers:i,effects:[],viewports:[s],cullRect:void 0,deviceRect:s,pickZ:!1})}getLayerParameters(e,t,r){let s;return this.drawParameters[e.id]?s=this.drawParameters[e.id]:(s=super.getLayerParameters(e,t,r),s.blend=!0),{...s,depthCompare:"always"}}getShaderModuleProps(e,t,r){return{...super.getShaderModuleProps(e,t,r),terrain:{project:r.project}}}};var wt=2048,K=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=W(this.device,{id:"height-map",float:!0})),this.fbo):null}shouldUpdate({layers:e,viewport:t}){let r=e.length!==this.layers.length||e.some((i,n)=>i!==this.layers[n]||i.props.transitions||i.getBounds()!==this.layersBounds[n]);r&&(this.layers=e,this.layersBounds=e.map(i=>i.getBounds()),this.layersBoundsCommon=T(e,t));let s=!this.lastViewport||!t.equals(this.lastViewport);if(!this.layersBoundsCommon)this.renderViewport=null;else if(r||s){let i=O(this.layersBoundsCommon,t);if(i[2]<=i[0]||i[3]<=i[1])return this.renderViewport=null,!1;this.bounds=i,this.lastViewport=t;let n=t.scale,a=(i[2]-i[0])*n,l=(i[3]-i[1])*n;return this.renderViewport=a>0||l>0?A({bounds:[t.center[0]-1,t.center[1]-1,t.center[0]+1,t.center[1]+1],zoom:t.zoom,width:Math.min(a,wt),height:Math.min(l,wt),viewport:t}):null,!0}return!1}delete(){this.fbo&&(this.fbo.colorAttachments[0].delete(),this.fbo.delete())}};var ce=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:t}){this.dummyHeightMap=e.createTexture({width:1,height:1,data:new Uint8Array([0,0,0,0])}),this.terrainPass=new ae(e,{id:"terrain"}),this.terrainPickingPass=new le(e,{id:"terrain-picking"}),K.isSupported(e)?this.heightMap=new K(e):Nt.log.warn("Terrain offset mode is not supported by this browser")(),t._addDefaultShaderModule(Y)}preRender(e){if(e.pickZ){this.isDrapingEnabled=!1;return}let{viewports:t}=e,r=e.pass.startsWith("picking");this.isPicking=r,this.isDrapingEnabled=!0;let s=t[0],i=(r?this.terrainPickingPass:this.terrainPass).getRenderableLayers(s,e),n=i.filter(l=>l.props.operation.includes("terrain"));if(n.length===0)return;r||i.filter(c=>c.state.terrainDrawMode==="offset").length>0&&this._updateHeightMap(n,s,e);let a=i.filter(l=>l.state.terrainDrawMode==="drape");this._updateTerrainCovers(n,a,s,e)}getShaderModuleProps(e,t){let{terrainDrawMode:r}=e.state;return{terrain:{project:t.project,isPicking:this.isPicking,heightMap:this.heightMap?.getRenderFramebuffer()?.colorAttachments[0].texture||null,heightMapBounds:this.heightMap?.bounds,dummyHeightMap:this.dummyHeightMap,terrainCover:this.isDrapingEnabled?this.terrainCovers.get(e.id):null,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 t of this.terrainCovers.values())t.delete();this.terrainCovers.clear(),e._removeDefaultShaderModule(Y)}_updateHeightMap(e,t,r){!this.heightMap||!this.heightMap.shouldUpdate({layers:e,viewport:t})||this.terrainPass.renderHeightMap(this.heightMap,{...r,layers:e,shaderModuleProps:{terrain:{heightMapBounds:this.heightMap.bounds,dummyHeightMap:this.dummyHeightMap,drawToTerrainHeightMap:!0},project:{devicePixelRatio:1}}})}_updateTerrainCovers(e,t,r,s){let i={};for(let n of t)n.state.terrainCoverNeedsRedraw&&(i[n.id]=!0,n.state.terrainCoverNeedsRedraw=!1);for(let n of this.terrainCovers.values())n.isDirty=n.isDirty||n.shouldUpdate({layerNeedsRedraw:i});for(let n of e)this._updateTerrainCover(n,t,r,s);this.isPicking||this._pruneTerrainCovers()}_updateTerrainCover(e,t,r,s){let i=this.isPicking?this.terrainPickingPass:this.terrainPass,n=this.terrainCovers.get(e.id);n||(n=new ne(e),this.terrainCovers.set(e.id,n));try{let a=n.shouldUpdate({targetLayer:e,viewport:r,layers:t});(this.isPicking||n.isDirty||a)&&(i.renderTerrainCover(n,{...s,layers:t,shaderModuleProps:{terrain:{dummyHeightMap:this.dummyHeightMap,terrainSkipRender:!1},project:{devicePixelRatio:1}}}),this.isPicking||(n.isDirty=!1))}catch(a){e.raiseError(a,`Error rendering terrain cover ${n.id}`)}}_pruneTerrainCovers(){let e=[];for(let[t,r]of this.terrainCovers)r.isActive||e.push(t);for(let t of e)this.terrainCovers.delete(t)}};var Nr={terrainDrawMode:void 0},$=class extends Bt.LayerExtension{getShaders(){return{modules:[Y]}}initializeState(){this.context.deck?._addDefaultEffect(new ce)}updateState(e){let{props:t,oldProps:r}=e;if(this.state.terrainDrawMode&&t.terrainDrawMode===r.terrainDrawMode&&t.extruded===r.extruded)return;let{terrainDrawMode:s}=t;if(!s){let i=this.props.extruded,n=this.getAttributeManager()?.attributes,a=n&&"instancePositions"in n;s=i||a?"offset":"drape"}this.setState({terrainDrawMode:s})}onNeedsRedraw(){let e=this.state;e.terrainDrawMode==="drape"&&(e.terrainCoverNeedsRedraw=!0)}};$.defaultProps=Nr;$.extensionName="TerrainExtension";var Dt=$;return qt(Z);})();
|
|
1481
|
+
`},getUniforms:(o={})=>{if("dummyHeightMap"in o){let{drawToTerrainHeightMap:e,heightMap:t,heightMapBounds:r,dummyHeightMap:s,terrainCover:i,useTerrainHeightMap:n,terrainSkipRender:a}=o,l=be.project.getUniforms(o.project),{commonOrigin:c}=l,f=a?x.SKIP:x.NONE,u=s,p=null;return e?(f=x.WRITE_HEIGHT_MAP,p=r):n&&t?(f=x.USE_HEIGHT_MAP,u=t,p=r):i&&(u=(o.isPicking?i.getPickingFramebuffer():i.getRenderFramebuffer())?.colorAttachments[0].texture,o.isPicking&&(f=x.SKIP),u?(f=f===x.SKIP?x.USE_COVER_ONLY:x.USE_COVER,p=i.bounds):u=s),{mode:f,terrain_map:u,bounds:p?[p[0]-c[0],p[1]-c[1],p[2]-p[0],p[3]-p[1]]:[0,0,0,0]}}return{}},uniformTypes:{mode:"f32",bounds:"vec4<f32>"}};function W(o,e){return o.createFramebuffer({id:e.id,colorAttachments:[o.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 ne=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=It(e)}get id(){return this.targetLayer.id}get isActive(){return Boolean(this.targetLayer.getCurrentLayer())}shouldUpdate({targetLayer:e,viewport:t,layers:r,layerNeedsRedraw:s}){e&&(this.targetLayer=e);let i=t?this._updateViewport(t):!1,n=r?this._updateLayers(r):!1;if(s){for(let a of this.layers)if(s[a]){n=!0;break}}return n||i}_updateLayers(e){let t=!1;if(e=this.tile?kr(this.tile,e):e,e.length!==this.layers.length)t=!0;else for(let r=0;r<e.length;r++)if(e[r].id!==this.layers[r]){t=!0;break}return t&&(this.layers=e.map(r=>r.id)),t}_updateViewport(e){let t=this.targetLayer,r=!1;if(this.tile&&"boundingBox"in this.tile){if(!this.targetBounds){r=!0,this.targetBounds=this.tile.boundingBox;let i=e.projectPosition(this.targetBounds[0]),n=e.projectPosition(this.targetBounds[1]);this.targetBoundsCommon=[i[0],i[1],n[0],n[1]]}}else this.targetBounds!==t.getBounds()&&(r=!0,this.targetBounds=t.getBounds(),this.targetBoundsCommon=T([t],e));if(!this.targetBoundsCommon)return!1;let s=Math.ceil(e.zoom+.5);if(this.tile)this.bounds=this.targetBoundsCommon;else{let i=this.renderViewport?.zoom;r=r||s!==i;let n=O(this.targetBoundsCommon,e),a=this.bounds;r=r||!a||n.some((l,c)=>l!==a[c]),this.bounds=n}return r&&(this.renderViewport=A({bounds:this.bounds,zoom:s,viewport:e})),r}getRenderFramebuffer(){return!this.renderViewport||this.layers.length===0?null:(this.fbo||(this.fbo=W(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=W(this.targetLayer.context.device,{id:`${this.id}-picking`,interpolate:!1})),this.pickingFbo)}filterLayers(e){return e.filter(({id:t})=>this.layers.includes(t))}delete(){let{fbo:e,pickingFbo:t}=this;e&&(e.colorAttachments[0].destroy(),e.destroy()),t&&(t.colorAttachments[0].destroy(),t.destroy())}};function kr(o,e){return e.filter(t=>{let r=It(t);return r?Rr(o.boundingBox,r.boundingBox):!0})}function It(o){for(;o;){let{tile:e}=o.props;if(e)return e;o=o.parent}return null}function Rr(o,e){return o&&e?o[0][0]<e[1][0]&&e[0][0]<o[1][0]&&o[0][1]<e[1][1]&&e[0][1]<o[1][1]:!1}var kt=d(_(),1),wr={blendColorOperation:"max",blendColorSrcFactor:"one",blendColorDstFactor:"one",blendAlphaOperation:"max",blendAlphaSrcFactor:"one",blendAlphaDstFactor:"one"},ae=class extends kt._LayersPass{getRenderableLayers(e,t){let{layers:r}=t,s=[],i=this._getDrawLayerParams(e,t,!0);for(let n=0;n<r.length;n++){let a=r[n];!a.isComposite&&i[n].shouldDrawLayer&&s.push(a)}return s}renderHeightMap(e,t){let r=e.getRenderFramebuffer(),s=e.renderViewport;!r||!s||(r.resize(s),this.render({...t,target:r,pass:"terrain-height-map",layers:t.layers,viewports:[s],effects:[],clearColor:[0,0,0,0]}))}renderTerrainCover(e,t){let r=e.getRenderFramebuffer(),s=e.renderViewport;if(!r||!s)return;let i=e.filterLayers(t.layers);r.resize(s),this.render({...t,target:r,pass:`terrain-cover-${e.id}`,layers:i,effects:[],viewports:[s],clearColor:[0,0,0,0]})}getLayerParameters(e,t,r){return{...e.props.parameters,blend:!0,depthCompare:"always",...e.props.operation.includes("terrain")&&wr}}getShaderModuleProps(e,t,r){return{terrain:{project:r.project}}}};var Rt=d(_(),1),le=class extends Rt._PickLayersPass{constructor(){super(...arguments),this.drawParameters={}}getRenderableLayers(e,t){let{layers:r}=t,s=[];this.drawParameters={},this._resetColorEncoder(t.pickZ);let i=this._getDrawLayerParams(e,t);for(let n=0;n<r.length;n++){let a=r[n];!a.isComposite&&i[n].shouldDrawLayer&&(s.push(a),this.drawParameters[a.id]=i[n].layerParameters)}return s}renderTerrainCover(e,t){let r=e.getPickingFramebuffer(),s=e.renderViewport;if(!r||!s)return;let i=e.filterLayers(t.layers),n=e.targetLayer;n.props.pickable&&i.unshift(n),r.resize(s),this.render({...t,pickingFBO:r,pass:`terrain-cover-picking-${e.id}`,layers:i,effects:[],viewports:[s],cullRect:void 0,deviceRect:s,pickZ:!1})}getLayerParameters(e,t,r){let s;return this.drawParameters[e.id]?s=this.drawParameters[e.id]:(s=super.getLayerParameters(e,t,r),s.blend=!0),{...s,depthCompare:"always"}}getShaderModuleProps(e,t,r){return{...super.getShaderModuleProps(e,t,r),terrain:{project:r.project}}}};var wt=2048,K=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=W(this.device,{id:"height-map",float:!0})),this.fbo):null}shouldUpdate({layers:e,viewport:t}){let r=e.length!==this.layers.length||e.some((i,n)=>i!==this.layers[n]||i.props.transitions||i.getBounds()!==this.layersBounds[n]);r&&(this.layers=e,this.layersBounds=e.map(i=>i.getBounds()),this.layersBoundsCommon=T(e,t));let s=!this.lastViewport||!t.equals(this.lastViewport);if(!this.layersBoundsCommon)this.renderViewport=null;else if(r||s){let i=O(this.layersBoundsCommon,t);if(i[2]<=i[0]||i[3]<=i[1])return this.renderViewport=null,!1;this.bounds=i,this.lastViewport=t;let n=t.scale,a=(i[2]-i[0])*n,l=(i[3]-i[1])*n;return this.renderViewport=a>0||l>0?A({bounds:[t.center[0]-1,t.center[1]-1,t.center[0]+1,t.center[1]+1],zoom:t.zoom,width:Math.min(a,wt),height:Math.min(l,wt),viewport:t}):null,!0}return!1}delete(){this.fbo&&(this.fbo.colorAttachments[0].delete(),this.fbo.delete())}};var ce=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:t}){this.dummyHeightMap=e.createTexture({width:1,height:1,data:new Uint8Array([0,0,0,0])}),this.terrainPass=new ae(e,{id:"terrain"}),this.terrainPickingPass=new le(e,{id:"terrain-picking"}),K.isSupported(e)?this.heightMap=new K(e):Nt.log.warn("Terrain offset mode is not supported by this browser")(),t._addDefaultShaderModule(Y)}preRender(e){if(e.pickZ){this.isDrapingEnabled=!1;return}let{viewports:t}=e,r=e.pass.startsWith("picking");this.isPicking=r,this.isDrapingEnabled=!0;let s=t[0],i=(r?this.terrainPickingPass:this.terrainPass).getRenderableLayers(s,e),n=i.filter(l=>l.props.operation.includes("terrain"));if(n.length===0)return;r||i.filter(c=>c.state.terrainDrawMode==="offset").length>0&&this._updateHeightMap(n,s,e);let a=i.filter(l=>l.state.terrainDrawMode==="drape");this._updateTerrainCovers(n,a,s,e)}getShaderModuleProps(e,t){let{terrainDrawMode:r}=e.state;return{terrain:{project:t.project,isPicking:this.isPicking,heightMap:this.heightMap?.getRenderFramebuffer()?.colorAttachments[0].texture||null,heightMapBounds:this.heightMap?.bounds,dummyHeightMap:this.dummyHeightMap,terrainCover:this.isDrapingEnabled?this.terrainCovers.get(e.id):null,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 t of this.terrainCovers.values())t.delete();this.terrainCovers.clear(),e._removeDefaultShaderModule(Y)}_updateHeightMap(e,t,r){!this.heightMap||!this.heightMap.shouldUpdate({layers:e,viewport:t})||this.terrainPass.renderHeightMap(this.heightMap,{...r,layers:e,shaderModuleProps:{terrain:{heightMapBounds:this.heightMap.bounds,dummyHeightMap:this.dummyHeightMap,drawToTerrainHeightMap:!0},project:{devicePixelRatio:1}}})}_updateTerrainCovers(e,t,r,s){let i={};for(let n of t)n.state.terrainCoverNeedsRedraw&&(i[n.id]=!0,n.state.terrainCoverNeedsRedraw=!1);for(let n of this.terrainCovers.values())n.isDirty=n.isDirty||n.shouldUpdate({layerNeedsRedraw:i});for(let n of e)this._updateTerrainCover(n,t,r,s);this.isPicking||this._pruneTerrainCovers()}_updateTerrainCover(e,t,r,s){let i=this.isPicking?this.terrainPickingPass:this.terrainPass,n=this.terrainCovers.get(e.id);n||(n=new ne(e),this.terrainCovers.set(e.id,n));try{let a=n.shouldUpdate({targetLayer:e,viewport:r,layers:t});(this.isPicking||n.isDirty||a)&&(i.renderTerrainCover(n,{...s,layers:t,shaderModuleProps:{terrain:{dummyHeightMap:this.dummyHeightMap,terrainSkipRender:!1},project:{devicePixelRatio:1}}}),this.isPicking||(n.isDirty=!1))}catch(a){e.raiseError(a,`Error rendering terrain cover ${n.id}`)}}_pruneTerrainCovers(){let e=[];for(let[t,r]of this.terrainCovers)r.isActive||e.push(t);for(let t of e)this.terrainCovers.delete(t)}};var Nr={terrainDrawMode:void 0},$=class extends Bt.LayerExtension{getShaders(){return{modules:[Y]}}initializeState(){this.context.deck?._addDefaultEffect(new ce)}updateState(e){let{props:t,oldProps:r}=e;if(this.state.terrainDrawMode&&t.terrainDrawMode===r.terrainDrawMode&&t.extruded===r.extruded)return;let{terrainDrawMode:s}=t;if(!s){let i=this.props.extruded,n=this.getAttributeManager()?.attributes,a=n&&"instancePositions"in n;s=i||a?"offset":"drape"}this.setState({terrainDrawMode:s})}onNeedsRedraw(){let e=this.state;e.terrainDrawMode==="drape"&&(e.terrainCoverNeedsRedraw=!0)}};$.defaultProps=Nr;$.extensionName="TerrainExtension";var Dt=$;return Ht(Z);})();
|
|
1476
1482
|
return __exports__;
|
|
1477
1483
|
});
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"description": "Plug-and-play functionalities for deck.gl layers",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"version": "9.2.
|
|
6
|
+
"version": "9.2.9",
|
|
7
7
|
"publishConfig": {
|
|
8
8
|
"access": "public"
|
|
9
9
|
},
|
|
@@ -47,5 +47,5 @@
|
|
|
47
47
|
"@luma.gl/core": "~9.2.6",
|
|
48
48
|
"@luma.gl/engine": "~9.2.6"
|
|
49
49
|
},
|
|
50
|
-
"gitHead": "
|
|
50
|
+
"gitHead": "b0e908d0c51316514a44221fcdb30b777c09d118"
|
|
51
51
|
}
|
|
@@ -20,7 +20,7 @@ export type BrushingExtensionProps<DataT = any> = {
|
|
|
20
20
|
* Called to retrieve an arbitrary position for each object that it will be filtered by.
|
|
21
21
|
* Only effective if `brushingTarget` is set to `custom`.
|
|
22
22
|
*/
|
|
23
|
-
getBrushingTarget?: Accessor<DataT, [number, number]
|
|
23
|
+
getBrushingTarget?: Accessor<DataT, Readonly<[number, number]>>;
|
|
24
24
|
/**
|
|
25
25
|
* Enable/disable brushing. If brushing is disabled, all objects are rendered.
|
|
26
26
|
* @default true
|
|
@@ -16,7 +16,7 @@ export type ClipExtensionProps = {
|
|
|
16
16
|
/** Rectangular bounds to be used for clipping the rendered region, in `[left, bottom, right, top]`.
|
|
17
17
|
* @default [0, 0, 1, 1]
|
|
18
18
|
*/
|
|
19
|
-
clipBounds?: [number, number, number, number]
|
|
19
|
+
clipBounds?: Readonly<[number, number, number, number]>;
|
|
20
20
|
/**
|
|
21
21
|
* Controls whether an object is clipped by its anchor (e.g. icon, point) or by its geometry (e.g. path, polygon).
|
|
22
22
|
* If not specified, it is automatically deduced from the layer.
|
|
@@ -35,7 +35,7 @@ bool clip_isInBounds(vec2 position) {
|
|
|
35
35
|
`;
|
|
36
36
|
|
|
37
37
|
export type ClipModuleProps = {
|
|
38
|
-
bounds: [number, number, number, number]
|
|
38
|
+
bounds: Readonly<[number, number, number, number]>;
|
|
39
39
|
};
|
|
40
40
|
|
|
41
41
|
/*
|
|
@@ -52,13 +52,13 @@ export type DataFilterExtensionProps<DataT = any> = {
|
|
|
52
52
|
* If an object's filtered value is within the bounds, the object will be rendered; otherwise it will be hidden.
|
|
53
53
|
* @default [-1, 1]
|
|
54
54
|
*/
|
|
55
|
-
filterRange?: [number, number] | [number, number][];
|
|
55
|
+
filterRange?: Readonly<[number, number]> | Readonly<[number, number]>[];
|
|
56
56
|
/**
|
|
57
57
|
* If specified, objects will be faded in/out instead of abruptly shown/hidden.
|
|
58
58
|
* When the filtered value is outside of the bounds defined by `filterSoftRange` but still within the bounds defined by `filterRange`, the object will be rendered as "faded."
|
|
59
59
|
* @default null
|
|
60
60
|
*/
|
|
61
|
-
filterSoftRange?: [number, number] | [number, number][] | null;
|
|
61
|
+
filterSoftRange?: Readonly<[number, number]> | Readonly<[number, number]>[] | null;
|
|
62
62
|
/**
|
|
63
63
|
* When an object is "faded", manipulate its size so that it appears smaller or thinner. Only works if `filterSoftRange` is specified.
|
|
64
64
|
* @default true
|
|
@@ -70,7 +70,7 @@ export type FillStyleExtensionProps<DataT = any> = {
|
|
|
70
70
|
* Accessor for the offset of the pattern, relative to the original size. Offset `[0.5, 0.5]` shifts the pattern alignment by half.
|
|
71
71
|
* @default [0, 0]
|
|
72
72
|
*/
|
|
73
|
-
getFillPatternOffset?: Accessor<DataT, [number, number]
|
|
73
|
+
getFillPatternOffset?: Accessor<DataT, Readonly<[number, number]>>;
|
|
74
74
|
};
|
|
75
75
|
|
|
76
76
|
export type FillStyleExtensionOptions = {
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
import {LayerExtension, _mergeShaders as mergeShaders} from '@deck.gl/core';
|
|
6
6
|
import {vec3} from '@math.gl/core';
|
|
7
|
-
import {dashShaders, offsetShaders} from './shaders.glsl';
|
|
7
|
+
import {dashShaders, Defines, offsetShaders} from './shaders.glsl';
|
|
8
8
|
|
|
9
|
-
import type {Layer, LayerContext,
|
|
9
|
+
import type {Accessor, Layer, LayerContext, UpdateParameters} from '@deck.gl/core';
|
|
10
10
|
import type {ShaderModule} from '@luma.gl/shadertools';
|
|
11
11
|
|
|
12
12
|
const defaultProps = {
|
|
@@ -26,7 +26,7 @@ export type PathStyleExtensionProps<DataT = any> = {
|
|
|
26
26
|
* Accessor for the dash array to draw each path with: `[dashSize, gapSize]` relative to the width of the path.
|
|
27
27
|
* Requires the `dash` option to be on.
|
|
28
28
|
*/
|
|
29
|
-
getDashArray?: Accessor<DataT, [number, number]
|
|
29
|
+
getDashArray?: Accessor<DataT, Readonly<[number, number]>>;
|
|
30
30
|
/**
|
|
31
31
|
* Accessor for the offset to draw each path with, relative to the width of the path.
|
|
32
32
|
* Negative offset is to the left hand side, and positive offset is to the right hand side.
|
|
@@ -87,8 +87,12 @@ export default class PathStyleExtension extends LayerExtension<PathStyleExtensio
|
|
|
87
87
|
|
|
88
88
|
// Merge shader injection
|
|
89
89
|
let result = {} as {inject: Record<string, string>};
|
|
90
|
+
const defines: Defines = {};
|
|
90
91
|
if (extension.opts.dash) {
|
|
91
92
|
result = mergeShaders(result, dashShaders);
|
|
93
|
+
if (extension.opts.highPrecisionDash) {
|
|
94
|
+
defines.HIGH_PRECISION_DASH = true;
|
|
95
|
+
}
|
|
92
96
|
}
|
|
93
97
|
if (extension.opts.offset) {
|
|
94
98
|
result = mergeShaders(result, offsetShaders);
|
|
@@ -104,7 +108,8 @@ export default class PathStyleExtension extends LayerExtension<PathStyleExtensio
|
|
|
104
108
|
}
|
|
105
109
|
};
|
|
106
110
|
return {
|
|
107
|
-
modules: [pathStyle]
|
|
111
|
+
modules: [pathStyle],
|
|
112
|
+
defines
|
|
108
113
|
};
|
|
109
114
|
}
|
|
110
115
|
|
|
@@ -118,19 +123,15 @@ export default class PathStyleExtension extends LayerExtension<PathStyleExtensio
|
|
|
118
123
|
if (extension.opts.dash) {
|
|
119
124
|
attributeManager.addInstanced({
|
|
120
125
|
instanceDashArrays: {size: 2, accessor: 'getDashArray'},
|
|
121
|
-
|
|
126
|
+
...(extension.opts.highPrecisionDash
|
|
122
127
|
? {
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
: {
|
|
128
|
-
size: 1,
|
|
129
|
-
update: attribute => {
|
|
130
|
-
attribute.constant = true;
|
|
131
|
-
attribute.value = [0];
|
|
128
|
+
instanceDashOffsets: {
|
|
129
|
+
size: 1,
|
|
130
|
+
accessor: 'getPath',
|
|
131
|
+
transform: extension.getDashOffsets.bind(this)
|
|
132
132
|
}
|
|
133
133
|
}
|
|
134
|
+
: {})
|
|
134
135
|
});
|
|
135
136
|
}
|
|
136
137
|
if (extension.opts.offset) {
|
|
@@ -2,18 +2,32 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
|
+
export type Defines = {
|
|
6
|
+
// Defines passed externally
|
|
7
|
+
/**
|
|
8
|
+
* Enable high precision dash rendering.
|
|
9
|
+
*/
|
|
10
|
+
HIGH_PRECISION_DASH?: boolean;
|
|
11
|
+
};
|
|
12
|
+
|
|
5
13
|
export const dashShaders = {
|
|
6
14
|
inject: {
|
|
7
15
|
'vs:#decl': `
|
|
8
16
|
in vec2 instanceDashArrays;
|
|
17
|
+
#ifdef HIGH_PRECISION_DASH
|
|
9
18
|
in float instanceDashOffsets;
|
|
19
|
+
#endif
|
|
10
20
|
out vec2 vDashArray;
|
|
11
21
|
out float vDashOffset;
|
|
12
22
|
`,
|
|
13
23
|
|
|
14
24
|
'vs:#main-end': `
|
|
15
25
|
vDashArray = instanceDashArrays;
|
|
26
|
+
#ifdef HIGH_PRECISION_DASH
|
|
16
27
|
vDashOffset = instanceDashOffsets / width.x;
|
|
28
|
+
#else
|
|
29
|
+
vDashOffset = 0.0;
|
|
30
|
+
#endif
|
|
17
31
|
`,
|
|
18
32
|
|
|
19
33
|
'fs:#decl': `
|