@deck.gl/extensions 9.0.0-beta.9 → 9.0.0
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 +1 -1
- package/dist/data-filter/data-filter-extension.d.ts.map +1 -1
- package/dist/data-filter/data-filter-extension.js +1 -1
- package/dist/dist.dev.js +475 -479
- package/dist/fill-style/fill-style-extension.d.ts +2 -30
- package/dist/fill-style/fill-style-extension.d.ts.map +1 -1
- package/dist/fill-style/fill-style-extension.js +1 -3
- package/dist/index.cjs +427 -421
- 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 +4 -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-effect.d.ts +4 -5
- package/dist/terrain/terrain-effect.d.ts.map +1 -1
- package/dist/terrain/terrain-effect.js +6 -15
- package/dist/terrain/terrain-pass.d.ts +1 -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.map +1 -1
- package/dist/terrain/utils.js +1 -0
- package/dist.min.js +23 -23
- package/package.json +5 -5
- package/src/collision-filter/collision-filter-effect.ts +22 -22
- package/src/collision-filter/collision-filter-pass.ts +7 -11
- package/src/data-filter/data-filter-extension.ts +1 -1
- package/src/fill-style/fill-style-extension.ts +3 -4
- 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-effect.ts +9 -18
- package/src/terrain/terrain-pass.ts +37 -34
- package/src/terrain/terrain-picking-pass.ts +19 -23
- package/src/terrain/utils.ts +1 -0
package/dist/index.cjs
CHANGED
|
@@ -488,7 +488,7 @@ var DATA_TYPE_FROM_SIZE = {
|
|
|
488
488
|
4: "vec4"
|
|
489
489
|
};
|
|
490
490
|
var _DataFilterExtension = class extends import_core3.LayerExtension {
|
|
491
|
-
constructor(opts) {
|
|
491
|
+
constructor(opts = {}) {
|
|
492
492
|
super({ ...defaultOptions, ...opts });
|
|
493
493
|
}
|
|
494
494
|
getShaders(extension) {
|
|
@@ -944,6 +944,7 @@ var _PathStyleExtension = class extends import_core6.LayerExtension {
|
|
|
944
944
|
}
|
|
945
945
|
prevP = p;
|
|
946
946
|
}
|
|
947
|
+
result[geometrySize - 1] = 0;
|
|
947
948
|
return result;
|
|
948
949
|
}
|
|
949
950
|
};
|
|
@@ -1058,9 +1059,7 @@ var defaultProps4 = {
|
|
|
1058
1059
|
type: "image",
|
|
1059
1060
|
value: null,
|
|
1060
1061
|
async: true,
|
|
1061
|
-
parameters: {
|
|
1062
|
-
minFilter: "linear"
|
|
1063
|
-
}
|
|
1062
|
+
parameters: { lodMaxClamp: 0 }
|
|
1064
1063
|
},
|
|
1065
1064
|
fillPatternMapping: { type: "object", value: {}, async: true },
|
|
1066
1065
|
fillPatternMask: true,
|
|
@@ -1261,7 +1260,7 @@ var ClipExtension = _ClipExtension;
|
|
|
1261
1260
|
})();
|
|
1262
1261
|
|
|
1263
1262
|
// dist/collision-filter/collision-filter-extension.js
|
|
1264
|
-
var
|
|
1263
|
+
var import_core15 = require("@deck.gl/core");
|
|
1265
1264
|
|
|
1266
1265
|
// dist/collision-filter/shader-module.js
|
|
1267
1266
|
var import_core11 = require("@deck.gl/core");
|
|
@@ -1350,8 +1349,8 @@ var shader_module_default2 = {
|
|
|
1350
1349
|
};
|
|
1351
1350
|
|
|
1352
1351
|
// dist/collision-filter/collision-filter-effect.js
|
|
1353
|
-
var
|
|
1354
|
-
var
|
|
1352
|
+
var import_core13 = require("@math.gl/core");
|
|
1353
|
+
var import_core14 = require("@deck.gl/core");
|
|
1355
1354
|
|
|
1356
1355
|
// dist/collision-filter/collision-filter-pass.js
|
|
1357
1356
|
var import_core12 = require("@deck.gl/core");
|
|
@@ -1359,13 +1358,11 @@ var CollisionFilterPass = class extends import_core12._LayersPass {
|
|
|
1359
1358
|
renderCollisionMap(target, options) {
|
|
1360
1359
|
const padding = 1;
|
|
1361
1360
|
const clearColor = [0, 0, 0, 0];
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
depthRange: [0, 1]
|
|
1368
|
-
}, () => this.render({ ...options, clearColor, target, pass: "collision" }));
|
|
1361
|
+
const scissorRect = [padding, padding, target.width - 2 * padding, target.height - 2 * padding];
|
|
1362
|
+
this.render({ ...options, clearColor, scissorRect, target, pass: "collision" });
|
|
1363
|
+
}
|
|
1364
|
+
getLayerParameters(layer, layerIndex, viewport) {
|
|
1365
|
+
return { ...layer.props.parameters, blend: false, depthRange: [0, 1], depthTest: true };
|
|
1369
1366
|
}
|
|
1370
1367
|
getModuleParameters() {
|
|
1371
1368
|
return {
|
|
@@ -1379,14 +1376,317 @@ var CollisionFilterPass = class extends import_core12._LayersPass {
|
|
|
1379
1376
|
}
|
|
1380
1377
|
};
|
|
1381
1378
|
|
|
1379
|
+
// dist/collision-filter/collision-filter-effect.js
|
|
1380
|
+
var DOWNSCALE = 2;
|
|
1381
|
+
var CollisionFilterEffect = class {
|
|
1382
|
+
constructor() {
|
|
1383
|
+
this.id = "collision-filter-effect";
|
|
1384
|
+
this.props = null;
|
|
1385
|
+
this.useInPicking = true;
|
|
1386
|
+
this.order = 1;
|
|
1387
|
+
this.channels = {};
|
|
1388
|
+
this.collisionFBOs = {};
|
|
1389
|
+
}
|
|
1390
|
+
setup(context) {
|
|
1391
|
+
this.context = context;
|
|
1392
|
+
const { device } = context;
|
|
1393
|
+
this.dummyCollisionMap = device.createTexture({ width: 1, height: 1 });
|
|
1394
|
+
this.collisionFilterPass = new CollisionFilterPass(device, { id: "default-collision-filter" });
|
|
1395
|
+
}
|
|
1396
|
+
preRender({ effects: allEffects, layers, layerFilter, viewports, onViewportActive, views, isPicking, preRenderStats = {} }) {
|
|
1397
|
+
var _a;
|
|
1398
|
+
const { device } = this.context;
|
|
1399
|
+
if (isPicking) {
|
|
1400
|
+
return;
|
|
1401
|
+
}
|
|
1402
|
+
const collisionLayers = layers.filter(
|
|
1403
|
+
({ props: { visible, collisionEnabled } }) => visible && collisionEnabled
|
|
1404
|
+
);
|
|
1405
|
+
if (collisionLayers.length === 0) {
|
|
1406
|
+
this.channels = {};
|
|
1407
|
+
return;
|
|
1408
|
+
}
|
|
1409
|
+
const effects = allEffects == null ? void 0 : allEffects.filter((e) => e.useInPicking && preRenderStats[e.id]);
|
|
1410
|
+
const maskEffectRendered = (_a = preRenderStats["mask-effect"]) == null ? void 0 : _a.didRender;
|
|
1411
|
+
const channels = this._groupByCollisionGroup(device, collisionLayers);
|
|
1412
|
+
const viewport = viewports[0];
|
|
1413
|
+
const viewportChanged = !this.lastViewport || !this.lastViewport.equals(viewport) || maskEffectRendered;
|
|
1414
|
+
for (const collisionGroup in channels) {
|
|
1415
|
+
const collisionFBO = this.collisionFBOs[collisionGroup];
|
|
1416
|
+
const renderInfo = channels[collisionGroup];
|
|
1417
|
+
const [width, height] = device.canvasContext.getPixelSize();
|
|
1418
|
+
collisionFBO.resize({
|
|
1419
|
+
width: width / DOWNSCALE,
|
|
1420
|
+
height: height / DOWNSCALE
|
|
1421
|
+
});
|
|
1422
|
+
this._render(renderInfo, {
|
|
1423
|
+
effects,
|
|
1424
|
+
layerFilter,
|
|
1425
|
+
onViewportActive,
|
|
1426
|
+
views,
|
|
1427
|
+
viewport,
|
|
1428
|
+
viewportChanged
|
|
1429
|
+
});
|
|
1430
|
+
}
|
|
1431
|
+
}
|
|
1432
|
+
_render(renderInfo, { effects, layerFilter, onViewportActive, views, viewport, viewportChanged }) {
|
|
1433
|
+
const { collisionGroup } = renderInfo;
|
|
1434
|
+
const oldRenderInfo = this.channels[collisionGroup];
|
|
1435
|
+
if (!oldRenderInfo) {
|
|
1436
|
+
return;
|
|
1437
|
+
}
|
|
1438
|
+
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);
|
|
1439
|
+
this.channels[collisionGroup] = renderInfo;
|
|
1440
|
+
if (needsRender) {
|
|
1441
|
+
this.lastViewport = viewport;
|
|
1442
|
+
const collisionFBO = this.collisionFBOs[collisionGroup];
|
|
1443
|
+
this.collisionFilterPass.renderCollisionMap(collisionFBO, {
|
|
1444
|
+
pass: "collision-filter",
|
|
1445
|
+
isPicking: true,
|
|
1446
|
+
layers: renderInfo.layers,
|
|
1447
|
+
effects,
|
|
1448
|
+
layerFilter,
|
|
1449
|
+
viewports: viewport ? [viewport] : [],
|
|
1450
|
+
onViewportActive,
|
|
1451
|
+
views,
|
|
1452
|
+
moduleParameters: {
|
|
1453
|
+
dummyCollisionMap: this.dummyCollisionMap,
|
|
1454
|
+
devicePixelRatio: collisionFBO.device.canvasContext.getDevicePixelRatio() / DOWNSCALE
|
|
1455
|
+
}
|
|
1456
|
+
});
|
|
1457
|
+
}
|
|
1458
|
+
}
|
|
1459
|
+
_groupByCollisionGroup(device, collisionLayers) {
|
|
1460
|
+
const channelMap = {};
|
|
1461
|
+
for (const layer of collisionLayers) {
|
|
1462
|
+
const { collisionGroup } = layer.props;
|
|
1463
|
+
let channelInfo = channelMap[collisionGroup];
|
|
1464
|
+
if (!channelInfo) {
|
|
1465
|
+
channelInfo = { collisionGroup, layers: [], layerBounds: [], allLayersLoaded: true };
|
|
1466
|
+
channelMap[collisionGroup] = channelInfo;
|
|
1467
|
+
}
|
|
1468
|
+
channelInfo.layers.push(layer);
|
|
1469
|
+
channelInfo.layerBounds.push(layer.getBounds());
|
|
1470
|
+
if (!layer.isLoaded) {
|
|
1471
|
+
channelInfo.allLayersLoaded = false;
|
|
1472
|
+
}
|
|
1473
|
+
}
|
|
1474
|
+
for (const collisionGroup of Object.keys(channelMap)) {
|
|
1475
|
+
if (!this.collisionFBOs[collisionGroup]) {
|
|
1476
|
+
this.createFBO(device, collisionGroup);
|
|
1477
|
+
}
|
|
1478
|
+
if (!this.channels[collisionGroup]) {
|
|
1479
|
+
this.channels[collisionGroup] = channelMap[collisionGroup];
|
|
1480
|
+
}
|
|
1481
|
+
}
|
|
1482
|
+
for (const collisionGroup of Object.keys(this.collisionFBOs)) {
|
|
1483
|
+
if (!channelMap[collisionGroup]) {
|
|
1484
|
+
this.destroyFBO(collisionGroup);
|
|
1485
|
+
}
|
|
1486
|
+
}
|
|
1487
|
+
return channelMap;
|
|
1488
|
+
}
|
|
1489
|
+
getModuleParameters(layer) {
|
|
1490
|
+
const { collisionGroup } = layer.props;
|
|
1491
|
+
const { collisionFBOs, dummyCollisionMap } = this;
|
|
1492
|
+
return { collisionFBO: collisionFBOs[collisionGroup], dummyCollisionMap };
|
|
1493
|
+
}
|
|
1494
|
+
cleanup() {
|
|
1495
|
+
if (this.dummyCollisionMap) {
|
|
1496
|
+
this.dummyCollisionMap.delete();
|
|
1497
|
+
this.dummyCollisionMap = void 0;
|
|
1498
|
+
}
|
|
1499
|
+
this.channels = {};
|
|
1500
|
+
for (const collisionGroup of Object.keys(this.collisionFBOs)) {
|
|
1501
|
+
this.destroyFBO(collisionGroup);
|
|
1502
|
+
}
|
|
1503
|
+
this.collisionFBOs = {};
|
|
1504
|
+
this.lastViewport = void 0;
|
|
1505
|
+
}
|
|
1506
|
+
createFBO(device, collisionGroup) {
|
|
1507
|
+
const { width, height } = device.gl.canvas;
|
|
1508
|
+
const collisionMap = device.createTexture({
|
|
1509
|
+
format: "rgba8unorm",
|
|
1510
|
+
width,
|
|
1511
|
+
height,
|
|
1512
|
+
sampler: {
|
|
1513
|
+
minFilter: "nearest",
|
|
1514
|
+
magFilter: "nearest",
|
|
1515
|
+
addressModeU: "clamp-to-edge",
|
|
1516
|
+
addressModeV: "clamp-to-edge"
|
|
1517
|
+
}
|
|
1518
|
+
});
|
|
1519
|
+
const depthStencilAttachment = device.createTexture({
|
|
1520
|
+
format: "depth16unorm",
|
|
1521
|
+
width,
|
|
1522
|
+
height,
|
|
1523
|
+
mipmaps: false,
|
|
1524
|
+
dataFormat: 6402,
|
|
1525
|
+
type: 5125
|
|
1526
|
+
});
|
|
1527
|
+
this.collisionFBOs[collisionGroup] = device.createFramebuffer({
|
|
1528
|
+
id: `collision-${collisionGroup}`,
|
|
1529
|
+
width,
|
|
1530
|
+
height,
|
|
1531
|
+
colorAttachments: [collisionMap],
|
|
1532
|
+
depthStencilAttachment
|
|
1533
|
+
});
|
|
1534
|
+
}
|
|
1535
|
+
destroyFBO(collisionGroup) {
|
|
1536
|
+
var _a, _b;
|
|
1537
|
+
const fbo = this.collisionFBOs[collisionGroup];
|
|
1538
|
+
(_a = fbo.colorAttachments[0]) == null ? void 0 : _a.destroy();
|
|
1539
|
+
(_b = fbo.depthStencilAttachment) == null ? void 0 : _b.destroy();
|
|
1540
|
+
fbo.destroy();
|
|
1541
|
+
delete this.collisionFBOs[collisionGroup];
|
|
1542
|
+
}
|
|
1543
|
+
};
|
|
1544
|
+
|
|
1545
|
+
// dist/collision-filter/collision-filter-extension.js
|
|
1546
|
+
var defaultProps6 = {
|
|
1547
|
+
getCollisionPriority: { type: "accessor", value: 0 },
|
|
1548
|
+
collisionEnabled: true,
|
|
1549
|
+
collisionGroup: { type: "string", value: "default" },
|
|
1550
|
+
collisionTestProps: {}
|
|
1551
|
+
};
|
|
1552
|
+
var _CollisionFilterExtension = class extends import_core15.LayerExtension {
|
|
1553
|
+
getShaders() {
|
|
1554
|
+
return { modules: [shader_module_default2] };
|
|
1555
|
+
}
|
|
1556
|
+
draw({ uniforms, context, moduleParameters }) {
|
|
1557
|
+
const { collisionEnabled } = this.props;
|
|
1558
|
+
const { collisionFBO, drawToCollisionMap } = moduleParameters;
|
|
1559
|
+
const enabled = collisionEnabled && Boolean(collisionFBO);
|
|
1560
|
+
uniforms.collision_enabled = enabled;
|
|
1561
|
+
if (drawToCollisionMap) {
|
|
1562
|
+
this.props = this.clone(this.props.collisionTestProps).props;
|
|
1563
|
+
}
|
|
1564
|
+
}
|
|
1565
|
+
initializeState(context, extension) {
|
|
1566
|
+
var _a;
|
|
1567
|
+
if (this.getAttributeManager() === null) {
|
|
1568
|
+
return;
|
|
1569
|
+
}
|
|
1570
|
+
(_a = this.context.deck) == null ? void 0 : _a._addDefaultEffect(new CollisionFilterEffect());
|
|
1571
|
+
const attributeManager = this.getAttributeManager();
|
|
1572
|
+
attributeManager.add({
|
|
1573
|
+
collisionPriorities: {
|
|
1574
|
+
size: 1,
|
|
1575
|
+
accessor: "getCollisionPriority",
|
|
1576
|
+
shaderAttributes: {
|
|
1577
|
+
collisionPriorities: { divisor: 0 },
|
|
1578
|
+
instanceCollisionPriorities: { divisor: 1 }
|
|
1579
|
+
}
|
|
1580
|
+
}
|
|
1581
|
+
});
|
|
1582
|
+
}
|
|
1583
|
+
getNeedsPickingBuffer() {
|
|
1584
|
+
return this.props.collisionEnabled;
|
|
1585
|
+
}
|
|
1586
|
+
};
|
|
1587
|
+
var CollisionFilterExtension = _CollisionFilterExtension;
|
|
1588
|
+
(() => {
|
|
1589
|
+
_CollisionFilterExtension.defaultProps = defaultProps6;
|
|
1590
|
+
})();
|
|
1591
|
+
(() => {
|
|
1592
|
+
_CollisionFilterExtension.extensionName = "CollisionFilterExtension";
|
|
1593
|
+
})();
|
|
1594
|
+
|
|
1595
|
+
// dist/mask/mask-extension.js
|
|
1596
|
+
var import_core21 = require("@deck.gl/core");
|
|
1597
|
+
|
|
1598
|
+
// dist/mask/shader-module.js
|
|
1599
|
+
var import_core16 = require("@deck.gl/core");
|
|
1600
|
+
var vs4 = `
|
|
1601
|
+
uniform vec4 mask_bounds;
|
|
1602
|
+
uniform bool mask_maskByInstance;
|
|
1603
|
+
vec2 mask_getCoords(vec4 position) {
|
|
1604
|
+
return (position.xy - mask_bounds.xy) / (mask_bounds.zw - mask_bounds.xy);
|
|
1605
|
+
}
|
|
1606
|
+
`;
|
|
1607
|
+
var fs3 = `
|
|
1608
|
+
uniform sampler2D mask_texture;
|
|
1609
|
+
uniform int mask_channel;
|
|
1610
|
+
uniform bool mask_enabled;
|
|
1611
|
+
uniform bool mask_inverted;
|
|
1612
|
+
bool mask_isInBounds(vec2 texCoords) {
|
|
1613
|
+
if (!mask_enabled) {
|
|
1614
|
+
return true;
|
|
1615
|
+
}
|
|
1616
|
+
vec4 maskColor = texture(mask_texture, texCoords);
|
|
1617
|
+
float maskValue = 1.0;
|
|
1618
|
+
if (mask_channel == 0) {
|
|
1619
|
+
maskValue = maskColor.r;
|
|
1620
|
+
} else if (mask_channel == 1) {
|
|
1621
|
+
maskValue = maskColor.g;
|
|
1622
|
+
} else if (mask_channel == 2) {
|
|
1623
|
+
maskValue = maskColor.b;
|
|
1624
|
+
} else if (mask_channel == 3) {
|
|
1625
|
+
maskValue = maskColor.a;
|
|
1626
|
+
}
|
|
1627
|
+
if (mask_inverted) {
|
|
1628
|
+
return maskValue >= 0.5;
|
|
1629
|
+
} else {
|
|
1630
|
+
return maskValue < 0.5;
|
|
1631
|
+
}
|
|
1632
|
+
}
|
|
1633
|
+
`;
|
|
1634
|
+
var inject5 = {
|
|
1635
|
+
"vs:#decl": `
|
|
1636
|
+
out vec2 mask_texCoords;
|
|
1637
|
+
`,
|
|
1638
|
+
"vs:#main-end": `
|
|
1639
|
+
vec4 mask_common_position;
|
|
1640
|
+
if (mask_maskByInstance) {
|
|
1641
|
+
mask_common_position = project_position(vec4(geometry.worldPosition, 1.0));
|
|
1642
|
+
} else {
|
|
1643
|
+
mask_common_position = geometry.position;
|
|
1644
|
+
}
|
|
1645
|
+
mask_texCoords = mask_getCoords(mask_common_position);
|
|
1646
|
+
`,
|
|
1647
|
+
"fs:#decl": `
|
|
1648
|
+
in vec2 mask_texCoords;
|
|
1649
|
+
`,
|
|
1650
|
+
"fs:#main-start": `
|
|
1651
|
+
if (mask_enabled) {
|
|
1652
|
+
bool mask = mask_isInBounds(mask_texCoords);
|
|
1653
|
+
fragColor = texture(mask_texture, mask_texCoords);
|
|
1654
|
+
if (!mask) discard;
|
|
1655
|
+
}
|
|
1656
|
+
`
|
|
1657
|
+
};
|
|
1658
|
+
var getMaskUniforms = (opts) => {
|
|
1659
|
+
if (opts && "maskMap" in opts) {
|
|
1660
|
+
return {
|
|
1661
|
+
mask_texture: opts.maskMap
|
|
1662
|
+
};
|
|
1663
|
+
}
|
|
1664
|
+
return {};
|
|
1665
|
+
};
|
|
1666
|
+
var shader_module_default3 = {
|
|
1667
|
+
name: "mask",
|
|
1668
|
+
dependencies: [import_core16.project],
|
|
1669
|
+
vs: vs4,
|
|
1670
|
+
fs: fs3,
|
|
1671
|
+
inject: inject5,
|
|
1672
|
+
getUniforms: getMaskUniforms
|
|
1673
|
+
};
|
|
1674
|
+
|
|
1382
1675
|
// dist/mask/mask-effect.js
|
|
1383
|
-
var
|
|
1384
|
-
var
|
|
1676
|
+
var import_core19 = require("@deck.gl/core");
|
|
1677
|
+
var import_core20 = require("@math.gl/core");
|
|
1385
1678
|
|
|
1386
1679
|
// dist/mask/mask-pass.js
|
|
1387
|
-
var
|
|
1388
|
-
var
|
|
1389
|
-
|
|
1680
|
+
var import_core17 = require("@deck.gl/core");
|
|
1681
|
+
var MASK_BLENDING = {
|
|
1682
|
+
blendColorOperation: "subtract",
|
|
1683
|
+
blendColorSrcFactor: "zero",
|
|
1684
|
+
blendColorDstFactor: "one",
|
|
1685
|
+
blendAlphaOperation: "subtract",
|
|
1686
|
+
blendAlphaSrcFactor: "zero",
|
|
1687
|
+
blendAlphaDstFactor: "one"
|
|
1688
|
+
};
|
|
1689
|
+
var MaskPass = class extends import_core17._LayersPass {
|
|
1390
1690
|
constructor(device, props) {
|
|
1391
1691
|
super(device, props);
|
|
1392
1692
|
const { mapSize = 2048 } = props;
|
|
@@ -1409,16 +1709,17 @@ var MaskPass = class extends import_core13._LayersPass {
|
|
|
1409
1709
|
});
|
|
1410
1710
|
}
|
|
1411
1711
|
render(options) {
|
|
1412
|
-
const colorMask =
|
|
1413
|
-
colorMask[options.channel] = true;
|
|
1712
|
+
const colorMask = 2 ** options.channel;
|
|
1414
1713
|
const clearColor = [255, 255, 255, 255];
|
|
1415
|
-
|
|
1714
|
+
super.render({ ...options, clearColor, colorMask, target: this.fbo, pass: "mask" });
|
|
1715
|
+
}
|
|
1716
|
+
getLayerParameters(layer, layerIndex, viewport) {
|
|
1717
|
+
return {
|
|
1718
|
+
...layer.props.parameters,
|
|
1416
1719
|
blend: true,
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
depthTest: false
|
|
1421
|
-
}, () => super.render({ ...options, clearColor, target: this.fbo, pass: "mask" }));
|
|
1720
|
+
depthTest: false,
|
|
1721
|
+
...MASK_BLENDING
|
|
1722
|
+
};
|
|
1422
1723
|
}
|
|
1423
1724
|
shouldDrawLayer(layer) {
|
|
1424
1725
|
return layer.props.operation.includes("mask");
|
|
@@ -1430,7 +1731,7 @@ var MaskPass = class extends import_core13._LayersPass {
|
|
|
1430
1731
|
};
|
|
1431
1732
|
|
|
1432
1733
|
// dist/utils/projection-utils.js
|
|
1433
|
-
var
|
|
1734
|
+
var import_core18 = require("@deck.gl/core");
|
|
1434
1735
|
function joinLayerBounds(layers, viewport) {
|
|
1435
1736
|
const bounds = [Infinity, Infinity, -Infinity, -Infinity];
|
|
1436
1737
|
for (const layer of layers) {
|
|
@@ -1479,7 +1780,7 @@ function makeViewport(opts) {
|
|
|
1479
1780
|
zoom += Math.log2(r);
|
|
1480
1781
|
}
|
|
1481
1782
|
}
|
|
1482
|
-
return isGeospatial ? new
|
|
1783
|
+
return isGeospatial ? new import_core18.WebMercatorViewport({
|
|
1483
1784
|
id: viewport.id,
|
|
1484
1785
|
x: border,
|
|
1485
1786
|
y: border,
|
|
@@ -1489,7 +1790,7 @@ function makeViewport(opts) {
|
|
|
1489
1790
|
latitude: centerWorld[1],
|
|
1490
1791
|
zoom,
|
|
1491
1792
|
orthographic: true
|
|
1492
|
-
}) : new
|
|
1793
|
+
}) : new import_core18.OrthographicViewport({
|
|
1493
1794
|
id: viewport.id,
|
|
1494
1795
|
x: border,
|
|
1495
1796
|
y: border,
|
|
@@ -1558,14 +1859,16 @@ var MaskEffect = class {
|
|
|
1558
1859
|
this.channels = [];
|
|
1559
1860
|
this.masks = null;
|
|
1560
1861
|
}
|
|
1561
|
-
|
|
1862
|
+
setup({ device }) {
|
|
1863
|
+
this.dummyMaskMap = device.createTexture({
|
|
1864
|
+
width: 1,
|
|
1865
|
+
height: 1
|
|
1866
|
+
});
|
|
1867
|
+
this.maskPass = new MaskPass(device, { id: "default-mask" });
|
|
1868
|
+
this.maskMap = this.maskPass.maskMap;
|
|
1869
|
+
}
|
|
1870
|
+
preRender({ layers, layerFilter, viewports, onViewportActive, views, isPicking }) {
|
|
1562
1871
|
let didRender = false;
|
|
1563
|
-
if (!this.dummyMaskMap) {
|
|
1564
|
-
this.dummyMaskMap = device.createTexture({
|
|
1565
|
-
width: 1,
|
|
1566
|
-
height: 1
|
|
1567
|
-
});
|
|
1568
|
-
}
|
|
1569
1872
|
if (isPicking) {
|
|
1570
1873
|
return { didRender };
|
|
1571
1874
|
}
|
|
@@ -1576,15 +1879,11 @@ var MaskEffect = class {
|
|
|
1576
1879
|
return { didRender };
|
|
1577
1880
|
}
|
|
1578
1881
|
this.masks = {};
|
|
1579
|
-
if (!this.maskPass) {
|
|
1580
|
-
this.maskPass = new MaskPass(device, { id: "default-mask" });
|
|
1581
|
-
this.maskMap = this.maskPass.maskMap;
|
|
1582
|
-
}
|
|
1583
1882
|
const channelMap = this._sortMaskChannels(maskLayers);
|
|
1584
1883
|
const viewport = viewports[0];
|
|
1585
1884
|
const viewportChanged = !this.lastViewport || !this.lastViewport.equals(viewport);
|
|
1586
1885
|
if (viewport.resolution !== void 0) {
|
|
1587
|
-
|
|
1886
|
+
import_core19.log.warn("MaskExtension is not supported in GlobeView")();
|
|
1588
1887
|
return { didRender };
|
|
1589
1888
|
}
|
|
1590
1889
|
for (const maskId in channelMap) {
|
|
@@ -1613,7 +1912,7 @@ var MaskEffect = class {
|
|
|
1613
1912
|
this.lastViewport = viewport;
|
|
1614
1913
|
const layerBounds = joinLayerBounds(channelInfo.layers, viewport);
|
|
1615
1914
|
channelInfo.bounds = layerBounds && getRenderBounds(layerBounds, viewport);
|
|
1616
|
-
if (maskChanged || !(0,
|
|
1915
|
+
if (maskChanged || !(0, import_core20.equals)(channelInfo.bounds, oldChannelInfo.bounds)) {
|
|
1617
1916
|
const { maskPass, maskMap } = this;
|
|
1618
1917
|
const maskViewport = layerBounds && makeViewport({
|
|
1619
1918
|
bounds: channelInfo.bounds,
|
|
@@ -1640,366 +1939,71 @@ var MaskEffect = class {
|
|
|
1640
1939
|
}
|
|
1641
1940
|
this.masks[channelInfo.id] = {
|
|
1642
1941
|
index: channelInfo.index,
|
|
1643
|
-
bounds: channelInfo.maskBounds,
|
|
1644
|
-
coordinateOrigin: channelInfo.coordinateOrigin,
|
|
1645
|
-
coordinateSystem: channelInfo.coordinateSystem
|
|
1646
|
-
};
|
|
1647
|
-
return didRender;
|
|
1648
|
-
}
|
|
1649
|
-
_sortMaskChannels(maskLayers) {
|
|
1650
|
-
const channelMap = {};
|
|
1651
|
-
let channelCount = 0;
|
|
1652
|
-
for (const layer of maskLayers) {
|
|
1653
|
-
const { id } = layer.root;
|
|
1654
|
-
let channelInfo = channelMap[id];
|
|
1655
|
-
if (!channelInfo) {
|
|
1656
|
-
if (++channelCount > 4) {
|
|
1657
|
-
import_core15.log.warn("Too many mask layers. The max supported is 4")();
|
|
1658
|
-
continue;
|
|
1659
|
-
}
|
|
1660
|
-
channelInfo = {
|
|
1661
|
-
id,
|
|
1662
|
-
index: this.channels.findIndex((c) => (c == null ? void 0 : c.id) === id),
|
|
1663
|
-
layers: [],
|
|
1664
|
-
layerBounds: [],
|
|
1665
|
-
coordinateOrigin: layer.root.props.coordinateOrigin,
|
|
1666
|
-
coordinateSystem: layer.root.props.coordinateSystem
|
|
1667
|
-
};
|
|
1668
|
-
channelMap[id] = channelInfo;
|
|
1669
|
-
}
|
|
1670
|
-
channelInfo.layers.push(layer);
|
|
1671
|
-
channelInfo.layerBounds.push(layer.getBounds());
|
|
1672
|
-
}
|
|
1673
|
-
for (let i = 0; i < 4; i++) {
|
|
1674
|
-
const channelInfo = this.channels[i];
|
|
1675
|
-
if (!channelInfo || !(channelInfo.id in channelMap)) {
|
|
1676
|
-
this.channels[i] = null;
|
|
1677
|
-
}
|
|
1678
|
-
}
|
|
1679
|
-
for (const maskId in channelMap) {
|
|
1680
|
-
const channelInfo = channelMap[maskId];
|
|
1681
|
-
if (channelInfo.index < 0) {
|
|
1682
|
-
channelInfo.index = this.channels.findIndex((c) => !c);
|
|
1683
|
-
this.channels[channelInfo.index] = channelInfo;
|
|
1684
|
-
}
|
|
1685
|
-
}
|
|
1686
|
-
return channelMap;
|
|
1687
|
-
}
|
|
1688
|
-
getModuleParameters() {
|
|
1689
|
-
return {
|
|
1690
|
-
maskMap: this.masks ? this.maskMap : this.dummyMaskMap,
|
|
1691
|
-
maskChannels: this.masks
|
|
1692
|
-
};
|
|
1693
|
-
}
|
|
1694
|
-
cleanup() {
|
|
1695
|
-
if (this.dummyMaskMap) {
|
|
1696
|
-
this.dummyMaskMap.delete();
|
|
1697
|
-
this.dummyMaskMap = void 0;
|
|
1698
|
-
}
|
|
1699
|
-
if (this.maskPass) {
|
|
1700
|
-
this.maskPass.delete();
|
|
1701
|
-
this.maskPass = void 0;
|
|
1702
|
-
this.maskMap = void 0;
|
|
1703
|
-
}
|
|
1704
|
-
this.lastViewport = void 0;
|
|
1705
|
-
this.masks = null;
|
|
1706
|
-
this.channels.length = 0;
|
|
1707
|
-
}
|
|
1708
|
-
};
|
|
1709
|
-
|
|
1710
|
-
// dist/collision-filter/collision-filter-effect.js
|
|
1711
|
-
var DOWNSCALE = 2;
|
|
1712
|
-
var CollisionFilterEffect = class {
|
|
1713
|
-
constructor() {
|
|
1714
|
-
this.id = "collision-filter-effect";
|
|
1715
|
-
this.props = null;
|
|
1716
|
-
this.useInPicking = true;
|
|
1717
|
-
this.order = 1;
|
|
1718
|
-
this.channels = {};
|
|
1719
|
-
this.collisionFBOs = {};
|
|
1720
|
-
}
|
|
1721
|
-
preRender(device, { effects: allEffects, layers, layerFilter, viewports, onViewportActive, views, isPicking, preRenderStats = {} }) {
|
|
1722
|
-
var _a;
|
|
1723
|
-
if (!this.dummyCollisionMap) {
|
|
1724
|
-
this.dummyCollisionMap = device.createTexture({ width: 1, height: 1 });
|
|
1725
|
-
}
|
|
1726
|
-
if (isPicking) {
|
|
1727
|
-
return;
|
|
1728
|
-
}
|
|
1729
|
-
const collisionLayers = layers.filter(
|
|
1730
|
-
({ props: { visible, collisionEnabled } }) => visible && collisionEnabled
|
|
1731
|
-
);
|
|
1732
|
-
if (collisionLayers.length === 0) {
|
|
1733
|
-
this.channels = {};
|
|
1734
|
-
return;
|
|
1735
|
-
}
|
|
1736
|
-
if (!this.collisionFilterPass) {
|
|
1737
|
-
this.collisionFilterPass = new CollisionFilterPass(device, { id: "default-collision-filter" });
|
|
1738
|
-
}
|
|
1739
|
-
const effects = allEffects == null ? void 0 : allEffects.filter((e) => e.constructor === MaskEffect);
|
|
1740
|
-
const maskEffectRendered = (_a = preRenderStats["mask-effect"]) == null ? void 0 : _a.didRender;
|
|
1741
|
-
const channels = this._groupByCollisionGroup(device, collisionLayers);
|
|
1742
|
-
const viewport = viewports[0];
|
|
1743
|
-
const viewportChanged = !this.lastViewport || !this.lastViewport.equals(viewport) || maskEffectRendered;
|
|
1744
|
-
for (const collisionGroup in channels) {
|
|
1745
|
-
const collisionFBO = this.collisionFBOs[collisionGroup];
|
|
1746
|
-
const renderInfo = channels[collisionGroup];
|
|
1747
|
-
const [width, height] = device.canvasContext.getPixelSize();
|
|
1748
|
-
collisionFBO.resize({
|
|
1749
|
-
width: width / DOWNSCALE,
|
|
1750
|
-
height: height / DOWNSCALE
|
|
1751
|
-
});
|
|
1752
|
-
this._render(renderInfo, {
|
|
1753
|
-
effects,
|
|
1754
|
-
layerFilter,
|
|
1755
|
-
onViewportActive,
|
|
1756
|
-
views,
|
|
1757
|
-
viewport,
|
|
1758
|
-
viewportChanged
|
|
1759
|
-
});
|
|
1760
|
-
}
|
|
1761
|
-
}
|
|
1762
|
-
_render(renderInfo, { effects, layerFilter, onViewportActive, views, viewport, viewportChanged }) {
|
|
1763
|
-
const { collisionGroup } = renderInfo;
|
|
1764
|
-
const oldRenderInfo = this.channels[collisionGroup];
|
|
1765
|
-
if (!oldRenderInfo) {
|
|
1766
|
-
return;
|
|
1767
|
-
}
|
|
1768
|
-
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);
|
|
1769
|
-
this.channels[collisionGroup] = renderInfo;
|
|
1770
|
-
if (needsRender) {
|
|
1771
|
-
this.lastViewport = viewport;
|
|
1772
|
-
const collisionFBO = this.collisionFBOs[collisionGroup];
|
|
1773
|
-
this.collisionFilterPass.renderCollisionMap(collisionFBO, {
|
|
1774
|
-
pass: "collision-filter",
|
|
1775
|
-
isPicking: true,
|
|
1776
|
-
layers: renderInfo.layers,
|
|
1777
|
-
effects,
|
|
1778
|
-
layerFilter,
|
|
1779
|
-
viewports: viewport ? [viewport] : [],
|
|
1780
|
-
onViewportActive,
|
|
1781
|
-
views,
|
|
1782
|
-
moduleParameters: {
|
|
1783
|
-
dummyCollisionMap: this.dummyCollisionMap,
|
|
1784
|
-
devicePixelRatio: collisionFBO.device.canvasContext.getDevicePixelRatio() / DOWNSCALE
|
|
1785
|
-
}
|
|
1786
|
-
});
|
|
1787
|
-
}
|
|
1942
|
+
bounds: channelInfo.maskBounds,
|
|
1943
|
+
coordinateOrigin: channelInfo.coordinateOrigin,
|
|
1944
|
+
coordinateSystem: channelInfo.coordinateSystem
|
|
1945
|
+
};
|
|
1946
|
+
return didRender;
|
|
1788
1947
|
}
|
|
1789
|
-
|
|
1948
|
+
_sortMaskChannels(maskLayers) {
|
|
1790
1949
|
const channelMap = {};
|
|
1791
|
-
|
|
1792
|
-
|
|
1793
|
-
|
|
1950
|
+
let channelCount = 0;
|
|
1951
|
+
for (const layer of maskLayers) {
|
|
1952
|
+
const { id } = layer.root;
|
|
1953
|
+
let channelInfo = channelMap[id];
|
|
1794
1954
|
if (!channelInfo) {
|
|
1795
|
-
|
|
1796
|
-
|
|
1955
|
+
if (++channelCount > 4) {
|
|
1956
|
+
import_core19.log.warn("Too many mask layers. The max supported is 4")();
|
|
1957
|
+
continue;
|
|
1958
|
+
}
|
|
1959
|
+
channelInfo = {
|
|
1960
|
+
id,
|
|
1961
|
+
index: this.channels.findIndex((c) => (c == null ? void 0 : c.id) === id),
|
|
1962
|
+
layers: [],
|
|
1963
|
+
layerBounds: [],
|
|
1964
|
+
coordinateOrigin: layer.root.props.coordinateOrigin,
|
|
1965
|
+
coordinateSystem: layer.root.props.coordinateSystem
|
|
1966
|
+
};
|
|
1967
|
+
channelMap[id] = channelInfo;
|
|
1797
1968
|
}
|
|
1798
1969
|
channelInfo.layers.push(layer);
|
|
1799
1970
|
channelInfo.layerBounds.push(layer.getBounds());
|
|
1800
|
-
if (!layer.isLoaded) {
|
|
1801
|
-
channelInfo.allLayersLoaded = false;
|
|
1802
|
-
}
|
|
1803
1971
|
}
|
|
1804
|
-
for (
|
|
1805
|
-
|
|
1806
|
-
|
|
1807
|
-
|
|
1808
|
-
if (!this.channels[collisionGroup]) {
|
|
1809
|
-
this.channels[collisionGroup] = channelMap[collisionGroup];
|
|
1972
|
+
for (let i = 0; i < 4; i++) {
|
|
1973
|
+
const channelInfo = this.channels[i];
|
|
1974
|
+
if (!channelInfo || !(channelInfo.id in channelMap)) {
|
|
1975
|
+
this.channels[i] = null;
|
|
1810
1976
|
}
|
|
1811
1977
|
}
|
|
1812
|
-
for (const
|
|
1813
|
-
|
|
1814
|
-
|
|
1978
|
+
for (const maskId in channelMap) {
|
|
1979
|
+
const channelInfo = channelMap[maskId];
|
|
1980
|
+
if (channelInfo.index < 0) {
|
|
1981
|
+
channelInfo.index = this.channels.findIndex((c) => !c);
|
|
1982
|
+
this.channels[channelInfo.index] = channelInfo;
|
|
1815
1983
|
}
|
|
1816
1984
|
}
|
|
1817
1985
|
return channelMap;
|
|
1818
1986
|
}
|
|
1819
|
-
getModuleParameters(
|
|
1820
|
-
|
|
1821
|
-
|
|
1822
|
-
|
|
1987
|
+
getModuleParameters() {
|
|
1988
|
+
return {
|
|
1989
|
+
maskMap: this.masks ? this.maskMap : this.dummyMaskMap,
|
|
1990
|
+
maskChannels: this.masks
|
|
1991
|
+
};
|
|
1823
1992
|
}
|
|
1824
1993
|
cleanup() {
|
|
1825
|
-
if (this.
|
|
1826
|
-
this.
|
|
1827
|
-
this.
|
|
1994
|
+
if (this.dummyMaskMap) {
|
|
1995
|
+
this.dummyMaskMap.delete();
|
|
1996
|
+
this.dummyMaskMap = void 0;
|
|
1828
1997
|
}
|
|
1829
|
-
this.
|
|
1830
|
-
|
|
1831
|
-
this.
|
|
1998
|
+
if (this.maskPass) {
|
|
1999
|
+
this.maskPass.delete();
|
|
2000
|
+
this.maskPass = void 0;
|
|
2001
|
+
this.maskMap = void 0;
|
|
1832
2002
|
}
|
|
1833
|
-
this.collisionFBOs = {};
|
|
1834
2003
|
this.lastViewport = void 0;
|
|
2004
|
+
this.masks = null;
|
|
2005
|
+
this.channels.length = 0;
|
|
1835
2006
|
}
|
|
1836
|
-
createFBO(device, collisionGroup) {
|
|
1837
|
-
const { width, height } = device.gl.canvas;
|
|
1838
|
-
const collisionMap = device.createTexture({
|
|
1839
|
-
format: "rgba8unorm",
|
|
1840
|
-
width,
|
|
1841
|
-
height,
|
|
1842
|
-
sampler: {
|
|
1843
|
-
minFilter: "nearest",
|
|
1844
|
-
magFilter: "nearest",
|
|
1845
|
-
addressModeU: "clamp-to-edge",
|
|
1846
|
-
addressModeV: "clamp-to-edge"
|
|
1847
|
-
}
|
|
1848
|
-
});
|
|
1849
|
-
const depthStencilAttachment = device.createTexture({
|
|
1850
|
-
format: "depth16unorm",
|
|
1851
|
-
width,
|
|
1852
|
-
height,
|
|
1853
|
-
mipmaps: false,
|
|
1854
|
-
dataFormat: 6402,
|
|
1855
|
-
type: 5125
|
|
1856
|
-
});
|
|
1857
|
-
this.collisionFBOs[collisionGroup] = device.createFramebuffer({
|
|
1858
|
-
id: `collision-${collisionGroup}`,
|
|
1859
|
-
width,
|
|
1860
|
-
height,
|
|
1861
|
-
colorAttachments: [collisionMap],
|
|
1862
|
-
depthStencilAttachment
|
|
1863
|
-
});
|
|
1864
|
-
}
|
|
1865
|
-
destroyFBO(collisionGroup) {
|
|
1866
|
-
var _a, _b;
|
|
1867
|
-
const fbo = this.collisionFBOs[collisionGroup];
|
|
1868
|
-
(_a = fbo.colorAttachments[0]) == null ? void 0 : _a.destroy();
|
|
1869
|
-
(_b = fbo.depthStencilAttachment) == null ? void 0 : _b.destroy();
|
|
1870
|
-
fbo.destroy();
|
|
1871
|
-
delete this.collisionFBOs[collisionGroup];
|
|
1872
|
-
}
|
|
1873
|
-
};
|
|
1874
|
-
|
|
1875
|
-
// dist/collision-filter/collision-filter-extension.js
|
|
1876
|
-
var defaultProps6 = {
|
|
1877
|
-
getCollisionPriority: { type: "accessor", value: 0 },
|
|
1878
|
-
collisionEnabled: true,
|
|
1879
|
-
collisionGroup: { type: "string", value: "default" },
|
|
1880
|
-
collisionTestProps: {}
|
|
1881
|
-
};
|
|
1882
|
-
var _CollisionFilterExtension = class extends import_core19.LayerExtension {
|
|
1883
|
-
getShaders() {
|
|
1884
|
-
return { modules: [shader_module_default2] };
|
|
1885
|
-
}
|
|
1886
|
-
draw({ uniforms, context, moduleParameters }) {
|
|
1887
|
-
const { collisionEnabled } = this.props;
|
|
1888
|
-
const { collisionFBO, drawToCollisionMap } = moduleParameters;
|
|
1889
|
-
const enabled = collisionEnabled && Boolean(collisionFBO);
|
|
1890
|
-
uniforms.collision_enabled = enabled;
|
|
1891
|
-
if (drawToCollisionMap) {
|
|
1892
|
-
this.props = this.clone(this.props.collisionTestProps).props;
|
|
1893
|
-
}
|
|
1894
|
-
}
|
|
1895
|
-
initializeState(context, extension) {
|
|
1896
|
-
var _a;
|
|
1897
|
-
if (this.getAttributeManager() === null) {
|
|
1898
|
-
return;
|
|
1899
|
-
}
|
|
1900
|
-
(_a = this.context.deck) == null ? void 0 : _a._addDefaultEffect(new CollisionFilterEffect());
|
|
1901
|
-
const attributeManager = this.getAttributeManager();
|
|
1902
|
-
attributeManager.add({
|
|
1903
|
-
collisionPriorities: {
|
|
1904
|
-
size: 1,
|
|
1905
|
-
accessor: "getCollisionPriority",
|
|
1906
|
-
shaderAttributes: {
|
|
1907
|
-
collisionPriorities: { divisor: 0 },
|
|
1908
|
-
instanceCollisionPriorities: { divisor: 1 }
|
|
1909
|
-
}
|
|
1910
|
-
}
|
|
1911
|
-
});
|
|
1912
|
-
}
|
|
1913
|
-
getNeedsPickingBuffer() {
|
|
1914
|
-
return this.props.collisionEnabled;
|
|
1915
|
-
}
|
|
1916
|
-
};
|
|
1917
|
-
var CollisionFilterExtension = _CollisionFilterExtension;
|
|
1918
|
-
(() => {
|
|
1919
|
-
_CollisionFilterExtension.defaultProps = defaultProps6;
|
|
1920
|
-
})();
|
|
1921
|
-
(() => {
|
|
1922
|
-
_CollisionFilterExtension.extensionName = "CollisionFilterExtension";
|
|
1923
|
-
})();
|
|
1924
|
-
|
|
1925
|
-
// dist/mask/mask-extension.js
|
|
1926
|
-
var import_core21 = require("@deck.gl/core");
|
|
1927
|
-
|
|
1928
|
-
// dist/mask/shader-module.js
|
|
1929
|
-
var import_core20 = require("@deck.gl/core");
|
|
1930
|
-
var vs4 = `
|
|
1931
|
-
uniform vec4 mask_bounds;
|
|
1932
|
-
uniform bool mask_maskByInstance;
|
|
1933
|
-
vec2 mask_getCoords(vec4 position) {
|
|
1934
|
-
return (position.xy - mask_bounds.xy) / (mask_bounds.zw - mask_bounds.xy);
|
|
1935
|
-
}
|
|
1936
|
-
`;
|
|
1937
|
-
var fs3 = `
|
|
1938
|
-
uniform sampler2D mask_texture;
|
|
1939
|
-
uniform int mask_channel;
|
|
1940
|
-
uniform bool mask_enabled;
|
|
1941
|
-
uniform bool mask_inverted;
|
|
1942
|
-
bool mask_isInBounds(vec2 texCoords) {
|
|
1943
|
-
if (!mask_enabled) {
|
|
1944
|
-
return true;
|
|
1945
|
-
}
|
|
1946
|
-
vec4 maskColor = texture(mask_texture, texCoords);
|
|
1947
|
-
float maskValue = 1.0;
|
|
1948
|
-
if (mask_channel == 0) {
|
|
1949
|
-
maskValue = maskColor.r;
|
|
1950
|
-
} else if (mask_channel == 1) {
|
|
1951
|
-
maskValue = maskColor.g;
|
|
1952
|
-
} else if (mask_channel == 2) {
|
|
1953
|
-
maskValue = maskColor.b;
|
|
1954
|
-
} else if (mask_channel == 3) {
|
|
1955
|
-
maskValue = maskColor.a;
|
|
1956
|
-
}
|
|
1957
|
-
if (mask_inverted) {
|
|
1958
|
-
return maskValue >= 0.5;
|
|
1959
|
-
} else {
|
|
1960
|
-
return maskValue < 0.5;
|
|
1961
|
-
}
|
|
1962
|
-
}
|
|
1963
|
-
`;
|
|
1964
|
-
var inject5 = {
|
|
1965
|
-
"vs:#decl": `
|
|
1966
|
-
out vec2 mask_texCoords;
|
|
1967
|
-
`,
|
|
1968
|
-
"vs:#main-end": `
|
|
1969
|
-
vec4 mask_common_position;
|
|
1970
|
-
if (mask_maskByInstance) {
|
|
1971
|
-
mask_common_position = project_position(vec4(geometry.worldPosition, 1.0));
|
|
1972
|
-
} else {
|
|
1973
|
-
mask_common_position = geometry.position;
|
|
1974
|
-
}
|
|
1975
|
-
mask_texCoords = mask_getCoords(mask_common_position);
|
|
1976
|
-
`,
|
|
1977
|
-
"fs:#decl": `
|
|
1978
|
-
in vec2 mask_texCoords;
|
|
1979
|
-
`,
|
|
1980
|
-
"fs:#main-start": `
|
|
1981
|
-
if (mask_enabled) {
|
|
1982
|
-
bool mask = mask_isInBounds(mask_texCoords);
|
|
1983
|
-
fragColor = texture(mask_texture, mask_texCoords);
|
|
1984
|
-
if (!mask) discard;
|
|
1985
|
-
}
|
|
1986
|
-
`
|
|
1987
|
-
};
|
|
1988
|
-
var getMaskUniforms = (opts) => {
|
|
1989
|
-
if (opts && "maskMap" in opts) {
|
|
1990
|
-
return {
|
|
1991
|
-
mask_texture: opts.maskMap
|
|
1992
|
-
};
|
|
1993
|
-
}
|
|
1994
|
-
return {};
|
|
1995
|
-
};
|
|
1996
|
-
var shader_module_default3 = {
|
|
1997
|
-
name: "mask",
|
|
1998
|
-
dependencies: [import_core20.project],
|
|
1999
|
-
vs: vs4,
|
|
2000
|
-
fs: fs3,
|
|
2001
|
-
inject: inject5,
|
|
2002
|
-
getUniforms: getMaskUniforms
|
|
2003
2007
|
};
|
|
2004
2008
|
|
|
2005
2009
|
// dist/mask/mask-extension.js
|
|
@@ -2179,12 +2183,13 @@ return;
|
|
|
2179
2183
|
};
|
|
2180
2184
|
|
|
2181
2185
|
// dist/terrain/utils.js
|
|
2182
|
-
var
|
|
2186
|
+
var import_constants2 = require("@luma.gl/constants");
|
|
2183
2187
|
function createRenderTarget(device, opts) {
|
|
2184
2188
|
return device.createFramebuffer({
|
|
2185
2189
|
id: opts.id,
|
|
2186
2190
|
colorAttachments: [
|
|
2187
2191
|
device.createTexture({
|
|
2192
|
+
id: opts.id,
|
|
2188
2193
|
...opts.float && {
|
|
2189
2194
|
format: "rgba32float",
|
|
2190
2195
|
type: 5126
|
|
@@ -2361,8 +2366,15 @@ function intersect(b1, b2) {
|
|
|
2361
2366
|
}
|
|
2362
2367
|
|
|
2363
2368
|
// dist/terrain/terrain-pass.js
|
|
2364
|
-
var import_constants4 = require("@luma.gl/constants");
|
|
2365
2369
|
var import_core23 = require("@deck.gl/core");
|
|
2370
|
+
var TERRAIN_BLENDING = {
|
|
2371
|
+
blendColorOperation: "max",
|
|
2372
|
+
blendColorSrcFactor: "one",
|
|
2373
|
+
blendColorDstFactor: "one",
|
|
2374
|
+
blendAlphaOperation: "max",
|
|
2375
|
+
blendAlphaSrcFactor: "one",
|
|
2376
|
+
blendAlphaDstFactor: "one"
|
|
2377
|
+
};
|
|
2366
2378
|
var TerrainPass = class extends import_core23._LayersPass {
|
|
2367
2379
|
getRenderableLayers(viewport, opts) {
|
|
2368
2380
|
const { layers } = opts;
|
|
@@ -2383,20 +2395,15 @@ var TerrainPass = class extends import_core23._LayersPass {
|
|
|
2383
2395
|
return;
|
|
2384
2396
|
}
|
|
2385
2397
|
target.resize(viewport);
|
|
2386
|
-
this.
|
|
2387
|
-
clearColor: [0, 0, 0, 0],
|
|
2388
|
-
blend: true,
|
|
2389
|
-
blendFunc: [1, 1],
|
|
2390
|
-
blendEquation: 32776,
|
|
2391
|
-
depthTest: false
|
|
2392
|
-
}, () => this.render({
|
|
2398
|
+
this.render({
|
|
2393
2399
|
...opts,
|
|
2394
2400
|
target,
|
|
2395
2401
|
pass: "terrain-height-map",
|
|
2396
2402
|
layers: opts.layers,
|
|
2397
2403
|
viewports: [viewport],
|
|
2398
|
-
effects: []
|
|
2399
|
-
|
|
2404
|
+
effects: [],
|
|
2405
|
+
clearColor: [0, 0, 0, 0]
|
|
2406
|
+
});
|
|
2400
2407
|
}
|
|
2401
2408
|
renderTerrainCover(terrainCover, opts) {
|
|
2402
2409
|
const target = terrainCover.getRenderFramebuffer();
|
|
@@ -2406,17 +2413,23 @@ var TerrainPass = class extends import_core23._LayersPass {
|
|
|
2406
2413
|
}
|
|
2407
2414
|
const layers = terrainCover.filterLayers(opts.layers);
|
|
2408
2415
|
target.resize(viewport);
|
|
2409
|
-
this.
|
|
2410
|
-
clearColor: [0, 0, 0, 0],
|
|
2411
|
-
depthTest: false
|
|
2412
|
-
}, () => this.render({
|
|
2416
|
+
this.render({
|
|
2413
2417
|
...opts,
|
|
2414
2418
|
target,
|
|
2415
2419
|
pass: `terrain-cover-${terrainCover.id}`,
|
|
2416
2420
|
layers,
|
|
2417
2421
|
effects: [],
|
|
2418
|
-
viewports: [viewport]
|
|
2419
|
-
|
|
2422
|
+
viewports: [viewport],
|
|
2423
|
+
clearColor: [0, 0, 0, 0]
|
|
2424
|
+
});
|
|
2425
|
+
}
|
|
2426
|
+
getLayerParameters(layer, layerIndex, viewport) {
|
|
2427
|
+
return {
|
|
2428
|
+
...layer.props.parameters,
|
|
2429
|
+
blend: true,
|
|
2430
|
+
depthTest: false,
|
|
2431
|
+
...layer.props.operation.includes("terrain") && TERRAIN_BLENDING
|
|
2432
|
+
};
|
|
2420
2433
|
}
|
|
2421
2434
|
};
|
|
2422
2435
|
|
|
@@ -2454,9 +2467,7 @@ var TerrainPickingPass = class extends import_core24._PickLayersPass {
|
|
|
2454
2467
|
layers.unshift(terrainLayer);
|
|
2455
2468
|
}
|
|
2456
2469
|
target.resize(viewport);
|
|
2457
|
-
this.
|
|
2458
|
-
depthTest: false
|
|
2459
|
-
}, () => this.render({
|
|
2470
|
+
this.render({
|
|
2460
2471
|
...opts,
|
|
2461
2472
|
pickingFBO: target,
|
|
2462
2473
|
pass: `terrain-cover-picking-${terrainCover.id}`,
|
|
@@ -2466,15 +2477,17 @@ var TerrainPickingPass = class extends import_core24._PickLayersPass {
|
|
|
2466
2477
|
cullRect: void 0,
|
|
2467
2478
|
deviceRect: viewport,
|
|
2468
2479
|
pickZ: false
|
|
2469
|
-
})
|
|
2480
|
+
});
|
|
2470
2481
|
}
|
|
2471
2482
|
getLayerParameters(layer, layerIndex, viewport) {
|
|
2483
|
+
let parameters2;
|
|
2472
2484
|
if (this.drawParameters[layer.id]) {
|
|
2473
|
-
|
|
2485
|
+
parameters2 = this.drawParameters[layer.id];
|
|
2486
|
+
} else {
|
|
2487
|
+
parameters2 = super.getLayerParameters(layer, layerIndex, viewport);
|
|
2488
|
+
parameters2.blend = true;
|
|
2474
2489
|
}
|
|
2475
|
-
|
|
2476
|
-
parameters2.blend = true;
|
|
2477
|
-
return parameters2;
|
|
2490
|
+
return { ...parameters2, depthTest: false };
|
|
2478
2491
|
}
|
|
2479
2492
|
};
|
|
2480
2493
|
|
|
@@ -2557,7 +2570,7 @@ var TerrainEffect = class {
|
|
|
2557
2570
|
this.isDrapingEnabled = false;
|
|
2558
2571
|
this.terrainCovers = /* @__PURE__ */ new Map();
|
|
2559
2572
|
}
|
|
2560
|
-
|
|
2573
|
+
setup({ device, deck }) {
|
|
2561
2574
|
this.dummyHeightMap = device.createTexture({
|
|
2562
2575
|
width: 1,
|
|
2563
2576
|
height: 1,
|
|
@@ -2570,17 +2583,9 @@ var TerrainEffect = class {
|
|
|
2570
2583
|
} else {
|
|
2571
2584
|
import_core25.log.warn("Terrain offset mode is not supported by this browser")();
|
|
2572
2585
|
}
|
|
2573
|
-
|
|
2586
|
+
deck._addDefaultShaderModule(terrainModule);
|
|
2574
2587
|
}
|
|
2575
|
-
preRender(
|
|
2576
|
-
if (!this.dummyHeightMap) {
|
|
2577
|
-
this.initialize(device);
|
|
2578
|
-
for (const layer of opts.layers) {
|
|
2579
|
-
if (layer.props.operation.includes("terrain")) {
|
|
2580
|
-
layer.setChangeFlags({ extensionsChanged: true });
|
|
2581
|
-
}
|
|
2582
|
-
}
|
|
2583
|
-
}
|
|
2588
|
+
preRender(opts) {
|
|
2584
2589
|
if (opts.pickZ) {
|
|
2585
2590
|
this.isDrapingEnabled = false;
|
|
2586
2591
|
return;
|
|
@@ -2616,7 +2621,7 @@ var TerrainEffect = class {
|
|
|
2616
2621
|
terrainSkipRender: terrainDrawMode === "drape" || !layer.props.operation.includes("draw")
|
|
2617
2622
|
};
|
|
2618
2623
|
}
|
|
2619
|
-
cleanup() {
|
|
2624
|
+
cleanup({ deck }) {
|
|
2620
2625
|
if (this.dummyHeightMap) {
|
|
2621
2626
|
this.dummyHeightMap.delete();
|
|
2622
2627
|
this.dummyHeightMap = void 0;
|
|
@@ -2629,6 +2634,7 @@ var TerrainEffect = class {
|
|
|
2629
2634
|
terrainCover.delete();
|
|
2630
2635
|
}
|
|
2631
2636
|
this.terrainCovers.clear();
|
|
2637
|
+
deck._removeDefaultShaderModule(terrainModule);
|
|
2632
2638
|
}
|
|
2633
2639
|
_updateHeightMap(terrainLayers, viewport, opts) {
|
|
2634
2640
|
if (!this.heightMap) {
|