maplibre-gl-layers 0.14.0 → 0.16.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.
Files changed (42) hide show
  1. package/dist/SpriteLayer.d.ts +5 -22
  2. package/dist/config.d.ts +2 -2
  3. package/dist/const.d.ts +7 -3
  4. package/dist/default.d.ts +2 -2
  5. package/dist/{atlas.d.ts → gl/atlas.d.ts} +3 -3
  6. package/dist/gl/hitTest.d.ts +54 -0
  7. package/dist/gl/shader.d.ts +115 -0
  8. package/dist/gl/text.d.ts +17 -0
  9. package/dist/{calculationHost.d.ts → host/calculationHost.d.ts} +27 -5
  10. package/dist/{mapLibreProjectionHost.d.ts → host/mapLibreProjectionHost.d.ts} +3 -3
  11. package/dist/{projectionHost.d.ts → host/projectionHost.d.ts} +10 -8
  12. package/dist/{runtime.d.ts → host/runtime.d.ts} +4 -3
  13. package/dist/{wasmCalculationHost.d.ts → host/wasmCalculationHost.d.ts} +18 -14
  14. package/dist/{wasmHost.d.ts → host/wasmHost.d.ts} +7 -5
  15. package/dist/{wasmProjectionHost.d.ts → host/wasmProjectionHost.d.ts} +3 -3
  16. package/dist/index.cjs +5185 -2836
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.d.ts +4 -4
  19. package/dist/index.mjs +5185 -2836
  20. package/dist/index.mjs.map +1 -1
  21. package/dist/internalTypes.d.ts +127 -23
  22. package/dist/{degreeInterpolation.d.ts → interpolation/degreeInterpolation.d.ts} +19 -4
  23. package/dist/interpolation/distanceInterpolation.d.ts +46 -0
  24. package/dist/interpolation/easing.d.ts +24 -0
  25. package/dist/{interpolation.d.ts → interpolation/interpolation.d.ts} +5 -27
  26. package/dist/{interpolationChannels.d.ts → interpolation/interpolationChannels.d.ts} +16 -7
  27. package/dist/{rotationInterpolation.d.ts → interpolation/rotationInterpolation.d.ts} +5 -10
  28. package/dist/types.d.ts +152 -29
  29. package/dist/utils/color.d.ts +25 -0
  30. package/dist/{image.d.ts → utils/image.d.ts} +3 -3
  31. package/dist/{looseQuadTree.d.ts → utils/looseQuadTree.d.ts} +2 -2
  32. package/dist/{math.d.ts → utils/math.d.ts} +28 -16
  33. package/dist/{utils.d.ts → utils/utils.d.ts} +3 -3
  34. package/dist/wasm/config.json.d.ts +2 -2
  35. package/dist/wasm/offloads-nosimd.wasm +0 -0
  36. package/dist/wasm/offloads-simd-mt.js +1 -1
  37. package/dist/wasm/offloads-simd-mt.wasm +0 -0
  38. package/dist/wasm/offloads-simd.wasm +0 -0
  39. package/package.json +6 -8
  40. package/dist/distanceInterpolation.d.ts +0 -33
  41. package/dist/easing.d.ts +0 -19
  42. package/dist/shader.d.ts +0 -101
package/dist/types.d.ts CHANGED
@@ -1,11 +1,11 @@
1
1
  /*!
2
2
  * name: maplibre-gl-layers
3
- * version: 0.14.0
3
+ * version: 0.16.0
4
4
  * description: MapLibre's layer extension library enabling the display, movement, and modification of large numbers of dynamic sprite images
5
5
  * author: Kouji Matsui (@kekyo@mi.kekyo.net)
6
6
  * license: MIT
7
7
  * repository.url: https://github.com/kekyo/maplibre-gl-layers.git
8
- * git.commit.hash: a531802b05777e1f54a8828a247254293df1415d
8
+ * git.commit.hash: 8d2149a6811cac25ed9d8c1d97acde73e1a38e25
9
9
  */
10
10
 
11
11
  import { CustomLayerInterface } from 'maplibre-gl';
@@ -42,6 +42,15 @@ export interface SpriteImageOffset {
42
42
  */
43
43
  offsetDeg: number;
44
44
  }
45
+ /**
46
+ * Line attribute.
47
+ */
48
+ export interface SpriteImageLineAttribute {
49
+ /** CSS color string. Defaults to red. */
50
+ color?: string;
51
+ /** Line width in meters. Defaults to 1. */
52
+ widthMeters?: number;
53
+ }
45
54
  /**
46
55
  * Anchor within the image.
47
56
  * The sprite's base coordinate maps to this location; range is -1.0 to 1.0 relative to image size.
@@ -73,16 +82,63 @@ export interface SpriteImageOriginLocation {
73
82
  }
74
83
  /** Defines movement interpolation modes. */
75
84
  export type SpriteInterpolationMode = 'feedback' | 'feedforward';
76
- /** Easing function signature used to map interpolation progress. */
77
- export type EasingFunction = (progress: number) => number;
85
+ export interface SpriteEasingLinear {
86
+ type: 'linear';
87
+ }
88
+ export interface SpriteEasingEase {
89
+ type: 'ease';
90
+ /** Power applied to the easing curve. Defaults to 3. */
91
+ power?: number;
92
+ /** Direction of the easing curve. Defaults to in-out. */
93
+ mode?: 'in' | 'out' | 'in-out';
94
+ }
95
+ export interface SpriteEasingExponential {
96
+ type: 'exponential';
97
+ /** Growth rate used by the exponential curve. Defaults to 5. */
98
+ exponent?: number;
99
+ /** Direction of the exponential curve. Defaults to in-out. */
100
+ mode?: 'in' | 'out' | 'in-out';
101
+ }
102
+ export interface SpriteEasingQuadratic {
103
+ type: 'quadratic';
104
+ /** Direction of the quadratic curve. Defaults to in-out. */
105
+ mode?: 'in' | 'out' | 'in-out';
106
+ }
107
+ export interface SpriteEasingCubic {
108
+ type: 'cubic';
109
+ /** Direction of the cubic curve. Defaults to in-out. */
110
+ mode?: 'in' | 'out' | 'in-out';
111
+ }
112
+ export interface SpriteEasingSine {
113
+ type: 'sine';
114
+ /** Direction of the sine ease. Defaults to in-out. */
115
+ mode?: 'in' | 'out' | 'in-out';
116
+ /** Multiplier applied to the sine amplitude. Defaults to 1. */
117
+ amplitude?: number;
118
+ }
119
+ export interface SpriteEasingBounce {
120
+ type: 'bounce';
121
+ /** Number of visible bounces before settling. Defaults to 3. */
122
+ bounces?: number;
123
+ /** Decay factor applied per bounce; range (0, 1]. Defaults to 0.5. */
124
+ decay?: number;
125
+ }
126
+ export interface SpriteEasingBack {
127
+ type: 'back';
128
+ /** Overshoot factor controlling how far past the target the curve goes. Defaults to 1.70158. */
129
+ overshoot?: number;
130
+ }
131
+ /** Union of supported easing definitions. */
132
+ export type SpriteEasing = SpriteEasingLinear | SpriteEasingEase | SpriteEasingExponential | SpriteEasingQuadratic | SpriteEasingCubic | SpriteEasingSine | SpriteEasingBounce | SpriteEasingBack;
133
+ export type SpriteEasingType = SpriteEasing['type'];
78
134
  /** Options for interpolating values. */
79
135
  export interface SpriteInterpolationOptions {
80
136
  /** Interpolation mode; defaults to feedback. */
81
137
  mode?: SpriteInterpolationMode;
82
138
  /** Duration in milliseconds. */
83
139
  durationMs: number;
84
- /** Easing function mapping interpolation progress. Defaults to linear. */
85
- easing?: EasingFunction;
140
+ /** Easing definition. Defaults to linear. */
141
+ easing?: SpriteEasing;
86
142
  }
87
143
  /** Interpolation configuration for rotateDeg and offsetDeg. */
88
144
  export interface SpriteImageInterpolationOptions {
@@ -92,6 +148,8 @@ export interface SpriteImageInterpolationOptions {
92
148
  offsetDeg?: SpriteInterpolationOptions | null;
93
149
  /** Interpolation settings for offset.offsetMeters; null disables interpolation. */
94
150
  offsetMeters?: SpriteInterpolationOptions | null;
151
+ /** Interpolation settings for opacity; null disables interpolation. */
152
+ opacity?: SpriteInterpolationOptions | null;
95
153
  }
96
154
  /**
97
155
  * Initial attributes that define a sprite image.
@@ -109,6 +167,10 @@ export interface SpriteImageDefinitionInit {
109
167
  anchor?: SpriteAnchor;
110
168
  /** Offset from the sprite coordinate. Defaults to no offset. */
111
169
  offset?: SpriteImageOffset;
170
+ /** Optional border rendered around the image. */
171
+ border?: SpriteImageLineAttribute;
172
+ /** Optional leader line rendered toward the origin image. */
173
+ leaderLine?: SpriteImageLineAttribute;
112
174
  /**
113
175
  * Determines which coordinate to anchor against.
114
176
  * - Omitted: use the sprite base coordinate.
@@ -150,6 +212,10 @@ export interface SpriteImageDefinitionUpdate {
150
212
  anchor?: SpriteAnchor;
151
213
  /** Offset from the sprite coordinate. */
152
214
  offset?: SpriteImageOffset;
215
+ /** Border rendered around the image. Specify null to remove. */
216
+ border?: SpriteImageLineAttribute | null;
217
+ /** Leader line rendered toward the origin image. Specify null to remove. */
218
+ leaderLine?: SpriteImageLineAttribute | null;
153
219
  /** Additional rotation in degrees. */
154
220
  rotateDeg?: number;
155
221
  /** Enables auto-rotation toward the travel direction. */
@@ -180,6 +246,20 @@ export interface SpriteInit<TTag> {
180
246
  isEnabled?: boolean;
181
247
  /** Initial location. */
182
248
  location: SpriteLocation;
249
+ /**
250
+ * Marks the sprite as invalidated initially, causing interpolation parameters to be
251
+ * ignored until the first update drives the value again.
252
+ */
253
+ invalidate?: boolean;
254
+ /**
255
+ * Pseudo LOD threshold for the sprite. When the camera distance exceeds this value,
256
+ * all images attached to the sprite become invisible.
257
+ */
258
+ visibilityDistanceMeters?: number;
259
+ /**
260
+ * Default interpolation settings applied to initial location updates until overridden.
261
+ */
262
+ interpolation?: SpriteInterpolationOptions;
183
263
  /** Array of zero or more images. */
184
264
  images: SpriteImageDefinitionInitEntry[];
185
265
  /** Optional tag value; null or omission means no tag. */
@@ -200,6 +280,38 @@ export interface SpriteInitEntry<TTag> extends SpriteInit<TTag> {
200
280
  * @template TTag Tag type.
201
281
  */
202
282
  export type SpriteInitCollection<TTag> = Record<string, SpriteInit<TTag>> | readonly SpriteInitEntry<TTag>[];
283
+ /**
284
+ * Interpolated values.
285
+ * @param T - Value type.
286
+ */
287
+ export interface SpriteInterpolatedValues<T> {
288
+ /** Current time value. */
289
+ readonly current: T;
290
+ /** Requested value. */
291
+ readonly from: T | undefined;
292
+ /** Will be reached value. */
293
+ readonly to: T | undefined;
294
+ /** Marks whether the value was invalidated due to visibility changes. */
295
+ readonly invalidated: boolean | undefined;
296
+ }
297
+ /**
298
+ * Offset with interpolation metadata for both distance and heading.
299
+ */
300
+ export interface SpriteImageInterpolatedOffset {
301
+ /** Distance from the anchor in meters. */
302
+ readonly offsetMeters: SpriteInterpolatedValues<number>;
303
+ /** Heading describing the offset direction in degrees. */
304
+ readonly offsetDeg: SpriteInterpolatedValues<number>;
305
+ }
306
+ /**
307
+ * Resolved line attribute state.
308
+ */
309
+ export interface SpriteImageLineAttributeState {
310
+ /** CSS color string applied to the line. */
311
+ readonly color: string;
312
+ /** Line width in meters. */
313
+ readonly widthMeters: number;
314
+ }
203
315
  /**
204
316
  * Sprite image state evaluated at runtime.
205
317
  *
@@ -207,11 +319,13 @@ export type SpriteInitCollection<TTag> = Record<string, SpriteInit<TTag>> | read
207
319
  * @property {number} order - Ordering slot within the sub-layer.
208
320
  * @property {string} imageId - Identifier of the registered image or glyph.
209
321
  * @property {SpriteMode} mode - Rendering mode applied to the image.
210
- * @property {number} opacity - Opacity multiplier applied when rendering.
322
+ * @property {SpriteInterpolatedValues<number>} opacity - Opacity multiplier applied when rendering, with interpolation metadata.
211
323
  * @property {number} scale - Scale factor converting pixels to meters.
212
324
  * @property {Readonly<SpriteAnchor>} anchor - Anchor coordinates resolved for the image.
213
- * @property {Readonly<SpriteImageOffset>} offset - Offset applied relative to the anchor point.
214
- * @property {number} rotateDeg - Additional rotation in degrees.
325
+ * @property {SpriteImageInterpolatedOffset} offset - Offset applied relative to the anchor point, with interpolation metadata.
326
+ * @property {SpriteImageLineAttributeState | undefined} border - Border line attribute.
327
+ * @property {SpriteImageLineAttributeState | undefined} leaderLine - Leader line attribute.
328
+ * @property {SpriteInterpolatedValues<number>} rotateDeg - Additional rotation in degrees plus interpolation metadata.
215
329
  * @property {boolean} autoRotation - Indicates whether auto-rotation is active.
216
330
  * @property {number} autoRotationMinDistanceMeters - Minimum travel distance before auto-rotation updates.
217
331
  * @property {number} resolvedBaseRotateDeg - Internal base rotation resolved for the current frame.
@@ -227,16 +341,23 @@ export interface SpriteImageState {
227
341
  readonly imageId: string;
228
342
  /** Rendering mode applied to the image. */
229
343
  readonly mode: SpriteMode;
230
- /** Opacity multiplier applied when rendering. */
231
- readonly opacity: number;
232
344
  /** Scale factor converting pixels to meters. */
233
345
  readonly scale: number;
234
346
  /** Anchor coordinates resolved for the image. */
235
347
  readonly anchor: Readonly<SpriteAnchor>;
348
+ /** Opacity multiplier applied when rendering. */
349
+ readonly opacity: SpriteInterpolatedValues<number>;
236
350
  /** Offset applied relative to the anchor point. */
237
- readonly offset: Readonly<SpriteImageOffset>;
238
- /** Additional rotation in degrees. */
239
- readonly rotateDeg: number;
351
+ readonly offset: SpriteImageInterpolatedOffset;
352
+ /** Optional border rendered around the image. */
353
+ readonly border: SpriteImageLineAttributeState | undefined;
354
+ /** Optional leader line rendered toward the origin image. */
355
+ readonly leaderLine: SpriteImageLineAttributeState | undefined;
356
+ /**
357
+ * Additional rotation in degrees with interpolation metadata.
358
+ * `from`/`to` are `undefined` when no rotation animation is running.
359
+ */
360
+ readonly rotateDeg: SpriteInterpolatedValues<number>;
240
361
  /** Indicates whether auto-rotation is active. */
241
362
  readonly autoRotation: boolean;
242
363
  /** Minimum travel distance before auto-rotation updates. */
@@ -258,20 +379,16 @@ export interface SpriteCurrentState<TTag> {
258
379
  readonly spriteId: string;
259
380
  /** Indicates whether the sprite is enabled. */
260
381
  readonly isEnabled: boolean;
261
- /** Current (possibly interpolated) location. */
262
- readonly currentLocation: Readonly<SpriteLocation>;
263
382
  /**
264
- * Source location during interpolation; undefined when not interpolating.
265
- * Feedback mode: previous commanded location.
266
- * Feed-forward mode: current commanded location.
383
+ * Pseudo LOD threshold for the sprite. When the camera distance exceeds this value,
384
+ * the sprite's images become invisible.
267
385
  */
268
- readonly fromLocation?: Readonly<SpriteLocation>;
386
+ readonly visibilityDistanceMeters: number | undefined;
269
387
  /**
270
- * Destination location during interpolation; undefined when not interpolating.
271
- * Feedback mode: current commanded location.
272
- * Feed-forward mode: predicted location.
388
+ * Location information including current, source, and destination coordinates.
389
+ * `from`/`to` are `undefined` when interpolation is inactive.
273
390
  */
274
- readonly toLocation?: Readonly<SpriteLocation>;
391
+ readonly location: SpriteInterpolatedValues<Readonly<SpriteLocation>>;
275
392
  /** Current image states, grouped by sub-layer and order. */
276
393
  readonly images: ReadonlyMap<number, ReadonlyMap<number, SpriteImageState>>;
277
394
  /** Optional tag value; null indicates no tag. */
@@ -295,6 +412,11 @@ export interface SpriteUpdateEntryBase<TTag> {
295
412
  interpolation?: SpriteInterpolationOptions | null;
296
413
  /** Optional tag value to replace the current one; `null` clears the tag. */
297
414
  tag?: TTag | null;
415
+ /**
416
+ * Pseudo LOD threshold for the sprite. Specify a positive finite value to enable the check,
417
+ * `null` to clear the current threshold, or leave `undefined` to keep the existing value.
418
+ */
419
+ visibilityDistanceMeters?: number | null;
298
420
  }
299
421
  /**
300
422
  * Update entry describing a sprite image modification.
@@ -526,11 +648,6 @@ export interface SpriteLayerOptions {
526
648
  spriteScaling?: SpriteScalingOptions;
527
649
  /** Optional texture filtering configuration. */
528
650
  textureFiltering?: SpriteTextureFilteringOptions;
529
- /**
530
- * When true, renders red outlines around sprite hit-test regions to aid debugging.
531
- * Defaults to false.
532
- */
533
- showDebugBounds?: boolean;
534
651
  }
535
652
  /**
536
653
  * Options used when registering SVG images.
@@ -779,6 +896,12 @@ export interface SpriteLayerInterface<TTag = any> extends CustomLayerInterface {
779
896
  * @returns {number} Number of sprites that were updated.
780
897
  */
781
898
  readonly updateForEach: (updater: (sprite: SpriteCurrentState<TTag>, update: SpriteUpdaterEntry<TTag>) => boolean) => number;
899
+ /**
900
+ * Controls entire interpolation Calculation.
901
+ * When `false`, interpolation halts immediately and resumes smoothly from the paused state when re-enabled.
902
+ * @param moveable - Continuous calculation for movement interpolation when value is true.
903
+ */
904
+ readonly setInterpolationCalculation: (moveable: boolean) => void;
782
905
  /**
783
906
  * Adds an event listener.
784
907
  *
@@ -0,0 +1,25 @@
1
+ /*!
2
+ * name: maplibre-gl-layers
3
+ * version: 0.16.0
4
+ * description: MapLibre's layer extension library enabling the display, movement, and modification of large numbers of dynamic sprite images
5
+ * author: Kouji Matsui (@kekyo@mi.kekyo.net)
6
+ * license: MIT
7
+ * repository.url: https://github.com/kekyo/maplibre-gl-layers.git
8
+ * git.commit.hash: 8d2149a6811cac25ed9d8c1d97acde73e1a38e25
9
+ */
10
+
11
+ /**
12
+ * Minimal CSS color parser used for resolving sprite border colors.
13
+ */
14
+ export type RgbaColor = readonly [number, number, number, number];
15
+ /**
16
+ * Parses a CSS color string into normalized RGBA values.
17
+ * Falls back to the supplied default when parsing fails.
18
+ *
19
+ * @param color CSS color string to parse.
20
+ * @param fallback Fallback value used when parsing fails.
21
+ * @returns Parsed RGBA tuple.
22
+ */
23
+ export declare const parseCssColorToRgba: (color: string | undefined, fallback: RgbaColor) => RgbaColor;
24
+ export declare const DEFAULT_BORDER_COLOR = "red";
25
+ export declare const DEFAULT_BORDER_COLOR_RGBA: RgbaColor;
@@ -1,14 +1,14 @@
1
1
  /*!
2
2
  * name: maplibre-gl-layers
3
- * version: 0.14.0
3
+ * version: 0.16.0
4
4
  * description: MapLibre's layer extension library enabling the display, movement, and modification of large numbers of dynamic sprite images
5
5
  * author: Kouji Matsui (@kekyo@mi.kekyo.net)
6
6
  * license: MIT
7
7
  * repository.url: https://github.com/kekyo/maplibre-gl-layers.git
8
- * git.commit.hash: a531802b05777e1f54a8828a247254293df1415d
8
+ * git.commit.hash: 8d2149a6811cac25ed9d8c1d97acde73e1a38e25
9
9
  */
10
10
 
11
- import { SpriteImageRegisterOptions } from './types';
11
+ import { SpriteImageRegisterOptions } from '../types';
12
12
  export type SvgSizeResolutionErrorCode = 'size-missing' | 'viewbox-disabled' | 'invalid-dimensions';
13
13
  export declare class SvgSizeResolutionError extends Error implements Error {
14
14
  readonly code: SvgSizeResolutionErrorCode;
@@ -1,11 +1,11 @@
1
1
  /*!
2
2
  * name: maplibre-gl-layers
3
- * version: 0.14.0
3
+ * version: 0.16.0
4
4
  * description: MapLibre's layer extension library enabling the display, movement, and modification of large numbers of dynamic sprite images
5
5
  * author: Kouji Matsui (@kekyo@mi.kekyo.net)
6
6
  * license: MIT
7
7
  * repository.url: https://github.com/kekyo/maplibre-gl-layers.git
8
- * git.commit.hash: a531802b05777e1f54a8828a247254293df1415d
8
+ * git.commit.hash: 8d2149a6811cac25ed9d8c1d97acde73e1a38e25
9
9
  */
10
10
 
11
11
  export interface Rect {
@@ -1,15 +1,15 @@
1
1
  /*!
2
2
  * name: maplibre-gl-layers
3
- * version: 0.14.0
3
+ * version: 0.16.0
4
4
  * description: MapLibre's layer extension library enabling the display, movement, and modification of large numbers of dynamic sprite images
5
5
  * author: Kouji Matsui (@kekyo@mi.kekyo.net)
6
6
  * license: MIT
7
7
  * repository.url: https://github.com/kekyo/maplibre-gl-layers.git
8
- * git.commit.hash: a531802b05777e1f54a8828a247254293df1415d
8
+ * git.commit.hash: 8d2149a6811cac25ed9d8c1d97acde73e1a38e25
9
9
  */
10
10
 
11
- import { SpriteAnchor, SpriteImageOffset, SpriteLocation, SpritePoint, SpriteScalingOptions, SpriteScreenPoint } from './types';
12
- import { InternalSpriteCurrentState, MatrixInput, ProjectionHost, SpriteMercatorCoordinate } from './internalTypes';
11
+ import { SpriteAnchor, SpriteImageOffset, SpriteLocation, SpritePoint, SpriteScalingOptions, SpriteScreenPoint } from '../types';
12
+ import { InternalSpriteCurrentState, MatrixInput, ProjectionHost, SpriteMercatorCoordinate } from '../internalTypes';
13
13
  /**
14
14
  * Produces a deep copy so later updates do not mutate the original object.
15
15
  */
@@ -23,6 +23,11 @@ export declare const lerpSpriteLocation: (from: SpriteLocation, to: SpriteLocati
23
23
  * Compares two locations. Treats altitude as equal when either side is undefined.
24
24
  */
25
25
  export declare const spriteLocationsEqual: (a: SpriteLocation, b: SpriteLocation) => boolean;
26
+ export declare const calculateCartesianDistanceMeters: (a: Readonly<SpriteLocation>, b: Readonly<SpriteLocation>) => number;
27
+ /**
28
+ * Normalizes an angle in degrees to the [0, 360) range.
29
+ */
30
+ export declare const normalizeAngleDeg: (angle: number) => number;
26
31
  /**
27
32
  * Multiplies a 4x4 matrix with a 4-component vector using row-major indexing.
28
33
  * @param {MatrixInput} matrix - Matrix to multiply.
@@ -198,25 +203,25 @@ export declare const calculateEffectivePixelsPerMeter: (metersPerPixelAtLatitude
198
203
  * Projects a geographic coordinate and elevation into homogeneous clip space.
199
204
  * @typedef ProjectToClipSpaceFn
200
205
  * @param {number} location - Location in degrees.
201
- * @returns {[number, number, number, number] | null} Homogeneous clip coordinates or `null` when outside the view.
206
+ * @returns {[number, number, number, number] | undefined} Homogeneous clip coordinates or `undefined` when outside the view.
202
207
  */
203
- export type ProjectToClipSpaceFn = (location: Readonly<SpriteLocation>) => [number, number, number, number] | null;
208
+ export type ProjectToClipSpaceFn = (location: Readonly<SpriteLocation>) => [number, number, number, number] | undefined;
204
209
  /**
205
210
  * Unprojects a screen-space point back to longitude/latitude.
206
211
  * @typedef UnprojectPointFn
207
212
  * @param {SpriteScreenPoint} point - Screen-space coordinates in pixels.
208
- * @returns {SpriteLocation | null} Geographic location or `null` when unprojection fails.
213
+ * @returns {SpriteLocation | undefined} Geographic location or `undefined` when unprojection fails.
209
214
  */
210
- export type UnprojectPointFn = (point: Readonly<SpriteScreenPoint>) => SpriteLocation | null;
215
+ export type UnprojectPointFn = (point: Readonly<SpriteScreenPoint>) => SpriteLocation | undefined;
211
216
  /**
212
217
  * Resolves a depth key for billboards by sampling the clip-space Z at the sprite center.
213
218
  * @param {SpriteScreenPoint} center - Screen-space center of the billboard in pixels.
214
219
  * @param {SpriteLocation} spriteLocation - Geographic location including optional altitude.
215
220
  * @param {UnprojectPointFn} unproject - Function for converting screen coordinates to geographic coordinates.
216
221
  * @param {ProjectToClipSpaceFn} projectToClipSpace - Function that projects a geographic coordinate to clip space.
217
- * @returns {number | null} Negative normalized device coordinate Z used for depth sorting, or `null` when unavailable.
222
+ * @returns {number | undefined} Negative normalized device coordinate Z used for depth sorting, or `undefined` when unavailable.
218
223
  */
219
- export declare const calculateBillboardDepthKey: (center: Readonly<SpriteScreenPoint>, unproject: UnprojectPointFn, projectToClipSpace: ProjectToClipSpaceFn) => number | null;
224
+ export declare const calculateBillboardDepthKey: (center: Readonly<SpriteScreenPoint>, unproject: UnprojectPointFn, projectToClipSpace: ProjectToClipSpaceFn) => number | undefined;
220
225
  /**
221
226
  * Signature for surface depth bias callbacks that tweak clip-space Z/W.
222
227
  * @typedef SurfaceDepthBiasFn
@@ -237,19 +242,19 @@ export type SurfaceDepthBiasFn = (params: {
237
242
  * @param {readonly SurfaceCorner[]} displacements - Corner offsets in meters from the center.
238
243
  * @param {ProjectToClipSpaceFn} projectToClipSpace - Projection function used to reach clip space.
239
244
  * @param {{ readonly indices?: readonly number[]; readonly biasFn?: SurfaceDepthBiasFn }} [options] - Optional overrides.
240
- * @returns {number | null} Depth key suitable for sorting, or `null` when any corner cannot be projected.
245
+ * @returns {number | undefined} Depth key suitable for sorting, or `undefined` when any corner cannot be projected.
241
246
  */
242
247
  export declare const calculateSurfaceDepthKey: (baseLngLat: Readonly<SpriteLocation>, displacements: readonly SurfaceCorner[], projectToClipSpace: ProjectToClipSpaceFn, options?: {
243
248
  readonly indices?: readonly number[];
244
249
  readonly biasFn?: SurfaceDepthBiasFn;
245
- }) => number | null;
250
+ }) => number | undefined;
246
251
  /**
247
252
  * Projects a longitude/latitude pair to screen-space pixels.
248
253
  * @typedef ProjectLngLatFn
249
254
  * @param {SpriteLocation} lngLat - Geographic coordinate to project.
250
- * @returns {SpriteScreenPoint | null} Screen coordinates or `null` when projection fails.
255
+ * @returns {SpriteScreenPoint | undefined} Screen coordinates or `undefined` when projection fails.
251
256
  */
252
- export type ProjectLngLatFn = (lngLat: Readonly<SpriteLocation>) => SpriteScreenPoint | null;
257
+ export type ProjectLngLatFn = (lngLat: Readonly<SpriteLocation>) => SpriteScreenPoint | undefined;
253
258
  /**
254
259
  * Parameters required to resolve a billboard center position.
255
260
  * @typedef BillboardCenterParams
@@ -299,6 +304,7 @@ export interface BillboardCenterResult {
299
304
  pixelHeight: number;
300
305
  anchorShift: SpritePoint;
301
306
  offsetShift: SpritePoint;
307
+ scaleAdjustment: number;
302
308
  }
303
309
  /**
304
310
  * Calculates the final billboard center position, applying scaling, anchor, and offset adjustments.
@@ -393,7 +399,7 @@ export interface SurfaceCenterParams {
393
399
  /**
394
400
  * Output describing the resolved surface center and displacement details.
395
401
  * @typedef SurfaceCenterResult
396
- * @property {SpriteScreenPoint | null} center - Projected screen coordinates or `null` when projection fails.
402
+ * @property {SpriteScreenPoint | undefined} center - Projected screen coordinates or `undefined` when projection fails.
397
403
  * @property {{ width: number; height: number; scaleAdjustment: number }} worldDimensions - Sprite dimensions in world meters.
398
404
  * @property {SurfaceCorner} totalDisplacement - Combined anchor and offset displacement in meters.
399
405
  * @property {SpriteLocation} displacedLngLat - Geographic coordinates after applying displacement.
@@ -402,7 +408,7 @@ export interface SurfaceCenterParams {
402
408
  * @property {SpriteLocation | undefined} [anchorlessLngLat] - Anchorless geographic coordinate when requested.
403
409
  */
404
410
  export interface SurfaceCenterResult {
405
- center: Readonly<SpriteScreenPoint> | null;
411
+ center: Readonly<SpriteScreenPoint> | undefined;
406
412
  worldDimensions: Readonly<{
407
413
  width: number;
408
414
  height: number;
@@ -464,3 +470,9 @@ export declare const calculateSurfaceCornerDisplacements: (params: SurfaceCorner
464
470
  * @returns {SpriteMercatorCoordinate} Cached Mercator coordinate representing the current location.
465
471
  */
466
472
  export declare const resolveSpriteMercator: <T>(projectionHost: ProjectionHost, sprite: InternalSpriteCurrentState<T>) => SpriteMercatorCoordinate;
473
+ /**
474
+ * Clamp opacity value.
475
+ * @param value Value
476
+ * @returns Clamped value
477
+ */
478
+ export declare const clampOpacity: (value: number) => number;
@@ -1,14 +1,14 @@
1
1
  /*!
2
2
  * name: maplibre-gl-layers
3
- * version: 0.14.0
3
+ * version: 0.16.0
4
4
  * description: MapLibre's layer extension library enabling the display, movement, and modification of large numbers of dynamic sprite images
5
5
  * author: Kouji Matsui (@kekyo@mi.kekyo.net)
6
6
  * license: MIT
7
7
  * repository.url: https://github.com/kekyo/maplibre-gl-layers.git
8
- * git.commit.hash: a531802b05777e1f54a8828a247254293df1415d
8
+ * git.commit.hash: 8d2149a6811cac25ed9d8c1d97acde73e1a38e25
9
9
  */
10
10
 
11
- import { ImageHandleBufferController, IdHandler, RenderTargetBucketBuffers, RenderTargetEntryLike, SpriteOriginReference } from './internalTypes';
11
+ import { ImageHandleBufferController, IdHandler, RenderTargetBucketBuffers, RenderTargetEntryLike, SpriteOriginReference } from '../internalTypes';
12
12
  /**
13
13
  * Create id handler object.
14
14
  * @param T Identified instance type
@@ -1,11 +1,11 @@
1
1
  /*!
2
2
  * name: maplibre-gl-layers
3
- * version: 0.14.0
3
+ * version: 0.16.0
4
4
  * description: MapLibre's layer extension library enabling the display, movement, and modification of large numbers of dynamic sprite images
5
5
  * author: Kouji Matsui (@kekyo@mi.kekyo.net)
6
6
  * license: MIT
7
7
  * repository.url: https://github.com/kekyo/maplibre-gl-layers.git
8
- * git.commit.hash: a531802b05777e1f54a8828a247254293df1415d
8
+ * git.commit.hash: 8d2149a6811cac25ed9d8c1d97acde73e1a38e25
9
9
  */
10
10
 
11
11
  declare const _default: {
Binary file
@@ -1,2 +1,2 @@
1
- async function Module(moduleArg={}){var moduleRtn;var Module=moduleArg;var ENVIRONMENT_IS_WEB=!!globalThis.window;var ENVIRONMENT_IS_WORKER=!!globalThis.WorkerGlobalScope;var ENVIRONMENT_IS_NODE=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";var ENVIRONMENT_IS_PTHREAD=ENVIRONMENT_IS_WORKER&&self.name?.startsWith("em-pthread");if(ENVIRONMENT_IS_NODE){const{createRequire}=await import("module");var require=createRequire(import.meta.url);var worker_threads=require("worker_threads");global.Worker=worker_threads.Worker;ENVIRONMENT_IS_WORKER=!worker_threads.isMainThread;ENVIRONMENT_IS_PTHREAD=ENVIRONMENT_IS_WORKER&&worker_threads["workerData"]=="em-pthread"}var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var _scriptName=import.meta.url;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){var fs=require("fs");if(_scriptName.startsWith("file:")){scriptDirectory=require("path").dirname(require("url").fileURLToPath(_scriptName))+"/"}readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:"utf8");return ret};if(process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(".",_scriptName).href}catch{}if(!ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=async url=>{if(isFileURI(url)){return new Promise((resolve,reject)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){resolve(xhr.response);return}reject(xhr.status)};xhr.onerror=reject;xhr.send(null)})}var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{}var defaultPrint=console.log.bind(console);var defaultPrintErr=console.error.bind(console);if(ENVIRONMENT_IS_NODE){var utils=require("util");var stringify=a=>typeof a=="object"?utils.inspect(a):a;defaultPrint=(...args)=>fs.writeSync(1,args.map(stringify).join(" ")+"\n");defaultPrintErr=(...args)=>fs.writeSync(2,args.map(stringify).join(" ")+"\n")}var out=defaultPrint;var err=defaultPrintErr;var wasmBinary;var wasmModule;var ABORT=false;var EXITSTATUS;var isFileURI=filename=>filename.startsWith("file://");var readyPromiseResolve,readyPromiseReject;if(ENVIRONMENT_IS_NODE&&ENVIRONMENT_IS_PTHREAD){var parentPort=worker_threads["parentPort"];parentPort.on("message",msg=>global.onmessage?.({data:msg}));Object.assign(globalThis,{self:global,postMessage:msg=>parentPort["postMessage"](msg)});process.on("uncaughtException",err=>{postMessage({cmd:"uncaughtException",error:err});process.exit(1)})}var startWorker;if(ENVIRONMENT_IS_PTHREAD){var initializedJS=false;self.onunhandledrejection=e=>{throw e.reason||e};function handleMessage(e){try{var msgData=e["data"];var cmd=msgData.cmd;if(cmd==="load"){let messageQueue=[];self.onmessage=e=>messageQueue.push(e);startWorker=()=>{postMessage({cmd:"loaded"});for(let msg of messageQueue){handleMessage(msg)}self.onmessage=handleMessage};for(const handler of msgData.handlers){if(!Module[handler]||Module[handler].proxy){Module[handler]=(...args)=>{postMessage({cmd:"callHandler",handler,args})};if(handler=="print")out=Module[handler];if(handler=="printErr")err=Module[handler]}}wasmMemory=msgData.wasmMemory;updateMemoryViews();wasmModule=msgData.wasmModule;createWasm();run()}else if(cmd==="run"){establishStackSpace(msgData.pthread_ptr);__emscripten_thread_init(msgData.pthread_ptr,0,0,1,0,0);PThread.threadInitTLS();__emscripten_thread_mailbox_await(msgData.pthread_ptr);if(!initializedJS){initializedJS=true}try{invokeEntryPoint(msgData.start_routine,msgData.arg)}catch(ex){if(ex!="unwind"){throw ex}}}else if(msgData.target==="setimmediate"){}else if(cmd==="checkMailbox"){if(initializedJS){checkMailbox()}}else if(cmd){err(`worker: received unknown command ${cmd}`);err(msgData)}}catch(ex){__emscripten_thread_crashed();throw ex}}self.onmessage=handleMessage}var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var HEAP64,HEAPU64;var runtimeInitialized=false;function updateMemoryViews(){var b=wasmMemory.buffer;HEAP8=new Int8Array(b);HEAP16=new Int16Array(b);HEAPU8=new Uint8Array(b);HEAPU16=new Uint16Array(b);HEAP32=new Int32Array(b);HEAPU32=new Uint32Array(b);HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b);HEAPU64=new BigUint64Array(b)}function initMemory(){if(ENVIRONMENT_IS_PTHREAD){return}if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||536870912;wasmMemory=new WebAssembly.Memory({initial:INITIAL_MEMORY/65536,maximum:INITIAL_MEMORY/65536,shared:true})}updateMemoryViews()}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true;if(ENVIRONMENT_IS_PTHREAD)return startWorker();wasmExports["s"]()}function postRun(){if(ENVIRONMENT_IS_PTHREAD){return}if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(onPostRuns)}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject?.(e);throw e}var wasmBinaryFile;function findWasmBinary(){if(Module["locateFile"]){return locateFile("offloads-simd-mt.wasm")}return new URL("offloads-simd-mt.wasm",import.meta.url).href}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){assignWasmImports();var imports={a:wasmImports};return imports}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;registerTLSInit(wasmExports["D"]);assignWasmExports(wasmExports);wasmModule=module;return wasmExports}function receiveInstantiationResult(result){return receiveInstance(result["instance"],result["module"])}var info=getWasmImports();if(Module["instantiateWasm"]){return new Promise((resolve,reject)=>{Module["instantiateWasm"](info,(inst,mod)=>{resolve(receiveInstance(inst,mod))})})}if(ENVIRONMENT_IS_PTHREAD){var instance=new WebAssembly.Instance(wasmModule,getWasmImports());return receiveInstance(instance,wasmModule)}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var terminateWorker=worker=>{worker.terminate();worker.onmessage=e=>{}};var cleanupThread=pthread_ptr=>{var worker=PThread.pthreads[pthread_ptr];PThread.returnWorkerToPool(worker)};var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.push(cb);var runDependencies=0;var dependenciesFulfilled=null;var removeRunDependency=id=>{runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(runDependencies==0){if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}};var addRunDependency=id=>{runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)};var spawnThread=threadParams=>{var worker=PThread.getNewWorker();if(!worker){return 6}PThread.runningWorkers.push(worker);PThread.pthreads[threadParams.pthread_ptr]=worker;worker.pthread_ptr=threadParams.pthread_ptr;var msg={cmd:"run",start_routine:threadParams.startRoutine,arg:threadParams.arg,pthread_ptr:threadParams.pthread_ptr};if(ENVIRONMENT_IS_NODE){worker.unref()}worker.postMessage(msg,threadParams.transferList);return 0};var runtimeKeepaliveCounter=0;var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var stackSave=()=>_emscripten_stack_get_current();var stackRestore=val=>__emscripten_stack_restore(val);var stackAlloc=sz=>__emscripten_stack_alloc(sz);var proxyToMainThread=(funcIndex,emAsmAddr,sync,...callArgs)=>{var serializedNumCallArgs=callArgs.length*2;var sp=stackSave();var args=stackAlloc(serializedNumCallArgs*8);var b=args>>3;for(var i=0;i<callArgs.length;i++){var arg=callArgs[i];if(typeof arg=="bigint"){HEAP64[b+2*i]=1n;HEAP64[b+2*i+1]=arg}else{HEAP64[b+2*i]=0n;HEAPF64[b+2*i+1]=arg}}var rtn=__emscripten_run_js_on_main_thread(funcIndex,emAsmAddr,serializedNumCallArgs,args,sync);stackRestore(sp);return rtn};function _proc_exit(code){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(0,0,1,code);EXITSTATUS=code;if(!keepRuntimeAlive()){PThread.terminateAllThreads();Module["onExit"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))}function exitOnMainThread(returnCode){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(1,0,0,returnCode);_exit(returnCode)}var exitJS=(status,implicit)=>{EXITSTATUS=status;if(ENVIRONMENT_IS_PTHREAD){exitOnMainThread(status);throw"unwind"}_proc_exit(status)};var _exit=exitJS;var PThread={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],pthreads:{},init(){if(!ENVIRONMENT_IS_PTHREAD){PThread.initMainThread()}},initMainThread(){var pthreadPoolSize=4;while(pthreadPoolSize--){PThread.allocateUnusedWorker()}addOnPreRun(async()=>{var pthreadPoolReady=PThread.loadWasmModuleToAllWorkers();addRunDependency("loading-workers");await pthreadPoolReady;removeRunDependency("loading-workers")})},terminateAllThreads:()=>{for(var worker of PThread.runningWorkers){terminateWorker(worker)}for(var worker of PThread.unusedWorkers){terminateWorker(worker)}PThread.unusedWorkers=[];PThread.runningWorkers=[];PThread.pthreads={}},returnWorkerToPool:worker=>{var pthread_ptr=worker.pthread_ptr;delete PThread.pthreads[pthread_ptr];PThread.unusedWorkers.push(worker);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(worker),1);worker.pthread_ptr=0;__emscripten_thread_free_data(pthread_ptr)},threadInitTLS(){PThread.tlsInitFunctions.forEach(f=>f())},loadWasmModuleToWorker:worker=>new Promise(onFinishedLoading=>{worker.onmessage=e=>{var d=e["data"];var cmd=d.cmd;if(d.targetThread&&d.targetThread!=_pthread_self()){var targetWorker=PThread.pthreads[d.targetThread];if(targetWorker){targetWorker.postMessage(d,d.transferList)}else{err(`Internal error! Worker sent a message "${cmd}" to target pthread ${d.targetThread}, but that thread no longer exists!`)}return}if(cmd==="checkMailbox"){checkMailbox()}else if(cmd==="spawnThread"){spawnThread(d)}else if(cmd==="cleanupThread"){callUserCallback(()=>cleanupThread(d.thread))}else if(cmd==="loaded"){worker.loaded=true;if(ENVIRONMENT_IS_NODE&&!worker.pthread_ptr){worker.unref()}onFinishedLoading(worker)}else if(d.target==="setimmediate"){worker.postMessage(d)}else if(cmd==="uncaughtException"){worker.onerror(d.error)}else if(cmd==="callHandler"){Module[d.handler](...d.args)}else if(cmd){err(`worker sent an unknown command ${cmd}`)}};worker.onerror=e=>{var message="worker sent an error!";err(`${message} ${e.filename}:${e.lineno}: ${e.message}`);throw e};if(ENVIRONMENT_IS_NODE){worker.on("message",data=>worker.onmessage({data}));worker.on("error",e=>worker.onerror(e))}var handlers=[];var knownHandlers=["onExit","onAbort","print","printErr"];for(var handler of knownHandlers){if(Module.propertyIsEnumerable(handler)){handlers.push(handler)}}worker.postMessage({cmd:"load",handlers,wasmMemory,wasmModule})}),async loadWasmModuleToAllWorkers(){if(ENVIRONMENT_IS_PTHREAD){return}let pthreadPoolReady=Promise.all(PThread.unusedWorkers.map(PThread.loadWasmModuleToWorker));return pthreadPoolReady},allocateUnusedWorker(){var worker;if(Module["mainScriptUrlOrBlob"]){var pthreadMainJs=Module["mainScriptUrlOrBlob"];if(typeof pthreadMainJs!="string"){pthreadMainJs=URL.createObjectURL(pthreadMainJs)}worker=new Worker(pthreadMainJs,{type:"module",workerData:"em-pthread",name:"em-pthread"})}else worker=new Worker(new URL("offloads-simd-mt.js",import.meta.url),{type:"module",workerData:"em-pthread",name:"em-pthread"});PThread.unusedWorkers.push(worker)},getNewWorker(){if(PThread.unusedWorkers.length==0){PThread.allocateUnusedWorker();PThread.loadWasmModuleToWorker(PThread.unusedWorkers[0])}return PThread.unusedWorkers.pop()}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.push(cb);function establishStackSpace(pthread_ptr){var stackHigh=HEAPU32[pthread_ptr+52>>2];var stackSize=HEAPU32[pthread_ptr+56>>2];var stackLow=stackHigh-stackSize;_emscripten_stack_set_limits(stackHigh,stackLow);stackRestore(stackHigh)}var wasmTableMirror=[];var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func){wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func};var invokeEntryPoint=(ptr,arg)=>{runtimeKeepaliveCounter=0;noExitRuntime=0;var result=getWasmTableEntry(ptr)(arg);function finish(result){if(keepRuntimeAlive()){EXITSTATUS=result;return}__emscripten_thread_exit(result)}finish(result)};var noExitRuntime=true;var registerTLSInit=tlsInitFunc=>PThread.tlsInitFunctions.push(tlsInitFunc);var wasmMemory;class ExceptionInfo{constructor(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24}set_type(type){HEAPU32[this.ptr+4>>2]=type}get_type(){return HEAPU32[this.ptr+4>>2]}set_destructor(destructor){HEAPU32[this.ptr+8>>2]=destructor}get_destructor(){return HEAPU32[this.ptr+8>>2]}set_caught(caught){caught=caught?1:0;HEAP8[this.ptr+12]=caught}get_caught(){return HEAP8[this.ptr+12]!=0}set_rethrown(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13]=rethrown}get_rethrown(){return HEAP8[this.ptr+13]!=0}init(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)}set_adjusted_ptr(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr}get_adjusted_ptr(){return HEAPU32[this.ptr+16>>2]}}var exceptionLast=0;var uncaughtExceptionCount=0;var ___cxa_throw=(ptr,type,destructor)=>{var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw exceptionLast};function pthreadCreateProxied(pthread_ptr,attr,startRoutine,arg){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(2,0,1,pthread_ptr,attr,startRoutine,arg);return ___pthread_create_js(pthread_ptr,attr,startRoutine,arg)}var _emscripten_has_threading_support=()=>!!globalThis.SharedArrayBuffer;var ___pthread_create_js=(pthread_ptr,attr,startRoutine,arg)=>{if(!_emscripten_has_threading_support()){return 6}var transferList=[];var error=0;if(ENVIRONMENT_IS_PTHREAD&&(transferList.length===0||error)){return pthreadCreateProxied(pthread_ptr,attr,startRoutine,arg)}if(error)return error;var threadParams={startRoutine,pthread_ptr,arg,transferList};if(ENVIRONMENT_IS_PTHREAD){threadParams.cmd="spawnThread";postMessage(threadParams,transferList);return 0}return spawnThread(threadParams)};var __abort_js=()=>abort("");var __emscripten_init_main_thread_js=tb=>{__emscripten_thread_init(tb,!ENVIRONMENT_IS_WORKER,1,!ENVIRONMENT_IS_WEB,65536,false);PThread.threadInitTLS()};var handleException=e=>{if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)};var maybeExit=()=>{if(!keepRuntimeAlive()){try{if(ENVIRONMENT_IS_PTHREAD){if(_pthread_self())__emscripten_thread_exit(EXITSTATUS);return}_exit(EXITSTATUS)}catch(e){handleException(e)}}};var callUserCallback=func=>{if(ABORT){return}try{func();maybeExit()}catch(e){handleException(e)}};var __emscripten_thread_mailbox_await=pthread_ptr=>{if(Atomics.waitAsync){var wait=Atomics.waitAsync(HEAP32,pthread_ptr>>2,pthread_ptr);wait.value.then(checkMailbox);var waitingAsync=pthread_ptr+128;Atomics.store(HEAP32,waitingAsync>>2,1)}};var checkMailbox=()=>callUserCallback(()=>{var pthread_ptr=_pthread_self();if(pthread_ptr){__emscripten_thread_mailbox_await(pthread_ptr);__emscripten_check_mailbox()}});var __emscripten_notify_mailbox_postmessage=(targetThread,currThreadId)=>{if(targetThread==currThreadId){setTimeout(checkMailbox)}else if(ENVIRONMENT_IS_PTHREAD){postMessage({targetThread,cmd:"checkMailbox"})}else{var worker=PThread.pthreads[targetThread];if(!worker){return}worker.postMessage({cmd:"checkMailbox"})}};var proxiedJSCallArgs=[];var __emscripten_receive_on_main_thread_js=(funcIndex,emAsmAddr,callingThread,numCallArgs,args)=>{numCallArgs/=2;proxiedJSCallArgs.length=numCallArgs;var b=args>>3;for(var i=0;i<numCallArgs;i++){if(HEAP64[b+2*i]){proxiedJSCallArgs[i]=HEAP64[b+2*i+1]}else{proxiedJSCallArgs[i]=HEAPF64[b+2*i+1]}}var func=proxiedFunctionTable[funcIndex];PThread.currentProxiedOperationCallerThread=callingThread;var rtn=func(...proxiedJSCallArgs);PThread.currentProxiedOperationCallerThread=0;return rtn};var __emscripten_thread_cleanup=thread=>{if(!ENVIRONMENT_IS_PTHREAD)cleanupThread(thread);else postMessage({cmd:"cleanupThread",thread})};var __emscripten_thread_set_strongref=thread=>{if(ENVIRONMENT_IS_NODE){PThread.pthreads[thread].ref()}};var _emscripten_get_now=()=>performance.timeOrigin+performance.now();var _emscripten_check_blocking_allowed=()=>{};var runtimeKeepalivePush=()=>{runtimeKeepaliveCounter+=1};var _emscripten_exit_with_live_runtime=()=>{runtimeKeepalivePush();throw"unwind"};var getHeapMax=()=>HEAPU8.length;var _emscripten_get_heap_max=()=>getHeapMax();var _emscripten_num_logical_cores=()=>ENVIRONMENT_IS_NODE?require("os").cpus().length:navigator["hardwareConcurrency"];var abortOnCannotGrowMemory=requestedSize=>{abort("OOM")};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;abortOnCannotGrowMemory(requestedSize)};var printCharBuffers=[null,[],[]];var UTF8Decoder=globalThis.TextDecoder&&new TextDecoder;var findStringEnd=(heapOrArray,idx,maxBytesToRead,ignoreNul)=>{var maxIdx=idx+maxBytesToRead;if(ignoreNul)return maxIdx;while(heapOrArray[idx]&&!(idx>=maxIdx))++idx;return idx};var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead,ignoreNul)=>{var endPtr=findStringEnd(heapOrArray,idx,maxBytesToRead,ignoreNul);if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.buffer instanceof ArrayBuffer?heapOrArray.subarray(idx,endPtr):heapOrArray.slice(idx,endPtr))}var str="";while(idx<endPtr){var u0=heapOrArray[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heapOrArray[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heapOrArray[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heapOrArray[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}return str};var printChar=(stream,curr)=>{var buffer=printCharBuffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer));buffer.length=0}else{buffer.push(curr)}};function _fd_write(fd,iov,iovcnt,pnum){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(3,0,1,fd,iov,iovcnt,pnum);var num=0;for(var i=0;i<iovcnt;i++){var ptr=HEAPU32[iov>>2];var len=HEAPU32[iov+4>>2];iov+=8;for(var j=0;j<len;j++){printChar(fd,HEAPU8[ptr+j])}num+=len}HEAPU32[pnum>>2]=num;return 0}PThread.init();{initMemory();if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].shift()()}}}Module["wasmMemory"]=wasmMemory;var proxiedFunctionTable=[_proc_exit,exitOnMainThread,pthreadCreateProxied,_fd_write];var _fromLngLat,_project,_unproject,_calculatePerspectiveRatio,_setThreadPoolSize,_projectLngLatToClipSpace,_calculateBillboardDepthKey,_calculateSurfaceDepthKey,_prepareDrawSpriteImages,__emscripten_tls_init,_pthread_self,__emscripten_thread_init,__emscripten_thread_crashed,__emscripten_run_js_on_main_thread,__emscripten_thread_free_data,__emscripten_thread_exit,_malloc,_free,__emscripten_check_mailbox,_emscripten_stack_set_limits,__emscripten_stack_restore,__emscripten_stack_alloc,_emscripten_stack_get_current,__indirect_function_table,wasmTable;function assignWasmExports(wasmExports){_fromLngLat=Module["_fromLngLat"]=wasmExports["t"];_project=Module["_project"]=wasmExports["u"];_unproject=Module["_unproject"]=wasmExports["v"];_calculatePerspectiveRatio=Module["_calculatePerspectiveRatio"]=wasmExports["w"];_setThreadPoolSize=Module["_setThreadPoolSize"]=wasmExports["y"];_projectLngLatToClipSpace=Module["_projectLngLatToClipSpace"]=wasmExports["z"];_calculateBillboardDepthKey=Module["_calculateBillboardDepthKey"]=wasmExports["A"];_calculateSurfaceDepthKey=Module["_calculateSurfaceDepthKey"]=wasmExports["B"];_prepareDrawSpriteImages=Module["_prepareDrawSpriteImages"]=wasmExports["C"];__emscripten_tls_init=wasmExports["D"];_pthread_self=wasmExports["E"];__emscripten_thread_init=wasmExports["F"];__emscripten_thread_crashed=wasmExports["G"];__emscripten_run_js_on_main_thread=wasmExports["H"];__emscripten_thread_free_data=wasmExports["I"];__emscripten_thread_exit=wasmExports["J"];_malloc=Module["_malloc"]=wasmExports["K"];_free=Module["_free"]=wasmExports["L"];__emscripten_check_mailbox=wasmExports["M"];_emscripten_stack_set_limits=wasmExports["N"];__emscripten_stack_restore=wasmExports["O"];__emscripten_stack_alloc=wasmExports["P"];_emscripten_stack_get_current=wasmExports["Q"];__indirect_function_table=wasmTable=wasmExports["x"]}var wasmImports;function assignWasmImports(){wasmImports={f:___cxa_throw,g:___pthread_create_js,o:__abort_js,k:__emscripten_init_main_thread_js,q:__emscripten_notify_mailbox_postmessage,l:__emscripten_receive_on_main_thread_js,c:__emscripten_thread_cleanup,j:__emscripten_thread_mailbox_await,i:__emscripten_thread_set_strongref,d:_emscripten_check_blocking_allowed,h:_emscripten_exit_with_live_runtime,m:_emscripten_get_heap_max,b:_emscripten_get_now,n:_emscripten_num_logical_cores,p:_emscripten_resize_heap,r:_exit,e:_fd_write,a:wasmMemory}}function run(){if(runDependencies>0){dependenciesFulfilled=run;return}if(ENVIRONMENT_IS_PTHREAD){readyPromiseResolve?.(Module);initRuntime();return}preRun();if(runDependencies>0){dependenciesFulfilled=run;return}function doRun(){Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve?.(Module);Module["onRuntimeInitialized"]?.();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(()=>{setTimeout(()=>Module["setStatus"](""),1);doRun()},1)}else{doRun()}}var wasmExports;if(!ENVIRONMENT_IS_PTHREAD){wasmExports=await (createWasm());run()}if(runtimeInitialized){moduleRtn=Module}else{moduleRtn=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject})}
1
+ async function Module(moduleArg={}){var moduleRtn;var Module=moduleArg;var ENVIRONMENT_IS_WEB=!!globalThis.window;var ENVIRONMENT_IS_WORKER=!!globalThis.WorkerGlobalScope;var ENVIRONMENT_IS_NODE=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";var ENVIRONMENT_IS_PTHREAD=ENVIRONMENT_IS_WORKER&&self.name?.startsWith("em-pthread");if(ENVIRONMENT_IS_NODE){const{createRequire}=await import("module");var require=createRequire(import.meta.url);var worker_threads=require("worker_threads");global.Worker=worker_threads.Worker;ENVIRONMENT_IS_WORKER=!worker_threads.isMainThread;ENVIRONMENT_IS_PTHREAD=ENVIRONMENT_IS_WORKER&&worker_threads["workerData"]=="em-pthread"}var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var _scriptName=import.meta.url;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){var fs=require("fs");if(_scriptName.startsWith("file:")){scriptDirectory=require("path").dirname(require("url").fileURLToPath(_scriptName))+"/"}readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:"utf8");return ret};if(process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(".",_scriptName).href}catch{}if(!ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=async url=>{if(isFileURI(url)){return new Promise((resolve,reject)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){resolve(xhr.response);return}reject(xhr.status)};xhr.onerror=reject;xhr.send(null)})}var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{}var defaultPrint=console.log.bind(console);var defaultPrintErr=console.error.bind(console);if(ENVIRONMENT_IS_NODE){var utils=require("util");var stringify=a=>typeof a=="object"?utils.inspect(a):a;defaultPrint=(...args)=>fs.writeSync(1,args.map(stringify).join(" ")+"\n");defaultPrintErr=(...args)=>fs.writeSync(2,args.map(stringify).join(" ")+"\n")}var out=defaultPrint;var err=defaultPrintErr;var wasmBinary;var wasmModule;var ABORT=false;var EXITSTATUS;var isFileURI=filename=>filename.startsWith("file://");var readyPromiseResolve,readyPromiseReject;if(ENVIRONMENT_IS_NODE&&ENVIRONMENT_IS_PTHREAD){var parentPort=worker_threads["parentPort"];parentPort.on("message",msg=>global.onmessage?.({data:msg}));Object.assign(globalThis,{self:global,postMessage:msg=>parentPort["postMessage"](msg)});process.on("uncaughtException",err=>{postMessage({cmd:"uncaughtException",error:err});process.exit(1)})}var startWorker;if(ENVIRONMENT_IS_PTHREAD){var initializedJS=false;self.onunhandledrejection=e=>{throw e.reason||e};function handleMessage(e){try{var msgData=e["data"];var cmd=msgData.cmd;if(cmd==="load"){let messageQueue=[];self.onmessage=e=>messageQueue.push(e);startWorker=()=>{postMessage({cmd:"loaded"});for(let msg of messageQueue){handleMessage(msg)}self.onmessage=handleMessage};for(const handler of msgData.handlers){if(!Module[handler]||Module[handler].proxy){Module[handler]=(...args)=>{postMessage({cmd:"callHandler",handler,args})};if(handler=="print")out=Module[handler];if(handler=="printErr")err=Module[handler]}}wasmMemory=msgData.wasmMemory;updateMemoryViews();wasmModule=msgData.wasmModule;createWasm();run()}else if(cmd==="run"){establishStackSpace(msgData.pthread_ptr);__emscripten_thread_init(msgData.pthread_ptr,0,0,1,0,0);PThread.threadInitTLS();__emscripten_thread_mailbox_await(msgData.pthread_ptr);if(!initializedJS){initializedJS=true}try{invokeEntryPoint(msgData.start_routine,msgData.arg)}catch(ex){if(ex!="unwind"){throw ex}}}else if(msgData.target==="setimmediate"){}else if(cmd==="checkMailbox"){if(initializedJS){checkMailbox()}}else if(cmd){err(`worker: received unknown command ${cmd}`);err(msgData)}}catch(ex){__emscripten_thread_crashed();throw ex}}self.onmessage=handleMessage}var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var HEAP64,HEAPU64;var runtimeInitialized=false;function updateMemoryViews(){var b=wasmMemory.buffer;HEAP8=new Int8Array(b);HEAP16=new Int16Array(b);HEAPU8=new Uint8Array(b);HEAPU16=new Uint16Array(b);HEAP32=new Int32Array(b);HEAPU32=new Uint32Array(b);HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b);HEAPU64=new BigUint64Array(b)}function initMemory(){if(ENVIRONMENT_IS_PTHREAD){return}if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||536870912;wasmMemory=new WebAssembly.Memory({initial:INITIAL_MEMORY/65536,maximum:INITIAL_MEMORY/65536,shared:true})}updateMemoryViews()}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true;if(ENVIRONMENT_IS_PTHREAD)return startWorker();wasmExports["s"]()}function postRun(){if(ENVIRONMENT_IS_PTHREAD){return}if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(onPostRuns)}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject?.(e);throw e}var wasmBinaryFile;function findWasmBinary(){if(Module["locateFile"]){return locateFile("offloads-simd-mt.wasm")}return new URL("offloads-simd-mt.wasm",import.meta.url).href}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){assignWasmImports();var imports={a:wasmImports};return imports}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;registerTLSInit(wasmExports["H"]);assignWasmExports(wasmExports);wasmModule=module;return wasmExports}function receiveInstantiationResult(result){return receiveInstance(result["instance"],result["module"])}var info=getWasmImports();if(Module["instantiateWasm"]){return new Promise((resolve,reject)=>{Module["instantiateWasm"](info,(inst,mod)=>{resolve(receiveInstance(inst,mod))})})}if(ENVIRONMENT_IS_PTHREAD){var instance=new WebAssembly.Instance(wasmModule,getWasmImports());return receiveInstance(instance,wasmModule)}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var terminateWorker=worker=>{worker.terminate();worker.onmessage=e=>{}};var cleanupThread=pthread_ptr=>{var worker=PThread.pthreads[pthread_ptr];PThread.returnWorkerToPool(worker)};var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.push(cb);var runDependencies=0;var dependenciesFulfilled=null;var removeRunDependency=id=>{runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(runDependencies==0){if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}};var addRunDependency=id=>{runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)};var spawnThread=threadParams=>{var worker=PThread.getNewWorker();if(!worker){return 6}PThread.runningWorkers.push(worker);PThread.pthreads[threadParams.pthread_ptr]=worker;worker.pthread_ptr=threadParams.pthread_ptr;var msg={cmd:"run",start_routine:threadParams.startRoutine,arg:threadParams.arg,pthread_ptr:threadParams.pthread_ptr};if(ENVIRONMENT_IS_NODE){worker.unref()}worker.postMessage(msg,threadParams.transferList);return 0};var runtimeKeepaliveCounter=0;var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var stackSave=()=>_emscripten_stack_get_current();var stackRestore=val=>__emscripten_stack_restore(val);var stackAlloc=sz=>__emscripten_stack_alloc(sz);var proxyToMainThread=(funcIndex,emAsmAddr,sync,...callArgs)=>{var serializedNumCallArgs=callArgs.length*2;var sp=stackSave();var args=stackAlloc(serializedNumCallArgs*8);var b=args>>3;for(var i=0;i<callArgs.length;i++){var arg=callArgs[i];if(typeof arg=="bigint"){HEAP64[b+2*i]=1n;HEAP64[b+2*i+1]=arg}else{HEAP64[b+2*i]=0n;HEAPF64[b+2*i+1]=arg}}var rtn=__emscripten_run_js_on_main_thread(funcIndex,emAsmAddr,serializedNumCallArgs,args,sync);stackRestore(sp);return rtn};function _proc_exit(code){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(0,0,1,code);EXITSTATUS=code;if(!keepRuntimeAlive()){PThread.terminateAllThreads();Module["onExit"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))}function exitOnMainThread(returnCode){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(1,0,0,returnCode);_exit(returnCode)}var exitJS=(status,implicit)=>{EXITSTATUS=status;if(ENVIRONMENT_IS_PTHREAD){exitOnMainThread(status);throw"unwind"}_proc_exit(status)};var _exit=exitJS;var PThread={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],pthreads:{},init(){if(!ENVIRONMENT_IS_PTHREAD){PThread.initMainThread()}},initMainThread(){var pthreadPoolSize=4;while(pthreadPoolSize--){PThread.allocateUnusedWorker()}addOnPreRun(async()=>{var pthreadPoolReady=PThread.loadWasmModuleToAllWorkers();addRunDependency("loading-workers");await pthreadPoolReady;removeRunDependency("loading-workers")})},terminateAllThreads:()=>{for(var worker of PThread.runningWorkers){terminateWorker(worker)}for(var worker of PThread.unusedWorkers){terminateWorker(worker)}PThread.unusedWorkers=[];PThread.runningWorkers=[];PThread.pthreads={}},returnWorkerToPool:worker=>{var pthread_ptr=worker.pthread_ptr;delete PThread.pthreads[pthread_ptr];PThread.unusedWorkers.push(worker);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(worker),1);worker.pthread_ptr=0;__emscripten_thread_free_data(pthread_ptr)},threadInitTLS(){PThread.tlsInitFunctions.forEach(f=>f())},loadWasmModuleToWorker:worker=>new Promise(onFinishedLoading=>{worker.onmessage=e=>{var d=e["data"];var cmd=d.cmd;if(d.targetThread&&d.targetThread!=_pthread_self()){var targetWorker=PThread.pthreads[d.targetThread];if(targetWorker){targetWorker.postMessage(d,d.transferList)}else{err(`Internal error! Worker sent a message "${cmd}" to target pthread ${d.targetThread}, but that thread no longer exists!`)}return}if(cmd==="checkMailbox"){checkMailbox()}else if(cmd==="spawnThread"){spawnThread(d)}else if(cmd==="cleanupThread"){callUserCallback(()=>cleanupThread(d.thread))}else if(cmd==="loaded"){worker.loaded=true;if(ENVIRONMENT_IS_NODE&&!worker.pthread_ptr){worker.unref()}onFinishedLoading(worker)}else if(d.target==="setimmediate"){worker.postMessage(d)}else if(cmd==="uncaughtException"){worker.onerror(d.error)}else if(cmd==="callHandler"){Module[d.handler](...d.args)}else if(cmd){err(`worker sent an unknown command ${cmd}`)}};worker.onerror=e=>{var message="worker sent an error!";err(`${message} ${e.filename}:${e.lineno}: ${e.message}`);throw e};if(ENVIRONMENT_IS_NODE){worker.on("message",data=>worker.onmessage({data}));worker.on("error",e=>worker.onerror(e))}var handlers=[];var knownHandlers=["onExit","onAbort","print","printErr"];for(var handler of knownHandlers){if(Module.propertyIsEnumerable(handler)){handlers.push(handler)}}worker.postMessage({cmd:"load",handlers,wasmMemory,wasmModule})}),async loadWasmModuleToAllWorkers(){if(ENVIRONMENT_IS_PTHREAD){return}let pthreadPoolReady=Promise.all(PThread.unusedWorkers.map(PThread.loadWasmModuleToWorker));return pthreadPoolReady},allocateUnusedWorker(){var worker;if(Module["mainScriptUrlOrBlob"]){var pthreadMainJs=Module["mainScriptUrlOrBlob"];if(typeof pthreadMainJs!="string"){pthreadMainJs=URL.createObjectURL(pthreadMainJs)}worker=new Worker(pthreadMainJs,{type:"module",workerData:"em-pthread",name:"em-pthread"})}else worker=new Worker(new URL("offloads-simd-mt.js",import.meta.url),{type:"module",workerData:"em-pthread",name:"em-pthread"});PThread.unusedWorkers.push(worker)},getNewWorker(){if(PThread.unusedWorkers.length==0){PThread.allocateUnusedWorker();PThread.loadWasmModuleToWorker(PThread.unusedWorkers[0])}return PThread.unusedWorkers.pop()}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.push(cb);function establishStackSpace(pthread_ptr){var stackHigh=HEAPU32[pthread_ptr+52>>2];var stackSize=HEAPU32[pthread_ptr+56>>2];var stackLow=stackHigh-stackSize;_emscripten_stack_set_limits(stackHigh,stackLow);stackRestore(stackHigh)}var wasmTableMirror=[];var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func){wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func};var invokeEntryPoint=(ptr,arg)=>{runtimeKeepaliveCounter=0;noExitRuntime=0;var result=getWasmTableEntry(ptr)(arg);function finish(result){if(keepRuntimeAlive()){EXITSTATUS=result;return}__emscripten_thread_exit(result)}finish(result)};var noExitRuntime=true;var registerTLSInit=tlsInitFunc=>PThread.tlsInitFunctions.push(tlsInitFunc);var wasmMemory;class ExceptionInfo{constructor(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24}set_type(type){HEAPU32[this.ptr+4>>2]=type}get_type(){return HEAPU32[this.ptr+4>>2]}set_destructor(destructor){HEAPU32[this.ptr+8>>2]=destructor}get_destructor(){return HEAPU32[this.ptr+8>>2]}set_caught(caught){caught=caught?1:0;HEAP8[this.ptr+12]=caught}get_caught(){return HEAP8[this.ptr+12]!=0}set_rethrown(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13]=rethrown}get_rethrown(){return HEAP8[this.ptr+13]!=0}init(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)}set_adjusted_ptr(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr}get_adjusted_ptr(){return HEAPU32[this.ptr+16>>2]}}var exceptionLast=0;var uncaughtExceptionCount=0;var ___cxa_throw=(ptr,type,destructor)=>{var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw exceptionLast};function pthreadCreateProxied(pthread_ptr,attr,startRoutine,arg){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(2,0,1,pthread_ptr,attr,startRoutine,arg);return ___pthread_create_js(pthread_ptr,attr,startRoutine,arg)}var _emscripten_has_threading_support=()=>!!globalThis.SharedArrayBuffer;var ___pthread_create_js=(pthread_ptr,attr,startRoutine,arg)=>{if(!_emscripten_has_threading_support()){return 6}var transferList=[];var error=0;if(ENVIRONMENT_IS_PTHREAD&&(transferList.length===0||error)){return pthreadCreateProxied(pthread_ptr,attr,startRoutine,arg)}if(error)return error;var threadParams={startRoutine,pthread_ptr,arg,transferList};if(ENVIRONMENT_IS_PTHREAD){threadParams.cmd="spawnThread";postMessage(threadParams,transferList);return 0}return spawnThread(threadParams)};var __abort_js=()=>abort("");var __emscripten_init_main_thread_js=tb=>{__emscripten_thread_init(tb,!ENVIRONMENT_IS_WORKER,1,!ENVIRONMENT_IS_WEB,65536,false);PThread.threadInitTLS()};var handleException=e=>{if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)};var maybeExit=()=>{if(!keepRuntimeAlive()){try{if(ENVIRONMENT_IS_PTHREAD){if(_pthread_self())__emscripten_thread_exit(EXITSTATUS);return}_exit(EXITSTATUS)}catch(e){handleException(e)}}};var callUserCallback=func=>{if(ABORT){return}try{func();maybeExit()}catch(e){handleException(e)}};var __emscripten_thread_mailbox_await=pthread_ptr=>{if(Atomics.waitAsync){var wait=Atomics.waitAsync(HEAP32,pthread_ptr>>2,pthread_ptr);wait.value.then(checkMailbox);var waitingAsync=pthread_ptr+128;Atomics.store(HEAP32,waitingAsync>>2,1)}};var checkMailbox=()=>callUserCallback(()=>{var pthread_ptr=_pthread_self();if(pthread_ptr){__emscripten_thread_mailbox_await(pthread_ptr);__emscripten_check_mailbox()}});var __emscripten_notify_mailbox_postmessage=(targetThread,currThreadId)=>{if(targetThread==currThreadId){setTimeout(checkMailbox)}else if(ENVIRONMENT_IS_PTHREAD){postMessage({targetThread,cmd:"checkMailbox"})}else{var worker=PThread.pthreads[targetThread];if(!worker){return}worker.postMessage({cmd:"checkMailbox"})}};var proxiedJSCallArgs=[];var __emscripten_receive_on_main_thread_js=(funcIndex,emAsmAddr,callingThread,numCallArgs,args)=>{numCallArgs/=2;proxiedJSCallArgs.length=numCallArgs;var b=args>>3;for(var i=0;i<numCallArgs;i++){if(HEAP64[b+2*i]){proxiedJSCallArgs[i]=HEAP64[b+2*i+1]}else{proxiedJSCallArgs[i]=HEAPF64[b+2*i+1]}}var func=proxiedFunctionTable[funcIndex];PThread.currentProxiedOperationCallerThread=callingThread;var rtn=func(...proxiedJSCallArgs);PThread.currentProxiedOperationCallerThread=0;return rtn};var __emscripten_thread_cleanup=thread=>{if(!ENVIRONMENT_IS_PTHREAD)cleanupThread(thread);else postMessage({cmd:"cleanupThread",thread})};var __emscripten_thread_set_strongref=thread=>{if(ENVIRONMENT_IS_NODE){PThread.pthreads[thread].ref()}};var _emscripten_get_now=()=>performance.timeOrigin+performance.now();var _emscripten_check_blocking_allowed=()=>{};var runtimeKeepalivePush=()=>{runtimeKeepaliveCounter+=1};var _emscripten_exit_with_live_runtime=()=>{runtimeKeepalivePush();throw"unwind"};var getHeapMax=()=>HEAPU8.length;var _emscripten_get_heap_max=()=>getHeapMax();var _emscripten_num_logical_cores=()=>ENVIRONMENT_IS_NODE?require("os").cpus().length:navigator["hardwareConcurrency"];var abortOnCannotGrowMemory=requestedSize=>{abort("OOM")};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;abortOnCannotGrowMemory(requestedSize)};var printCharBuffers=[null,[],[]];var UTF8Decoder=globalThis.TextDecoder&&new TextDecoder;var findStringEnd=(heapOrArray,idx,maxBytesToRead,ignoreNul)=>{var maxIdx=idx+maxBytesToRead;if(ignoreNul)return maxIdx;while(heapOrArray[idx]&&!(idx>=maxIdx))++idx;return idx};var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead,ignoreNul)=>{var endPtr=findStringEnd(heapOrArray,idx,maxBytesToRead,ignoreNul);if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.buffer instanceof ArrayBuffer?heapOrArray.subarray(idx,endPtr):heapOrArray.slice(idx,endPtr))}var str="";while(idx<endPtr){var u0=heapOrArray[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heapOrArray[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heapOrArray[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heapOrArray[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}return str};var printChar=(stream,curr)=>{var buffer=printCharBuffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer));buffer.length=0}else{buffer.push(curr)}};function _fd_write(fd,iov,iovcnt,pnum){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(3,0,1,fd,iov,iovcnt,pnum);var num=0;for(var i=0;i<iovcnt;i++){var ptr=HEAPU32[iov>>2];var len=HEAPU32[iov+4>>2];iov+=8;for(var j=0;j<len;j++){printChar(fd,HEAPU8[ptr+j])}num+=len}HEAPU32[pnum>>2]=num;return 0}PThread.init();{initMemory();if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].shift()()}}}Module["wasmMemory"]=wasmMemory;var proxiedFunctionTable=[_proc_exit,exitOnMainThread,pthreadCreateProxied,_fd_write];var _fromLngLat,_project,_unproject,_calculatePerspectiveRatio,_setThreadPoolSize,_projectLngLatToClipSpace,_calculateBillboardDepthKey,_calculateSurfaceDepthKey,_prepareDrawSpriteImages,_evaluateDistanceInterpolations,_evaluateDegreeInterpolations,_evaluateSpriteInterpolations,_processInterpolations,__emscripten_tls_init,_pthread_self,__emscripten_thread_init,__emscripten_thread_crashed,__emscripten_run_js_on_main_thread,__emscripten_thread_free_data,__emscripten_thread_exit,_malloc,_free,__emscripten_check_mailbox,_emscripten_stack_set_limits,__emscripten_stack_restore,__emscripten_stack_alloc,_emscripten_stack_get_current,__indirect_function_table,wasmTable;function assignWasmExports(wasmExports){_fromLngLat=Module["_fromLngLat"]=wasmExports["t"];_project=Module["_project"]=wasmExports["u"];_unproject=Module["_unproject"]=wasmExports["v"];_calculatePerspectiveRatio=Module["_calculatePerspectiveRatio"]=wasmExports["w"];_setThreadPoolSize=Module["_setThreadPoolSize"]=wasmExports["y"];_projectLngLatToClipSpace=Module["_projectLngLatToClipSpace"]=wasmExports["z"];_calculateBillboardDepthKey=Module["_calculateBillboardDepthKey"]=wasmExports["A"];_calculateSurfaceDepthKey=Module["_calculateSurfaceDepthKey"]=wasmExports["B"];_prepareDrawSpriteImages=Module["_prepareDrawSpriteImages"]=wasmExports["C"];_evaluateDistanceInterpolations=Module["_evaluateDistanceInterpolations"]=wasmExports["D"];_evaluateDegreeInterpolations=Module["_evaluateDegreeInterpolations"]=wasmExports["E"];_evaluateSpriteInterpolations=Module["_evaluateSpriteInterpolations"]=wasmExports["F"];_processInterpolations=Module["_processInterpolations"]=wasmExports["G"];__emscripten_tls_init=wasmExports["H"];_pthread_self=wasmExports["I"];__emscripten_thread_init=wasmExports["J"];__emscripten_thread_crashed=wasmExports["K"];__emscripten_run_js_on_main_thread=wasmExports["L"];__emscripten_thread_free_data=wasmExports["M"];__emscripten_thread_exit=wasmExports["N"];_malloc=Module["_malloc"]=wasmExports["O"];_free=Module["_free"]=wasmExports["P"];__emscripten_check_mailbox=wasmExports["Q"];_emscripten_stack_set_limits=wasmExports["R"];__emscripten_stack_restore=wasmExports["S"];__emscripten_stack_alloc=wasmExports["T"];_emscripten_stack_get_current=wasmExports["U"];__indirect_function_table=wasmTable=wasmExports["x"]}var wasmImports;function assignWasmImports(){wasmImports={f:___cxa_throw,g:___pthread_create_js,o:__abort_js,k:__emscripten_init_main_thread_js,q:__emscripten_notify_mailbox_postmessage,l:__emscripten_receive_on_main_thread_js,c:__emscripten_thread_cleanup,j:__emscripten_thread_mailbox_await,i:__emscripten_thread_set_strongref,d:_emscripten_check_blocking_allowed,h:_emscripten_exit_with_live_runtime,m:_emscripten_get_heap_max,b:_emscripten_get_now,n:_emscripten_num_logical_cores,p:_emscripten_resize_heap,r:_exit,e:_fd_write,a:wasmMemory}}function run(){if(runDependencies>0){dependenciesFulfilled=run;return}if(ENVIRONMENT_IS_PTHREAD){readyPromiseResolve?.(Module);initRuntime();return}preRun();if(runDependencies>0){dependenciesFulfilled=run;return}function doRun(){Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve?.(Module);Module["onRuntimeInitialized"]?.();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(()=>{setTimeout(()=>Module["setStatus"](""),1);doRun()},1)}else{doRun()}}var wasmExports;if(!ENVIRONMENT_IS_PTHREAD){wasmExports=await (createWasm());run()}if(runtimeInitialized){moduleRtn=Module}else{moduleRtn=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject})}
2
2
  ;return moduleRtn}export default Module;var isPthread=globalThis.self?.name?.startsWith("em-pthread");var isNode=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";if(isNode)isPthread=(await import("worker_threads")).workerData==="em-pthread";isPthread&&Module();
Binary file