@deck.gl/extensions 9.0.0-beta.10 → 9.0.0-beta.11
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/collision-filter/collision-filter-effect.d.ts +4 -2
- package/dist/collision-filter/collision-filter-effect.d.ts.map +1 -1
- package/dist/collision-filter/collision-filter-effect.js +10 -9
- package/dist/collision-filter/collision-filter-pass.d.ts +3 -2
- package/dist/collision-filter/collision-filter-pass.d.ts.map +1 -1
- package/dist/collision-filter/collision-filter-pass.js +5 -7
- package/dist/data-filter/data-filter-extension.d.ts +5 -5
- package/dist/data-filter/data-filter-extension.d.ts.map +1 -1
- package/dist/data-filter/data-filter-extension.js +45 -38
- package/dist/data-filter/shader-module.d.ts +30 -0
- package/dist/data-filter/shader-module.d.ts.map +1 -1
- package/dist/data-filter/shader-module.js +40 -20
- package/dist/dist.dev.js +571 -535
- package/dist/index.cjs +517 -478
- package/dist/index.cjs.map +4 -4
- package/dist/mask/mask-effect.d.ts +5 -4
- package/dist/mask/mask-effect.d.ts.map +1 -1
- package/dist/mask/mask-effect.js +9 -11
- package/dist/mask/mask-pass.d.ts +45 -3
- package/dist/mask/mask-pass.d.ts.map +1 -1
- package/dist/mask/mask-pass.js +17 -9
- package/dist/path-style/path-style-extension.d.ts.map +1 -1
- package/dist/path-style/path-style-extension.js +1 -0
- package/dist/terrain/terrain-cover.d.ts.map +1 -1
- package/dist/terrain/terrain-cover.js +2 -1
- package/dist/terrain/terrain-effect.d.ts +4 -5
- package/dist/terrain/terrain-effect.d.ts.map +1 -1
- package/dist/terrain/terrain-effect.js +6 -16
- package/dist/terrain/terrain-pass.d.ts +42 -0
- package/dist/terrain/terrain-pass.d.ts.map +1 -1
- package/dist/terrain/terrain-pass.js +24 -16
- package/dist/terrain/terrain-picking-pass.d.ts.map +1 -1
- package/dist/terrain/terrain-picking-pass.js +9 -8
- package/dist/terrain/utils.d.ts +1 -0
- package/dist/terrain/utils.d.ts.map +1 -1
- package/dist/terrain/utils.js +10 -6
- package/dist.min.js +63 -40
- package/package.json +6 -6
- package/src/collision-filter/collision-filter-effect.ts +23 -23
- package/src/collision-filter/collision-filter-pass.ts +7 -11
- package/src/data-filter/data-filter-extension.ts +57 -49
- package/src/data-filter/shader-module.ts +109 -43
- package/src/mask/mask-effect.ts +30 -19
- package/src/mask/mask-pass.ts +22 -16
- package/src/path-style/path-style-extension.ts +1 -0
- package/src/terrain/terrain-cover.ts +2 -1
- package/src/terrain/terrain-effect.ts +8 -19
- package/src/terrain/terrain-pass.ts +37 -34
- package/src/terrain/terrain-picking-pass.ts +19 -23
- package/src/terrain/utils.ts +12 -6
package/dist/index.cjs
CHANGED
|
@@ -193,22 +193,21 @@ var import_core3 = require("@deck.gl/core");
|
|
|
193
193
|
|
|
194
194
|
// dist/data-filter/shader-module.js
|
|
195
195
|
var vs2 = `
|
|
196
|
-
uniform DATAFILTER_TYPE filter_min;
|
|
197
|
-
uniform DATAFILTER_TYPE filter_softMin;
|
|
198
|
-
uniform DATAFILTER_TYPE filter_softMax;
|
|
199
|
-
uniform DATAFILTER_TYPE filter_max;
|
|
200
196
|
uniform bool filter_useSoftMargin;
|
|
201
197
|
uniform bool filter_enabled;
|
|
202
198
|
uniform bool filter_transformSize;
|
|
203
199
|
uniform ivec4 filter_categoryBitMask;
|
|
200
|
+
#ifdef DATAFILTER_TYPE
|
|
201
|
+
uniform DATAFILTER_TYPE filter_min;
|
|
202
|
+
uniform DATAFILTER_TYPE filter_softMin;
|
|
203
|
+
uniform DATAFILTER_TYPE filter_softMax;
|
|
204
|
+
uniform DATAFILTER_TYPE filter_max;
|
|
204
205
|
#ifdef NON_INSTANCED_MODEL
|
|
205
206
|
#define DATAFILTER_ATTRIB filterValues
|
|
206
207
|
#define DATAFILTER_ATTRIB_64LOW filterValues64Low
|
|
207
|
-
#define DATACATEGORY_ATTRIB filterCategoryValues
|
|
208
208
|
#else
|
|
209
209
|
#define DATAFILTER_ATTRIB instanceFilterValues
|
|
210
210
|
#define DATAFILTER_ATTRIB_64LOW instanceFilterValues64Low
|
|
211
|
-
#define DATACATEGORY_ATTRIB instanceFilterCategoryValues
|
|
212
211
|
#endif
|
|
213
212
|
in DATAFILTER_TYPE DATAFILTER_ATTRIB;
|
|
214
213
|
#ifdef DATAFILTER_DOUBLE
|
|
@@ -216,7 +215,15 @@ in DATAFILTER_TYPE DATAFILTER_ATTRIB_64LOW;
|
|
|
216
215
|
uniform DATAFILTER_TYPE filter_min64High;
|
|
217
216
|
uniform DATAFILTER_TYPE filter_max64High;
|
|
218
217
|
#endif
|
|
218
|
+
#endif
|
|
219
|
+
#ifdef DATACATEGORY_TYPE
|
|
220
|
+
#ifdef NON_INSTANCED_MODEL
|
|
221
|
+
#define DATACATEGORY_ATTRIB filterCategoryValues
|
|
222
|
+
#else
|
|
223
|
+
#define DATACATEGORY_ATTRIB instanceFilterCategoryValues
|
|
224
|
+
#endif
|
|
219
225
|
in DATACATEGORY_TYPE DATACATEGORY_ATTRIB;
|
|
226
|
+
#endif
|
|
220
227
|
out float dataFilter_value;
|
|
221
228
|
float dataFilter_reduceValue(float value) {
|
|
222
229
|
return value;
|
|
@@ -230,18 +237,29 @@ return min(min(value.x, value.y), value.z);
|
|
|
230
237
|
float dataFilter_reduceValue(vec4 value) {
|
|
231
238
|
return min(min(value.x, value.y), min(value.z, value.w));
|
|
232
239
|
}
|
|
233
|
-
|
|
234
|
-
|
|
240
|
+
#ifdef DATAFILTER_TYPE
|
|
241
|
+
void dataFilter_setValue(DATAFILTER_TYPE valueFromMin, DATAFILTER_TYPE valueFromMax) {
|
|
235
242
|
if (filter_useSoftMargin) {
|
|
236
|
-
|
|
237
|
-
smoothstep(filter_min, filter_softMin, valueFromMin)
|
|
238
|
-
(
|
|
243
|
+
DATAFILTER_TYPE leftInRange = mix(
|
|
244
|
+
smoothstep(filter_min, filter_softMin, valueFromMin),
|
|
245
|
+
step(filter_min, valueFromMin),
|
|
246
|
+
step(filter_softMin, filter_min)
|
|
247
|
+
);
|
|
248
|
+
DATAFILTER_TYPE rightInRange = mix(
|
|
249
|
+
1.0 - smoothstep(filter_softMax, filter_max, valueFromMax),
|
|
250
|
+
step(valueFromMax, filter_max),
|
|
251
|
+
step(filter_max, filter_softMax)
|
|
239
252
|
);
|
|
253
|
+
dataFilter_value = dataFilter_reduceValue(leftInRange * rightInRange);
|
|
240
254
|
} else {
|
|
241
255
|
dataFilter_value = dataFilter_reduceValue(
|
|
242
256
|
step(filter_min, valueFromMin) * step(valueFromMax, filter_max)
|
|
243
257
|
);
|
|
244
258
|
}
|
|
259
|
+
}
|
|
260
|
+
#endif
|
|
261
|
+
#ifdef DATACATEGORY_ATTRIB
|
|
262
|
+
void dataFilter_setCategoryValue(DATACATEGORY_TYPE category) {
|
|
245
263
|
#if DATACATEGORY_CHANNELS == 1
|
|
246
264
|
int dataFilter_masks = filter_categoryBitMask[int(category / 32.0)];
|
|
247
265
|
#elif DATACATEGORY_CHANNELS == 2
|
|
@@ -261,10 +279,8 @@ if(dataFilter_bits == 0.0) dataFilter_value = 0.0;
|
|
|
261
279
|
#else
|
|
262
280
|
if(any(equal(dataFilter_bits, DATACATEGORY_TYPE(0.0)))) dataFilter_value = 0.0;
|
|
263
281
|
#endif
|
|
264
|
-
} else {
|
|
265
|
-
dataFilter_value = 1.0;
|
|
266
|
-
}
|
|
267
282
|
}
|
|
283
|
+
#endif
|
|
268
284
|
`;
|
|
269
285
|
var fs2 = `
|
|
270
286
|
uniform bool filter_transformColor;
|
|
@@ -322,15 +338,22 @@ function getUniforms64(opts) {
|
|
|
322
338
|
}
|
|
323
339
|
var inject2 = {
|
|
324
340
|
"vs:#main-start": `
|
|
341
|
+
dataFilter_value = 1.0;
|
|
342
|
+
if (filter_enabled) {
|
|
343
|
+
#ifdef DATAFILTER_ATTRIB
|
|
325
344
|
#ifdef DATAFILTER_DOUBLE
|
|
326
345
|
dataFilter_setValue(
|
|
327
346
|
DATAFILTER_ATTRIB - filter_min64High + DATAFILTER_ATTRIB_64LOW,
|
|
328
|
-
DATAFILTER_ATTRIB - filter_max64High + DATAFILTER_ATTRIB_64LOW
|
|
329
|
-
DATACATEGORY_ATTRIB
|
|
347
|
+
DATAFILTER_ATTRIB - filter_max64High + DATAFILTER_ATTRIB_64LOW
|
|
330
348
|
);
|
|
331
349
|
#else
|
|
332
|
-
dataFilter_setValue(DATAFILTER_ATTRIB, DATAFILTER_ATTRIB
|
|
350
|
+
dataFilter_setValue(DATAFILTER_ATTRIB, DATAFILTER_ATTRIB);
|
|
333
351
|
#endif
|
|
352
|
+
#endif
|
|
353
|
+
#ifdef DATACATEGORY_ATTRIB
|
|
354
|
+
dataFilter_setCategoryValue(DATACATEGORY_ATTRIB);
|
|
355
|
+
#endif
|
|
356
|
+
}
|
|
334
357
|
`,
|
|
335
358
|
"vs:#main-end": `
|
|
336
359
|
if (dataFilter_value == 0.0) {
|
|
@@ -476,7 +499,7 @@ var defaultProps2 = {
|
|
|
476
499
|
filterTransformColor: true
|
|
477
500
|
};
|
|
478
501
|
var defaultOptions = {
|
|
479
|
-
categorySize:
|
|
502
|
+
categorySize: 0,
|
|
480
503
|
filterSize: 1,
|
|
481
504
|
fp64: false,
|
|
482
505
|
countItems: false
|
|
@@ -493,48 +516,55 @@ var _DataFilterExtension = class extends import_core3.LayerExtension {
|
|
|
493
516
|
}
|
|
494
517
|
getShaders(extension) {
|
|
495
518
|
const { categorySize, filterSize, fp64: fp642 } = extension.opts;
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
defines
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
}
|
|
519
|
+
const defines = {};
|
|
520
|
+
if (categorySize) {
|
|
521
|
+
defines.DATACATEGORY_TYPE = DATA_TYPE_FROM_SIZE[categorySize];
|
|
522
|
+
defines.DATACATEGORY_CHANNELS = categorySize;
|
|
523
|
+
}
|
|
524
|
+
if (filterSize) {
|
|
525
|
+
defines.DATAFILTER_TYPE = DATA_TYPE_FROM_SIZE[filterSize];
|
|
526
|
+
defines.DATAFILTER_DOUBLE = Boolean(fp642);
|
|
527
|
+
}
|
|
528
|
+
return { modules: [fp642 ? shaderModule64 : shaderModule], defines };
|
|
505
529
|
}
|
|
506
530
|
initializeState(context, extension) {
|
|
507
531
|
const attributeManager = this.getAttributeManager();
|
|
508
532
|
const { categorySize, filterSize, fp64: fp642 } = extension.opts;
|
|
509
533
|
if (attributeManager) {
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
534
|
+
if (filterSize) {
|
|
535
|
+
attributeManager.add({
|
|
536
|
+
filterValues: {
|
|
537
|
+
size: filterSize,
|
|
538
|
+
type: fp642 ? "float64" : "float32",
|
|
539
|
+
accessor: "getFilterValue",
|
|
540
|
+
shaderAttributes: {
|
|
541
|
+
filterValues: {
|
|
542
|
+
divisor: 0
|
|
543
|
+
},
|
|
544
|
+
instanceFilterValues: {
|
|
545
|
+
divisor: 1
|
|
546
|
+
}
|
|
521
547
|
}
|
|
522
548
|
}
|
|
523
|
-
}
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
549
|
+
});
|
|
550
|
+
}
|
|
551
|
+
if (categorySize) {
|
|
552
|
+
attributeManager.add({
|
|
553
|
+
filterCategoryValues: {
|
|
554
|
+
size: categorySize,
|
|
555
|
+
accessor: "getFilterCategory",
|
|
556
|
+
transform: categorySize === 1 ? (d) => extension._getCategoryKey.call(this, d, 0) : (d) => d.map((x, i) => extension._getCategoryKey.call(this, x, i)),
|
|
557
|
+
shaderAttributes: {
|
|
558
|
+
filterCategoryValues: {
|
|
559
|
+
divisor: 0
|
|
560
|
+
},
|
|
561
|
+
instanceFilterCategoryValues: {
|
|
562
|
+
divisor: 1
|
|
563
|
+
}
|
|
534
564
|
}
|
|
535
565
|
}
|
|
536
|
-
}
|
|
537
|
-
}
|
|
566
|
+
});
|
|
567
|
+
}
|
|
538
568
|
}
|
|
539
569
|
const { device } = this.context;
|
|
540
570
|
if (attributeManager && extension.opts.countItems) {
|
|
@@ -564,11 +594,11 @@ var _DataFilterExtension = class extends import_core3.LayerExtension {
|
|
|
564
594
|
}
|
|
565
595
|
}
|
|
566
596
|
updateState({ props, oldProps, changeFlags }, extension) {
|
|
567
|
-
var _a;
|
|
597
|
+
var _a, _b;
|
|
568
598
|
const attributeManager = this.getAttributeManager();
|
|
569
599
|
const { categorySize } = extension.opts;
|
|
570
600
|
if (this.state.filterModel) {
|
|
571
|
-
const filterNeedsUpdate = attributeManager.attributes.filterValues.needsUpdate() || ((
|
|
601
|
+
const filterNeedsUpdate = ((_a = attributeManager.attributes.filterValues) == null ? void 0 : _a.needsUpdate()) || ((_b = attributeManager.attributes.filterCategoryValues) == null ? void 0 : _b.needsUpdate()) || props.filterEnabled !== oldProps.filterEnabled || props.filterRange !== oldProps.filterRange || props.filterSoftRange !== oldProps.filterSoftRange || props.filterCategories !== oldProps.filterCategories;
|
|
572
602
|
if (filterNeedsUpdate) {
|
|
573
603
|
this.setState({ filterNeedsUpdate });
|
|
574
604
|
}
|
|
@@ -602,7 +632,7 @@ var _DataFilterExtension = class extends import_core3.LayerExtension {
|
|
|
602
632
|
this.context.device.clearWebGL({ framebuffer: filterFBO, color: [0, 0, 0, 0] });
|
|
603
633
|
filterModel.updateModuleSettings(params.moduleParameters);
|
|
604
634
|
filterModel.setAttributes({
|
|
605
|
-
...filterValues.getValue(),
|
|
635
|
+
...filterValues == null ? void 0 : filterValues.getValue(),
|
|
606
636
|
...filterCategoryValues == null ? void 0 : filterCategoryValues.getValue(),
|
|
607
637
|
...filterIndices == null ? void 0 : filterIndices.getValue()
|
|
608
638
|
});
|
|
@@ -944,6 +974,7 @@ var _PathStyleExtension = class extends import_core6.LayerExtension {
|
|
|
944
974
|
}
|
|
945
975
|
prevP = p;
|
|
946
976
|
}
|
|
977
|
+
result[geometrySize - 1] = 0;
|
|
947
978
|
return result;
|
|
948
979
|
}
|
|
949
980
|
};
|
|
@@ -1259,7 +1290,7 @@ var ClipExtension = _ClipExtension;
|
|
|
1259
1290
|
})();
|
|
1260
1291
|
|
|
1261
1292
|
// dist/collision-filter/collision-filter-extension.js
|
|
1262
|
-
var
|
|
1293
|
+
var import_core15 = require("@deck.gl/core");
|
|
1263
1294
|
|
|
1264
1295
|
// dist/collision-filter/shader-module.js
|
|
1265
1296
|
var import_core11 = require("@deck.gl/core");
|
|
@@ -1348,8 +1379,8 @@ var shader_module_default2 = {
|
|
|
1348
1379
|
};
|
|
1349
1380
|
|
|
1350
1381
|
// dist/collision-filter/collision-filter-effect.js
|
|
1351
|
-
var
|
|
1352
|
-
var
|
|
1382
|
+
var import_core13 = require("@math.gl/core");
|
|
1383
|
+
var import_core14 = require("@deck.gl/core");
|
|
1353
1384
|
|
|
1354
1385
|
// dist/collision-filter/collision-filter-pass.js
|
|
1355
1386
|
var import_core12 = require("@deck.gl/core");
|
|
@@ -1357,13 +1388,11 @@ var CollisionFilterPass = class extends import_core12._LayersPass {
|
|
|
1357
1388
|
renderCollisionMap(target, options) {
|
|
1358
1389
|
const padding = 1;
|
|
1359
1390
|
const clearColor = [0, 0, 0, 0];
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
depthRange: [0, 1]
|
|
1366
|
-
}, () => this.render({ ...options, clearColor, target, pass: "collision" }));
|
|
1391
|
+
const scissorRect = [padding, padding, target.width - 2 * padding, target.height - 2 * padding];
|
|
1392
|
+
this.render({ ...options, clearColor, scissorRect, target, pass: "collision" });
|
|
1393
|
+
}
|
|
1394
|
+
getLayerParameters(layer, layerIndex, viewport) {
|
|
1395
|
+
return { ...layer.props.parameters, blend: false, depthRange: [0, 1], depthTest: true };
|
|
1367
1396
|
}
|
|
1368
1397
|
getModuleParameters() {
|
|
1369
1398
|
return {
|
|
@@ -1377,77 +1406,381 @@ var CollisionFilterPass = class extends import_core12._LayersPass {
|
|
|
1377
1406
|
}
|
|
1378
1407
|
};
|
|
1379
1408
|
|
|
1380
|
-
// dist/
|
|
1381
|
-
var
|
|
1382
|
-
var
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1409
|
+
// dist/collision-filter/collision-filter-effect.js
|
|
1410
|
+
var DOWNSCALE = 2;
|
|
1411
|
+
var CollisionFilterEffect = class {
|
|
1412
|
+
constructor() {
|
|
1413
|
+
this.id = "collision-filter-effect";
|
|
1414
|
+
this.props = null;
|
|
1415
|
+
this.useInPicking = true;
|
|
1416
|
+
this.order = 1;
|
|
1417
|
+
this.channels = {};
|
|
1418
|
+
this.collisionFBOs = {};
|
|
1419
|
+
}
|
|
1420
|
+
setup(context) {
|
|
1421
|
+
this.context = context;
|
|
1422
|
+
const { device } = context;
|
|
1423
|
+
this.dummyCollisionMap = device.createTexture({ width: 1, height: 1 });
|
|
1424
|
+
this.collisionFilterPass = new CollisionFilterPass(device, { id: "default-collision-filter" });
|
|
1425
|
+
}
|
|
1426
|
+
preRender({ effects: allEffects, layers, layerFilter, viewports, onViewportActive, views, isPicking, preRenderStats = {} }) {
|
|
1427
|
+
var _a;
|
|
1428
|
+
const { device } = this.context;
|
|
1429
|
+
if (isPicking) {
|
|
1430
|
+
return;
|
|
1431
|
+
}
|
|
1432
|
+
const collisionLayers = layers.filter(
|
|
1433
|
+
({ props: { visible, collisionEnabled } }) => visible && collisionEnabled
|
|
1434
|
+
);
|
|
1435
|
+
if (collisionLayers.length === 0) {
|
|
1436
|
+
this.channels = {};
|
|
1437
|
+
return;
|
|
1438
|
+
}
|
|
1439
|
+
const effects = allEffects == null ? void 0 : allEffects.filter((e) => e.useInPicking && preRenderStats[e.id]);
|
|
1440
|
+
const maskEffectRendered = (_a = preRenderStats["mask-effect"]) == null ? void 0 : _a.didRender;
|
|
1441
|
+
const channels = this._groupByCollisionGroup(device, collisionLayers);
|
|
1442
|
+
const viewport = viewports[0];
|
|
1443
|
+
const viewportChanged = !this.lastViewport || !this.lastViewport.equals(viewport) || maskEffectRendered;
|
|
1444
|
+
for (const collisionGroup in channels) {
|
|
1445
|
+
const collisionFBO = this.collisionFBOs[collisionGroup];
|
|
1446
|
+
const renderInfo = channels[collisionGroup];
|
|
1447
|
+
const [width, height] = device.canvasContext.getPixelSize();
|
|
1448
|
+
collisionFBO.resize({
|
|
1449
|
+
width: width / DOWNSCALE,
|
|
1450
|
+
height: height / DOWNSCALE
|
|
1451
|
+
});
|
|
1452
|
+
this._render(renderInfo, {
|
|
1453
|
+
effects,
|
|
1454
|
+
layerFilter,
|
|
1455
|
+
onViewportActive,
|
|
1456
|
+
views,
|
|
1457
|
+
viewport,
|
|
1458
|
+
viewportChanged
|
|
1459
|
+
});
|
|
1460
|
+
}
|
|
1461
|
+
}
|
|
1462
|
+
_render(renderInfo, { effects, layerFilter, onViewportActive, views, viewport, viewportChanged }) {
|
|
1463
|
+
const { collisionGroup } = renderInfo;
|
|
1464
|
+
const oldRenderInfo = this.channels[collisionGroup];
|
|
1465
|
+
if (!oldRenderInfo) {
|
|
1466
|
+
return;
|
|
1467
|
+
}
|
|
1468
|
+
const needsRender = viewportChanged || renderInfo === oldRenderInfo || !(0, import_core14._deepEqual)(oldRenderInfo.layers, renderInfo.layers, 1) || renderInfo.layerBounds.some((b, i) => !(0, import_core13.equals)(b, oldRenderInfo.layerBounds[i])) || renderInfo.allLayersLoaded !== oldRenderInfo.allLayersLoaded || renderInfo.layers.some((layer) => layer.props.transitions);
|
|
1469
|
+
this.channels[collisionGroup] = renderInfo;
|
|
1470
|
+
if (needsRender) {
|
|
1471
|
+
this.lastViewport = viewport;
|
|
1472
|
+
const collisionFBO = this.collisionFBOs[collisionGroup];
|
|
1473
|
+
this.collisionFilterPass.renderCollisionMap(collisionFBO, {
|
|
1474
|
+
pass: "collision-filter",
|
|
1475
|
+
isPicking: true,
|
|
1476
|
+
layers: renderInfo.layers,
|
|
1477
|
+
effects,
|
|
1478
|
+
layerFilter,
|
|
1479
|
+
viewports: viewport ? [viewport] : [],
|
|
1480
|
+
onViewportActive,
|
|
1481
|
+
views,
|
|
1482
|
+
moduleParameters: {
|
|
1483
|
+
dummyCollisionMap: this.dummyCollisionMap,
|
|
1484
|
+
devicePixelRatio: collisionFBO.device.canvasContext.getDevicePixelRatio() / DOWNSCALE
|
|
1485
|
+
}
|
|
1486
|
+
});
|
|
1487
|
+
}
|
|
1488
|
+
}
|
|
1489
|
+
_groupByCollisionGroup(device, collisionLayers) {
|
|
1490
|
+
const channelMap = {};
|
|
1491
|
+
for (const layer of collisionLayers) {
|
|
1492
|
+
const { collisionGroup } = layer.props;
|
|
1493
|
+
let channelInfo = channelMap[collisionGroup];
|
|
1494
|
+
if (!channelInfo) {
|
|
1495
|
+
channelInfo = { collisionGroup, layers: [], layerBounds: [], allLayersLoaded: true };
|
|
1496
|
+
channelMap[collisionGroup] = channelInfo;
|
|
1497
|
+
}
|
|
1498
|
+
channelInfo.layers.push(layer);
|
|
1499
|
+
channelInfo.layerBounds.push(layer.getBounds());
|
|
1500
|
+
if (!layer.isLoaded) {
|
|
1501
|
+
channelInfo.allLayersLoaded = false;
|
|
1502
|
+
}
|
|
1503
|
+
}
|
|
1504
|
+
for (const collisionGroup of Object.keys(channelMap)) {
|
|
1505
|
+
if (!this.collisionFBOs[collisionGroup]) {
|
|
1506
|
+
this.createFBO(device, collisionGroup);
|
|
1507
|
+
}
|
|
1508
|
+
if (!this.channels[collisionGroup]) {
|
|
1509
|
+
this.channels[collisionGroup] = channelMap[collisionGroup];
|
|
1510
|
+
}
|
|
1511
|
+
}
|
|
1512
|
+
for (const collisionGroup of Object.keys(this.collisionFBOs)) {
|
|
1513
|
+
if (!channelMap[collisionGroup]) {
|
|
1514
|
+
this.destroyFBO(collisionGroup);
|
|
1515
|
+
}
|
|
1516
|
+
}
|
|
1517
|
+
return channelMap;
|
|
1518
|
+
}
|
|
1519
|
+
getModuleParameters(layer) {
|
|
1520
|
+
const { collisionGroup } = layer.props;
|
|
1521
|
+
const { collisionFBOs, dummyCollisionMap } = this;
|
|
1522
|
+
return { collisionFBO: collisionFBOs[collisionGroup], dummyCollisionMap };
|
|
1523
|
+
}
|
|
1524
|
+
cleanup() {
|
|
1525
|
+
if (this.dummyCollisionMap) {
|
|
1526
|
+
this.dummyCollisionMap.delete();
|
|
1527
|
+
this.dummyCollisionMap = void 0;
|
|
1528
|
+
}
|
|
1529
|
+
this.channels = {};
|
|
1530
|
+
for (const collisionGroup of Object.keys(this.collisionFBOs)) {
|
|
1531
|
+
this.destroyFBO(collisionGroup);
|
|
1532
|
+
}
|
|
1533
|
+
this.collisionFBOs = {};
|
|
1534
|
+
this.lastViewport = void 0;
|
|
1535
|
+
}
|
|
1536
|
+
createFBO(device, collisionGroup) {
|
|
1537
|
+
const { width, height } = device.gl.canvas;
|
|
1538
|
+
const collisionMap = device.createTexture({
|
|
1392
1539
|
format: "rgba8unorm",
|
|
1393
|
-
width
|
|
1394
|
-
height
|
|
1540
|
+
width,
|
|
1541
|
+
height,
|
|
1395
1542
|
sampler: {
|
|
1396
|
-
minFilter: "
|
|
1397
|
-
magFilter: "
|
|
1543
|
+
minFilter: "nearest",
|
|
1544
|
+
magFilter: "nearest",
|
|
1398
1545
|
addressModeU: "clamp-to-edge",
|
|
1399
1546
|
addressModeV: "clamp-to-edge"
|
|
1400
1547
|
}
|
|
1401
1548
|
});
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
width
|
|
1405
|
-
height
|
|
1406
|
-
|
|
1549
|
+
const depthStencilAttachment = device.createTexture({
|
|
1550
|
+
format: "depth16unorm",
|
|
1551
|
+
width,
|
|
1552
|
+
height,
|
|
1553
|
+
mipmaps: false,
|
|
1554
|
+
dataFormat: 6402,
|
|
1555
|
+
type: 5125
|
|
1556
|
+
});
|
|
1557
|
+
this.collisionFBOs[collisionGroup] = device.createFramebuffer({
|
|
1558
|
+
id: `collision-${collisionGroup}`,
|
|
1559
|
+
width,
|
|
1560
|
+
height,
|
|
1561
|
+
colorAttachments: [collisionMap],
|
|
1562
|
+
depthStencilAttachment
|
|
1407
1563
|
});
|
|
1408
1564
|
}
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
blendEquation: 32778,
|
|
1417
|
-
colorMask,
|
|
1418
|
-
depthTest: false
|
|
1419
|
-
}, () => super.render({ ...options, clearColor, target: this.fbo, pass: "mask" }));
|
|
1420
|
-
}
|
|
1421
|
-
shouldDrawLayer(layer) {
|
|
1422
|
-
return layer.props.operation.includes("mask");
|
|
1423
|
-
}
|
|
1424
|
-
delete() {
|
|
1425
|
-
this.fbo.delete();
|
|
1426
|
-
this.maskMap.delete();
|
|
1565
|
+
destroyFBO(collisionGroup) {
|
|
1566
|
+
var _a, _b;
|
|
1567
|
+
const fbo = this.collisionFBOs[collisionGroup];
|
|
1568
|
+
(_a = fbo.colorAttachments[0]) == null ? void 0 : _a.destroy();
|
|
1569
|
+
(_b = fbo.depthStencilAttachment) == null ? void 0 : _b.destroy();
|
|
1570
|
+
fbo.destroy();
|
|
1571
|
+
delete this.collisionFBOs[collisionGroup];
|
|
1427
1572
|
}
|
|
1428
1573
|
};
|
|
1429
1574
|
|
|
1430
|
-
// dist/
|
|
1431
|
-
var
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
}
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
}
|
|
1450
|
-
|
|
1575
|
+
// dist/collision-filter/collision-filter-extension.js
|
|
1576
|
+
var defaultProps6 = {
|
|
1577
|
+
getCollisionPriority: { type: "accessor", value: 0 },
|
|
1578
|
+
collisionEnabled: true,
|
|
1579
|
+
collisionGroup: { type: "string", value: "default" },
|
|
1580
|
+
collisionTestProps: {}
|
|
1581
|
+
};
|
|
1582
|
+
var _CollisionFilterExtension = class extends import_core15.LayerExtension {
|
|
1583
|
+
getShaders() {
|
|
1584
|
+
return { modules: [shader_module_default2] };
|
|
1585
|
+
}
|
|
1586
|
+
draw({ uniforms, context, moduleParameters }) {
|
|
1587
|
+
const { collisionEnabled } = this.props;
|
|
1588
|
+
const { collisionFBO, drawToCollisionMap } = moduleParameters;
|
|
1589
|
+
const enabled = collisionEnabled && Boolean(collisionFBO);
|
|
1590
|
+
uniforms.collision_enabled = enabled;
|
|
1591
|
+
if (drawToCollisionMap) {
|
|
1592
|
+
this.props = this.clone(this.props.collisionTestProps).props;
|
|
1593
|
+
}
|
|
1594
|
+
}
|
|
1595
|
+
initializeState(context, extension) {
|
|
1596
|
+
var _a;
|
|
1597
|
+
if (this.getAttributeManager() === null) {
|
|
1598
|
+
return;
|
|
1599
|
+
}
|
|
1600
|
+
(_a = this.context.deck) == null ? void 0 : _a._addDefaultEffect(new CollisionFilterEffect());
|
|
1601
|
+
const attributeManager = this.getAttributeManager();
|
|
1602
|
+
attributeManager.add({
|
|
1603
|
+
collisionPriorities: {
|
|
1604
|
+
size: 1,
|
|
1605
|
+
accessor: "getCollisionPriority",
|
|
1606
|
+
shaderAttributes: {
|
|
1607
|
+
collisionPriorities: { divisor: 0 },
|
|
1608
|
+
instanceCollisionPriorities: { divisor: 1 }
|
|
1609
|
+
}
|
|
1610
|
+
}
|
|
1611
|
+
});
|
|
1612
|
+
}
|
|
1613
|
+
getNeedsPickingBuffer() {
|
|
1614
|
+
return this.props.collisionEnabled;
|
|
1615
|
+
}
|
|
1616
|
+
};
|
|
1617
|
+
var CollisionFilterExtension = _CollisionFilterExtension;
|
|
1618
|
+
(() => {
|
|
1619
|
+
_CollisionFilterExtension.defaultProps = defaultProps6;
|
|
1620
|
+
})();
|
|
1621
|
+
(() => {
|
|
1622
|
+
_CollisionFilterExtension.extensionName = "CollisionFilterExtension";
|
|
1623
|
+
})();
|
|
1624
|
+
|
|
1625
|
+
// dist/mask/mask-extension.js
|
|
1626
|
+
var import_core21 = require("@deck.gl/core");
|
|
1627
|
+
|
|
1628
|
+
// dist/mask/shader-module.js
|
|
1629
|
+
var import_core16 = require("@deck.gl/core");
|
|
1630
|
+
var vs4 = `
|
|
1631
|
+
uniform vec4 mask_bounds;
|
|
1632
|
+
uniform bool mask_maskByInstance;
|
|
1633
|
+
vec2 mask_getCoords(vec4 position) {
|
|
1634
|
+
return (position.xy - mask_bounds.xy) / (mask_bounds.zw - mask_bounds.xy);
|
|
1635
|
+
}
|
|
1636
|
+
`;
|
|
1637
|
+
var fs3 = `
|
|
1638
|
+
uniform sampler2D mask_texture;
|
|
1639
|
+
uniform int mask_channel;
|
|
1640
|
+
uniform bool mask_enabled;
|
|
1641
|
+
uniform bool mask_inverted;
|
|
1642
|
+
bool mask_isInBounds(vec2 texCoords) {
|
|
1643
|
+
if (!mask_enabled) {
|
|
1644
|
+
return true;
|
|
1645
|
+
}
|
|
1646
|
+
vec4 maskColor = texture(mask_texture, texCoords);
|
|
1647
|
+
float maskValue = 1.0;
|
|
1648
|
+
if (mask_channel == 0) {
|
|
1649
|
+
maskValue = maskColor.r;
|
|
1650
|
+
} else if (mask_channel == 1) {
|
|
1651
|
+
maskValue = maskColor.g;
|
|
1652
|
+
} else if (mask_channel == 2) {
|
|
1653
|
+
maskValue = maskColor.b;
|
|
1654
|
+
} else if (mask_channel == 3) {
|
|
1655
|
+
maskValue = maskColor.a;
|
|
1656
|
+
}
|
|
1657
|
+
if (mask_inverted) {
|
|
1658
|
+
return maskValue >= 0.5;
|
|
1659
|
+
} else {
|
|
1660
|
+
return maskValue < 0.5;
|
|
1661
|
+
}
|
|
1662
|
+
}
|
|
1663
|
+
`;
|
|
1664
|
+
var inject5 = {
|
|
1665
|
+
"vs:#decl": `
|
|
1666
|
+
out vec2 mask_texCoords;
|
|
1667
|
+
`,
|
|
1668
|
+
"vs:#main-end": `
|
|
1669
|
+
vec4 mask_common_position;
|
|
1670
|
+
if (mask_maskByInstance) {
|
|
1671
|
+
mask_common_position = project_position(vec4(geometry.worldPosition, 1.0));
|
|
1672
|
+
} else {
|
|
1673
|
+
mask_common_position = geometry.position;
|
|
1674
|
+
}
|
|
1675
|
+
mask_texCoords = mask_getCoords(mask_common_position);
|
|
1676
|
+
`,
|
|
1677
|
+
"fs:#decl": `
|
|
1678
|
+
in vec2 mask_texCoords;
|
|
1679
|
+
`,
|
|
1680
|
+
"fs:#main-start": `
|
|
1681
|
+
if (mask_enabled) {
|
|
1682
|
+
bool mask = mask_isInBounds(mask_texCoords);
|
|
1683
|
+
fragColor = texture(mask_texture, mask_texCoords);
|
|
1684
|
+
if (!mask) discard;
|
|
1685
|
+
}
|
|
1686
|
+
`
|
|
1687
|
+
};
|
|
1688
|
+
var getMaskUniforms = (opts) => {
|
|
1689
|
+
if (opts && "maskMap" in opts) {
|
|
1690
|
+
return {
|
|
1691
|
+
mask_texture: opts.maskMap
|
|
1692
|
+
};
|
|
1693
|
+
}
|
|
1694
|
+
return {};
|
|
1695
|
+
};
|
|
1696
|
+
var shader_module_default3 = {
|
|
1697
|
+
name: "mask",
|
|
1698
|
+
dependencies: [import_core16.project],
|
|
1699
|
+
vs: vs4,
|
|
1700
|
+
fs: fs3,
|
|
1701
|
+
inject: inject5,
|
|
1702
|
+
getUniforms: getMaskUniforms
|
|
1703
|
+
};
|
|
1704
|
+
|
|
1705
|
+
// dist/mask/mask-effect.js
|
|
1706
|
+
var import_core19 = require("@deck.gl/core");
|
|
1707
|
+
var import_core20 = require("@math.gl/core");
|
|
1708
|
+
|
|
1709
|
+
// dist/mask/mask-pass.js
|
|
1710
|
+
var import_core17 = require("@deck.gl/core");
|
|
1711
|
+
var MASK_BLENDING = {
|
|
1712
|
+
blendColorOperation: "subtract",
|
|
1713
|
+
blendColorSrcFactor: "zero",
|
|
1714
|
+
blendColorDstFactor: "one",
|
|
1715
|
+
blendAlphaOperation: "subtract",
|
|
1716
|
+
blendAlphaSrcFactor: "zero",
|
|
1717
|
+
blendAlphaDstFactor: "one"
|
|
1718
|
+
};
|
|
1719
|
+
var MaskPass = class extends import_core17._LayersPass {
|
|
1720
|
+
constructor(device, props) {
|
|
1721
|
+
super(device, props);
|
|
1722
|
+
const { mapSize = 2048 } = props;
|
|
1723
|
+
this.maskMap = device.createTexture({
|
|
1724
|
+
format: "rgba8unorm",
|
|
1725
|
+
width: mapSize,
|
|
1726
|
+
height: mapSize,
|
|
1727
|
+
sampler: {
|
|
1728
|
+
minFilter: "linear",
|
|
1729
|
+
magFilter: "linear",
|
|
1730
|
+
addressModeU: "clamp-to-edge",
|
|
1731
|
+
addressModeV: "clamp-to-edge"
|
|
1732
|
+
}
|
|
1733
|
+
});
|
|
1734
|
+
this.fbo = device.createFramebuffer({
|
|
1735
|
+
id: "maskmap",
|
|
1736
|
+
width: mapSize,
|
|
1737
|
+
height: mapSize,
|
|
1738
|
+
colorAttachments: [this.maskMap]
|
|
1739
|
+
});
|
|
1740
|
+
}
|
|
1741
|
+
render(options) {
|
|
1742
|
+
const colorMask = 2 ** options.channel;
|
|
1743
|
+
const clearColor = [255, 255, 255, 255];
|
|
1744
|
+
super.render({ ...options, clearColor, colorMask, target: this.fbo, pass: "mask" });
|
|
1745
|
+
}
|
|
1746
|
+
getLayerParameters(layer, layerIndex, viewport) {
|
|
1747
|
+
return {
|
|
1748
|
+
...layer.props.parameters,
|
|
1749
|
+
blend: true,
|
|
1750
|
+
depthTest: false,
|
|
1751
|
+
...MASK_BLENDING
|
|
1752
|
+
};
|
|
1753
|
+
}
|
|
1754
|
+
shouldDrawLayer(layer) {
|
|
1755
|
+
return layer.props.operation.includes("mask");
|
|
1756
|
+
}
|
|
1757
|
+
delete() {
|
|
1758
|
+
this.fbo.delete();
|
|
1759
|
+
this.maskMap.delete();
|
|
1760
|
+
}
|
|
1761
|
+
};
|
|
1762
|
+
|
|
1763
|
+
// dist/utils/projection-utils.js
|
|
1764
|
+
var import_core18 = require("@deck.gl/core");
|
|
1765
|
+
function joinLayerBounds(layers, viewport) {
|
|
1766
|
+
const bounds = [Infinity, Infinity, -Infinity, -Infinity];
|
|
1767
|
+
for (const layer of layers) {
|
|
1768
|
+
const layerBounds = layer.getBounds();
|
|
1769
|
+
if (layerBounds) {
|
|
1770
|
+
const bottomLeftCommon = layer.projectPosition(layerBounds[0], { viewport, autoOffset: false });
|
|
1771
|
+
const topRightCommon = layer.projectPosition(layerBounds[1], { viewport, autoOffset: false });
|
|
1772
|
+
bounds[0] = Math.min(bounds[0], bottomLeftCommon[0]);
|
|
1773
|
+
bounds[1] = Math.min(bounds[1], bottomLeftCommon[1]);
|
|
1774
|
+
bounds[2] = Math.max(bounds[2], topRightCommon[0]);
|
|
1775
|
+
bounds[3] = Math.max(bounds[3], topRightCommon[1]);
|
|
1776
|
+
}
|
|
1777
|
+
}
|
|
1778
|
+
if (Number.isFinite(bounds[0])) {
|
|
1779
|
+
return bounds;
|
|
1780
|
+
}
|
|
1781
|
+
return null;
|
|
1782
|
+
}
|
|
1783
|
+
var MAX_VIEWPORT_SIZE = 2048;
|
|
1451
1784
|
function makeViewport(opts) {
|
|
1452
1785
|
const { bounds, viewport, border = 0 } = opts;
|
|
1453
1786
|
const { isGeospatial } = viewport;
|
|
@@ -1477,7 +1810,7 @@ function makeViewport(opts) {
|
|
|
1477
1810
|
zoom += Math.log2(r);
|
|
1478
1811
|
}
|
|
1479
1812
|
}
|
|
1480
|
-
return isGeospatial ? new
|
|
1813
|
+
return isGeospatial ? new import_core18.WebMercatorViewport({
|
|
1481
1814
|
id: viewport.id,
|
|
1482
1815
|
x: border,
|
|
1483
1816
|
y: border,
|
|
@@ -1487,7 +1820,7 @@ function makeViewport(opts) {
|
|
|
1487
1820
|
latitude: centerWorld[1],
|
|
1488
1821
|
zoom,
|
|
1489
1822
|
orthographic: true
|
|
1490
|
-
}) : new
|
|
1823
|
+
}) : new import_core18.OrthographicViewport({
|
|
1491
1824
|
id: viewport.id,
|
|
1492
1825
|
x: border,
|
|
1493
1826
|
y: border,
|
|
@@ -1556,14 +1889,16 @@ var MaskEffect = class {
|
|
|
1556
1889
|
this.channels = [];
|
|
1557
1890
|
this.masks = null;
|
|
1558
1891
|
}
|
|
1559
|
-
|
|
1892
|
+
setup({ device }) {
|
|
1893
|
+
this.dummyMaskMap = device.createTexture({
|
|
1894
|
+
width: 1,
|
|
1895
|
+
height: 1
|
|
1896
|
+
});
|
|
1897
|
+
this.maskPass = new MaskPass(device, { id: "default-mask" });
|
|
1898
|
+
this.maskMap = this.maskPass.maskMap;
|
|
1899
|
+
}
|
|
1900
|
+
preRender({ layers, layerFilter, viewports, onViewportActive, views, isPicking }) {
|
|
1560
1901
|
let didRender = false;
|
|
1561
|
-
if (!this.dummyMaskMap) {
|
|
1562
|
-
this.dummyMaskMap = device.createTexture({
|
|
1563
|
-
width: 1,
|
|
1564
|
-
height: 1
|
|
1565
|
-
});
|
|
1566
|
-
}
|
|
1567
1902
|
if (isPicking) {
|
|
1568
1903
|
return { didRender };
|
|
1569
1904
|
}
|
|
@@ -1574,15 +1909,11 @@ var MaskEffect = class {
|
|
|
1574
1909
|
return { didRender };
|
|
1575
1910
|
}
|
|
1576
1911
|
this.masks = {};
|
|
1577
|
-
if (!this.maskPass) {
|
|
1578
|
-
this.maskPass = new MaskPass(device, { id: "default-mask" });
|
|
1579
|
-
this.maskMap = this.maskPass.maskMap;
|
|
1580
|
-
}
|
|
1581
1912
|
const channelMap = this._sortMaskChannels(maskLayers);
|
|
1582
1913
|
const viewport = viewports[0];
|
|
1583
1914
|
const viewportChanged = !this.lastViewport || !this.lastViewport.equals(viewport);
|
|
1584
1915
|
if (viewport.resolution !== void 0) {
|
|
1585
|
-
|
|
1916
|
+
import_core19.log.warn("MaskExtension is not supported in GlobeView")();
|
|
1586
1917
|
return { didRender };
|
|
1587
1918
|
}
|
|
1588
1919
|
for (const maskId in channelMap) {
|
|
@@ -1611,7 +1942,7 @@ var MaskEffect = class {
|
|
|
1611
1942
|
this.lastViewport = viewport;
|
|
1612
1943
|
const layerBounds = joinLayerBounds(channelInfo.layers, viewport);
|
|
1613
1944
|
channelInfo.bounds = layerBounds && getRenderBounds(layerBounds, viewport);
|
|
1614
|
-
if (maskChanged || !(0,
|
|
1945
|
+
if (maskChanged || !(0, import_core20.equals)(channelInfo.bounds, oldChannelInfo.bounds)) {
|
|
1615
1946
|
const { maskPass, maskMap } = this;
|
|
1616
1947
|
const maskViewport = layerBounds && makeViewport({
|
|
1617
1948
|
bounds: channelInfo.bounds,
|
|
@@ -1652,7 +1983,7 @@ var MaskEffect = class {
|
|
|
1652
1983
|
let channelInfo = channelMap[id];
|
|
1653
1984
|
if (!channelInfo) {
|
|
1654
1985
|
if (++channelCount > 4) {
|
|
1655
|
-
|
|
1986
|
+
import_core19.log.warn("Too many mask layers. The max supported is 4")();
|
|
1656
1987
|
continue;
|
|
1657
1988
|
}
|
|
1658
1989
|
channelInfo = {
|
|
@@ -1705,301 +2036,6 @@ var MaskEffect = class {
|
|
|
1705
2036
|
}
|
|
1706
2037
|
};
|
|
1707
2038
|
|
|
1708
|
-
// dist/collision-filter/collision-filter-effect.js
|
|
1709
|
-
var DOWNSCALE = 2;
|
|
1710
|
-
var CollisionFilterEffect = class {
|
|
1711
|
-
constructor() {
|
|
1712
|
-
this.id = "collision-filter-effect";
|
|
1713
|
-
this.props = null;
|
|
1714
|
-
this.useInPicking = true;
|
|
1715
|
-
this.order = 1;
|
|
1716
|
-
this.channels = {};
|
|
1717
|
-
this.collisionFBOs = {};
|
|
1718
|
-
}
|
|
1719
|
-
preRender(device, { effects: allEffects, layers, layerFilter, viewports, onViewportActive, views, isPicking, preRenderStats = {} }) {
|
|
1720
|
-
var _a;
|
|
1721
|
-
if (!this.dummyCollisionMap) {
|
|
1722
|
-
this.dummyCollisionMap = device.createTexture({ width: 1, height: 1 });
|
|
1723
|
-
}
|
|
1724
|
-
if (isPicking) {
|
|
1725
|
-
return;
|
|
1726
|
-
}
|
|
1727
|
-
const collisionLayers = layers.filter(
|
|
1728
|
-
({ props: { visible, collisionEnabled } }) => visible && collisionEnabled
|
|
1729
|
-
);
|
|
1730
|
-
if (collisionLayers.length === 0) {
|
|
1731
|
-
this.channels = {};
|
|
1732
|
-
return;
|
|
1733
|
-
}
|
|
1734
|
-
if (!this.collisionFilterPass) {
|
|
1735
|
-
this.collisionFilterPass = new CollisionFilterPass(device, { id: "default-collision-filter" });
|
|
1736
|
-
}
|
|
1737
|
-
const effects = allEffects == null ? void 0 : allEffects.filter((e) => e.constructor === MaskEffect);
|
|
1738
|
-
const maskEffectRendered = (_a = preRenderStats["mask-effect"]) == null ? void 0 : _a.didRender;
|
|
1739
|
-
const channels = this._groupByCollisionGroup(device, collisionLayers);
|
|
1740
|
-
const viewport = viewports[0];
|
|
1741
|
-
const viewportChanged = !this.lastViewport || !this.lastViewport.equals(viewport) || maskEffectRendered;
|
|
1742
|
-
for (const collisionGroup in channels) {
|
|
1743
|
-
const collisionFBO = this.collisionFBOs[collisionGroup];
|
|
1744
|
-
const renderInfo = channels[collisionGroup];
|
|
1745
|
-
const [width, height] = device.canvasContext.getPixelSize();
|
|
1746
|
-
collisionFBO.resize({
|
|
1747
|
-
width: width / DOWNSCALE,
|
|
1748
|
-
height: height / DOWNSCALE
|
|
1749
|
-
});
|
|
1750
|
-
this._render(renderInfo, {
|
|
1751
|
-
effects,
|
|
1752
|
-
layerFilter,
|
|
1753
|
-
onViewportActive,
|
|
1754
|
-
views,
|
|
1755
|
-
viewport,
|
|
1756
|
-
viewportChanged
|
|
1757
|
-
});
|
|
1758
|
-
}
|
|
1759
|
-
}
|
|
1760
|
-
_render(renderInfo, { effects, layerFilter, onViewportActive, views, viewport, viewportChanged }) {
|
|
1761
|
-
const { collisionGroup } = renderInfo;
|
|
1762
|
-
const oldRenderInfo = this.channels[collisionGroup];
|
|
1763
|
-
if (!oldRenderInfo) {
|
|
1764
|
-
return;
|
|
1765
|
-
}
|
|
1766
|
-
const needsRender = viewportChanged || renderInfo === oldRenderInfo || !(0, import_core18._deepEqual)(oldRenderInfo.layers, renderInfo.layers, 1) || renderInfo.layerBounds.some((b, i) => !(0, import_core17.equals)(b, oldRenderInfo.layerBounds[i])) || renderInfo.allLayersLoaded !== oldRenderInfo.allLayersLoaded || renderInfo.layers.some((layer) => layer.props.transitions);
|
|
1767
|
-
this.channels[collisionGroup] = renderInfo;
|
|
1768
|
-
if (needsRender) {
|
|
1769
|
-
this.lastViewport = viewport;
|
|
1770
|
-
const collisionFBO = this.collisionFBOs[collisionGroup];
|
|
1771
|
-
this.collisionFilterPass.renderCollisionMap(collisionFBO, {
|
|
1772
|
-
pass: "collision-filter",
|
|
1773
|
-
isPicking: true,
|
|
1774
|
-
layers: renderInfo.layers,
|
|
1775
|
-
effects,
|
|
1776
|
-
layerFilter,
|
|
1777
|
-
viewports: viewport ? [viewport] : [],
|
|
1778
|
-
onViewportActive,
|
|
1779
|
-
views,
|
|
1780
|
-
moduleParameters: {
|
|
1781
|
-
dummyCollisionMap: this.dummyCollisionMap,
|
|
1782
|
-
devicePixelRatio: collisionFBO.device.canvasContext.getDevicePixelRatio() / DOWNSCALE
|
|
1783
|
-
}
|
|
1784
|
-
});
|
|
1785
|
-
}
|
|
1786
|
-
}
|
|
1787
|
-
_groupByCollisionGroup(device, collisionLayers) {
|
|
1788
|
-
const channelMap = {};
|
|
1789
|
-
for (const layer of collisionLayers) {
|
|
1790
|
-
const { collisionGroup } = layer.props;
|
|
1791
|
-
let channelInfo = channelMap[collisionGroup];
|
|
1792
|
-
if (!channelInfo) {
|
|
1793
|
-
channelInfo = { collisionGroup, layers: [], layerBounds: [], allLayersLoaded: true };
|
|
1794
|
-
channelMap[collisionGroup] = channelInfo;
|
|
1795
|
-
}
|
|
1796
|
-
channelInfo.layers.push(layer);
|
|
1797
|
-
channelInfo.layerBounds.push(layer.getBounds());
|
|
1798
|
-
if (!layer.isLoaded) {
|
|
1799
|
-
channelInfo.allLayersLoaded = false;
|
|
1800
|
-
}
|
|
1801
|
-
}
|
|
1802
|
-
for (const collisionGroup of Object.keys(channelMap)) {
|
|
1803
|
-
if (!this.collisionFBOs[collisionGroup]) {
|
|
1804
|
-
this.createFBO(device, collisionGroup);
|
|
1805
|
-
}
|
|
1806
|
-
if (!this.channels[collisionGroup]) {
|
|
1807
|
-
this.channels[collisionGroup] = channelMap[collisionGroup];
|
|
1808
|
-
}
|
|
1809
|
-
}
|
|
1810
|
-
for (const collisionGroup of Object.keys(this.collisionFBOs)) {
|
|
1811
|
-
if (!channelMap[collisionGroup]) {
|
|
1812
|
-
this.destroyFBO(collisionGroup);
|
|
1813
|
-
}
|
|
1814
|
-
}
|
|
1815
|
-
return channelMap;
|
|
1816
|
-
}
|
|
1817
|
-
getModuleParameters(layer) {
|
|
1818
|
-
const { collisionGroup } = layer.props;
|
|
1819
|
-
const { collisionFBOs, dummyCollisionMap } = this;
|
|
1820
|
-
return { collisionFBO: collisionFBOs[collisionGroup], dummyCollisionMap };
|
|
1821
|
-
}
|
|
1822
|
-
cleanup() {
|
|
1823
|
-
if (this.dummyCollisionMap) {
|
|
1824
|
-
this.dummyCollisionMap.delete();
|
|
1825
|
-
this.dummyCollisionMap = void 0;
|
|
1826
|
-
}
|
|
1827
|
-
this.channels = {};
|
|
1828
|
-
for (const collisionGroup of Object.keys(this.collisionFBOs)) {
|
|
1829
|
-
this.destroyFBO(collisionGroup);
|
|
1830
|
-
}
|
|
1831
|
-
this.collisionFBOs = {};
|
|
1832
|
-
this.lastViewport = void 0;
|
|
1833
|
-
}
|
|
1834
|
-
createFBO(device, collisionGroup) {
|
|
1835
|
-
const { width, height } = device.gl.canvas;
|
|
1836
|
-
const collisionMap = device.createTexture({
|
|
1837
|
-
format: "rgba8unorm",
|
|
1838
|
-
width,
|
|
1839
|
-
height,
|
|
1840
|
-
sampler: {
|
|
1841
|
-
minFilter: "nearest",
|
|
1842
|
-
magFilter: "nearest",
|
|
1843
|
-
addressModeU: "clamp-to-edge",
|
|
1844
|
-
addressModeV: "clamp-to-edge"
|
|
1845
|
-
}
|
|
1846
|
-
});
|
|
1847
|
-
const depthStencilAttachment = device.createTexture({
|
|
1848
|
-
format: "depth16unorm",
|
|
1849
|
-
width,
|
|
1850
|
-
height,
|
|
1851
|
-
mipmaps: false,
|
|
1852
|
-
dataFormat: 6402,
|
|
1853
|
-
type: 5125
|
|
1854
|
-
});
|
|
1855
|
-
this.collisionFBOs[collisionGroup] = device.createFramebuffer({
|
|
1856
|
-
id: `collision-${collisionGroup}`,
|
|
1857
|
-
width,
|
|
1858
|
-
height,
|
|
1859
|
-
colorAttachments: [collisionMap],
|
|
1860
|
-
depthStencilAttachment
|
|
1861
|
-
});
|
|
1862
|
-
}
|
|
1863
|
-
destroyFBO(collisionGroup) {
|
|
1864
|
-
var _a, _b;
|
|
1865
|
-
const fbo = this.collisionFBOs[collisionGroup];
|
|
1866
|
-
(_a = fbo.colorAttachments[0]) == null ? void 0 : _a.destroy();
|
|
1867
|
-
(_b = fbo.depthStencilAttachment) == null ? void 0 : _b.destroy();
|
|
1868
|
-
fbo.destroy();
|
|
1869
|
-
delete this.collisionFBOs[collisionGroup];
|
|
1870
|
-
}
|
|
1871
|
-
};
|
|
1872
|
-
|
|
1873
|
-
// dist/collision-filter/collision-filter-extension.js
|
|
1874
|
-
var defaultProps6 = {
|
|
1875
|
-
getCollisionPriority: { type: "accessor", value: 0 },
|
|
1876
|
-
collisionEnabled: true,
|
|
1877
|
-
collisionGroup: { type: "string", value: "default" },
|
|
1878
|
-
collisionTestProps: {}
|
|
1879
|
-
};
|
|
1880
|
-
var _CollisionFilterExtension = class extends import_core19.LayerExtension {
|
|
1881
|
-
getShaders() {
|
|
1882
|
-
return { modules: [shader_module_default2] };
|
|
1883
|
-
}
|
|
1884
|
-
draw({ uniforms, context, moduleParameters }) {
|
|
1885
|
-
const { collisionEnabled } = this.props;
|
|
1886
|
-
const { collisionFBO, drawToCollisionMap } = moduleParameters;
|
|
1887
|
-
const enabled = collisionEnabled && Boolean(collisionFBO);
|
|
1888
|
-
uniforms.collision_enabled = enabled;
|
|
1889
|
-
if (drawToCollisionMap) {
|
|
1890
|
-
this.props = this.clone(this.props.collisionTestProps).props;
|
|
1891
|
-
}
|
|
1892
|
-
}
|
|
1893
|
-
initializeState(context, extension) {
|
|
1894
|
-
var _a;
|
|
1895
|
-
if (this.getAttributeManager() === null) {
|
|
1896
|
-
return;
|
|
1897
|
-
}
|
|
1898
|
-
(_a = this.context.deck) == null ? void 0 : _a._addDefaultEffect(new CollisionFilterEffect());
|
|
1899
|
-
const attributeManager = this.getAttributeManager();
|
|
1900
|
-
attributeManager.add({
|
|
1901
|
-
collisionPriorities: {
|
|
1902
|
-
size: 1,
|
|
1903
|
-
accessor: "getCollisionPriority",
|
|
1904
|
-
shaderAttributes: {
|
|
1905
|
-
collisionPriorities: { divisor: 0 },
|
|
1906
|
-
instanceCollisionPriorities: { divisor: 1 }
|
|
1907
|
-
}
|
|
1908
|
-
}
|
|
1909
|
-
});
|
|
1910
|
-
}
|
|
1911
|
-
getNeedsPickingBuffer() {
|
|
1912
|
-
return this.props.collisionEnabled;
|
|
1913
|
-
}
|
|
1914
|
-
};
|
|
1915
|
-
var CollisionFilterExtension = _CollisionFilterExtension;
|
|
1916
|
-
(() => {
|
|
1917
|
-
_CollisionFilterExtension.defaultProps = defaultProps6;
|
|
1918
|
-
})();
|
|
1919
|
-
(() => {
|
|
1920
|
-
_CollisionFilterExtension.extensionName = "CollisionFilterExtension";
|
|
1921
|
-
})();
|
|
1922
|
-
|
|
1923
|
-
// dist/mask/mask-extension.js
|
|
1924
|
-
var import_core21 = require("@deck.gl/core");
|
|
1925
|
-
|
|
1926
|
-
// dist/mask/shader-module.js
|
|
1927
|
-
var import_core20 = require("@deck.gl/core");
|
|
1928
|
-
var vs4 = `
|
|
1929
|
-
uniform vec4 mask_bounds;
|
|
1930
|
-
uniform bool mask_maskByInstance;
|
|
1931
|
-
vec2 mask_getCoords(vec4 position) {
|
|
1932
|
-
return (position.xy - mask_bounds.xy) / (mask_bounds.zw - mask_bounds.xy);
|
|
1933
|
-
}
|
|
1934
|
-
`;
|
|
1935
|
-
var fs3 = `
|
|
1936
|
-
uniform sampler2D mask_texture;
|
|
1937
|
-
uniform int mask_channel;
|
|
1938
|
-
uniform bool mask_enabled;
|
|
1939
|
-
uniform bool mask_inverted;
|
|
1940
|
-
bool mask_isInBounds(vec2 texCoords) {
|
|
1941
|
-
if (!mask_enabled) {
|
|
1942
|
-
return true;
|
|
1943
|
-
}
|
|
1944
|
-
vec4 maskColor = texture(mask_texture, texCoords);
|
|
1945
|
-
float maskValue = 1.0;
|
|
1946
|
-
if (mask_channel == 0) {
|
|
1947
|
-
maskValue = maskColor.r;
|
|
1948
|
-
} else if (mask_channel == 1) {
|
|
1949
|
-
maskValue = maskColor.g;
|
|
1950
|
-
} else if (mask_channel == 2) {
|
|
1951
|
-
maskValue = maskColor.b;
|
|
1952
|
-
} else if (mask_channel == 3) {
|
|
1953
|
-
maskValue = maskColor.a;
|
|
1954
|
-
}
|
|
1955
|
-
if (mask_inverted) {
|
|
1956
|
-
return maskValue >= 0.5;
|
|
1957
|
-
} else {
|
|
1958
|
-
return maskValue < 0.5;
|
|
1959
|
-
}
|
|
1960
|
-
}
|
|
1961
|
-
`;
|
|
1962
|
-
var inject5 = {
|
|
1963
|
-
"vs:#decl": `
|
|
1964
|
-
out vec2 mask_texCoords;
|
|
1965
|
-
`,
|
|
1966
|
-
"vs:#main-end": `
|
|
1967
|
-
vec4 mask_common_position;
|
|
1968
|
-
if (mask_maskByInstance) {
|
|
1969
|
-
mask_common_position = project_position(vec4(geometry.worldPosition, 1.0));
|
|
1970
|
-
} else {
|
|
1971
|
-
mask_common_position = geometry.position;
|
|
1972
|
-
}
|
|
1973
|
-
mask_texCoords = mask_getCoords(mask_common_position);
|
|
1974
|
-
`,
|
|
1975
|
-
"fs:#decl": `
|
|
1976
|
-
in vec2 mask_texCoords;
|
|
1977
|
-
`,
|
|
1978
|
-
"fs:#main-start": `
|
|
1979
|
-
if (mask_enabled) {
|
|
1980
|
-
bool mask = mask_isInBounds(mask_texCoords);
|
|
1981
|
-
fragColor = texture(mask_texture, mask_texCoords);
|
|
1982
|
-
if (!mask) discard;
|
|
1983
|
-
}
|
|
1984
|
-
`
|
|
1985
|
-
};
|
|
1986
|
-
var getMaskUniforms = (opts) => {
|
|
1987
|
-
if (opts && "maskMap" in opts) {
|
|
1988
|
-
return {
|
|
1989
|
-
mask_texture: opts.maskMap
|
|
1990
|
-
};
|
|
1991
|
-
}
|
|
1992
|
-
return {};
|
|
1993
|
-
};
|
|
1994
|
-
var shader_module_default3 = {
|
|
1995
|
-
name: "mask",
|
|
1996
|
-
dependencies: [import_core20.project],
|
|
1997
|
-
vs: vs4,
|
|
1998
|
-
fs: fs3,
|
|
1999
|
-
inject: inject5,
|
|
2000
|
-
getUniforms: getMaskUniforms
|
|
2001
|
-
};
|
|
2002
|
-
|
|
2003
2039
|
// dist/mask/mask-extension.js
|
|
2004
2040
|
var defaultProps7 = {
|
|
2005
2041
|
maskId: "",
|
|
@@ -2177,22 +2213,24 @@ return;
|
|
|
2177
2213
|
};
|
|
2178
2214
|
|
|
2179
2215
|
// dist/terrain/utils.js
|
|
2180
|
-
var
|
|
2216
|
+
var import_constants2 = require("@luma.gl/constants");
|
|
2181
2217
|
function createRenderTarget(device, opts) {
|
|
2182
2218
|
return device.createFramebuffer({
|
|
2183
2219
|
id: opts.id,
|
|
2184
2220
|
colorAttachments: [
|
|
2185
2221
|
device.createTexture({
|
|
2222
|
+
id: opts.id,
|
|
2186
2223
|
...opts.float && {
|
|
2187
2224
|
format: "rgba32float",
|
|
2188
2225
|
type: 5126
|
|
2189
2226
|
},
|
|
2190
2227
|
mipmaps: false,
|
|
2191
|
-
sampler: {
|
|
2228
|
+
sampler: opts.interpolate === false ? {
|
|
2229
|
+
minFilter: "nearest",
|
|
2230
|
+
magFilter: "nearest"
|
|
2231
|
+
} : {
|
|
2192
2232
|
minFilter: "linear",
|
|
2193
|
-
magFilter: "linear"
|
|
2194
|
-
addressModeU: "clamp-to-edge",
|
|
2195
|
-
addressModeV: "clamp-to-edge"
|
|
2233
|
+
magFilter: "linear"
|
|
2196
2234
|
}
|
|
2197
2235
|
})
|
|
2198
2236
|
]
|
|
@@ -2312,7 +2350,8 @@ var TerrainCover = class {
|
|
|
2312
2350
|
}
|
|
2313
2351
|
if (!this.pickingFbo) {
|
|
2314
2352
|
this.pickingFbo = createRenderTarget(this.targetLayer.context.device, {
|
|
2315
|
-
id: `${this.id}-picking
|
|
2353
|
+
id: `${this.id}-picking`,
|
|
2354
|
+
interpolate: false
|
|
2316
2355
|
});
|
|
2317
2356
|
}
|
|
2318
2357
|
return this.pickingFbo;
|
|
@@ -2359,8 +2398,15 @@ function intersect(b1, b2) {
|
|
|
2359
2398
|
}
|
|
2360
2399
|
|
|
2361
2400
|
// dist/terrain/terrain-pass.js
|
|
2362
|
-
var import_constants4 = require("@luma.gl/constants");
|
|
2363
2401
|
var import_core23 = require("@deck.gl/core");
|
|
2402
|
+
var TERRAIN_BLENDING = {
|
|
2403
|
+
blendColorOperation: "max",
|
|
2404
|
+
blendColorSrcFactor: "one",
|
|
2405
|
+
blendColorDstFactor: "one",
|
|
2406
|
+
blendAlphaOperation: "max",
|
|
2407
|
+
blendAlphaSrcFactor: "one",
|
|
2408
|
+
blendAlphaDstFactor: "one"
|
|
2409
|
+
};
|
|
2364
2410
|
var TerrainPass = class extends import_core23._LayersPass {
|
|
2365
2411
|
getRenderableLayers(viewport, opts) {
|
|
2366
2412
|
const { layers } = opts;
|
|
@@ -2381,20 +2427,15 @@ var TerrainPass = class extends import_core23._LayersPass {
|
|
|
2381
2427
|
return;
|
|
2382
2428
|
}
|
|
2383
2429
|
target.resize(viewport);
|
|
2384
|
-
this.
|
|
2385
|
-
clearColor: [0, 0, 0, 0],
|
|
2386
|
-
blend: true,
|
|
2387
|
-
blendFunc: [1, 1],
|
|
2388
|
-
blendEquation: 32776,
|
|
2389
|
-
depthTest: false
|
|
2390
|
-
}, () => this.render({
|
|
2430
|
+
this.render({
|
|
2391
2431
|
...opts,
|
|
2392
2432
|
target,
|
|
2393
2433
|
pass: "terrain-height-map",
|
|
2394
2434
|
layers: opts.layers,
|
|
2395
2435
|
viewports: [viewport],
|
|
2396
|
-
effects: []
|
|
2397
|
-
|
|
2436
|
+
effects: [],
|
|
2437
|
+
clearColor: [0, 0, 0, 0]
|
|
2438
|
+
});
|
|
2398
2439
|
}
|
|
2399
2440
|
renderTerrainCover(terrainCover, opts) {
|
|
2400
2441
|
const target = terrainCover.getRenderFramebuffer();
|
|
@@ -2404,17 +2445,23 @@ var TerrainPass = class extends import_core23._LayersPass {
|
|
|
2404
2445
|
}
|
|
2405
2446
|
const layers = terrainCover.filterLayers(opts.layers);
|
|
2406
2447
|
target.resize(viewport);
|
|
2407
|
-
this.
|
|
2408
|
-
clearColor: [0, 0, 0, 0],
|
|
2409
|
-
depthTest: false
|
|
2410
|
-
}, () => this.render({
|
|
2448
|
+
this.render({
|
|
2411
2449
|
...opts,
|
|
2412
2450
|
target,
|
|
2413
2451
|
pass: `terrain-cover-${terrainCover.id}`,
|
|
2414
2452
|
layers,
|
|
2415
2453
|
effects: [],
|
|
2416
|
-
viewports: [viewport]
|
|
2417
|
-
|
|
2454
|
+
viewports: [viewport],
|
|
2455
|
+
clearColor: [0, 0, 0, 0]
|
|
2456
|
+
});
|
|
2457
|
+
}
|
|
2458
|
+
getLayerParameters(layer, layerIndex, viewport) {
|
|
2459
|
+
return {
|
|
2460
|
+
...layer.props.parameters,
|
|
2461
|
+
blend: true,
|
|
2462
|
+
depthTest: false,
|
|
2463
|
+
...layer.props.operation.includes("terrain") && TERRAIN_BLENDING
|
|
2464
|
+
};
|
|
2418
2465
|
}
|
|
2419
2466
|
};
|
|
2420
2467
|
|
|
@@ -2452,9 +2499,7 @@ var TerrainPickingPass = class extends import_core24._PickLayersPass {
|
|
|
2452
2499
|
layers.unshift(terrainLayer);
|
|
2453
2500
|
}
|
|
2454
2501
|
target.resize(viewport);
|
|
2455
|
-
this.
|
|
2456
|
-
depthTest: false
|
|
2457
|
-
}, () => this.render({
|
|
2502
|
+
this.render({
|
|
2458
2503
|
...opts,
|
|
2459
2504
|
pickingFBO: target,
|
|
2460
2505
|
pass: `terrain-cover-picking-${terrainCover.id}`,
|
|
@@ -2464,15 +2509,17 @@ var TerrainPickingPass = class extends import_core24._PickLayersPass {
|
|
|
2464
2509
|
cullRect: void 0,
|
|
2465
2510
|
deviceRect: viewport,
|
|
2466
2511
|
pickZ: false
|
|
2467
|
-
})
|
|
2512
|
+
});
|
|
2468
2513
|
}
|
|
2469
2514
|
getLayerParameters(layer, layerIndex, viewport) {
|
|
2515
|
+
let parameters2;
|
|
2470
2516
|
if (this.drawParameters[layer.id]) {
|
|
2471
|
-
|
|
2517
|
+
parameters2 = this.drawParameters[layer.id];
|
|
2518
|
+
} else {
|
|
2519
|
+
parameters2 = super.getLayerParameters(layer, layerIndex, viewport);
|
|
2520
|
+
parameters2.blend = true;
|
|
2472
2521
|
}
|
|
2473
|
-
|
|
2474
|
-
parameters2.blend = true;
|
|
2475
|
-
return parameters2;
|
|
2522
|
+
return { ...parameters2, depthTest: false };
|
|
2476
2523
|
}
|
|
2477
2524
|
};
|
|
2478
2525
|
|
|
@@ -2555,7 +2602,7 @@ var TerrainEffect = class {
|
|
|
2555
2602
|
this.isDrapingEnabled = false;
|
|
2556
2603
|
this.terrainCovers = /* @__PURE__ */ new Map();
|
|
2557
2604
|
}
|
|
2558
|
-
|
|
2605
|
+
setup({ device, deck }) {
|
|
2559
2606
|
this.dummyHeightMap = device.createTexture({
|
|
2560
2607
|
width: 1,
|
|
2561
2608
|
height: 1,
|
|
@@ -2568,17 +2615,9 @@ var TerrainEffect = class {
|
|
|
2568
2615
|
} else {
|
|
2569
2616
|
import_core25.log.warn("Terrain offset mode is not supported by this browser")();
|
|
2570
2617
|
}
|
|
2571
|
-
|
|
2618
|
+
deck._addDefaultShaderModule(terrainModule);
|
|
2572
2619
|
}
|
|
2573
|
-
preRender(
|
|
2574
|
-
if (!this.dummyHeightMap) {
|
|
2575
|
-
this.initialize(device);
|
|
2576
|
-
for (const layer of opts.layers) {
|
|
2577
|
-
if (layer.props.operation.includes("terrain")) {
|
|
2578
|
-
layer.setChangeFlags({ extensionsChanged: true });
|
|
2579
|
-
}
|
|
2580
|
-
}
|
|
2581
|
-
}
|
|
2620
|
+
preRender(opts) {
|
|
2582
2621
|
if (opts.pickZ) {
|
|
2583
2622
|
this.isDrapingEnabled = false;
|
|
2584
2623
|
return;
|
|
@@ -2614,7 +2653,7 @@ var TerrainEffect = class {
|
|
|
2614
2653
|
terrainSkipRender: terrainDrawMode === "drape" || !layer.props.operation.includes("draw")
|
|
2615
2654
|
};
|
|
2616
2655
|
}
|
|
2617
|
-
cleanup() {
|
|
2656
|
+
cleanup({ deck }) {
|
|
2618
2657
|
if (this.dummyHeightMap) {
|
|
2619
2658
|
this.dummyHeightMap.delete();
|
|
2620
2659
|
this.dummyHeightMap = void 0;
|
|
@@ -2627,7 +2666,7 @@ var TerrainEffect = class {
|
|
|
2627
2666
|
terrainCover.delete();
|
|
2628
2667
|
}
|
|
2629
2668
|
this.terrainCovers.clear();
|
|
2630
|
-
|
|
2669
|
+
deck._removeDefaultShaderModule(terrainModule);
|
|
2631
2670
|
}
|
|
2632
2671
|
_updateHeightMap(terrainLayers, viewport, opts) {
|
|
2633
2672
|
if (!this.heightMap) {
|