@deck.gl/extensions 9.4.0-beta.1 → 9.4.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dist.dev.js +1281 -120
- package/dist/fill-style/fill-style-extension.d.ts +38 -6
- package/dist/fill-style/fill-style-extension.d.ts.map +1 -1
- package/dist/fill-style/fill-style-extension.js +88 -10
- package/dist/fill-style/fill-style-extension.js.map +1 -1
- package/dist/fill-style/procedural-pattern.d.ts +65 -0
- package/dist/fill-style/procedural-pattern.d.ts.map +1 -0
- package/dist/fill-style/procedural-pattern.js +135 -0
- package/dist/fill-style/procedural-pattern.js.map +1 -0
- package/dist/fill-style/shader-module.d.ts +13 -4
- package/dist/fill-style/shader-module.d.ts.map +1 -1
- package/dist/fill-style/shader-module.js +212 -21
- package/dist/fill-style/shader-module.js.map +1 -1
- package/dist/index.cjs +886 -2702
- package/dist/index.cjs.map +3 -3
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/mask/shader-module.d.ts +1 -0
- package/dist/mask/shader-module.d.ts.map +1 -1
- package/dist/path-style/path-style-extension.d.ts +49 -6
- package/dist/path-style/path-style-extension.d.ts.map +1 -1
- package/dist/path-style/path-style-extension.js +237 -37
- package/dist/path-style/path-style-extension.js.map +1 -1
- package/dist/path-style/shaders.glsl.d.ts +30 -1
- package/dist/path-style/shaders.glsl.d.ts.map +1 -1
- package/dist/path-style/shaders.glsl.js +136 -21
- package/dist/path-style/shaders.glsl.js.map +1 -1
- package/dist/terrain/shader-module.d.ts +1 -0
- package/dist/terrain/shader-module.d.ts.map +1 -1
- package/dist.min.js +377 -98
- package/package.json +7 -7
- package/src/fill-style/fill-style-extension.ts +135 -13
- package/src/fill-style/procedural-pattern.ts +203 -0
- package/src/fill-style/shader-module.ts +233 -23
- package/src/index.ts +10 -1
- package/src/path-style/path-style-extension.ts +350 -44
- package/src/path-style/shaders.glsl.ts +268 -27
|
@@ -1,19 +1,74 @@
|
|
|
1
1
|
// deck.gl
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
|
-
import { LayerExtension, _mergeShaders as mergeShaders } from '@deck.gl/core';
|
|
5
|
-
import { vec3 } from '@math.gl/core';
|
|
4
|
+
import { LayerExtension, WebMercatorViewport, project, _deepEqual as deepEqual, _mergeShaders as mergeShaders } from '@deck.gl/core';
|
|
5
|
+
import { vec3, vec4 } from '@math.gl/core';
|
|
6
6
|
import { dashShaders, offsetShaders, scatterplotDashShaders, textBackgroundDashShaders } from "./shaders.glsl.js";
|
|
7
7
|
const defaultProps = {
|
|
8
8
|
getDashArray: { type: 'accessor', value: [0, 0] },
|
|
9
9
|
getOffset: { type: 'accessor', value: 0 },
|
|
10
10
|
dashJustified: false,
|
|
11
|
-
dashGapPickable: false
|
|
11
|
+
dashGapPickable: false,
|
|
12
|
+
dashUnits: 'widths'
|
|
12
13
|
};
|
|
14
|
+
/** Keep in sync with the branch in the dash vertex shader. */
|
|
15
|
+
const DASH_UNITS = {
|
|
16
|
+
widths: 0,
|
|
17
|
+
pixels: 1,
|
|
18
|
+
meters: 2,
|
|
19
|
+
common: 3
|
|
20
|
+
};
|
|
21
|
+
const PATH_STYLE_ATTRIBUTES = ['instanceDashArrays', 'instanceDashOffsets', 'instanceOffsets'];
|
|
22
|
+
function dashMetricsProjectionPropsChanged({ props, oldProps }) {
|
|
23
|
+
// Data, accessors, and tessellation configuration invalidate through AttributeManager and
|
|
24
|
+
// PathLayer. PathLayer separately tracks viewport projection scale. These are the remaining
|
|
25
|
+
// layer props consumed by the project uniforms used to calculate dash metrics.
|
|
26
|
+
return (!deepEqual(props.modelMatrix, oldProps.modelMatrix, 2) ||
|
|
27
|
+
props.coordinateSystem !== oldProps.coordinateSystem ||
|
|
28
|
+
!deepEqual(props.coordinateOrigin, oldProps.coordinateOrigin, 1));
|
|
29
|
+
}
|
|
30
|
+
function projectRenderedPathPosition(layer, position, projectUniforms) {
|
|
31
|
+
const viewport = layer.context.viewport;
|
|
32
|
+
if (!(viewport instanceof WebMercatorViewport) || viewport.zoom < 12) {
|
|
33
|
+
return layer.projectPosition(position, { autoOffset: false });
|
|
34
|
+
}
|
|
35
|
+
// High-zoom Web Mercator shaders use a center-relative Taylor projection for precision.
|
|
36
|
+
// Layer#projectPosition deliberately returns the exact, viewport-independent projection,
|
|
37
|
+
// so reproduce project_position here to keep CPU phase continuous with each GPU segment.
|
|
38
|
+
const positionWorld = vec4.transformMat4([], [position[0], position[1], position[2] || 0, 1], projectUniforms.modelMatrix);
|
|
39
|
+
const coordinateSystem = layer.props.coordinateSystem === 'default' ? 'lnglat' : layer.props.coordinateSystem;
|
|
40
|
+
if (coordinateSystem === 'lnglat') {
|
|
41
|
+
if (Math.abs(positionWorld[1] - projectUniforms.coordinateOrigin[1]) > 0.25) {
|
|
42
|
+
let longitude = positionWorld[0];
|
|
43
|
+
if (projectUniforms.wrapLongitude) {
|
|
44
|
+
longitude = ((((longitude + 180) % 360) + 360) % 360) - 180;
|
|
45
|
+
}
|
|
46
|
+
const commonPosition = viewport.projectPosition([longitude, positionWorld[1], 0]);
|
|
47
|
+
return [
|
|
48
|
+
commonPosition[0] - projectUniforms.commonOrigin[0],
|
|
49
|
+
commonPosition[1] - projectUniforms.commonOrigin[1],
|
|
50
|
+
positionWorld[2] * projectUniforms.commonUnitsPerMeter[2]
|
|
51
|
+
];
|
|
52
|
+
}
|
|
53
|
+
vec3.sub(positionWorld, positionWorld, projectUniforms.coordinateOrigin);
|
|
54
|
+
}
|
|
55
|
+
else if (coordinateSystem === 'cartesian') {
|
|
56
|
+
vec3.sub(positionWorld, positionWorld, projectUniforms.coordinateOrigin);
|
|
57
|
+
}
|
|
58
|
+
const deltaLatitude = positionWorld[1];
|
|
59
|
+
const scale = vec3.scaleAndAdd([], projectUniforms.commonUnitsPerWorldUnit, projectUniforms.commonUnitsPerWorldUnit2, deltaLatitude);
|
|
60
|
+
return vec3.multiply([], positionWorld, scale);
|
|
61
|
+
}
|
|
13
62
|
/** Adds selected features to the `PathLayer`, `ScatterplotLayer`, `TextBackgroundLayer`, and composite layers that render them. */
|
|
14
63
|
class PathStyleExtension extends LayerExtension {
|
|
15
|
-
constructor({ dash = false, offset = false, highPrecisionDash = false } = {}) {
|
|
16
|
-
|
|
64
|
+
constructor({ dash = false, offset = false, dashMode, highPrecisionDash = false } = {}) {
|
|
65
|
+
const resolvedDashMode = dashMode ?? (highPrecisionDash ? 'path' : 'segment');
|
|
66
|
+
super({
|
|
67
|
+
dash: dash || highPrecisionDash || dashMode !== undefined,
|
|
68
|
+
offset,
|
|
69
|
+
dashMode: resolvedDashMode,
|
|
70
|
+
highPrecisionDash: resolvedDashMode === 'path'
|
|
71
|
+
});
|
|
17
72
|
}
|
|
18
73
|
getLayerType(layer) {
|
|
19
74
|
if ('pathTesselator' in layer.state) {
|
|
@@ -28,6 +83,59 @@ class PathStyleExtension extends LayerExtension {
|
|
|
28
83
|
}
|
|
29
84
|
return null;
|
|
30
85
|
}
|
|
86
|
+
synchronizeAttributes(layer) {
|
|
87
|
+
const attributeManager = layer.getAttributeManager();
|
|
88
|
+
const layerType = this.getLayerType(layer);
|
|
89
|
+
if (!attributeManager || !layerType) {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
const attributes = attributeManager.getAttributes();
|
|
93
|
+
const desiredAttributes = new Set();
|
|
94
|
+
if (this.opts.dash) {
|
|
95
|
+
desiredAttributes.add('instanceDashArrays');
|
|
96
|
+
}
|
|
97
|
+
if (layerType === 'path' && this.opts.dash && this.opts.dashMode === 'path') {
|
|
98
|
+
desiredAttributes.add('instanceDashOffsets');
|
|
99
|
+
}
|
|
100
|
+
if (layerType === 'path' && this.opts.offset) {
|
|
101
|
+
desiredAttributes.add('instanceOffsets');
|
|
102
|
+
}
|
|
103
|
+
let topologyChanged = false;
|
|
104
|
+
for (const attributeName of PATH_STYLE_ATTRIBUTES) {
|
|
105
|
+
if (attributes[attributeName] && !desiredAttributes.has(attributeName)) {
|
|
106
|
+
attributeManager.remove([attributeName]);
|
|
107
|
+
topologyChanged = true;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (desiredAttributes.has('instanceDashArrays') && !attributes.instanceDashArrays) {
|
|
111
|
+
attributeManager.addInstanced({
|
|
112
|
+
instanceDashArrays: { size: 2, accessor: 'getDashArray' }
|
|
113
|
+
});
|
|
114
|
+
topologyChanged = true;
|
|
115
|
+
}
|
|
116
|
+
if (desiredAttributes.has('instanceDashOffsets') && !attributes.instanceDashOffsets) {
|
|
117
|
+
attributeManager.addInstanced({
|
|
118
|
+
instanceDashOffsets: {
|
|
119
|
+
// [distance from the start of the path, total length of the path]
|
|
120
|
+
size: 2,
|
|
121
|
+
// Recalculate from rendered geometry when getPath changes. A binary getPath buffer
|
|
122
|
+
// contains positions, not dash metrics, so keep it as an update trigger rather than
|
|
123
|
+
// binding it directly to this attribute.
|
|
124
|
+
accessor: ['getPath'],
|
|
125
|
+
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
126
|
+
update: this.calculateDashMetrics
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
topologyChanged = true;
|
|
130
|
+
}
|
|
131
|
+
if (desiredAttributes.has('instanceOffsets') && !attributes.instanceOffsets) {
|
|
132
|
+
attributeManager.addInstanced({
|
|
133
|
+
instanceOffsets: { size: 1, accessor: 'getOffset' }
|
|
134
|
+
});
|
|
135
|
+
topologyChanged = true;
|
|
136
|
+
}
|
|
137
|
+
return topologyChanged;
|
|
138
|
+
}
|
|
31
139
|
isEnabled(layer) {
|
|
32
140
|
return this.getLayerType(layer) !== null;
|
|
33
141
|
}
|
|
@@ -57,59 +165,59 @@ class PathStyleExtension extends LayerExtension {
|
|
|
57
165
|
const defines = {};
|
|
58
166
|
if (extension.opts.dash) {
|
|
59
167
|
result = mergeShaders(result, dashShaders);
|
|
60
|
-
|
|
168
|
+
defines.DASH_ENABLED = true;
|
|
169
|
+
if (extension.opts.dashMode === 'path') {
|
|
61
170
|
defines.HIGH_PRECISION_DASH = true;
|
|
62
171
|
}
|
|
63
172
|
}
|
|
64
173
|
if (extension.opts.offset) {
|
|
65
174
|
result = mergeShaders(result, offsetShaders);
|
|
175
|
+
defines.PATH_STYLE_OFFSET = true;
|
|
66
176
|
}
|
|
67
177
|
const { inject } = result;
|
|
68
178
|
const pathStyle = {
|
|
69
179
|
name: 'pathStyle',
|
|
70
|
-
inject
|
|
71
|
-
uniformTypes: {
|
|
72
|
-
dashAlignMode: 'f32',
|
|
73
|
-
dashGapPickable: 'i32'
|
|
74
|
-
}
|
|
180
|
+
inject
|
|
75
181
|
};
|
|
182
|
+
if (extension.opts.dash) {
|
|
183
|
+
pathStyle.uniformTypes = {
|
|
184
|
+
dashAlignMode: 'f32',
|
|
185
|
+
dashGapPickable: 'i32',
|
|
186
|
+
dashUnits: 'i32'
|
|
187
|
+
};
|
|
188
|
+
}
|
|
76
189
|
return {
|
|
77
190
|
modules: [pathStyle],
|
|
78
191
|
defines
|
|
79
192
|
};
|
|
80
193
|
}
|
|
81
194
|
initializeState(context, extension) {
|
|
82
|
-
|
|
83
|
-
const layerType = extension.getLayerType(this);
|
|
84
|
-
if (!attributeManager || !layerType) {
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
if (extension.opts.dash) {
|
|
88
|
-
attributeManager.addInstanced({
|
|
89
|
-
instanceDashArrays: { size: 2, accessor: 'getDashArray' },
|
|
90
|
-
...(layerType === 'path' && extension.opts.highPrecisionDash
|
|
91
|
-
? {
|
|
92
|
-
instanceDashOffsets: {
|
|
93
|
-
size: 1,
|
|
94
|
-
accessor: 'getPath',
|
|
95
|
-
transform: extension.getDashOffsets.bind(this)
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
: {})
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
if (layerType === 'path' && extension.opts.offset) {
|
|
102
|
-
attributeManager.addInstanced({
|
|
103
|
-
instanceOffsets: { size: 1, accessor: 'getOffset' }
|
|
104
|
-
});
|
|
105
|
-
}
|
|
195
|
+
extension.synchronizeAttributes(this);
|
|
106
196
|
}
|
|
107
197
|
updateState(params, extension) {
|
|
108
198
|
if (!extension.isEnabled(this)) {
|
|
109
199
|
return;
|
|
110
200
|
}
|
|
201
|
+
if (params.changeFlags.extensionsChanged) {
|
|
202
|
+
const topologyChanged = extension.synchronizeAttributes(this);
|
|
203
|
+
const attributeManager = this.getAttributeManager();
|
|
204
|
+
if (attributeManager && topologyChanged) {
|
|
205
|
+
// PathLayer recreates its model before extension updateState runs. Refresh the new
|
|
206
|
+
// model's layout after adding or removing extension-owned attributes, then ensure all
|
|
207
|
+
// managed buffers are rebound to the recreated vertex array.
|
|
208
|
+
attributeManager.invalidateAll();
|
|
209
|
+
for (const model of this.getModels()) {
|
|
210
|
+
model.setBufferLayout(attributeManager.getBufferLayouts(model));
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
111
214
|
if (extension.opts.dash) {
|
|
112
215
|
const layerType = extension.getLayerType(this);
|
|
216
|
+
if (layerType === 'path' &&
|
|
217
|
+
extension.opts.dashMode === 'path' &&
|
|
218
|
+
dashMetricsProjectionPropsChanged(params)) {
|
|
219
|
+
this.getAttributeManager()?.invalidate('instanceDashOffsets');
|
|
220
|
+
}
|
|
113
221
|
if (layerType === 'scatterplot' || layerType === 'textBackground') {
|
|
114
222
|
const pathStyleProps = {
|
|
115
223
|
dashGapPickable: Boolean(this.props.dashGapPickable)
|
|
@@ -119,12 +227,104 @@ class PathStyleExtension extends LayerExtension {
|
|
|
119
227
|
else {
|
|
120
228
|
const pathStyleProps = {
|
|
121
229
|
dashAlignMode: this.props.dashJustified ? 1 : 0,
|
|
122
|
-
dashGapPickable: Boolean(this.props.dashGapPickable)
|
|
230
|
+
dashGapPickable: Boolean(this.props.dashGapPickable),
|
|
231
|
+
dashUnits: DASH_UNITS[this.props.dashUnits ?? 'widths']
|
|
123
232
|
};
|
|
124
233
|
this.setShaderModuleProps({ pathStyle: pathStyleProps });
|
|
125
234
|
}
|
|
126
235
|
}
|
|
127
236
|
}
|
|
237
|
+
calculateDashMetrics(attribute, { startRow, endRow }) {
|
|
238
|
+
const pathTesselator = this.state.pathTesselator;
|
|
239
|
+
const vertexStarts = pathTesselator?.vertexStarts;
|
|
240
|
+
const instanceCount = pathTesselator?.instanceCount;
|
|
241
|
+
const packedPositions = pathTesselator?.get('positions');
|
|
242
|
+
if (!vertexStarts ||
|
|
243
|
+
instanceCount === undefined ||
|
|
244
|
+
typeof pathTesselator?.getPathSegmentIndices !== 'function') {
|
|
245
|
+
throw new Error('PathStyleExtension requires PathLayer tessellation data for path dashes.');
|
|
246
|
+
}
|
|
247
|
+
const binaryPath = this.props.data?.attributes?.getPath;
|
|
248
|
+
const binaryValue = ArrayBuffer.isView(binaryPath) ? binaryPath : binaryPath?.value;
|
|
249
|
+
const hasReadableBinaryPath = ArrayBuffer.isView(binaryValue);
|
|
250
|
+
// With `_pathType`, WebGL binds binary positions directly and the tesselator's allocated
|
|
251
|
+
// positions array is only a zero-filled placeholder. WebGPU materializes packed neighboring
|
|
252
|
+
// positions when the binary source is CPU-readable; GPU-only sources are rejected below.
|
|
253
|
+
const usePackedPositions = packedPositions && (!binaryPath || pathTesselator.normalize || pathTesselator.opts?.isWebGPU);
|
|
254
|
+
if ((binaryPath && !hasReadableBinaryPath) || (!usePackedPositions && !hasReadableBinaryPath)) {
|
|
255
|
+
throw new Error('PathStyleExtension cannot calculate whole-path dash metrics from GPU-only getPath data; ' +
|
|
256
|
+
'supply data.attributes.instanceDashOffsets.');
|
|
257
|
+
}
|
|
258
|
+
const output = attribute.value;
|
|
259
|
+
const metricSize = attribute.size;
|
|
260
|
+
const firstRow = Math.max(0, startRow);
|
|
261
|
+
const lastRow = Math.min(endRow, vertexStarts.length - 1);
|
|
262
|
+
let binarySize = 3;
|
|
263
|
+
let binaryStride = 3;
|
|
264
|
+
let binaryOffset = 0;
|
|
265
|
+
if (!usePackedPositions) {
|
|
266
|
+
const bytesPerElement = binaryValue.BYTES_PER_ELEMENT;
|
|
267
|
+
binarySize = binaryPath?.size || (this.props.positionFormat === 'XY' ? 2 : 3);
|
|
268
|
+
binaryStride = binaryPath?.stride ? binaryPath.stride / bytesPerElement : binarySize;
|
|
269
|
+
binaryOffset = binaryPath?.offset ? binaryPath.offset / bytesPerElement : 0;
|
|
270
|
+
}
|
|
271
|
+
const sourcePosition = new Array(3);
|
|
272
|
+
const projectUniforms = project.getUniforms({
|
|
273
|
+
viewport: this.context.viewport,
|
|
274
|
+
modelMatrix: this.props.modelMatrix,
|
|
275
|
+
coordinateSystem: this.props.coordinateSystem,
|
|
276
|
+
coordinateOrigin: this.props.coordinateOrigin,
|
|
277
|
+
// PathLayer normalizes/cuts wrapped paths on the CPU; its shader never wraps again.
|
|
278
|
+
autoWrapLongitude: this.wrapLongitude
|
|
279
|
+
});
|
|
280
|
+
const readPosition = (vertexIndex) => {
|
|
281
|
+
if (usePackedPositions) {
|
|
282
|
+
sourcePosition[0] = packedPositions[vertexIndex * 3];
|
|
283
|
+
sourcePosition[1] = packedPositions[vertexIndex * 3 + 1];
|
|
284
|
+
sourcePosition[2] = packedPositions[vertexIndex * 3 + 2];
|
|
285
|
+
}
|
|
286
|
+
else {
|
|
287
|
+
const sourceIndex = binaryOffset + vertexIndex * binaryStride;
|
|
288
|
+
sourcePosition[0] = binaryValue[sourceIndex];
|
|
289
|
+
sourcePosition[1] = binaryValue[sourceIndex + 1];
|
|
290
|
+
sourcePosition[2] = binarySize === 3 ? binaryValue[sourceIndex + 2] : 0;
|
|
291
|
+
}
|
|
292
|
+
return sourcePosition;
|
|
293
|
+
};
|
|
294
|
+
attribute.startIndices = vertexStarts;
|
|
295
|
+
for (let row = firstRow; row < lastRow; row++) {
|
|
296
|
+
const rowStart = vertexStarts[row];
|
|
297
|
+
const rowEnd = Math.min(vertexStarts[row + 1] ?? instanceCount, instanceCount);
|
|
298
|
+
output.fill(0, rowStart * metricSize, rowEnd * metricSize);
|
|
299
|
+
const validSegments = pathTesselator.getPathSegmentIndices(row);
|
|
300
|
+
let phase = 0;
|
|
301
|
+
let previousSegment = -2;
|
|
302
|
+
let previousEnd = null;
|
|
303
|
+
for (const segmentIndex of validSegments) {
|
|
304
|
+
const outputIndex = segmentIndex * metricSize;
|
|
305
|
+
output[outputIndex] = phase;
|
|
306
|
+
const start = segmentIndex === previousSegment + 1 && previousEnd
|
|
307
|
+
? previousEnd
|
|
308
|
+
: projectRenderedPathPosition(this, readPosition(segmentIndex), projectUniforms);
|
|
309
|
+
const end = projectRenderedPathPosition(this, readPosition(segmentIndex + 1), projectUniforms);
|
|
310
|
+
phase += vec3.dist(start, end);
|
|
311
|
+
previousSegment = segmentIndex;
|
|
312
|
+
previousEnd = end;
|
|
313
|
+
}
|
|
314
|
+
if (metricSize > 1) {
|
|
315
|
+
for (let vertexIndex = rowStart; vertexIndex < rowEnd; vertexIndex++) {
|
|
316
|
+
output[vertexIndex * metricSize + 1] = phase;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Calculates the distance from the start of a path to each rendered segment.
|
|
323
|
+
*
|
|
324
|
+
* The final entry is zero because PathLayer reserves the final vertex as invalid padding.
|
|
325
|
+
* This scalar return shape is retained for compatibility; path-mode rendering uses an
|
|
326
|
+
* internal attribute containing both each segment offset and the total path length.
|
|
327
|
+
*/
|
|
128
328
|
getDashOffsets(path) {
|
|
129
329
|
const result = [0];
|
|
130
330
|
const positionSize = this.props.positionFormat === 'XY' ? 2 : 3;
|
|
@@ -134,7 +334,7 @@ class PathStyleExtension extends LayerExtension {
|
|
|
134
334
|
let prevP;
|
|
135
335
|
for (let i = 0; i < geometrySize - 1; i++) {
|
|
136
336
|
p = isNested ? path[i] : path.slice(i * positionSize, i * positionSize + positionSize);
|
|
137
|
-
p = this.projectPosition(p);
|
|
337
|
+
p = this.projectPosition(p, { autoOffset: false });
|
|
138
338
|
if (i > 0) {
|
|
139
339
|
result[i] = result[i - 1] + vec3.dist(prevP, p);
|
|
140
340
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-style-extension.js","sourceRoot":"","sources":["../../src/path-style/path-style-extension.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"path-style-extension.js","sourceRoot":"","sources":["../../src/path-style/path-style-extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dash shader injections for PathLayer, ScatterplotLayer and TextBackgroundLayer.
|
|
3
|
+
*
|
|
4
|
+
* PathLayer dash math crosses three coordinate spaces:
|
|
5
|
+
*
|
|
6
|
+
* 1. **Common space** — the private metric updater accumulates distance over normalized
|
|
7
|
+
* PathTessellator geometry, and `instanceDashOffsets` carries it to the shader. The public
|
|
8
|
+
* scalar `getDashOffsets` helper remains available for compatibility but does not back the
|
|
9
|
+
* managed attribute.
|
|
10
|
+
* 2. **Screen pixels** — the common basis for reconciling flat and billboard extrusion.
|
|
11
|
+
* At the dash injection point, `width` is in common units for a flat path but pixels for
|
|
12
|
+
* a billboarded path, whose conversion also includes `project.focalDistance`.
|
|
13
|
+
* `dashWidthPixels` is correct in both branches.
|
|
14
|
+
* 3. **Half-widths along the path** — the units of `vPathPosition.y`, tested by the fragment
|
|
15
|
+
* shader. One unit spans `dashWidthPixels` screen pixels.
|
|
16
|
+
*
|
|
17
|
+
* Convert explicitly whenever a value crosses these spaces. Mixing them directly makes dash
|
|
18
|
+
* period or phase depend on billboard, elevation, or offset configuration.
|
|
19
|
+
*/
|
|
1
20
|
export type Defines = {
|
|
2
21
|
/**
|
|
3
22
|
* Enable high precision dash rendering.
|
|
4
23
|
*/
|
|
5
24
|
HIGH_PRECISION_DASH?: boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Set whenever the dash shaders are injected, so that the offset shaders can adjust dash
|
|
27
|
+
* varyings only when they actually exist.
|
|
28
|
+
*/
|
|
29
|
+
DASH_ENABLED?: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Set when PathStyleExtension offset shaders remap the path-width coordinate.
|
|
32
|
+
*/
|
|
33
|
+
PATH_STYLE_OFFSET?: boolean;
|
|
6
34
|
};
|
|
7
35
|
export declare const dashShaders: {
|
|
8
36
|
inject: {
|
|
@@ -10,6 +38,7 @@ export declare const dashShaders: {
|
|
|
10
38
|
'vs:#main-end': string;
|
|
11
39
|
'fs:#decl': string;
|
|
12
40
|
'fs:#main-start': string;
|
|
41
|
+
'fs:#main-end': string;
|
|
13
42
|
};
|
|
14
43
|
};
|
|
15
44
|
export declare const scatterplotDashShaders: {
|
|
@@ -35,7 +64,7 @@ export declare const offsetShaders: {
|
|
|
35
64
|
'vs:#decl': string;
|
|
36
65
|
'vs:DECKGL_FILTER_SIZE': string;
|
|
37
66
|
'vs:#main-end': string;
|
|
38
|
-
'fs:#main-
|
|
67
|
+
'fs:#main-end': string;
|
|
39
68
|
};
|
|
40
69
|
};
|
|
41
70
|
//# sourceMappingURL=shaders.glsl.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shaders.glsl.d.ts","sourceRoot":"","sources":["../../src/path-style/shaders.glsl.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,OAAO,GAAG;IAEpB;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"shaders.glsl.d.ts","sourceRoot":"","sources":["../../src/path-style/shaders.glsl.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,OAAO,GAAG;IAEpB;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,WAAW;;;;;;;;CAoQvB,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;CAwDlC,CAAC;AAEF,eAAO,MAAM,yBAAyB;;;;;;;;CAyJrC,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;CAqDzB,CAAC"}
|
|
@@ -6,26 +6,68 @@ export const dashShaders = {
|
|
|
6
6
|
'vs:#decl': `
|
|
7
7
|
in vec2 instanceDashArrays;
|
|
8
8
|
#ifdef HIGH_PRECISION_DASH
|
|
9
|
-
in
|
|
9
|
+
in vec2 instanceDashOffsets;
|
|
10
10
|
#endif
|
|
11
11
|
out vec2 vDashArray;
|
|
12
12
|
out float vDashOffset;
|
|
13
|
+
out float vDashPathLength;
|
|
14
|
+
layout(std140) uniform pathStyleUniforms {
|
|
15
|
+
float dashAlignMode;
|
|
16
|
+
bool dashGapPickable;
|
|
17
|
+
highp int dashUnits;
|
|
18
|
+
} pathStyle;
|
|
13
19
|
`,
|
|
14
20
|
'vs:#main-end': `
|
|
15
|
-
|
|
21
|
+
float dashWidthPixels = path.billboard
|
|
22
|
+
? width.x * project.focalDistance
|
|
23
|
+
: width.x * project.scale;
|
|
24
|
+
float strokeHalfWidthPixels = path.billboard ? width.x : width.x * project.scale;
|
|
25
|
+
float dashUnitPixels = strokeHalfWidthPixels;
|
|
26
|
+
if (pathStyle.dashUnits == 1) {
|
|
27
|
+
dashUnitPixels = 1.0;
|
|
28
|
+
} else if (pathStyle.dashUnits == 2) {
|
|
29
|
+
dashUnitPixels = project_size_to_pixel(1.0);
|
|
30
|
+
} else if (pathStyle.dashUnits == 3) {
|
|
31
|
+
dashUnitPixels = project.scale;
|
|
32
|
+
}
|
|
33
|
+
vDashArray = instanceDashArrays * (dashUnitPixels / dashWidthPixels);
|
|
16
34
|
#ifdef HIGH_PRECISION_DASH
|
|
17
|
-
|
|
35
|
+
vec2 dashOffsetAndLength = (instanceDashOffsets * project.scale) / dashWidthPixels;
|
|
36
|
+
vDashPathLength = dashOffsetAndLength.y;
|
|
37
|
+
float dashUnitLength = vDashArray.x + vDashArray.y;
|
|
38
|
+
float dashPeriod = pathStyle.dashAlignMode == 0.0
|
|
39
|
+
? dashUnitLength
|
|
40
|
+
: vDashPathLength / max(round(vDashPathLength / max(dashUnitLength, 0.0001)), 1.0);
|
|
41
|
+
vDashOffset = dashPeriod > 0.0 ? mod(dashOffsetAndLength.x, dashPeriod) : 0.0;
|
|
18
42
|
#else
|
|
19
43
|
vDashOffset = 0.0;
|
|
44
|
+
vDashPathLength = 0.0;
|
|
20
45
|
#endif
|
|
21
46
|
`,
|
|
22
47
|
'fs:#decl': `
|
|
23
48
|
layout(std140) uniform pathStyleUniforms {
|
|
24
49
|
float dashAlignMode;
|
|
25
50
|
bool dashGapPickable;
|
|
51
|
+
highp int dashUnits;
|
|
26
52
|
} pathStyle;
|
|
27
53
|
in vec2 vDashArray;
|
|
28
54
|
in float vDashOffset;
|
|
55
|
+
in float vDashPathLength;
|
|
56
|
+
float dashPatternIntegral(float position, float solidLength, float unitLength) {
|
|
57
|
+
return floor(position / unitLength) * solidLength +
|
|
58
|
+
min(mod(position, unitLength), solidLength);
|
|
59
|
+
}
|
|
60
|
+
float dashPatternCoverage(
|
|
61
|
+
float position,
|
|
62
|
+
float solidLength,
|
|
63
|
+
float unitLength,
|
|
64
|
+
float filterWidth
|
|
65
|
+
) {
|
|
66
|
+
float halfFilter = 0.5 * filterWidth;
|
|
67
|
+
float reducedPosition = mod(position, unitLength);
|
|
68
|
+
return (dashPatternIntegral(reducedPosition + halfFilter, solidLength, unitLength) -
|
|
69
|
+
dashPatternIntegral(reducedPosition - halfFilter, solidLength, unitLength)) / filterWidth;
|
|
70
|
+
}
|
|
29
71
|
`,
|
|
30
72
|
// if given position is in the gap part of the dashed line
|
|
31
73
|
// dashArray.x: solid stroke length, relative to width
|
|
@@ -36,36 +78,90 @@ in float vDashOffset;
|
|
|
36
78
|
// 1 - stretch to fit, draw half dash at each end for nicer joints
|
|
37
79
|
// o-- ---- ---- ---- --o-- --o-- ---- --o
|
|
38
80
|
'fs:#main-start': `
|
|
81
|
+
float dashCoverage = 1.0;
|
|
82
|
+
bool shouldDiscardDash = false;
|
|
83
|
+
bool inRoundedDashGap = false;
|
|
84
|
+
float roundedDashResolvedCoverage = 1.0;
|
|
85
|
+
float roundedDashSubPixelBlend = 0.0;
|
|
86
|
+
float roundedDashDutyCycle = 1.0;
|
|
39
87
|
float solidLength = vDashArray.x;
|
|
40
88
|
float gapLength = vDashArray.y;
|
|
41
89
|
float unitLength = solidLength + gapLength;
|
|
90
|
+
if (unitLength > 0.0 && gapLength > 0.0) {
|
|
42
91
|
float offset;
|
|
43
|
-
if (unitLength > 0.0) {
|
|
44
92
|
if (pathStyle.dashAlignMode == 0.0) {
|
|
45
93
|
offset = vDashOffset;
|
|
46
94
|
} else {
|
|
47
|
-
|
|
95
|
+
#ifdef HIGH_PRECISION_DASH
|
|
96
|
+
unitLength = vDashPathLength / max(round(vDashPathLength / unitLength), 1.0);
|
|
97
|
+
#else
|
|
98
|
+
unitLength = vPathLength / max(round(vPathLength / unitLength), 1.0);
|
|
99
|
+
#endif
|
|
100
|
+
solidLength = min(solidLength, unitLength);
|
|
48
101
|
offset = solidLength / 2.0;
|
|
102
|
+
#ifdef HIGH_PRECISION_DASH
|
|
103
|
+
offset += vDashOffset;
|
|
104
|
+
#endif
|
|
49
105
|
}
|
|
50
|
-
float
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
if (
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
float distToEnd = length(vec2(
|
|
106
|
+
float alongPath = vPathPosition.y + offset;
|
|
107
|
+
float unitOffset = mod(alongPath, unitLength);
|
|
108
|
+
float filterWidth = max(fwidth(alongPath), 0.0001);
|
|
109
|
+
if (bool(picking.isActive)) {
|
|
110
|
+
bool inGap = unitOffset > solidLength;
|
|
111
|
+
if (inGap && path.capType > 0.5) {
|
|
112
|
+
inGap = length(vec2(
|
|
58
113
|
min(unitOffset - solidLength, unitLength - unitOffset),
|
|
59
114
|
vPathPosition.x
|
|
60
|
-
));
|
|
61
|
-
if (distToEnd > 1.0) {
|
|
62
|
-
if (!(pathStyle.dashGapPickable && bool(picking.isActive))) {
|
|
63
|
-
discard;
|
|
115
|
+
)) > 1.0;
|
|
64
116
|
}
|
|
117
|
+
if (inGap && !pathStyle.dashGapPickable) {
|
|
118
|
+
shouldDiscardDash = true;
|
|
65
119
|
}
|
|
120
|
+
} else if (path.capType <= 0.5) {
|
|
121
|
+
dashCoverage = dashPatternCoverage(alongPath, solidLength, unitLength, filterWidth);
|
|
122
|
+
} else {
|
|
123
|
+
float distanceAlongGap = min(unitOffset - solidLength, unitLength - unitOffset);
|
|
124
|
+
float distanceToEnd = length(vec2(max(distanceAlongGap, 0.0), vPathPosition.x));
|
|
125
|
+
float capEdgePixels = (1.0 - distanceToEnd) / max(fwidth(distanceToEnd), 1e-6);
|
|
126
|
+
if (distanceAlongGap > 0.0) {
|
|
127
|
+
inRoundedDashGap = true;
|
|
128
|
+
roundedDashResolvedCoverage = smoothedge(0.0, capEdgePixels);
|
|
129
|
+
dashCoverage = roundedDashResolvedCoverage;
|
|
66
130
|
}
|
|
131
|
+
float subPixelBlend = smoothstep(unitLength, 2.0 * unitLength, filterWidth);
|
|
132
|
+
roundedDashSubPixelBlend = subPixelBlend;
|
|
133
|
+
float boundedSolidLength = min(solidLength, unitLength);
|
|
134
|
+
float effectiveGap = max(unitLength - boundedSolidLength, 0.0);
|
|
135
|
+
float capSpan = 2.0 * sqrt(max(1.0 - vPathPosition.x * vPathPosition.x, 0.0));
|
|
136
|
+
float roundedDutyCycle = clamp(
|
|
137
|
+
(boundedSolidLength + min(effectiveGap, capSpan)) / unitLength,
|
|
138
|
+
0.0,
|
|
139
|
+
1.0
|
|
140
|
+
);
|
|
141
|
+
roundedDashDutyCycle = roundedDutyCycle;
|
|
142
|
+
dashCoverage = mix(dashCoverage, roundedDutyCycle, subPixelBlend);
|
|
67
143
|
}
|
|
144
|
+
dashCoverage = clamp(dashCoverage, 0.0, 1.0);
|
|
145
|
+
shouldDiscardDash = shouldDiscardDash || dashCoverage <= 0.0;
|
|
146
|
+
}
|
|
147
|
+
`,
|
|
148
|
+
'fs:#main-end': `
|
|
149
|
+
#ifdef ANTIALIASING
|
|
150
|
+
if (inRoundedDashGap) {
|
|
151
|
+
float pathCoverage = smoothedge(0.0, edgePixels);
|
|
152
|
+
float resolvedCapMultiplier =
|
|
153
|
+
min(pathCoverage, roundedDashResolvedCoverage) / max(pathCoverage, 1e-6);
|
|
154
|
+
dashCoverage = mix(
|
|
155
|
+
resolvedCapMultiplier,
|
|
156
|
+
roundedDashDutyCycle,
|
|
157
|
+
roundedDashSubPixelBlend
|
|
158
|
+
);
|
|
159
|
+
}
|
|
160
|
+
#endif
|
|
161
|
+
if (shouldDiscardDash) {
|
|
162
|
+
discard;
|
|
68
163
|
}
|
|
164
|
+
fragColor.a *= dashCoverage;
|
|
69
165
|
`
|
|
70
166
|
}
|
|
71
167
|
};
|
|
@@ -266,13 +362,32 @@ float offsetDir = sign(instanceOffsets);
|
|
|
266
362
|
vPathPosition.x = (vPathPosition.x + offsetDir) * offsetWidth - offsetDir;
|
|
267
363
|
vPathPosition.y *= offsetWidth;
|
|
268
364
|
vPathLength *= offsetWidth;
|
|
365
|
+
#ifdef DASH_ENABLED
|
|
366
|
+
if (pathStyle.dashUnits != 0) {
|
|
367
|
+
vDashArray *= offsetWidth;
|
|
368
|
+
}
|
|
369
|
+
vPathBounds *= offsetWidth;
|
|
370
|
+
#ifdef HIGH_PRECISION_DASH
|
|
371
|
+
vDashPathLength *= offsetWidth;
|
|
372
|
+
float restoredDashUnitLength = vDashArray.x + vDashArray.y;
|
|
373
|
+
float restoredDashPeriod = pathStyle.dashAlignMode == 0.0
|
|
374
|
+
? restoredDashUnitLength
|
|
375
|
+
: vDashPathLength /
|
|
376
|
+
max(round(vDashPathLength / max(restoredDashUnitLength, 0.0001)), 1.0);
|
|
377
|
+
vDashOffset = restoredDashPeriod > 0.0
|
|
378
|
+
? mod(dashOffsetAndLength.x * offsetWidth, restoredDashPeriod)
|
|
379
|
+
: 0.0;
|
|
380
|
+
#else
|
|
381
|
+
vDashOffset *= offsetWidth;
|
|
382
|
+
#endif
|
|
383
|
+
#endif
|
|
269
384
|
`,
|
|
270
|
-
'fs:#main-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
if (isInside == 0.0) {
|
|
385
|
+
'fs:#main-end': `
|
|
386
|
+
#ifndef ANTIALIASING
|
|
387
|
+
if (abs(vPathPosition.x) > 1.0) {
|
|
274
388
|
discard;
|
|
275
389
|
}
|
|
390
|
+
#endif
|
|
276
391
|
`
|
|
277
392
|
}
|
|
278
393
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shaders.glsl.js","sourceRoot":"","sources":["../../src/path-style/shaders.glsl.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;
|
|
1
|
+
{"version":3,"file":"shaders.glsl.js","sourceRoot":"","sources":["../../src/path-style/shaders.glsl.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAsCpC,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,MAAM,EAAE;QACN,UAAU;;;;;;;;;;;;;CAkBb;QAEG,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;CAwDjB;QAEG,UAAU;;;;;;;;;;;;;;;;;;;;;;;;CA0Cb;QAEG,0DAA0D;QAC1D,sDAAsD;QACtD,6CAA6C;QAC7C,aAAa;QACb,oBAAoB;QACpB,mEAAmE;QACnE,kEAAkE;QAClE,mEAAmE;QACnE,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoGnB;QAEG,cAAc;;;;;;;;;;;;;;;;;CAwBjB;KACE;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,MAAM,EAAE;QACN,UAAU,EAAE;;;CAGf;QAEG,cAAc,EAAE;;CAEnB;QAEG,UAAU;;;;;;CAQb;QAEG,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;CAwBnB;QAEG,cAAc;;;;;;;CAOjB;KACE;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,MAAM,EAAE;QACN,UAAU,EAAE;;;CAGf;QAEG,cAAc,EAAE;;CAEnB;QAEG,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkGb;QAEG,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BnB;QAEG,cAAc;;;;;;;CAOjB;KACE;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,MAAM,EAAE;QACN,UAAU,EAAE;;CAEf;QACG,uBAAuB;;;CAG1B;QACG,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;CAgCjB;QACG,cAAc;;;;;;CASjB;KACE;CACF,CAAC"}
|