@dtour/scatter 0.1.0 → 0.3.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/LICENSE +201 -0
- package/dist/data/arrow.d.ts.map +1 -1
- package/dist/data/colormaps2d.d.ts +24 -0
- package/dist/data/colormaps2d.d.ts.map +1 -0
- package/dist/data/messages.d.ts +20 -2
- package/dist/data/messages.d.ts.map +1 -1
- package/dist/data/palettes.d.ts.map +1 -1
- package/dist/data/parquet.d.ts +2 -0
- package/dist/data/parquet.d.ts.map +1 -1
- package/dist/data/parse.d.ts +5 -1
- package/dist/data/parse.d.ts.map +1 -1
- package/dist/data/types.d.ts +2 -0
- package/dist/data/types.d.ts.map +1 -1
- package/dist/gpu/client.d.ts +94 -2
- package/dist/gpu/client.d.ts.map +1 -1
- package/dist/gpu/color-pipeline.d.ts +1 -9
- package/dist/gpu/color-pipeline.d.ts.map +1 -1
- package/dist/gpu/device.d.ts.map +1 -1
- package/dist/gpu/messages.d.ts +74 -1
- package/dist/gpu/messages.d.ts.map +1 -1
- package/dist/gpu/pipeline.d.ts +28 -9
- package/dist/gpu/pipeline.d.ts.map +1 -1
- package/dist/gpu/residual-pc-pipeline.d.ts +19 -0
- package/dist/gpu/residual-pc-pipeline.d.ts.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/pca/jacobi.d.ts.map +1 -1
- package/dist/renderer.d.ts +7 -4
- package/dist/renderer.d.ts.map +1 -1
- package/dist/scatter.js +1262 -155
- package/dist/selection.d.ts.map +1 -1
- package/dist/webgl/client.d.ts +10 -0
- package/dist/webgl/client.d.ts.map +1 -0
- package/dist/webgl/worker.d.ts +2 -0
- package/dist/webgl/worker.d.ts.map +1 -0
- package/package.json +15 -8
package/dist/gpu/pipeline.d.ts
CHANGED
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
export type PointPipeline = {
|
|
2
2
|
/** Additive blend pipeline — accumulates light on dark background. */
|
|
3
3
|
additivePipeline: GPURenderPipeline;
|
|
4
|
-
/** Normal (premultiplied-over)
|
|
4
|
+
/** Normal (premultiplied-over) pipeline — standard alpha compositing for per-point colors. */
|
|
5
5
|
normalPipeline: GPURenderPipeline;
|
|
6
6
|
/** Subtractive (reverse-subtract) blend pipeline — subtracts from light background. */
|
|
7
7
|
subtractivePipeline: GPURenderPipeline;
|
|
8
8
|
bindGroupLayout: GPUBindGroupLayout;
|
|
9
9
|
uniformBuffer: GPUBuffer;
|
|
10
10
|
cameraBuffer: GPUBuffer;
|
|
11
|
-
/** Small 4-byte default buffer used when no
|
|
12
|
-
|
|
11
|
+
/** Small 4-byte default buffer used when no colormap LUT is loaded. */
|
|
12
|
+
defaultColorLutBuffer: GPUBuffer;
|
|
13
13
|
/** Small 4-byte default buffer used when no selection mask is set. */
|
|
14
14
|
defaultSelectionBuffer: GPUBuffer;
|
|
15
|
+
/** Small 4-byte default buffer used when no categorical indices are bound. */
|
|
16
|
+
defaultCatIndicesBuffer: GPUBuffer;
|
|
15
17
|
};
|
|
16
18
|
/** Resolved style with concrete numeric values, ready for GPU upload. */
|
|
17
19
|
export type PointStyle = {
|
|
@@ -25,8 +27,21 @@ export type RawPointStyle = {
|
|
|
25
27
|
opacity: number | 'auto';
|
|
26
28
|
color: [number, number, number];
|
|
27
29
|
};
|
|
30
|
+
/** Color mode: 0 = uniform color, 1 = continuous, 2 = categorical, 3 = 2D colormap. */
|
|
31
|
+
export type ColorMode = 0 | 1 | 2 | 3;
|
|
32
|
+
/** Color mapping state for the shader LUT approach. */
|
|
33
|
+
export type ColorState = {
|
|
34
|
+
mode: ColorMode;
|
|
35
|
+
columnOffset: number;
|
|
36
|
+
min: number;
|
|
37
|
+
range: number;
|
|
38
|
+
numStops: number;
|
|
39
|
+
columnOffsetV: number;
|
|
40
|
+
minV: number;
|
|
41
|
+
rangeV: number;
|
|
42
|
+
mapIndex: number;
|
|
43
|
+
};
|
|
28
44
|
export type StyleFlags = {
|
|
29
|
-
usePerPointColor: boolean;
|
|
30
45
|
useSelectionMask: boolean;
|
|
31
46
|
};
|
|
32
47
|
export type CameraState = {
|
|
@@ -39,18 +54,22 @@ export type CameraState = {
|
|
|
39
54
|
insetOffsetY: number;
|
|
40
55
|
/** Zoom multiplier — scales content to fit visible area below toolbar. */
|
|
41
56
|
insetZoom: number;
|
|
57
|
+
/** Whether 3D camera rotation is active. */
|
|
58
|
+
use3d: boolean;
|
|
59
|
+
/** 3×3 rotation matrix (column-major, 9 floats). null = identity. */
|
|
60
|
+
rotation: Float32Array | null;
|
|
42
61
|
};
|
|
43
|
-
export declare const createPointPipeline: (device: GPUDevice,
|
|
44
|
-
export declare const writeUniforms: (device: GPUDevice, uniformBuffer: GPUBuffer, style: PointStyle, flags?: StyleFlags, useSubtractive?: boolean) => void;
|
|
62
|
+
export declare const createPointPipeline: (device: GPUDevice, hdrFormat?: GPUTextureFormat) => PointPipeline;
|
|
63
|
+
export declare const writeUniforms: (device: GPUDevice, uniformBuffer: GPUBuffer, style: PointStyle, flags?: StyleFlags, colorState?: ColorState, useSubtractive?: boolean, numPoints?: number, numDims?: number, biasX?: number, biasY?: number, maxPoints?: number, biasZ?: number) => void;
|
|
45
64
|
export declare const writeCamera: (device: GPUDevice, cameraBuffer: GPUBuffer, camera: CameraState) => void;
|
|
46
|
-
export declare const createPointBindGroup: (device: GPUDevice, layout: GPUBindGroupLayout, uniformBuffer: GPUBuffer,
|
|
65
|
+
export declare const createPointBindGroup: (device: GPUDevice, layout: GPUBindGroupLayout, uniformBuffer: GPUBuffer, dataBuffer: GPUBuffer, cameraBuffer: GPUBuffer, colorLutBuffer: GPUBuffer, selectionBuffer: GPUBuffer, adjBasisBuffer: GPUBuffer, catIndicesBuffer: GPUBuffer) => GPUBindGroup;
|
|
47
66
|
export type TonemapPipeline = {
|
|
48
67
|
pipeline: GPURenderPipeline;
|
|
49
68
|
bindGroupLayout: GPUBindGroupLayout;
|
|
50
|
-
/**
|
|
69
|
+
/** 4-byte uniform buffer: [mode]. */
|
|
51
70
|
paramsBuffer: GPUBuffer;
|
|
52
71
|
};
|
|
53
|
-
/** Tonemap mode: 0 = exponential (additive), 1 = clamp (
|
|
72
|
+
/** Tonemap mode: 0 = exponential (additive), 1 = clamp (normal / subtractive). */
|
|
54
73
|
export declare const writeTonemapParams: (device: GPUDevice, paramsBuffer: GPUBuffer, mode: number) => void;
|
|
55
74
|
export declare const createTonemapPipeline: (device: GPUDevice, canvasFormat: GPUTextureFormat) => TonemapPipeline;
|
|
56
75
|
export declare const createTonemapBindGroup: (device: GPUDevice, layout: GPUBindGroupLayout, hdrTextureView: GPUTextureView, paramsBuffer: GPUBuffer) => GPUBindGroup;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/gpu/pipeline.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,aAAa,GAAG;IAC1B,sEAAsE;IACtE,gBAAgB,EAAE,iBAAiB,CAAC;IACpC,
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/gpu/pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare const RESIDUAL_PC_MAX_DIMS = 64;
|
|
2
|
+
export type ResidualPcPipeline = {
|
|
3
|
+
partialPipeline: GPUComputePipeline;
|
|
4
|
+
finalPipeline: GPUComputePipeline;
|
|
5
|
+
bindGroupLayout: GPUBindGroupLayout;
|
|
6
|
+
paramsBuffer: GPUBuffer;
|
|
7
|
+
};
|
|
8
|
+
export declare const createResidualPcPipeline: (device: GPUDevice) => ResidualPcPipeline;
|
|
9
|
+
/**
|
|
10
|
+
* Compute the first PC of the residual complement on the GPU.
|
|
11
|
+
*
|
|
12
|
+
* The GPU reduces N points to a p×p covariance matrix (two passes).
|
|
13
|
+
* Power iteration (15 steps) runs on the CPU — p is always small (≤64).
|
|
14
|
+
*
|
|
15
|
+
* @param basis p×2 column-major Float32Array already written to basisBuffer
|
|
16
|
+
* @returns p-element unit vector orthogonal to both basis columns
|
|
17
|
+
*/
|
|
18
|
+
export declare const computeResidualPCGpu: (device: GPUDevice, pipeline: ResidualPcPipeline, dataBuffer: GPUBuffer, normParamsBuffer: GPUBuffer, basisBuffer: GPUBuffer, basis: Float32Array, numPoints: number, numDims: number) => Promise<Float32Array>;
|
|
19
|
+
//# sourceMappingURL=residual-pc-pipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"residual-pc-pipeline.d.ts","sourceRoot":"","sources":["../../src/gpu/residual-pc-pipeline.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAKvC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,eAAe,EAAE,kBAAkB,CAAC;IACpC,aAAa,EAAE,kBAAkB,CAAC;IAClC,eAAe,EAAE,kBAAkB,CAAC;IACpC,YAAY,EAAE,SAAS,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,QAAQ,SAAS,KAAG,kBAoC5D,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,SAAS,EACjB,UAAU,kBAAkB,EAC5B,YAAY,SAAS,EACrB,kBAAkB,SAAS,EAC3B,aAAa,SAAS,EACtB,OAAO,YAAY,EACnB,WAAW,MAAM,EACjB,SAAS,MAAM,KACd,OAAO,CAAC,YAAY,CAsEtB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
export { createScatter } from './gpu/client.ts';
|
|
2
2
|
export type { ScatterOptions, ScatterInstance, ScatterStatus } from './gpu/client.ts';
|
|
3
|
+
export { createScatterWebGL } from './webgl/client.ts';
|
|
3
4
|
export type { Metadata } from './data/types.ts';
|
|
4
5
|
export { computeArcLengths, interpolateAtPosition } from './tour/arc-length.ts';
|
|
5
6
|
export { OKABE_ITO, GLASBEY_DARK, GLASBEY_LIGHT, VIRIDIS_25, MAGMA_25 } from './data/palettes.ts';
|
|
7
|
+
export { COLORMAP_2D_NAMES, COLORMAP_2D_INDEX, packColormap2DLut } from './data/colormaps2d.ts';
|
|
8
|
+
export type { Colormap2DName } from './data/colormaps2d.ts';
|
|
6
9
|
export { bitPackIndices } from './selection.ts';
|
|
7
10
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACtF,YAAY,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAClG,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,YAAY,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAClG,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAChG,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/pca/jacobi.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jacobi.d.ts","sourceRoot":"","sources":["../../src/pca/jacobi.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,WAAW,GACtB,QAAQ,YAAY,EACpB,GAAG,MAAM,KACR;IAAE,WAAW,EAAE,YAAY,CAAC;IAAC,YAAY,EAAE,YAAY,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"jacobi.d.ts","sourceRoot":"","sources":["../../src/pca/jacobi.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,WAAW,GACtB,QAAQ,YAAY,EACpB,GAAG,MAAM,KACR;IAAE,WAAW,EAAE,YAAY,CAAC;IAAC,YAAY,EAAE,YAAY,EAAE,CAAA;CA8E3D,CAAC"}
|
package/dist/renderer.d.ts
CHANGED
|
@@ -9,12 +9,15 @@ export type CanvasView = {
|
|
|
9
9
|
export declare const configureCanvas: (canvas: OffscreenCanvas, device: GPUDevice) => CanvasView;
|
|
10
10
|
/**
|
|
11
11
|
* Encode a render pass for numPoints instanced quads into a texture view.
|
|
12
|
-
* The target is typically an HDR
|
|
13
|
-
*
|
|
12
|
+
* The target is typically an HDR float texture for later tone mapping.
|
|
13
|
+
*
|
|
14
|
+
* Large point counts are split into multiple draw calls using firstInstance
|
|
15
|
+
* offsets so that @builtin(instance_index) covers [0, numPoints) across all
|
|
16
|
+
* draws — storage buffer indexing and decimation hashing are unaffected.
|
|
14
17
|
*/
|
|
15
|
-
export declare const renderPoints: (
|
|
18
|
+
export declare const renderPoints: (encoder: GPUCommandEncoder, target: GPUTextureView, pipeline: GPURenderPipeline, bindGroup: GPUBindGroup, numPoints: number, clearColor?: [number, number, number]) => void;
|
|
16
19
|
/**
|
|
17
20
|
* Encode a fullscreen tone-map pass that reads an HDR texture and writes to a canvas.
|
|
18
21
|
*/
|
|
19
|
-
export declare const tonemapToCanvas: (
|
|
22
|
+
export declare const tonemapToCanvas: (encoder: GPUCommandEncoder, view: CanvasView, tonemapPipeline: GPURenderPipeline, tonemapBindGroup: GPUBindGroup) => void;
|
|
20
23
|
//# sourceMappingURL=renderer.d.ts.map
|
package/dist/renderer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,MAAM,EAAE,gBAAgB,CAAC;CAC1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,eAAe,EAAE,QAAQ,SAAS,KAAG,UAU5E,CAAC;
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,MAAM,EAAE,gBAAgB,CAAC;CAC1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,eAAe,EAAE,QAAQ,SAAS,KAAG,UAU5E,CAAC;AAQF;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,GACvB,SAAS,iBAAiB,EAC1B,QAAQ,cAAc,EACtB,UAAU,iBAAiB,EAC3B,WAAW,YAAY,EACvB,WAAW,MAAM,EACjB,aAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAa,KAC/C,IAqBF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,GAC1B,SAAS,iBAAiB,EAC1B,MAAM,UAAU,EAChB,iBAAiB,iBAAiB,EAClC,kBAAkB,YAAY,KAC7B,IAeF,CAAC"}
|