maplibre-gl-layers 0.11.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -2
- package/dist/SpriteLayer.d.ts +8 -52
- package/dist/calculationHost.d.ts +63 -0
- package/dist/config.d.ts +18 -0
- package/dist/const.d.ts +51 -13
- package/dist/default.d.ts +29 -0
- package/dist/degreeInterpolation.d.ts +2 -2
- package/dist/distanceInterpolation.d.ts +2 -2
- package/dist/easing.d.ts +2 -2
- package/dist/image.d.ts +32 -0
- package/dist/index.cjs +4340 -1979
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.mjs +4340 -1980
- package/dist/index.mjs.map +1 -1
- package/dist/internalTypes.d.ts +340 -77
- package/dist/interpolation.d.ts +2 -2
- package/dist/interpolationChannels.d.ts +2 -2
- package/dist/looseQuadTree.d.ts +10 -10
- package/dist/mapLibreProjectionHost.d.ts +18 -0
- package/dist/math.d.ts +110 -171
- package/dist/projectionHost.d.ts +60 -0
- package/dist/rotationInterpolation.d.ts +2 -2
- package/dist/shader.d.ts +83 -0
- package/dist/types.d.ts +16 -8
- package/dist/utils.d.ts +25 -20
- package/dist/wasmCalculationHost.d.ts +68 -0
- package/dist/wasmHost.d.ts +125 -0
- package/dist/wasmProjectionHost.d.ts +19 -0
- package/package.json +8 -7
- package/dist/location.d.ts +0 -24
package/dist/shader.d.ts
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* name: maplibre-gl-layers
|
|
3
|
+
* version: 0.12.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: e8e2cd81aeec4b10f2898c0ede5880ac56bf748d
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { SpriteAnchor, SpriteScreenPoint } from './types';
|
|
12
|
+
/** Number of components per vertex (clipPosition.xyzw + uv.xy). */
|
|
13
|
+
export declare const VERTEX_COMPONENT_COUNT = 6;
|
|
14
|
+
/** Component count for clip-space position attributes. */
|
|
15
|
+
export declare const POSITION_COMPONENT_COUNT = 4;
|
|
16
|
+
/** Component count for UV attributes. */
|
|
17
|
+
export declare const UV_COMPONENT_COUNT = 2;
|
|
18
|
+
/** Byte size of a Float32. */
|
|
19
|
+
export declare const FLOAT_SIZE: number;
|
|
20
|
+
/** Stride per vertex in bytes. */
|
|
21
|
+
export declare const VERTEX_STRIDE: number;
|
|
22
|
+
/** Byte offset for the UV attribute. */
|
|
23
|
+
export declare const UV_OFFSET: number;
|
|
24
|
+
/** Vertex count required to draw one sprite as two triangles. */
|
|
25
|
+
export declare const QUAD_VERTEX_COUNT = 6;
|
|
26
|
+
/** Shared vertex shader that converts screen-space vertices when requested. */
|
|
27
|
+
export declare const VERTEX_SHADER_SOURCE: "\nattribute vec4 a_position;\nattribute vec2 a_uv;\nuniform vec2 u_screenToClipScale;\nuniform vec2 u_screenToClipOffset;\nuniform float u_billboardMode;\nuniform float u_surfaceMode;\nuniform vec2 u_billboardCenter;\nuniform vec2 u_billboardHalfSize;\nuniform vec2 u_billboardAnchor;\nuniform vec2 u_billboardSinCos;\nuniform float u_surfaceClipEnabled;\nuniform vec4 u_surfaceClipCenter;\nuniform vec4 u_surfaceClipBasisEast;\nuniform vec4 u_surfaceClipBasisNorth;\nuniform float u_surfaceDepthBias;\nvarying vec2 v_uv;\nvec2 computeBillboardCorner(vec2 uv) {\n vec2 base = vec2(uv.x * 2.0 - 1.0, 1.0 - uv.y * 2.0);\n vec2 anchorShift = vec2(u_billboardAnchor.x * u_billboardHalfSize.x, u_billboardAnchor.y * u_billboardHalfSize.y);\n vec2 shifted = vec2(base.x * u_billboardHalfSize.x, base.y * u_billboardHalfSize.y) - anchorShift;\n float sinR = u_billboardSinCos.x;\n float cosR = u_billboardSinCos.y;\n vec2 rotated = vec2(\n shifted.x * cosR - shifted.y * sinR,\n shifted.x * sinR + shifted.y * cosR\n );\n return vec2(\n u_billboardCenter.x + rotated.x,\n u_billboardCenter.y - rotated.y\n );\n}\nvec4 computeSurfaceCorner(vec2 corner) {\n if (u_surfaceClipEnabled < 0.5) {\n return vec4(0.0, 0.0, 0.0, 1.0);\n }\n vec4 clip = u_surfaceClipCenter\n + (corner.x * u_surfaceClipBasisEast)\n + (corner.y * u_surfaceClipBasisNorth);\n clip.z += u_surfaceDepthBias * clip.w;\n return clip;\n}\nvoid main() {\n v_uv = a_uv;\n vec4 position;\n if (u_billboardMode > 0.5) {\n vec2 screenPosition = computeBillboardCorner(a_uv);\n position = vec4(screenPosition, 0.0, 1.0);\n } else if (u_surfaceMode > 0.5) {\n vec2 baseCorner = vec2(a_position.x, a_position.y);\n position = computeSurfaceCorner(baseCorner);\n } else {\n position = a_position;\n }\n position.xy = position.xy * u_screenToClipScale + u_screenToClipOffset;\n gl_Position = position;\n}\n";
|
|
28
|
+
/** Fragment shader that applies texture sampling and opacity. */
|
|
29
|
+
export declare const FRAGMENT_SHADER_SOURCE: "\nprecision mediump float;\nuniform sampler2D u_texture;\nuniform float u_opacity;\nvarying vec2 v_uv;\nvoid main() {\n vec4 texel = texture2D(u_texture, v_uv);\n gl_FragColor = vec4(texel.rgb, texel.a) * u_opacity;\n}\n";
|
|
30
|
+
/** Initial vertex data for a unit quad. */
|
|
31
|
+
export declare const INITIAL_QUAD_VERTICES: Float32Array<ArrayBuffer>;
|
|
32
|
+
/** Scratch buffer rewritten for each draw call. */
|
|
33
|
+
export declare const QUAD_VERTEX_SCRATCH: Float32Array<ArrayBuffer>;
|
|
34
|
+
/** Vertex shader for debug hit-test outline rendering using screen coordinates. */
|
|
35
|
+
export declare const DEBUG_OUTLINE_VERTEX_SHADER_SOURCE: "\nattribute vec4 a_position;\nuniform vec2 u_screenToClipScale;\nuniform vec2 u_screenToClipOffset;\nvoid main() {\n vec4 position = a_position;\n position.xy = position.xy * u_screenToClipScale + u_screenToClipOffset;\n gl_Position = position;\n}\n";
|
|
36
|
+
/** Fragment shader emitting a solid color for debug outlines. */
|
|
37
|
+
export declare const DEBUG_OUTLINE_FRAGMENT_SHADER_SOURCE: "\nprecision mediump float;\nuniform vec4 u_color;\nvoid main() {\n gl_FragColor = u_color;\n}\n";
|
|
38
|
+
/** Number of vertices required to outline a quad using LINE_LOOP. */
|
|
39
|
+
export declare const DEBUG_OUTLINE_VERTEX_COUNT = 4;
|
|
40
|
+
/** Components per debug outline vertex (clipPosition.xyzw). */
|
|
41
|
+
export declare const DEBUG_OUTLINE_POSITION_COMPONENT_COUNT = 4;
|
|
42
|
+
/** Stride in bytes for debug outline vertices. */
|
|
43
|
+
export declare const DEBUG_OUTLINE_VERTEX_STRIDE: number;
|
|
44
|
+
/** Scratch buffer reused when emitting debug outlines. */
|
|
45
|
+
export declare const DEBUG_OUTLINE_VERTEX_SCRATCH: Float32Array<ArrayBuffer>;
|
|
46
|
+
/** Solid red RGBA color used for debug outlines. */
|
|
47
|
+
export declare const DEBUG_OUTLINE_COLOR: readonly [number, number, number, number];
|
|
48
|
+
/** Corner traversal order used when outlining a quad without crossing diagonals. */
|
|
49
|
+
export declare const DEBUG_OUTLINE_CORNER_ORDER: readonly [0, 1, 3, 2];
|
|
50
|
+
/** Base corner definitions used when expanding billboards in shaders. */
|
|
51
|
+
export declare const BILLBOARD_BASE_CORNERS: ReadonlyArray<readonly [number, number]>;
|
|
52
|
+
/** Base corner definitions used when expanding surface quads in shaders. */
|
|
53
|
+
export declare const SURFACE_BASE_CORNERS: ReadonlyArray<readonly [number, number]>;
|
|
54
|
+
export declare const computeBillboardCornersShaderModel: ({ center, halfWidth, halfHeight, anchor, rotationDeg, }: {
|
|
55
|
+
center: Readonly<SpriteScreenPoint>;
|
|
56
|
+
halfWidth: number;
|
|
57
|
+
halfHeight: number;
|
|
58
|
+
anchor?: Readonly<SpriteAnchor>;
|
|
59
|
+
rotationDeg: number;
|
|
60
|
+
}) => Array<{
|
|
61
|
+
x: number;
|
|
62
|
+
y: number;
|
|
63
|
+
u: number;
|
|
64
|
+
v: number;
|
|
65
|
+
}>;
|
|
66
|
+
/**
|
|
67
|
+
* Compiles a shader from source, throwing if compilation fails.
|
|
68
|
+
* @param {WebGLRenderingContext} glContext - Active WebGL context.
|
|
69
|
+
* @param {number} type - Shader type (`VERTEX_SHADER` or `FRAGMENT_SHADER`).
|
|
70
|
+
* @param {string} source - GLSL source code.
|
|
71
|
+
* @returns {WebGLShader} Compiled shader object.
|
|
72
|
+
* @throws When shader creation or compilation fails.
|
|
73
|
+
*/
|
|
74
|
+
export declare const compileShader: (glContext: WebGLRenderingContext, type: number, source: string) => WebGLShader;
|
|
75
|
+
/**
|
|
76
|
+
* Links a vertex and fragment shader into a WebGL program.
|
|
77
|
+
* @param {WebGLRenderingContext} glContext - Active WebGL context.
|
|
78
|
+
* @param {string} vertexSource - Vertex shader GLSL source.
|
|
79
|
+
* @param {string} fragmentSource - Fragment shader GLSL source.
|
|
80
|
+
* @returns {WebGLProgram} Linked shader program ready for use.
|
|
81
|
+
* @throws When linking fails or a program cannot be created.
|
|
82
|
+
*/
|
|
83
|
+
export declare const createShaderProgram: (glContext: WebGLRenderingContext, vertexSource: string, fragmentSource: string) => WebGLProgram;
|
package/dist/types.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* name: maplibre-gl-layers
|
|
3
|
-
* version: 0.
|
|
3
|
+
* version: 0.12.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:
|
|
8
|
+
* git.commit.hash: e8e2cd81aeec4b10f2898c0ede5880ac56bf748d
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
import { CustomLayerInterface } from 'maplibre-gl';
|
|
@@ -379,17 +379,21 @@ export interface SpriteMutateCallbacks<TTag, TSourceItem extends SpriteMutateSou
|
|
|
379
379
|
modify: (sourceItem: TSourceItem, sprite: SpriteCurrentState<TTag>, update: SpriteUpdaterEntry<TTag>) => SpriteModifierResult;
|
|
380
380
|
}
|
|
381
381
|
/**
|
|
382
|
-
* Represents a point
|
|
382
|
+
* Represents a point on anonymous-unit space.
|
|
383
383
|
*
|
|
384
|
-
* @property {number} x - Horizontal
|
|
385
|
-
* @property {number} y - Vertical
|
|
384
|
+
* @property {number} x - Horizontal (X axis) coordinate.
|
|
385
|
+
* @property {number} y - Vertical (Y axis) coordinate.
|
|
386
386
|
*/
|
|
387
|
-
export interface
|
|
388
|
-
/** Horizontal
|
|
387
|
+
export interface SpritePoint {
|
|
388
|
+
/** Horizontal (X axis) coordinate. */
|
|
389
389
|
readonly x: number;
|
|
390
|
-
/** Vertical
|
|
390
|
+
/** Vertical (Y axis) coordinate. */
|
|
391
391
|
readonly y: number;
|
|
392
392
|
}
|
|
393
|
+
/**
|
|
394
|
+
* Represents a point in screen space.
|
|
395
|
+
*/
|
|
396
|
+
export type SpriteScreenPoint = SpritePoint;
|
|
393
397
|
/**
|
|
394
398
|
* Event dispatched when a sprite is clicked or tapped.
|
|
395
399
|
*
|
|
@@ -508,6 +512,10 @@ export interface SpriteTextureFilteringOptions {
|
|
|
508
512
|
generateMipmaps?: boolean;
|
|
509
513
|
maxAnisotropy?: number;
|
|
510
514
|
}
|
|
515
|
+
/**
|
|
516
|
+
* Calculation variant. It is internal calculation methods.
|
|
517
|
+
*/
|
|
518
|
+
export type SpriteLayerCalculationVariant = 'simd' | 'nosimd' | 'disabled';
|
|
511
519
|
/**
|
|
512
520
|
* Options accepted when creating a SpriteLayer.
|
|
513
521
|
*
|
package/dist/utils.d.ts
CHANGED
|
@@ -1,32 +1,37 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* name: maplibre-gl-layers
|
|
3
|
-
* version: 0.
|
|
3
|
+
* version: 0.12.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:
|
|
8
|
+
* git.commit.hash: e8e2cd81aeec4b10f2898c0ede5880ac56bf748d
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
import {
|
|
12
|
-
export type SvgSizeResolutionErrorCode = 'size-missing' | 'viewbox-disabled' | 'invalid-dimensions';
|
|
13
|
-
export declare class SvgSizeResolutionError extends Error implements Error {
|
|
14
|
-
readonly code: SvgSizeResolutionErrorCode;
|
|
15
|
-
constructor(message: string, code: SvgSizeResolutionErrorCode);
|
|
16
|
-
}
|
|
11
|
+
import { ImageHandleBufferController, IdHandler, RenderTargetBucketBuffers, RenderTargetEntryLike, SpriteOriginReference } from './internalTypes';
|
|
17
12
|
/**
|
|
18
|
-
*
|
|
19
|
-
* @param
|
|
20
|
-
* @
|
|
21
|
-
* @
|
|
22
|
-
* @remarks This function helps reading SVG with better manner.
|
|
13
|
+
* Create id handler object.
|
|
14
|
+
* @param T Identified instance type
|
|
15
|
+
* @returns Image id handler object.
|
|
16
|
+
* @remarks It is used for (wasm) interoperability for image identity.
|
|
23
17
|
*/
|
|
24
|
-
export declare const
|
|
18
|
+
export declare const createIdHandler: <T>() => IdHandler<T>;
|
|
25
19
|
/**
|
|
26
|
-
*
|
|
27
|
-
* @
|
|
28
|
-
* @param options Optional loading options.
|
|
29
|
-
* @returns Promise resolving to the ImageBitmap.
|
|
30
|
-
* @remarks This function helps loading SVG with better manner.
|
|
20
|
+
* Image handle buffer controller interface.
|
|
21
|
+
* @remarks It is used for (wasm) interoperability for image identity.
|
|
31
22
|
*/
|
|
32
|
-
export declare const
|
|
23
|
+
export declare const createImageHandleBufferController: () => ImageHandleBufferController;
|
|
24
|
+
/**
|
|
25
|
+
* Creates typed buffers aligned with the supplied render target bucket for WASM interop.
|
|
26
|
+
* @param bucket Render target bucket containing sprite/image pairs.
|
|
27
|
+
* @param options Optional configuration.
|
|
28
|
+
* @returns {RenderTargetBucketBuffers} Typed array views of origin metadata.
|
|
29
|
+
*/
|
|
30
|
+
export declare const createRenderTargetBucketBuffers: <T>(bucket: readonly Readonly<RenderTargetEntryLike<T>>[], options?: {
|
|
31
|
+
readonly originReference?: SpriteOriginReference;
|
|
32
|
+
}) => RenderTargetBucketBuffers;
|
|
33
|
+
/**
|
|
34
|
+
* Encode/Decode a (subLayer, order) pair into a compact numeric key.
|
|
35
|
+
* @remarks It is used for (wasm) interoperability for image identity.
|
|
36
|
+
*/
|
|
37
|
+
export declare const createSpriteOriginReference: () => SpriteOriginReference;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* name: maplibre-gl-layers
|
|
3
|
+
* version: 0.12.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: e8e2cd81aeec4b10f2898c0ede5880ac56bf748d
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { ClipContext, ImageHandleBufferController, IdHandler, InternalSpriteCurrentState, InternalSpriteImageState, PreparedDrawSpriteImageParams, PrepareDrawSpriteImageParams, Releaseable, RegisteredImage, RenderCalculationHost, SpriteOriginReference } from './internalTypes';
|
|
12
|
+
import { SurfaceCorner } from './math';
|
|
13
|
+
import { SpriteLocation, SpriteScreenPoint } from './types';
|
|
14
|
+
import { BufferHolder, WasmHost } from './wasmHost';
|
|
15
|
+
import { PreparedProjectionState, ProjectionHostParams } from './projectionHost';
|
|
16
|
+
export declare const createWasmProjectLngLatToClipSpace: () => {
|
|
17
|
+
(clipContext: Readonly<ClipContext> | null, location: Readonly<SpriteLocation>): number[] | null;
|
|
18
|
+
release(): void;
|
|
19
|
+
};
|
|
20
|
+
export declare const createWasmCalculateBillboardDepthKey: (preparedState: PreparedProjectionState) => {
|
|
21
|
+
(_center: Readonly<SpriteScreenPoint>): number | null;
|
|
22
|
+
release(): void;
|
|
23
|
+
};
|
|
24
|
+
type CalculateSurfaceDepthKeyOptions = {
|
|
25
|
+
readonly indices?: readonly number[];
|
|
26
|
+
readonly bias?: {
|
|
27
|
+
readonly ndc: number;
|
|
28
|
+
readonly minClipZEpsilon?: number;
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
export declare const createWasmCalculateSurfaceDepthKey: (preparedState: PreparedProjectionState) => {
|
|
32
|
+
(baseLngLat: Readonly<SpriteLocation>, displacements: readonly SurfaceCorner[], options?: CalculateSurfaceDepthKeyOptions): number | null;
|
|
33
|
+
release(): void;
|
|
34
|
+
};
|
|
35
|
+
interface PreparedInputBuffer extends Releaseable {
|
|
36
|
+
readonly parameterHolder: BufferHolder<Float64Array>;
|
|
37
|
+
readonly resultItemCount: number;
|
|
38
|
+
}
|
|
39
|
+
interface WritableWasmProjectionState<TTag> {
|
|
40
|
+
readonly preparedProjection: PreparedProjectionState;
|
|
41
|
+
readonly prepareInputBuffer: (params: PrepareDrawSpriteImageParams<TTag>) => PreparedInputBuffer;
|
|
42
|
+
readonly getImageRefs: () => readonly InternalSpriteImageState[];
|
|
43
|
+
readonly getResourceRefs: () => readonly (RegisteredImage | undefined)[];
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Wasm interoperability dependencies.
|
|
47
|
+
* @remarks These are a group of helpers that perform marshaling to generate input/output data for wasm calculation.
|
|
48
|
+
*/
|
|
49
|
+
export interface WasmCalculationInteropDependencies<TTag> {
|
|
50
|
+
readonly imageIdHandler: IdHandler<RegisteredImage>;
|
|
51
|
+
readonly imageHandleBuffersController: ImageHandleBufferController;
|
|
52
|
+
readonly originReference: SpriteOriginReference;
|
|
53
|
+
readonly spriteIdHandler: IdHandler<InternalSpriteCurrentState<TTag>>;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Create calculation host that wasm implementation.
|
|
57
|
+
* @param TTag Tag type.
|
|
58
|
+
* @param params Projection host params.
|
|
59
|
+
* @param deps Wasm interoperability dependencies.
|
|
60
|
+
* @returns Calculation host.
|
|
61
|
+
*/
|
|
62
|
+
export declare const createWasmCalculationHost: <TTag>(params: ProjectionHostParams, deps: WasmCalculationInteropDependencies<TTag>) => RenderCalculationHost<TTag>;
|
|
63
|
+
export declare const __wasmCalculationTestInternals: {
|
|
64
|
+
convertToWasmProjectionState: <TTag>(wasm: WasmHost, params: ProjectionHostParams, deps: WasmCalculationInteropDependencies<TTag>) => WritableWasmProjectionState<TTag>;
|
|
65
|
+
converToPreparedDrawImageParams: <TTag>(state: WritableWasmProjectionState<TTag>, deps: WasmCalculationInteropDependencies<TTag>, resultBuffer: BufferHolder<Float64Array>) => PreparedDrawSpriteImageParams<TTag>[];
|
|
66
|
+
prepareDrawSpriteImagesInternal: <TTag>(wasm: WasmHost, wasmState: WritableWasmProjectionState<TTag>, deps: WasmCalculationInteropDependencies<TTag>, params: PrepareDrawSpriteImageParams<TTag>) => PreparedDrawSpriteImageParams<TTag>[];
|
|
67
|
+
};
|
|
68
|
+
export {};
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* name: maplibre-gl-layers
|
|
3
|
+
* version: 0.12.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: e8e2cd81aeec4b10f2898c0ede5880ac56bf748d
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { SpriteLayerCalculationVariant } from './types';
|
|
12
|
+
/**
|
|
13
|
+
* `fromLngLat` function parameter
|
|
14
|
+
*/
|
|
15
|
+
export type WasmFromLngLat = (lng: number, lat: number, altitude: number, outPtr: number) => boolean;
|
|
16
|
+
/**
|
|
17
|
+
* `project` function parameter
|
|
18
|
+
*/
|
|
19
|
+
export type WasmProject = (lng: number, lat: number, altitude: number, worldSize: number, matrixPtr: number, outPtr: number) => boolean;
|
|
20
|
+
/**
|
|
21
|
+
* `unproject` function parameter
|
|
22
|
+
*/
|
|
23
|
+
export type WasmUnproject = (x: number, y: number, worldSize: number, matrixPtr: number, outPtr: number) => boolean;
|
|
24
|
+
/**
|
|
25
|
+
* `calculatePerspectiveRatio` function parameter
|
|
26
|
+
*/
|
|
27
|
+
export type WasmCalculatePerspectiveRatio = (lng: number, lat: number, altitude: number, cachedMercatorPtr: number, cameraToCenterDistance: number, matrixPtr: number, outPtr: number) => boolean;
|
|
28
|
+
export type WasmProjectLngLatToClipSpace = (lng: number, lat: number, altitude: number, matrixPtr: number, outPtr: number) => boolean;
|
|
29
|
+
export type WasmCalculateBillboardDepthKey = (centerX: number, centerY: number, worldSize: number, inverseMatrixPtr: number, mercatorMatrixPtr: number, outPtr: number) => boolean;
|
|
30
|
+
export type WasmCalculateSurfaceDepthKey = (baseLng: number, baseLat: number, baseAltitude: number, displacementPtr: number, displacementCount: number, indexPtr: number, indexCount: number, mercatorMatrixPtr: number, applyBias: number, biasNdc: number, minClipZEpsilon: number, outPtr: number) => boolean;
|
|
31
|
+
export type WasmPrepareDrawSpriteImages = (paramsPtr: number, resultPtr: number) => boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Wasm raw pointer type.
|
|
34
|
+
*/
|
|
35
|
+
export type Pointer = number;
|
|
36
|
+
/**
|
|
37
|
+
* An array element type that createTypedBuffer.
|
|
38
|
+
* @param TArray - A type for ArrayBufferView (ex: Float64Array)
|
|
39
|
+
*/
|
|
40
|
+
export type TypedArrayElement<TArray> = TArray extends {
|
|
41
|
+
[index: number]: infer T;
|
|
42
|
+
} ? T : never;
|
|
43
|
+
/**
|
|
44
|
+
* Typed ArrayBufferView.
|
|
45
|
+
* @param TArray - A type for ArrayBufferView (ex: Float64Array)
|
|
46
|
+
*/
|
|
47
|
+
export interface TypedArrayBufferView<TArray> extends ArrayBufferView {
|
|
48
|
+
/**
|
|
49
|
+
* Copy in an array.
|
|
50
|
+
* @param from An array.
|
|
51
|
+
*/
|
|
52
|
+
readonly set: (from: ArrayLike<TypedArrayElement<TArray>>) => void;
|
|
53
|
+
readonly length: number;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* TypedArrayBuffer view constructor type.
|
|
57
|
+
* @param TArray - A type for ArrayBufferView (ex: Float64Array)
|
|
58
|
+
*/
|
|
59
|
+
export type TypedArrayConstructor<TArray extends TypedArrayBufferView<TArray>> = {
|
|
60
|
+
readonly BYTES_PER_ELEMENT: number;
|
|
61
|
+
new (buffer: ArrayBuffer, byteOffset: number, length: number): TArray;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* The BufferHolder, capsule both wasm raw memory pointer and ArrayBufferBuffer.
|
|
65
|
+
* @param TArray - A type for ArrayBufferView (ex: Float64Array)
|
|
66
|
+
*/
|
|
67
|
+
export interface BufferHolder<TArray extends TypedArrayBufferView<TArray>> {
|
|
68
|
+
/**
|
|
69
|
+
* Prepare and get the raw pointer and the buffer reference.
|
|
70
|
+
* @returns The raw pointer and the buffer reference.
|
|
71
|
+
*/
|
|
72
|
+
readonly prepare: () => {
|
|
73
|
+
ptr: Pointer;
|
|
74
|
+
buffer: TArray;
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Release the buffer.
|
|
78
|
+
* @returns
|
|
79
|
+
*/
|
|
80
|
+
readonly release: () => void;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Wasm host reference.
|
|
84
|
+
*/
|
|
85
|
+
export interface WasmHost {
|
|
86
|
+
/**
|
|
87
|
+
* Helper for wasm interoperation buffer.
|
|
88
|
+
* @param TArray - A type for ArrayBufferView (ex: Float64Array)
|
|
89
|
+
* @param ArrayType - ArrayBufferView constructor
|
|
90
|
+
* @param elements - Buffer element count or copy in data array.
|
|
91
|
+
*/
|
|
92
|
+
readonly allocateTypedBuffer: <TArray extends TypedArrayBufferView<TArray>>(ArrayType: TypedArrayConstructor<TArray>, elements: number | ArrayLike<TypedArrayElement<TArray>>) => BufferHolder<TArray>;
|
|
93
|
+
readonly fromLngLat: WasmFromLngLat;
|
|
94
|
+
readonly project: WasmProject;
|
|
95
|
+
readonly calculatePerspectiveRatio: WasmCalculatePerspectiveRatio;
|
|
96
|
+
readonly unproject: WasmUnproject;
|
|
97
|
+
readonly projectLngLatToClipSpace: WasmProjectLngLatToClipSpace;
|
|
98
|
+
readonly calculateBillboardDepthKey: WasmCalculateBillboardDepthKey;
|
|
99
|
+
readonly calculateSurfaceDepthKey: WasmCalculateSurfaceDepthKey;
|
|
100
|
+
readonly prepareDrawSpriteImages?: WasmPrepareDrawSpriteImages;
|
|
101
|
+
}
|
|
102
|
+
export type WasmVariant = SpriteLayerCalculationVariant;
|
|
103
|
+
/**
|
|
104
|
+
* Wasm initialization options.
|
|
105
|
+
*/
|
|
106
|
+
export interface InitializeWasmHostOptions {
|
|
107
|
+
/** Force initialization. Default is false. */
|
|
108
|
+
readonly force?: boolean;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Initialize wasm offload module.
|
|
112
|
+
* @param preferredVariant Uses wasm offload module variant.
|
|
113
|
+
* @param options Options.
|
|
114
|
+
* @returns Initialized WasmHost.
|
|
115
|
+
*/
|
|
116
|
+
export declare const initializeWasmHost: (preferredVariant: WasmVariant, options?: InitializeWasmHostOptions) => Promise<WasmVariant>;
|
|
117
|
+
/**
|
|
118
|
+
* Release wasm offload module.
|
|
119
|
+
*/
|
|
120
|
+
export declare const releaseWasmHost: () => void;
|
|
121
|
+
/**
|
|
122
|
+
* Get wasm host.
|
|
123
|
+
* @returns Entry points.
|
|
124
|
+
*/
|
|
125
|
+
export declare const prepareWasmHost: () => WasmHost;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* name: maplibre-gl-layers
|
|
3
|
+
* version: 0.12.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: e8e2cd81aeec4b10f2898c0ede5880ac56bf748d
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { ProjectionHostParams } from './projectionHost';
|
|
12
|
+
import { ProjectionHost } from './internalTypes';
|
|
13
|
+
/**
|
|
14
|
+
* Create wasm-based calculation projection host.
|
|
15
|
+
* @param params Projection parameters
|
|
16
|
+
* @returns Projection host
|
|
17
|
+
* @remarks This needs using before initialization (initializeWasmHost function)
|
|
18
|
+
*/
|
|
19
|
+
export declare const createWasmProjectionHost: (params: ProjectionHostParams) => ProjectionHost;
|
package/package.json
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"git": {
|
|
3
3
|
"tags": [
|
|
4
|
-
"0.
|
|
4
|
+
"0.12.0"
|
|
5
5
|
],
|
|
6
6
|
"branches": [
|
|
7
7
|
"main"
|
|
8
8
|
],
|
|
9
|
-
"version": "0.
|
|
9
|
+
"version": "0.12.0",
|
|
10
10
|
"commit": {
|
|
11
|
-
"hash": "
|
|
12
|
-
"shortHash": "
|
|
13
|
-
"date": "2025-11-
|
|
11
|
+
"hash": "e8e2cd81aeec4b10f2898c0ede5880ac56bf748d",
|
|
12
|
+
"shortHash": "e8e2cd8",
|
|
13
|
+
"date": "2025-11-10T22:39:19+09:00Z",
|
|
14
14
|
"message": "Merge branch 'develop'"
|
|
15
15
|
}
|
|
16
16
|
},
|
|
17
|
-
"version": "0.
|
|
17
|
+
"version": "0.12.0",
|
|
18
18
|
"description": "MapLibre's layer extension library enabling the display, movement, and modification of large numbers of dynamic sprite images",
|
|
19
19
|
"author": "Kouji Matsui (@kekyo@mi.kekyo.net)",
|
|
20
20
|
"license": "MIT",
|
|
@@ -53,13 +53,14 @@
|
|
|
53
53
|
"images/demo2.png"
|
|
54
54
|
],
|
|
55
55
|
"scripts": {
|
|
56
|
-
"build": "vite build",
|
|
56
|
+
"build": "node ./scripts/build-wasm.mjs && vite build",
|
|
57
57
|
"dev": "npm run build",
|
|
58
58
|
"test": "npm run build && vitest run",
|
|
59
59
|
"test:e2e": "npm run build && playwright test",
|
|
60
60
|
"pack": "npm run build && screw-up pack --pack-destination ../artifacts"
|
|
61
61
|
},
|
|
62
62
|
"dependencies": {
|
|
63
|
+
"async-primitives": ">=1.4.0",
|
|
63
64
|
"maplibre-gl": ">=5.0.0"
|
|
64
65
|
},
|
|
65
66
|
"devDependencies": {
|
package/dist/location.d.ts
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* name: maplibre-gl-layers
|
|
3
|
-
* version: 0.11.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: 371efb126f281333d59ec75cfe788d45f3b1482e
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import { SpriteLocation } from './types';
|
|
12
|
-
/**
|
|
13
|
-
* Produces a deep copy so later updates do not mutate the original object.
|
|
14
|
-
*/
|
|
15
|
-
export declare const cloneSpriteLocation: (location: SpriteLocation) => SpriteLocation;
|
|
16
|
-
/**
|
|
17
|
-
* Linearly interpolates longitude, latitude, and optionally altitude.
|
|
18
|
-
* The `ratio` may fall outside [0, 1]; callers are responsible for clamping if needed.
|
|
19
|
-
*/
|
|
20
|
-
export declare const lerpSpriteLocation: (from: SpriteLocation, to: SpriteLocation, ratio: number) => SpriteLocation;
|
|
21
|
-
/**
|
|
22
|
-
* Compares two locations. Treats altitude as equal when either side is undefined.
|
|
23
|
-
*/
|
|
24
|
-
export declare const spriteLocationsEqual: (a: SpriteLocation, b: SpriteLocation) => boolean;
|