@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,14 +1,16 @@
|
|
|
1
1
|
import { LayerExtension } from '@deck.gl/core';
|
|
2
|
-
import
|
|
2
|
+
import { type ProceduralPatternMapping } from "./procedural-pattern.js";
|
|
3
|
+
import type { Layer, LayerContext, Color, DefaultProps, Accessor, AccessorFunction, TextureSource, Unit, UpdateParameters } from '@deck.gl/core';
|
|
4
|
+
import type { Texture } from '@luma.gl/core';
|
|
3
5
|
export type FillStyleExtensionProps<DataT = any> = {
|
|
4
6
|
/** Cheap toggle to enable/disable pattern fill. Requires the `pattern` option to be on.
|
|
5
7
|
* @default true
|
|
6
8
|
*/
|
|
7
9
|
fillPatternEnabled?: boolean;
|
|
8
|
-
/** Sprite image url or texture that packs all your patterns into one layout. */
|
|
10
|
+
/** Sprite image url or texture that packs all your patterns into one layout. Ignored for procedural patterns. */
|
|
9
11
|
fillPatternAtlas?: string | TextureSource;
|
|
10
|
-
/** Pattern names mapped to
|
|
11
|
-
fillPatternMapping?: string | Record<string, {
|
|
12
|
+
/** Pattern names mapped to atlas frames or procedural definitions, or a URL to a JSON file. */
|
|
13
|
+
fillPatternMapping?: string | ProceduralPatternMapping | Record<string, {
|
|
12
14
|
/** Left position of the pattern on the atlas */
|
|
13
15
|
x: number;
|
|
14
16
|
/** Top position of the pattern on the atlas */
|
|
@@ -23,9 +25,19 @@ export type FillStyleExtensionProps<DataT = any> = {
|
|
|
23
25
|
* @default true
|
|
24
26
|
*/
|
|
25
27
|
fillPatternMask?: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* The units of the pattern size, one of `'meters'`, `'common'` and `'pixels'`. A 24 x 24 pixel
|
|
30
|
+
* pattern at scale `1` covers 24 units of the chosen unit.
|
|
31
|
+
*
|
|
32
|
+
* With `'meters'` (the default) the pattern is anchored to the ground and zooms with the map.
|
|
33
|
+
* With `'pixels'` it keeps a constant size on screen instead, re-anchored at each integer zoom
|
|
34
|
+
* level so that the tiling is stable while zooming within a level.
|
|
35
|
+
* @default 'meters'
|
|
36
|
+
*/
|
|
37
|
+
fillPatternSizeUnits?: Unit;
|
|
26
38
|
/** Accessor for the name of the pattern. */
|
|
27
39
|
getFillPattern?: AccessorFunction<DataT, string>;
|
|
28
|
-
/** Accessor for the scale of the pattern, relative to
|
|
40
|
+
/** Accessor for the scale of the pattern, relative to its dimensions in `fillPatternSizeUnits`.
|
|
29
41
|
* @default 1
|
|
30
42
|
*/
|
|
31
43
|
getFillPatternScale?: Accessor<DataT, number>;
|
|
@@ -34,18 +46,29 @@ export type FillStyleExtensionProps<DataT = any> = {
|
|
|
34
46
|
* @default [0, 0]
|
|
35
47
|
*/
|
|
36
48
|
getFillPatternOffset?: Accessor<DataT, Readonly<[number, number]>>;
|
|
49
|
+
/**
|
|
50
|
+
* Accessor for the color filled behind the pattern. The pattern is composited on top of it, so
|
|
51
|
+
* the background is visible wherever the pattern is transparent. Fully transparent by default,
|
|
52
|
+
* which leaves the area behind the pattern unfilled.
|
|
53
|
+
* @default [0, 0, 0, 0]
|
|
54
|
+
*/
|
|
55
|
+
getFillPatternBackgroundColor?: Accessor<DataT, Color>;
|
|
37
56
|
};
|
|
38
57
|
export type FillStyleExtensionOptions = {
|
|
39
58
|
/** If `true`, adds the ability to tile the filled area with a pattern.
|
|
40
59
|
* @default false
|
|
41
60
|
*/
|
|
42
61
|
pattern: boolean;
|
|
62
|
+
/** If `true`, generates patterns in the fragment shader instead of sampling an image atlas.
|
|
63
|
+
* @default false
|
|
64
|
+
*/
|
|
65
|
+
proceduralPattern: boolean;
|
|
43
66
|
};
|
|
44
67
|
/** Adds selected features to layers that render a "fill", such as the `PolygonLayer` and `ScatterplotLayer`. */
|
|
45
68
|
export default class FillStyleExtension extends LayerExtension<FillStyleExtensionOptions> {
|
|
46
69
|
static defaultProps: DefaultProps<FillStyleExtensionProps<any>>;
|
|
47
70
|
static extensionName: string;
|
|
48
|
-
constructor({ pattern }?: Partial<FillStyleExtensionOptions>);
|
|
71
|
+
constructor({ pattern, proceduralPattern }?: Partial<FillStyleExtensionOptions>);
|
|
49
72
|
isEnabled(layer: Layer<FillStyleExtensionProps>): boolean;
|
|
50
73
|
getShaders(this: Layer<FillStyleExtensionProps>, extension: this): any;
|
|
51
74
|
initializeState(this: Layer<FillStyleExtensionProps>, context: LayerContext, extension: this): void;
|
|
@@ -53,5 +76,14 @@ export default class FillStyleExtension extends LayerExtension<FillStyleExtensio
|
|
|
53
76
|
draw(this: Layer<FillStyleExtensionProps>, params: any, extension: this): void;
|
|
54
77
|
finalizeState(this: Layer<FillStyleExtensionProps>): void;
|
|
55
78
|
getPatternFrame(this: Layer<FillStyleExtensionProps>, name: string): any[];
|
|
79
|
+
/**
|
|
80
|
+
* Returns common frame into which all patterns fit as integer multiples
|
|
81
|
+
*/
|
|
82
|
+
getCommonFrame(props: FillStyleExtensionProps): [number, number] | null;
|
|
83
|
+
getProceduralPatternIndex(this: Layer<FillStyleExtensionProps>, name: string): number[];
|
|
84
|
+
createProceduralPatternTexture(this: Layer<FillStyleExtensionProps>, mapping: ProceduralPatternMapping): {
|
|
85
|
+
proceduralPatternIndices: ReadonlyMap<string, number>;
|
|
86
|
+
proceduralPatternTexture: Texture;
|
|
87
|
+
};
|
|
56
88
|
}
|
|
57
89
|
//# sourceMappingURL=fill-style-extension.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fill-style-extension.d.ts","sourceRoot":"","sources":["../../src/fill-style/fill-style-extension.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,cAAc,EAAC,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"fill-style-extension.d.ts","sourceRoot":"","sources":["../../src/fill-style/fill-style-extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,24 +3,36 @@
|
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
import { LayerExtension } from '@deck.gl/core';
|
|
5
5
|
import { patternShaders } from "./shader-module.js";
|
|
6
|
+
import { packProceduralPatterns, PROCEDURAL_PATTERN_TEXTURE_FORMAT } from "./procedural-pattern.js";
|
|
7
|
+
function leastCommonMultiple(a, b) {
|
|
8
|
+
if (!Number.isInteger(b) || b <= 0)
|
|
9
|
+
return 0;
|
|
10
|
+
if (a === 0)
|
|
11
|
+
return b;
|
|
12
|
+
let [x, y] = [a, b];
|
|
13
|
+
while (y > 0)
|
|
14
|
+
[x, y] = [y, x % y];
|
|
15
|
+
return (a / x) * b;
|
|
16
|
+
}
|
|
6
17
|
const defaultProps = {
|
|
7
18
|
fillPatternEnabled: true,
|
|
8
19
|
fillPatternAtlas: {
|
|
9
20
|
type: 'image',
|
|
10
21
|
value: null,
|
|
11
|
-
async: true
|
|
12
|
-
parameters: { lodMaxClamp: 0 }
|
|
22
|
+
async: true
|
|
13
23
|
},
|
|
14
24
|
fillPatternMapping: { type: 'object', value: {}, async: true },
|
|
15
25
|
fillPatternMask: true,
|
|
26
|
+
fillPatternSizeUnits: 'meters',
|
|
16
27
|
getFillPattern: { type: 'accessor', value: d => d.pattern },
|
|
17
28
|
getFillPatternScale: { type: 'accessor', value: 1 },
|
|
18
|
-
getFillPatternOffset: { type: 'accessor', value: [0, 0] }
|
|
29
|
+
getFillPatternOffset: { type: 'accessor', value: [0, 0] },
|
|
30
|
+
getFillPatternBackgroundColor: { type: 'accessor', value: [0, 0, 0, 0] }
|
|
19
31
|
};
|
|
20
32
|
/** Adds selected features to layers that render a "fill", such as the `PolygonLayer` and `ScatterplotLayer`. */
|
|
21
33
|
class FillStyleExtension extends LayerExtension {
|
|
22
|
-
constructor({ pattern = false } = {}) {
|
|
23
|
-
super({ pattern });
|
|
34
|
+
constructor({ pattern = false, proceduralPattern = false } = {}) {
|
|
35
|
+
super({ pattern: pattern || proceduralPattern, proceduralPattern });
|
|
24
36
|
}
|
|
25
37
|
isEnabled(layer) {
|
|
26
38
|
return layer.getAttributeManager() !== null && !('pathTesselator' in layer.state);
|
|
@@ -44,7 +56,9 @@ class FillStyleExtension extends LayerExtension {
|
|
|
44
56
|
size: 4,
|
|
45
57
|
stepMode: 'dynamic',
|
|
46
58
|
accessor: 'getFillPattern',
|
|
47
|
-
transform: extension.
|
|
59
|
+
transform: extension.opts.proceduralPattern
|
|
60
|
+
? extension.getProceduralPatternIndex.bind(this)
|
|
61
|
+
: extension.getPatternFrame.bind(this)
|
|
48
62
|
},
|
|
49
63
|
fillPatternScales: {
|
|
50
64
|
size: 1,
|
|
@@ -56,6 +70,13 @@ class FillStyleExtension extends LayerExtension {
|
|
|
56
70
|
size: 2,
|
|
57
71
|
stepMode: 'dynamic',
|
|
58
72
|
accessor: 'getFillPatternOffset'
|
|
73
|
+
},
|
|
74
|
+
fillPatternBackgroundColors: {
|
|
75
|
+
size: 4,
|
|
76
|
+
type: 'unorm8',
|
|
77
|
+
stepMode: 'dynamic',
|
|
78
|
+
accessor: 'getFillPatternBackgroundColor',
|
|
79
|
+
defaultValue: [0, 0, 0, 255]
|
|
59
80
|
}
|
|
60
81
|
});
|
|
61
82
|
}
|
|
@@ -64,7 +85,9 @@ class FillStyleExtension extends LayerExtension {
|
|
|
64
85
|
data: new Uint8Array(4),
|
|
65
86
|
width: 1,
|
|
66
87
|
height: 1
|
|
67
|
-
})
|
|
88
|
+
}),
|
|
89
|
+
...(extension.opts.proceduralPattern &&
|
|
90
|
+
extension.createProceduralPatternTexture.call(this, {}))
|
|
68
91
|
});
|
|
69
92
|
}
|
|
70
93
|
updateState({ props, oldProps }, extension) {
|
|
@@ -72,30 +95,85 @@ class FillStyleExtension extends LayerExtension {
|
|
|
72
95
|
return;
|
|
73
96
|
}
|
|
74
97
|
if (props.fillPatternMapping && props.fillPatternMapping !== oldProps.fillPatternMapping) {
|
|
98
|
+
if (extension.opts.proceduralPattern && typeof props.fillPatternMapping !== 'string') {
|
|
99
|
+
const oldTexture = this.state.proceduralPatternTexture;
|
|
100
|
+
this.setState(extension.createProceduralPatternTexture.call(this, props.fillPatternMapping));
|
|
101
|
+
oldTexture?.delete();
|
|
102
|
+
}
|
|
75
103
|
this.getAttributeManager().invalidate('getFillPattern');
|
|
76
104
|
}
|
|
105
|
+
if (props.fillPatternMapping !== oldProps.fillPatternMapping ||
|
|
106
|
+
props.getFillPatternScale !== oldProps.getFillPatternScale) {
|
|
107
|
+
this.setState({ commonFrame: extension.getCommonFrame(props) });
|
|
108
|
+
}
|
|
77
109
|
}
|
|
78
110
|
draw(params, extension) {
|
|
79
111
|
if (!extension.isEnabled(this)) {
|
|
80
112
|
return;
|
|
81
113
|
}
|
|
82
|
-
const { fillPatternAtlas, fillPatternEnabled, fillPatternMask } = this.props;
|
|
114
|
+
const { fillPatternAtlas, fillPatternEnabled, fillPatternMask, fillPatternSizeUnits } = this.props;
|
|
83
115
|
const fillProps = {
|
|
84
116
|
project: params.shaderModuleProps.project,
|
|
85
117
|
fillPatternEnabled,
|
|
86
118
|
fillPatternMask,
|
|
87
|
-
|
|
119
|
+
fillPatternSizeUnits,
|
|
120
|
+
procedural: extension.opts.proceduralPattern,
|
|
121
|
+
fillPatternTexture: (extension.opts.proceduralPattern
|
|
122
|
+
? this.state.proceduralPatternTexture || this.state.emptyTexture
|
|
123
|
+
: fillPatternAtlas || this.state.emptyTexture),
|
|
124
|
+
fillPatternCommonFrame: this.state.commonFrame
|
|
88
125
|
};
|
|
89
126
|
this.setShaderModuleProps({ fill: fillProps });
|
|
90
127
|
}
|
|
91
128
|
finalizeState() {
|
|
92
129
|
const emptyTexture = this.state.emptyTexture;
|
|
93
130
|
emptyTexture?.delete();
|
|
131
|
+
const proceduralPatternTexture = this.state.proceduralPatternTexture;
|
|
132
|
+
proceduralPatternTexture?.delete();
|
|
94
133
|
}
|
|
95
134
|
getPatternFrame(name) {
|
|
96
135
|
const { fillPatternMapping } = this.getCurrentLayer().props;
|
|
97
136
|
const def = fillPatternMapping && fillPatternMapping[name];
|
|
98
|
-
return def ? [def.x, def.y, def.width, def.height] : [0, 0, 0, 0];
|
|
137
|
+
return def && 'x' in def ? [def.x, def.y, def.width, def.height] : [0, 0, 0, 0];
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Returns common frame into which all patterns fit as integer multiples
|
|
141
|
+
*/
|
|
142
|
+
getCommonFrame(props) {
|
|
143
|
+
const { fillPatternMapping, getFillPatternScale: scale } = props;
|
|
144
|
+
if (typeof scale !== 'number' || !(scale > 0) || typeof fillPatternMapping !== 'object') {
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
let width = 0;
|
|
148
|
+
let height = 0;
|
|
149
|
+
for (const name in fillPatternMapping) {
|
|
150
|
+
const frame = fillPatternMapping[name];
|
|
151
|
+
// Procedural definitions do not have atlas dimensions and do not need origin reduction here.
|
|
152
|
+
if (!('width' in frame))
|
|
153
|
+
return null;
|
|
154
|
+
width = leastCommonMultiple(width, frame.width);
|
|
155
|
+
height = leastCommonMultiple(height, frame.height);
|
|
156
|
+
if (!width || !height)
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
return width ? [scale * width, scale * height] : null;
|
|
160
|
+
}
|
|
161
|
+
getProceduralPatternIndex(name) {
|
|
162
|
+
const patternIndices = this.state.proceduralPatternIndices;
|
|
163
|
+
return [patternIndices?.get(name) ?? 0, 0, 0, 0];
|
|
164
|
+
}
|
|
165
|
+
createProceduralPatternTexture(mapping) {
|
|
166
|
+
const packedPatterns = packProceduralPatterns(mapping);
|
|
167
|
+
return {
|
|
168
|
+
proceduralPatternIndices: packedPatterns.patternIndices,
|
|
169
|
+
proceduralPatternTexture: this.context.device.createTexture({
|
|
170
|
+
data: packedPatterns.data,
|
|
171
|
+
width: packedPatterns.width,
|
|
172
|
+
height: packedPatterns.height,
|
|
173
|
+
format: PROCEDURAL_PATTERN_TEXTURE_FORMAT,
|
|
174
|
+
sampler: { minFilter: 'nearest', magFilter: 'nearest' }
|
|
175
|
+
})
|
|
176
|
+
};
|
|
99
177
|
}
|
|
100
178
|
}
|
|
101
179
|
FillStyleExtension.defaultProps = defaultProps;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fill-style-extension.js","sourceRoot":"","sources":["../../src/fill-style/fill-style-extension.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EAAC,cAAc,EAAC,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAuB,cAAc,EAAC,2BAAwB;
|
|
1
|
+
{"version":3,"file":"fill-style-extension.js","sourceRoot":"","sources":["../../src/fill-style/fill-style-extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
export type HatchPatternConfig = {
|
|
2
|
+
type: 'hatch';
|
|
3
|
+
/** Direction of the hatch lines in degrees. @default 0 */
|
|
4
|
+
angle?: number;
|
|
5
|
+
/** Width of each hatch line. @default 1 */
|
|
6
|
+
strokeWidth?: number;
|
|
7
|
+
/** Empty edge-to-edge distance between lines. A tuple alternates the two gap values. @default 1 */
|
|
8
|
+
gap?: number | Readonly<[number, number]>;
|
|
9
|
+
};
|
|
10
|
+
export type CrossHatchPatternConfig = {
|
|
11
|
+
type: 'cross-hatch';
|
|
12
|
+
/** Directions of the two intersecting sets of hatch lines in degrees. @default [45, 135] */
|
|
13
|
+
angles?: Readonly<[number, number]>;
|
|
14
|
+
/** Width of each hatch line. @default 1 */
|
|
15
|
+
strokeWidth?: number;
|
|
16
|
+
/** Empty edge-to-edge distance between adjacent lines. @default 1 */
|
|
17
|
+
gap?: number;
|
|
18
|
+
};
|
|
19
|
+
export type DotPatternConfig = {
|
|
20
|
+
type: 'dots';
|
|
21
|
+
/** Radius of each dot. @default 1 */
|
|
22
|
+
radius?: number;
|
|
23
|
+
/** Empty edge-to-edge distance between dots along both grid axes. @default 1 */
|
|
24
|
+
gap?: number;
|
|
25
|
+
/** Rotation of the dot grid in degrees. @default 0 */
|
|
26
|
+
angle?: number;
|
|
27
|
+
/** Degrees that the second grid axis tilts toward the first; 0 produces an orthogonal grid. @default 0 */
|
|
28
|
+
skew?: number;
|
|
29
|
+
};
|
|
30
|
+
/** Procedural pattern shapes supported by FillStyleExtension. */
|
|
31
|
+
export type ProceduralPatternConfig = HatchPatternConfig | CrossHatchPatternConfig | DotPatternConfig;
|
|
32
|
+
export type ProceduralPatternMapping = Readonly<Record<string, ProceduralPatternConfig>>;
|
|
33
|
+
export declare const PROCEDURAL_PATTERN_TEXTURE_FORMAT: "rg32float";
|
|
34
|
+
export declare const PROCEDURAL_PATTERN_COMPONENTS_PER_TEXEL = 2;
|
|
35
|
+
export declare const PROCEDURAL_PATTERN_TEXELS_PER_PATTERN = 4;
|
|
36
|
+
export declare const PROCEDURAL_PATTERN_TYPES: {
|
|
37
|
+
readonly none: 0;
|
|
38
|
+
readonly hatch: 1;
|
|
39
|
+
readonly crossHatch: 2;
|
|
40
|
+
readonly dots: 3;
|
|
41
|
+
};
|
|
42
|
+
/** Component offsets within each fixed-width pattern record. */
|
|
43
|
+
export declare const PROCEDURAL_PATTERN_OFFSETS: {
|
|
44
|
+
readonly type: 0;
|
|
45
|
+
readonly size: 1;
|
|
46
|
+
readonly gap0: 2;
|
|
47
|
+
readonly gap1: 3;
|
|
48
|
+
readonly angle0: 4;
|
|
49
|
+
readonly angle1: 5;
|
|
50
|
+
/** Number of alternating gaps, hatch directions, or dot-grid axes, depending on type. */
|
|
51
|
+
readonly elementCount: 6;
|
|
52
|
+
};
|
|
53
|
+
export type PackedProceduralPatterns = {
|
|
54
|
+
data: Float32Array;
|
|
55
|
+
width: number;
|
|
56
|
+
height: 1;
|
|
57
|
+
/** Maps the user-facing pattern id to its record in the data texture. Index 0 is reserved for none. */
|
|
58
|
+
patternIndices: ReadonlyMap<string, number>;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Packs procedural pattern definitions into an `rg32float`-compatible data array.
|
|
62
|
+
* The fixed record width keeps vertex-shader lookup independent of the pattern type.
|
|
63
|
+
*/
|
|
64
|
+
export declare function packProceduralPatterns(mapping: ProceduralPatternMapping): PackedProceduralPatterns;
|
|
65
|
+
//# sourceMappingURL=procedural-pattern.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"procedural-pattern.d.ts","sourceRoot":"","sources":["../../src/fill-style/procedural-pattern.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mGAAmG;IACnG,GAAG,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,aAAa,CAAC;IACpB,4FAA4F;IAC5F,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpC,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gFAAgF;IAChF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0GAA0G;IAC1G,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,iEAAiE;AACjE,MAAM,MAAM,uBAAuB,GAC/B,kBAAkB,GAClB,uBAAuB,GACvB,gBAAgB,CAAC;AAErB,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC,CAAC;AAEzF,eAAO,MAAM,iCAAiC,EAAG,WAAoB,CAAC;AACtE,eAAO,MAAM,uCAAuC,IAAI,CAAC;AACzD,eAAO,MAAM,qCAAqC,IAAI,CAAC;AAEvD,eAAO,MAAM,wBAAwB;;;;;CAK3B,CAAC;AAEX,gEAAgE;AAChE,eAAO,MAAM,0BAA0B;;;;;;;IAOrC,yFAAyF;;CAEjF,CAAC;AAEX,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,CAAC,CAAC;IACV,uGAAuG;IACvG,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7C,CAAC;AAYF;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,wBAAwB,GAChC,wBAAwB,CAuF1B"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
// deck.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
export const PROCEDURAL_PATTERN_TEXTURE_FORMAT = 'rg32float';
|
|
5
|
+
export const PROCEDURAL_PATTERN_COMPONENTS_PER_TEXEL = 2;
|
|
6
|
+
export const PROCEDURAL_PATTERN_TEXELS_PER_PATTERN = 4;
|
|
7
|
+
export const PROCEDURAL_PATTERN_TYPES = {
|
|
8
|
+
none: 0,
|
|
9
|
+
hatch: 1,
|
|
10
|
+
crossHatch: 2,
|
|
11
|
+
dots: 3
|
|
12
|
+
};
|
|
13
|
+
/** Component offsets within each fixed-width pattern record. */
|
|
14
|
+
export const PROCEDURAL_PATTERN_OFFSETS = {
|
|
15
|
+
type: 0,
|
|
16
|
+
size: 1,
|
|
17
|
+
gap0: 2,
|
|
18
|
+
gap1: 3,
|
|
19
|
+
angle0: 4,
|
|
20
|
+
angle1: 5,
|
|
21
|
+
/** Number of alternating gaps, hatch directions, or dot-grid axes, depending on type. */
|
|
22
|
+
elementCount: 6
|
|
23
|
+
};
|
|
24
|
+
const COMPONENTS_PER_PATTERN = PROCEDURAL_PATTERN_COMPONENTS_PER_TEXEL * PROCEDURAL_PATTERN_TEXELS_PER_PATTERN;
|
|
25
|
+
const DEGREES_TO_RADIANS = Math.PI / 180;
|
|
26
|
+
const DEFAULT_SIZE = 1;
|
|
27
|
+
const DEFAULT_GAP = 1;
|
|
28
|
+
const DEFAULT_HATCH_ANGLE = 0;
|
|
29
|
+
const DEFAULT_CROSS_HATCH_ANGLES = [45, 135];
|
|
30
|
+
const DEFAULT_DOT_ANGLE = 0;
|
|
31
|
+
const DEFAULT_DOT_SKEW = 0;
|
|
32
|
+
/**
|
|
33
|
+
* Packs procedural pattern definitions into an `rg32float`-compatible data array.
|
|
34
|
+
* The fixed record width keeps vertex-shader lookup independent of the pattern type.
|
|
35
|
+
*/
|
|
36
|
+
export function packProceduralPatterns(mapping) {
|
|
37
|
+
const entries = Object.entries(mapping);
|
|
38
|
+
// The zero-filled first record represents a missing or disabled pattern.
|
|
39
|
+
const data = new Float32Array((entries.length + 1) * COMPONENTS_PER_PATTERN);
|
|
40
|
+
const patternIndices = new Map();
|
|
41
|
+
entries.forEach(([id, config], entryIndex) => {
|
|
42
|
+
const patternIndex = entryIndex + 1;
|
|
43
|
+
const offset = patternIndex * COMPONENTS_PER_PATTERN;
|
|
44
|
+
patternIndices.set(id, patternIndex);
|
|
45
|
+
switch (config.type) {
|
|
46
|
+
case 'hatch': {
|
|
47
|
+
const gap = config.gap === undefined ? DEFAULT_GAP : config.gap;
|
|
48
|
+
const strokeWidth = config.strokeWidth === undefined ? DEFAULT_SIZE : config.strokeWidth;
|
|
49
|
+
const angle = config.angle === undefined ? DEFAULT_HATCH_ANGLE : config.angle;
|
|
50
|
+
if (Array.isArray(gap) && gap.length !== 2) {
|
|
51
|
+
throw new Error(`${id}.gap must be a number or a two-element array`);
|
|
52
|
+
}
|
|
53
|
+
const gaps = Array.isArray(gap) ? gap : [gap, gap];
|
|
54
|
+
validatePositive(strokeWidth, `${id}.strokeWidth`);
|
|
55
|
+
validateNonNegative(gaps[0], `${id}.gap[0]`);
|
|
56
|
+
validateNonNegative(gaps[1], `${id}.gap[1]`);
|
|
57
|
+
validateAngle(angle, `${id}.angle`);
|
|
58
|
+
data[offset + PROCEDURAL_PATTERN_OFFSETS.type] = PROCEDURAL_PATTERN_TYPES.hatch;
|
|
59
|
+
data[offset + PROCEDURAL_PATTERN_OFFSETS.size] = strokeWidth;
|
|
60
|
+
data[offset + PROCEDURAL_PATTERN_OFFSETS.gap0] = gaps[0];
|
|
61
|
+
data[offset + PROCEDURAL_PATTERN_OFFSETS.gap1] = gaps[1];
|
|
62
|
+
data[offset + PROCEDURAL_PATTERN_OFFSETS.angle0] = angle * DEGREES_TO_RADIANS;
|
|
63
|
+
data[offset + PROCEDURAL_PATTERN_OFFSETS.elementCount] = Array.isArray(gap) ? 2 : 1;
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
case 'cross-hatch': {
|
|
67
|
+
const angles = config.angles === undefined ? DEFAULT_CROSS_HATCH_ANGLES : config.angles;
|
|
68
|
+
const strokeWidth = config.strokeWidth === undefined ? DEFAULT_SIZE : config.strokeWidth;
|
|
69
|
+
const gap = config.gap === undefined ? DEFAULT_GAP : config.gap;
|
|
70
|
+
if (!Array.isArray(angles) || angles.length !== 2) {
|
|
71
|
+
throw new Error(`${id}.angles must be a two-element array`);
|
|
72
|
+
}
|
|
73
|
+
validatePositive(strokeWidth, `${id}.strokeWidth`);
|
|
74
|
+
validateNonNegative(gap, `${id}.gap`);
|
|
75
|
+
validateAngle(angles[0], `${id}.angles[0]`);
|
|
76
|
+
validateAngle(angles[1], `${id}.angles[1]`);
|
|
77
|
+
data[offset + PROCEDURAL_PATTERN_OFFSETS.type] = PROCEDURAL_PATTERN_TYPES.crossHatch;
|
|
78
|
+
data[offset + PROCEDURAL_PATTERN_OFFSETS.size] = strokeWidth;
|
|
79
|
+
data[offset + PROCEDURAL_PATTERN_OFFSETS.gap0] = gap;
|
|
80
|
+
data[offset + PROCEDURAL_PATTERN_OFFSETS.gap1] = gap;
|
|
81
|
+
data[offset + PROCEDURAL_PATTERN_OFFSETS.angle0] = angles[0] * DEGREES_TO_RADIANS;
|
|
82
|
+
data[offset + PROCEDURAL_PATTERN_OFFSETS.angle1] = angles[1] * DEGREES_TO_RADIANS;
|
|
83
|
+
data[offset + PROCEDURAL_PATTERN_OFFSETS.elementCount] = 2;
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
case 'dots': {
|
|
87
|
+
const radius = config.radius === undefined ? DEFAULT_SIZE : config.radius;
|
|
88
|
+
const gap = config.gap === undefined ? DEFAULT_GAP : config.gap;
|
|
89
|
+
const angle = config.angle === undefined ? DEFAULT_DOT_ANGLE : config.angle;
|
|
90
|
+
const skew = config.skew === undefined ? DEFAULT_DOT_SKEW : config.skew;
|
|
91
|
+
validatePositive(radius, `${id}.radius`);
|
|
92
|
+
validateNonNegative(gap, `${id}.gap`);
|
|
93
|
+
validateAngle(angle, `${id}.angle`);
|
|
94
|
+
validateSkew(skew, `${id}.skew`);
|
|
95
|
+
data[offset + PROCEDURAL_PATTERN_OFFSETS.type] = PROCEDURAL_PATTERN_TYPES.dots;
|
|
96
|
+
data[offset + PROCEDURAL_PATTERN_OFFSETS.size] = radius;
|
|
97
|
+
data[offset + PROCEDURAL_PATTERN_OFFSETS.gap0] = gap;
|
|
98
|
+
data[offset + PROCEDURAL_PATTERN_OFFSETS.gap1] = gap;
|
|
99
|
+
data[offset + PROCEDURAL_PATTERN_OFFSETS.angle0] = angle * DEGREES_TO_RADIANS;
|
|
100
|
+
data[offset + PROCEDURAL_PATTERN_OFFSETS.angle1] = skew * DEGREES_TO_RADIANS;
|
|
101
|
+
data[offset + PROCEDURAL_PATTERN_OFFSETS.elementCount] = 2;
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
default:
|
|
105
|
+
throw new Error(`${id}.type is not a supported procedural pattern type`);
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
return {
|
|
109
|
+
data,
|
|
110
|
+
width: data.length / PROCEDURAL_PATTERN_COMPONENTS_PER_TEXEL,
|
|
111
|
+
height: 1,
|
|
112
|
+
patternIndices
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
function validatePositive(value, name) {
|
|
116
|
+
if (!Number.isFinite(value) || value <= 0) {
|
|
117
|
+
throw new Error(`${name} must be a finite number greater than 0`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
function validateNonNegative(value, name) {
|
|
121
|
+
if (!Number.isFinite(value) || value < 0) {
|
|
122
|
+
throw new Error(`${name} must be a finite number greater than or equal to 0`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
function validateAngle(value, name) {
|
|
126
|
+
if (!Number.isFinite(value)) {
|
|
127
|
+
throw new Error(`${name} must be a finite number`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
function validateSkew(value, name) {
|
|
131
|
+
if (!Number.isFinite(value) || value <= -90 || value >= 90) {
|
|
132
|
+
throw new Error(`${name} must be a finite number greater than -90 and less than 90`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=procedural-pattern.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"procedural-pattern.js","sourceRoot":"","sources":["../../src/fill-style/procedural-pattern.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AA0CpC,MAAM,CAAC,MAAM,iCAAiC,GAAG,WAAoB,CAAC;AACtE,MAAM,CAAC,MAAM,uCAAuC,GAAG,CAAC,CAAC;AACzD,MAAM,CAAC,MAAM,qCAAqC,GAAG,CAAC,CAAC;AAEvD,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;IACR,UAAU,EAAE,CAAC;IACb,IAAI,EAAE,CAAC;CACC,CAAC;AAEX,gEAAgE;AAChE,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,CAAC;IACT,yFAAyF;IACzF,YAAY,EAAE,CAAC;CACP,CAAC;AAUX,MAAM,sBAAsB,GAC1B,uCAAuC,GAAG,qCAAqC,CAAC;AAClF,MAAM,kBAAkB,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;AACzC,MAAM,YAAY,GAAG,CAAC,CAAC;AACvB,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAC9B,MAAM,0BAA0B,GAAG,CAAC,EAAE,EAAE,GAAG,CAAU,CAAC;AACtD,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAC5B,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAE3B;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CACpC,OAAiC;IAEjC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACxC,yEAAyE;IACzE,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,sBAAsB,CAAC,CAAC;IAC7E,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEjD,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,UAAU,EAAE,EAAE;QAC3C,MAAM,YAAY,GAAG,UAAU,GAAG,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,YAAY,GAAG,sBAAsB,CAAC;QACrD,cAAc,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;QAErC,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;gBAChE,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;gBACzF,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC9E,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC3C,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,8CAA8C,CAAC,CAAC;gBACvE,CAAC;gBACD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBACnD,gBAAgB,CAAC,WAAW,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC;gBACnD,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;gBAC7C,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;gBAC7C,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;gBAEpC,IAAI,CAAC,MAAM,GAAG,0BAA0B,CAAC,IAAI,CAAC,GAAG,wBAAwB,CAAC,KAAK,CAAC;gBAChF,IAAI,CAAC,MAAM,GAAG,0BAA0B,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC;gBAC7D,IAAI,CAAC,MAAM,GAAG,0BAA0B,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACzD,IAAI,CAAC,MAAM,GAAG,0BAA0B,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACzD,IAAI,CAAC,MAAM,GAAG,0BAA0B,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG,kBAAkB,CAAC;gBAC9E,IAAI,CAAC,MAAM,GAAG,0BAA0B,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpF,MAAM;YACR,CAAC;YAED,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;gBACxF,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;gBACzF,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;gBAChE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAClD,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,qCAAqC,CAAC,CAAC;gBAC9D,CAAC;gBACD,gBAAgB,CAAC,WAAW,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC;gBACnD,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;gBACtC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;gBAC5C,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;gBAE5C,IAAI,CAAC,MAAM,GAAG,0BAA0B,CAAC,IAAI,CAAC,GAAG,wBAAwB,CAAC,UAAU,CAAC;gBACrF,IAAI,CAAC,MAAM,GAAG,0BAA0B,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC;gBAC7D,IAAI,CAAC,MAAM,GAAG,0BAA0B,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;gBACrD,IAAI,CAAC,MAAM,GAAG,0BAA0B,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;gBACrD,IAAI,CAAC,MAAM,GAAG,0BAA0B,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC;gBAClF,IAAI,CAAC,MAAM,GAAG,0BAA0B,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC;gBAClF,IAAI,CAAC,MAAM,GAAG,0BAA0B,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;gBAC3D,MAAM;YACR,CAAC;YAED,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;gBAC1E,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;gBAChE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC5E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;gBACxE,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;gBACzC,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;gBACtC,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;gBACpC,YAAY,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;gBAEjC,IAAI,CAAC,MAAM,GAAG,0BAA0B,CAAC,IAAI,CAAC,GAAG,wBAAwB,CAAC,IAAI,CAAC;gBAC/E,IAAI,CAAC,MAAM,GAAG,0BAA0B,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;gBACxD,IAAI,CAAC,MAAM,GAAG,0BAA0B,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;gBACrD,IAAI,CAAC,MAAM,GAAG,0BAA0B,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;gBACrD,IAAI,CAAC,MAAM,GAAG,0BAA0B,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG,kBAAkB,CAAC;gBAC9E,IAAI,CAAC,MAAM,GAAG,0BAA0B,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,kBAAkB,CAAC;gBAC7E,IAAI,CAAC,MAAM,GAAG,0BAA0B,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;gBAC3D,MAAM;YACR,CAAC;YAED;gBACE,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,kDAAkD,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,IAAI;QACJ,KAAK,EAAE,IAAI,CAAC,MAAM,GAAG,uCAAuC;QAC5D,MAAM,EAAE,CAAC;QACT,cAAc;KACf,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa,EAAE,IAAY;IACnD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,yCAAyC,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa,EAAE,IAAY;IACtD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,qDAAqD,CAAC,CAAC;IAChF,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,KAAa,EAAE,IAAY;IAChD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,0BAA0B,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAa,EAAE,IAAY;IAC/C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,4DAA4D,CAAC,CAAC;IACvF,CAAC;AACH,CAAC"}
|
|
@@ -1,15 +1,21 @@
|
|
|
1
|
-
import type { ProjectProps } from '@deck.gl/core';
|
|
1
|
+
import type { ProjectProps, Unit } from '@deck.gl/core';
|
|
2
2
|
import type { Texture } from '@luma.gl/core';
|
|
3
3
|
export type FillStyleModuleProps = {
|
|
4
4
|
project: ProjectProps;
|
|
5
5
|
fillPatternEnabled?: boolean;
|
|
6
6
|
fillPatternMask?: boolean;
|
|
7
|
+
procedural?: boolean;
|
|
7
8
|
fillPatternTexture: Texture;
|
|
9
|
+
fillPatternSizeUnits?: Unit;
|
|
10
|
+
fillPatternCommonFrame?: [number, number] | null;
|
|
8
11
|
};
|
|
9
12
|
type FillStyleModuleUniforms = {
|
|
10
13
|
patternTextureSize?: [number, number];
|
|
14
|
+
patternUnitScale?: number;
|
|
11
15
|
patternEnabled?: boolean;
|
|
12
16
|
patternMask?: boolean;
|
|
17
|
+
procedural?: boolean;
|
|
18
|
+
flipY?: boolean;
|
|
13
19
|
uvCoordinateOrigin?: [number, number];
|
|
14
20
|
uvCoordinateOrigin64Low?: [number, number];
|
|
15
21
|
};
|
|
@@ -19,17 +25,17 @@ type FillStyleModuleBindings = {
|
|
|
19
25
|
declare function getPatternUniforms(opts?: FillStyleModuleProps | {}): FillStyleModuleBindings & FillStyleModuleUniforms;
|
|
20
26
|
export declare const patternShaders: {
|
|
21
27
|
readonly name: "fill";
|
|
22
|
-
readonly vs: "\nlayout(std140) uniform fillUniforms {\n vec2 patternTextureSize;\n bool patternEnabled;\n bool patternMask;\n vec2 uvCoordinateOrigin;\n vec2 uvCoordinateOrigin64Low;\n} fill;\n\n\nin vec4 fillPatternFrames;\nin float fillPatternScales;\nin vec2 fillPatternOffsets;\n\nout vec2 fill_uv;\nout vec4 fill_patternBounds;\nout vec4 fill_patternPlacement;\n\n";
|
|
23
|
-
readonly fs: "\nlayout(std140) uniform fillUniforms {\n vec2 patternTextureSize;\n bool patternEnabled;\n bool patternMask;\n vec2 uvCoordinateOrigin;\n vec2 uvCoordinateOrigin64Low;\n} fill;\n\n\nuniform sampler2D fill_patternTexture;\n\nin vec4 fill_patternBounds;\nin vec4 fill_patternPlacement;\nin vec2 fill_uv;\n\nconst float
|
|
28
|
+
readonly vs: "\nlayout(std140) uniform fillUniforms {\n vec2 patternTextureSize;\n float patternUnitScale;\n bool patternEnabled;\n bool patternMask;\n bool procedural;\n bool flipY;\n vec2 uvCoordinateOrigin;\n vec2 uvCoordinateOrigin64Low;\n} fill;\n\n\nuniform sampler2D fill_patternTexture;\n\nin vec4 fillPatternFrames;\nin float fillPatternScales;\nin vec2 fillPatternOffsets;\nin vec4 fillPatternBackgroundColors;\n\nout vec2 fill_uv;\nout vec4 fill_patternBounds;\nout vec4 fill_patternPlacement;\nout vec4 fill_backgroundColor;\nout float fill_patternCoordinateScale;\nflat out vec4 fill_patternParams0;\nflat out vec4 fill_patternParams1;\n\n";
|
|
29
|
+
readonly fs: "\nlayout(std140) uniform fillUniforms {\n vec2 patternTextureSize;\n float patternUnitScale;\n bool patternEnabled;\n bool patternMask;\n bool procedural;\n bool flipY;\n vec2 uvCoordinateOrigin;\n vec2 uvCoordinateOrigin64Low;\n} fill;\n\n\nuniform sampler2D fill_patternTexture;\n\nin vec4 fill_patternBounds;\nin vec4 fill_patternPlacement;\nin vec4 fill_backgroundColor;\nin vec2 fill_uv;\nin float fill_patternCoordinateScale;\nflat in vec4 fill_patternParams0;\nflat in vec4 fill_patternParams1;\n\nconst float FILL_PATTERN_HATCH = 1.0;\nconst float FILL_PATTERN_CROSS_HATCH = 2.0;\nconst float FILL_PATTERN_DOTS = 3.0;\n\nfloat fill_getPatternCoordinate(vec2 axis, float period, float offset) {\n float coordinateScale = max(abs(fill_patternCoordinateScale), 1.0e-20);\n vec2 coordinateOrigin = fill.uvCoordinateOrigin;\n vec2 coordinateOffset = fill.uvCoordinateOrigin64Low + fill_uv;\n float yDirection = fill.flipY ? 1.0 : -1.0;\n coordinateOrigin.y *= yDirection;\n coordinateOffset.y *= yDirection;\n\n // Reduce the high part before adding the local offset to retain precision in large coordinates.\n float highPart = mod(dot(coordinateOrigin, axis) / coordinateScale, period);\n float lowPart = dot(coordinateOffset, axis) / coordinateScale;\n return mod(highPart + lowPart + offset * period, period);\n}\n\nvec2 fill_getPatternCoords(\n vec2 axis0,\n vec2 axis1,\n vec2 period,\n vec2 offset\n) {\n return vec2(\n fill_getPatternCoordinate(axis0, period.x, offset.x),\n fill_getPatternCoordinate(axis1, period.y, offset.y)\n );\n}\n\nfloat fill_getScreenSpaceAlpha(float signedDistance) {\n float distanceDerivative = fwidth(signedDistance);\n if (distanceDerivative == 0.0) {\n return signedDistance <= 0.0 ? 1.0 : 0.0;\n }\n // Normalize the SDF to screen pixels so the coverage ramp is independent of pattern units.\n float distanceInPixels = signedDistance / distanceDerivative;\n return 1.0 - smoothstep(-0.5, 0.5, distanceInPixels);\n}\n\nfloat fill_getLineAlpha(float position, float center, float period, float strokeWidth) {\n float distanceToLine = abs(mod(position - center + period * 0.5, period) - period * 0.5);\n return fill_getScreenSpaceAlpha(distanceToLine - strokeWidth * 0.5);\n}\n\nfloat fill_getHatchAlpha(float angle, float strokeWidth, vec2 gaps, bool alternating) {\n vec2 lineDirection = vec2(cos(angle), sin(angle));\n vec2 lineNormal = vec2(-lineDirection.y, lineDirection.x);\n float period = alternating\n ? strokeWidth * 2.0 + gaps.x + gaps.y\n : strokeWidth + gaps.x;\n float offset = dot(fill_patternPlacement.xy, lineNormal);\n float position = fill_getPatternCoordinate(lineNormal, period, offset);\n float alpha = fill_getLineAlpha(position, 0.0, period, strokeWidth);\n if (alternating) {\n alpha = max(\n alpha,\n fill_getLineAlpha(position, strokeWidth + gaps.x, period, strokeWidth)\n );\n }\n return alpha;\n}\n\nfloat fill_getDotAlpha(float angle, float skew, float radius, float gap) {\n vec2 axis0 = vec2(cos(angle), sin(angle));\n float axis1Angle = angle + 1.5707963267948966 - skew;\n vec2 axis1 = vec2(cos(axis1Angle), sin(axis1Angle));\n float determinant = axis0.x * axis1.y - axis0.y * axis1.x;\n\n // The reciprocal basis maps common coordinates into the skewed dot lattice.\n vec2 reciprocal0 = vec2(axis1.y, -axis1.x) / determinant;\n vec2 reciprocal1 = vec2(-axis0.y, axis0.x) / determinant;\n float period = radius * 2.0 + gap;\n vec2 latticeCoords = fill_getPatternCoords(\n reciprocal0,\n reciprocal1,\n vec2(period),\n fill_patternPlacement.xy\n );\n vec2 cellOffset = mod(latticeCoords + period * 0.5, period) - period * 0.5;\n float distanceToDotSquared = 1.0e20;\n // In a skewed lattice the closest dot is not necessarily in the independently wrapped cell.\n // Include adjacent cells to keep the repeated distance field continuous at cell boundaries.\n for (int x = -1; x <= 1; x++) {\n for (int y = -1; y <= 1; y++) {\n vec2 neighborOffset = cellOffset + vec2(float(x), float(y)) * period;\n vec2 dotOffset = axis0 * neighborOffset.x + axis1 * neighborOffset.y;\n distanceToDotSquared = min(distanceToDotSquared, dot(dotOffset, dotOffset));\n }\n }\n float distanceToDot = sqrt(distanceToDotSquared);\n return fill_getScreenSpaceAlpha(distanceToDot - radius);\n}\n\nfloat fill_getProceduralPatternAlpha() {\n float patternType = fill_patternParams0.x;\n float size = fill_patternParams0.y;\n vec2 gaps = fill_patternParams0.zw;\n vec2 angles = fill_patternParams1.xy;\n float elementCount = fill_patternParams1.z;\n\n if (patternType == FILL_PATTERN_HATCH) {\n return fill_getHatchAlpha(angles.x, size, gaps, elementCount == 2.0);\n }\n if (patternType == FILL_PATTERN_CROSS_HATCH) {\n return max(\n fill_getHatchAlpha(angles.x, size, gaps, false),\n fill_getHatchAlpha(angles.y, size, gaps, false)\n );\n }\n if (patternType == FILL_PATTERN_DOTS) {\n return fill_getDotAlpha(angles.x, angles.y, size, gaps.x);\n }\n return 1.0;\n}\n\n// Draw the pattern over the background fill (Porter-Duff source-over)\nvec4 fill_blendOverBackground(vec4 pattern, vec4 background) {\n if (background.a == 0.0 || layer.opacity == 0.0) return pattern;\n float patternAlpha = pattern.a / layer.opacity;\n float blendedAlpha = patternAlpha + background.a * (1.0 - patternAlpha);\n vec3 blendedRGB = mix(background.rgb, pattern.rgb, patternAlpha / blendedAlpha);\n return vec4(blendedRGB, blendedAlpha * layer.opacity);\n}\n\n";
|
|
24
30
|
readonly inject: {
|
|
25
31
|
'vs:DECKGL_FILTER_GL_POSITION': string;
|
|
26
|
-
'vs:DECKGL_FILTER_COLOR': string;
|
|
27
32
|
'fs:DECKGL_FILTER_COLOR': string;
|
|
28
33
|
};
|
|
29
34
|
readonly dependencies: [{
|
|
30
35
|
readonly name: "project";
|
|
31
36
|
readonly dependencies: [{
|
|
32
37
|
name: string;
|
|
38
|
+
source: string;
|
|
33
39
|
vs: string;
|
|
34
40
|
}, {
|
|
35
41
|
readonly name: "geometry";
|
|
@@ -63,8 +69,11 @@ export declare const patternShaders: {
|
|
|
63
69
|
readonly getUniforms: typeof getPatternUniforms;
|
|
64
70
|
readonly uniformTypes: {
|
|
65
71
|
readonly patternTextureSize: "vec2<f32>";
|
|
72
|
+
readonly patternUnitScale: "f32";
|
|
66
73
|
readonly patternEnabled: "i32";
|
|
67
74
|
readonly patternMask: "i32";
|
|
75
|
+
readonly procedural: "i32";
|
|
76
|
+
readonly flipY: "i32";
|
|
68
77
|
readonly uvCoordinateOrigin: "vec2<f32>";
|
|
69
78
|
readonly uvCoordinateOrigin64Low: "vec2<f32>";
|
|
70
79
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader-module.d.ts","sourceRoot":"","sources":["../../src/fill-style/shader-module.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"shader-module.d.ts","sourceRoot":"","sources":["../../src/fill-style/shader-module.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAEV,YAAY,EAEZ,IAAI,EAEL,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AAiQ3C,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,YAAY,CAAC;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,oBAAoB,CAAC,EAAE,IAAI,CAAC;IAC5B,sBAAsB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;CAClD,CAAC;AAEF,KAAK,uBAAuB,GAAG;IAC7B,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,uBAAuB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5C,CAAC;AAEF,KAAK,uBAAuB,GAAG;IAC7B,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B,CAAC;AAGF,iBAAS,kBAAkB,CACzB,IAAI,CAAC,EAAE,oBAAoB,GAAG,EAAE,GAC/B,uBAAuB,GAAG,uBAAuB,CAuCnD;AAED,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqB1B,CAAC"}
|