@luma.gl/engine 9.0.10 → 9.1.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/animation/key-frames.d.ts.map +1 -1
- package/dist/animation/key-frames.js +3 -0
- package/dist/animation-loop/animation-loop-template.d.ts.map +1 -1
- package/dist/animation-loop/animation-loop-template.js +3 -0
- package/dist/animation-loop/animation-loop.d.ts +1 -1
- package/dist/animation-loop/animation-loop.d.ts.map +1 -1
- package/dist/animation-loop/animation-loop.js +5 -4
- package/dist/animation-loop/animation-props.d.ts.map +1 -1
- package/dist/animation-loop/animation-props.js +3 -0
- package/dist/animation-loop/request-animation-frame.d.ts +3 -0
- package/dist/animation-loop/request-animation-frame.d.ts.map +1 -0
- package/dist/animation-loop/request-animation-frame.js +16 -0
- package/dist/application-utils/load-file.d.ts +22 -0
- package/dist/application-utils/load-file.d.ts.map +1 -0
- package/dist/application-utils/load-file.js +43 -0
- package/dist/application-utils/random.d.ts +3 -0
- package/dist/application-utils/random.d.ts.map +1 -0
- package/dist/application-utils/random.js +16 -0
- package/dist/async-texture/async-texture.d.ts +50 -0
- package/dist/async-texture/async-texture.d.ts.map +1 -0
- package/dist/async-texture/async-texture.js +77 -0
- package/dist/computation.d.ts +4 -3
- package/dist/computation.d.ts.map +1 -1
- package/dist/computation.js +14 -6
- package/dist/debug/copy-texture-to-image.d.ts.map +1 -1
- package/dist/debug/copy-texture-to-image.js +4 -1
- package/dist/debug/debug-framebuffer.d.ts.map +1 -1
- package/dist/debug/debug-framebuffer.js +17 -12
- package/dist/debug/pixel-data-utils.d.ts +1 -1
- package/dist/dist.dev.js +1194 -474
- package/dist/dist.min.js +27 -25
- package/dist/geometries/cone-geometry.d.ts.map +1 -1
- package/dist/geometries/cone-geometry.js +4 -1
- package/dist/geometries/cube-geometry.d.ts.map +1 -1
- package/dist/geometries/cube-geometry.js +4 -1
- package/dist/geometries/cylinder-geometry.d.ts.map +1 -1
- package/dist/geometries/cylinder-geometry.js +4 -1
- package/dist/geometries/ico-sphere-geometry.d.ts.map +1 -1
- package/dist/geometries/ico-sphere-geometry.js +4 -1
- package/dist/geometries/plane-geometry.d.ts.map +1 -1
- package/dist/geometries/plane-geometry.js +4 -1
- package/dist/geometries/sphere-geometry.d.ts.map +1 -1
- package/dist/geometries/sphere-geometry.js +4 -1
- package/dist/geometries/truncated-cone-geometry.d.ts.map +1 -1
- package/dist/geometries/truncated-cone-geometry.js +4 -1
- package/dist/geometry/geometry-table.d.ts +2 -1
- package/dist/geometry/geometry-table.d.ts.map +1 -1
- package/dist/geometry/geometry-utils.d.ts.map +1 -1
- package/dist/geometry/geometry-utils.js +3 -1
- package/dist/geometry/geometry.d.ts +5 -4
- package/dist/geometry/geometry.d.ts.map +1 -1
- package/dist/geometry/geometry.js +9 -5
- package/dist/geometry/gpu-geometry.d.ts +1 -1
- package/dist/geometry/gpu-geometry.d.ts.map +1 -1
- package/dist/geometry/gpu-geometry.js +18 -6
- package/dist/geometry/gpu-table.js +3 -0
- package/dist/index.cjs +492 -245
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/lib/clip-space.d.ts.map +1 -1
- package/dist/lib/clip-space.js +3 -0
- package/dist/lib/pipeline-factory.d.ts +3 -2
- package/dist/lib/pipeline-factory.d.ts.map +1 -1
- package/dist/lib/pipeline-factory.js +12 -8
- package/dist/lib/shader-factory.d.ts +3 -2
- package/dist/lib/shader-factory.d.ts.map +1 -1
- package/dist/lib/shader-factory.js +11 -4
- package/dist/model/model.d.ts +10 -6
- package/dist/model/model.d.ts.map +1 -1
- package/dist/model/model.js +66 -9
- package/dist/model/split-uniforms-and-bindings.d.ts +9 -0
- package/dist/model/split-uniforms-and-bindings.d.ts.map +1 -0
- package/dist/model/split-uniforms-and-bindings.js +20 -0
- package/dist/scenegraph/group-node.d.ts +1 -1
- package/dist/scenegraph/group-node.d.ts.map +1 -1
- package/dist/scenegraph/group-node.js +3 -0
- package/dist/scenegraph/model-node.d.ts +2 -2
- package/dist/scenegraph/model-node.d.ts.map +1 -1
- package/dist/scenegraph/model-node.js +6 -3
- package/dist/scenegraph/scenegraph-node.d.ts +5 -6
- package/dist/scenegraph/scenegraph-node.d.ts.map +1 -1
- package/dist/scenegraph/scenegraph-node.js +11 -8
- package/dist/shader-inputs.d.ts +0 -1
- package/dist/shader-inputs.d.ts.map +1 -1
- package/dist/shader-inputs.js +5 -3
- package/dist/transform/buffer-transform.d.ts.map +1 -1
- package/dist/transform/buffer-transform.js +8 -2
- package/dist/transform/texture-transform.d.ts +2 -2
- package/dist/transform/texture-transform.d.ts.map +1 -1
- package/dist/transform/texture-transform.js +1 -0
- package/dist/utils/deep-equal.d.ts +9 -0
- package/dist/utils/deep-equal.d.ts.map +1 -0
- package/dist/utils/deep-equal.js +50 -0
- package/dist/utils/uid.d.ts +7 -0
- package/dist/utils/uid.d.ts.map +1 -0
- package/dist/utils/uid.js +14 -0
- package/package.json +7 -6
- package/src/animation/key-frames.ts +4 -0
- package/src/animation-loop/animation-loop-template.ts +4 -0
- package/src/animation-loop/animation-loop.ts +6 -4
- package/src/animation-loop/animation-props.ts +4 -0
- package/src/animation-loop/request-animation-frame.ts +19 -0
- package/src/application-utils/load-file.ts +53 -0
- package/src/application-utils/random.ts +18 -0
- package/src/async-texture/async-texture.ts +140 -0
- package/src/computation.ts +17 -9
- package/src/debug/copy-texture-to-image.ts +4 -1
- package/src/debug/debug-framebuffer.ts +18 -12
- package/src/debug/pixel-data-utils.ts +1 -1
- package/src/geometries/cone-geometry.ts +5 -1
- package/src/geometries/cube-geometry.ts +5 -1
- package/src/geometries/cylinder-geometry.ts +5 -1
- package/src/geometries/ico-sphere-geometry.ts +5 -1
- package/src/geometries/plane-geometry.ts +5 -1
- package/src/geometries/sphere-geometry.ts +5 -1
- package/src/geometries/truncated-cone-geometry.ts +5 -1
- package/src/geometry/geometry-table.ts +2 -1
- package/src/geometry/geometry-utils.ts +3 -1
- package/src/geometry/geometry.ts +16 -19
- package/src/geometry/gpu-geometry.ts +20 -14
- package/src/geometry/gpu-table.ts +4 -0
- package/src/index.ts +15 -0
- package/src/lib/clip-space.ts +4 -0
- package/src/lib/pipeline-factory.ts +17 -16
- package/src/lib/shader-factory.ts +13 -6
- package/src/model/model.ts +72 -18
- package/src/model/split-uniforms-and-bindings.ts +31 -0
- package/src/scenegraph/group-node.ts +4 -0
- package/src/scenegraph/model-node.ts +9 -5
- package/src/scenegraph/scenegraph-node.ts +17 -13
- package/src/shader-inputs.ts +5 -3
- package/src/transform/buffer-transform.ts +8 -9
- package/src/transform/texture-transform.ts +2 -1
- package/src/utils/deep-equal.ts +51 -0
- package/src/utils/uid.ts +16 -0
- package/src/.DS_Store +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key-frames.d.ts","sourceRoot":"","sources":["../../src/animation/key-frames.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"key-frames.d.ts","sourceRoot":"","sources":["../../src/animation/key-frames.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAEtC,sDAAsD;AACtD,qBAAa,SAAS,CAAC,CAAC,GAAG,MAAM;IAC/B,UAAU,EAAE,MAAM,CAAM;IACxB,QAAQ,EAAE,MAAM,CAAM;IACtB,MAAM,EAAE,MAAM,CAAK;IACnB,KAAK,EAAE,MAAM,EAAE,CAAM;IACrB,MAAM,EAAE,CAAC,EAAE,CAAM;IACjB,OAAO,CAAC,SAAS,CAAM;gBAEX,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE;IAKpC,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI;IAa5C,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAS3B,YAAY,IAAI,MAAM;IAItB,UAAU,IAAI,MAAM;IAIpB,YAAY,IAAI,CAAC;IAIjB,UAAU,IAAI,CAAC;IAIf,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;CAiBnC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"animation-loop-template.d.ts","sourceRoot":"","sources":["../../src/animation-loop/animation-loop-template.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"animation-loop-template.d.ts","sourceRoot":"","sources":["../../src/animation-loop/animation-loop-template.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,cAAc,EAAC,6BAA0B;AAEtD;;;;;;;;;;;;;;GAcG;AACH,8BAAsB,qBAAqB;gBAC7B,cAAc,CAAC,EAAE,cAAc;IACrC,YAAY,CAAC,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAGpE,QAAQ,CAAC,QAAQ,CAAC,cAAc,EAAE,cAAc,GAAG,OAAO;IAC1D,QAAQ,CAAC,UAAU,CAAC,cAAc,EAAE,cAAc,GAAG,IAAI;CAC1D"}
|
|
@@ -48,7 +48,7 @@ export declare class AnimationLoop {
|
|
|
48
48
|
/** TODO - move these props to CanvasContext? */
|
|
49
49
|
setProps(props: MutableAnimationLoopProps): this;
|
|
50
50
|
/** Starts a render loop if not already running */
|
|
51
|
-
start(): Promise<this>;
|
|
51
|
+
start(): Promise<this | null>;
|
|
52
52
|
/** Stops a render loop if already running, finalizing */
|
|
53
53
|
stop(): this;
|
|
54
54
|
/** Explicitly draw a frame */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"animation-loop.d.ts","sourceRoot":"","sources":["../../src/animation-loop/animation-loop.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"animation-loop.d.ts","sourceRoot":"","sources":["../../src/animation-loop/animation-loop.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
import { luma } from '@luma.gl/core';
|
|
5
|
-
import { requestAnimationFrame, cancelAnimationFrame } from
|
|
5
|
+
import { requestAnimationFrame, cancelAnimationFrame } from "./request-animation-frame.js";
|
|
6
6
|
import { Stats } from '@probe.gl/stats';
|
|
7
7
|
let statIdCounter = 0;
|
|
8
8
|
const DEFAULT_ANIMATION_LOOP_PROPS = {
|
|
@@ -256,7 +256,7 @@ export class AnimationLoop {
|
|
|
256
256
|
this.props.onRender(this._getAnimationProps());
|
|
257
257
|
// end callback
|
|
258
258
|
// Submit commands (necessary on WebGPU)
|
|
259
|
-
this.device
|
|
259
|
+
this.device?.submit();
|
|
260
260
|
}
|
|
261
261
|
_clearNeedsRedraw() {
|
|
262
262
|
this.needsRedraw = false;
|
|
@@ -267,13 +267,14 @@ export class AnimationLoop {
|
|
|
267
267
|
}
|
|
268
268
|
// Initialize the object that will be passed to app callbacks
|
|
269
269
|
_initializeAnimationProps() {
|
|
270
|
-
|
|
270
|
+
const canvas = this.device?.canvasContext?.canvas;
|
|
271
|
+
if (!this.device || !canvas) {
|
|
271
272
|
throw new Error('loop');
|
|
272
273
|
}
|
|
273
274
|
this.animationProps = {
|
|
274
275
|
animationLoop: this,
|
|
275
276
|
device: this.device,
|
|
276
|
-
canvas
|
|
277
|
+
canvas,
|
|
277
278
|
timeline: this.timeline,
|
|
278
279
|
// Initial values
|
|
279
280
|
useDevicePixels: this.props.useDevicePixels,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"animation-props.d.ts","sourceRoot":"","sources":["../../src/animation-loop/animation-props.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"animation-props.d.ts","sourceRoot":"","sources":["../../src/animation-loop/animation-props.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,MAAM,EAAC,MAAM,eAAe,CAAC;AACrC,OAAO,EAAC,QAAQ,EAAC,iCAA8B;AAC/C,OAAO,KAAK,EAAC,aAAa,EAAC,4BAAyB;AAEpD,+CAA+C;AAC/C,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,aAAa,CAAC;IAE7B,oCAAoC;IACpC,MAAM,EAAE,iBAAiB,GAAG,eAAe,CAAC;IAC5C,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IAGf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IAGb,WAAW,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAE7B,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAG1B,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;CAC1C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-animation-frame.d.ts","sourceRoot":"","sources":["../../src/animation-loop/request-animation-frame.ts"],"names":[],"mappings":"AAQA,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,GAAG,GAAG,CAIzE;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,CAIvD"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
// Node.js polyfills for requestAnimationFrame and cancelAnimationFrame
|
|
5
|
+
/* global window, setTimeout, clearTimeout */
|
|
6
|
+
// / <reference types="@types/node" />
|
|
7
|
+
export function requestAnimationFrame(callback) {
|
|
8
|
+
return typeof window !== 'undefined' && window.requestAnimationFrame
|
|
9
|
+
? window.requestAnimationFrame(callback)
|
|
10
|
+
: setTimeout(callback, 1000 / 60);
|
|
11
|
+
}
|
|
12
|
+
export function cancelAnimationFrame(timerId) {
|
|
13
|
+
return typeof window !== 'undefined' && window.cancelAnimationFrame
|
|
14
|
+
? window.cancelAnimationFrame(timerId)
|
|
15
|
+
: clearTimeout(timerId);
|
|
16
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Set a relative path prefix
|
|
3
|
+
*/
|
|
4
|
+
export declare function setPathPrefix(prefix: string): void;
|
|
5
|
+
/**
|
|
6
|
+
* Loads ImageBitmap asynchronously. Respects setPathPrefix.
|
|
7
|
+
* image.crossOrigin can be set via opts.crossOrigin, default to 'anonymous'
|
|
8
|
+
* @returns a promise tracking the load
|
|
9
|
+
*/
|
|
10
|
+
export declare function loadImageBitmap(url: string, opts?: {
|
|
11
|
+
crossOrigin?: string;
|
|
12
|
+
}): Promise<ImageBitmap>;
|
|
13
|
+
/**
|
|
14
|
+
* Loads image asynchronously. Respects setPathPrefix.
|
|
15
|
+
* image.crossOrigin can be set via opts.crossOrigin, default to 'anonymous'
|
|
16
|
+
* @returns a promise tracking the load
|
|
17
|
+
* @deprecated Use `loadImageBitmap()` unless you are supporting old versions of Safari.
|
|
18
|
+
*/
|
|
19
|
+
export declare function loadImage(url: string, opts?: {
|
|
20
|
+
crossOrigin?: string;
|
|
21
|
+
}): Promise<HTMLImageElement>;
|
|
22
|
+
//# sourceMappingURL=load-file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-file.d.ts","sourceRoot":"","sources":["../../src/application-utils/load-file.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,QAE3C;AAID;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAC,GAC5B,OAAO,CAAC,WAAW,CAAC,CAMtB;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAC,GAC5B,OAAO,CAAC,gBAAgB,CAAC,CAY3B"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
let pathPrefix = '';
|
|
5
|
+
/**
|
|
6
|
+
* Set a relative path prefix
|
|
7
|
+
*/
|
|
8
|
+
export function setPathPrefix(prefix) {
|
|
9
|
+
pathPrefix = prefix;
|
|
10
|
+
}
|
|
11
|
+
// TODO - keep only loadImageBitmap
|
|
12
|
+
/**
|
|
13
|
+
* Loads ImageBitmap asynchronously. Respects setPathPrefix.
|
|
14
|
+
* image.crossOrigin can be set via opts.crossOrigin, default to 'anonymous'
|
|
15
|
+
* @returns a promise tracking the load
|
|
16
|
+
*/
|
|
17
|
+
export async function loadImageBitmap(url, opts) {
|
|
18
|
+
const image = new Image();
|
|
19
|
+
image.crossOrigin = opts?.crossOrigin || 'anonymous';
|
|
20
|
+
image.src = url.startsWith('http') ? url : pathPrefix + url;
|
|
21
|
+
await image.decode();
|
|
22
|
+
return await createImageBitmap(image);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Loads image asynchronously. Respects setPathPrefix.
|
|
26
|
+
* image.crossOrigin can be set via opts.crossOrigin, default to 'anonymous'
|
|
27
|
+
* @returns a promise tracking the load
|
|
28
|
+
* @deprecated Use `loadImageBitmap()` unless you are supporting old versions of Safari.
|
|
29
|
+
*/
|
|
30
|
+
export async function loadImage(url, opts) {
|
|
31
|
+
return await new Promise((resolve, reject) => {
|
|
32
|
+
try {
|
|
33
|
+
const image = new Image();
|
|
34
|
+
image.onload = () => resolve(image);
|
|
35
|
+
image.onerror = () => reject(new Error(`Could not load image ${url}.`));
|
|
36
|
+
image.crossOrigin = opts?.crossOrigin || 'anonymous';
|
|
37
|
+
image.src = url.startsWith('http') ? url : pathPrefix + url;
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
reject(error);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"random.d.ts","sourceRoot":"","sources":["../../src/application-utils/random.ts"],"names":[],"mappings":"AAIA,4DAA4D;AAC5D,wBAAgB,mBAAmB,IAAI,MAAM,MAAM,CAQlD"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
/** Creates a deterministic pseudorandom number generator */
|
|
5
|
+
export function makeRandomGenerator() {
|
|
6
|
+
let s = 1;
|
|
7
|
+
let c = 1;
|
|
8
|
+
return () => {
|
|
9
|
+
s = Math.sin(c * 17.23);
|
|
10
|
+
c = Math.cos(s * 27.92);
|
|
11
|
+
return fract(Math.abs(s * c) * 1432.71);
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
function fract(n) {
|
|
15
|
+
return n - Math.floor(n);
|
|
16
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { Texture, TextureProps, Sampler, TextureView, Device } from '@luma.gl/core';
|
|
2
|
+
import type { Texture1DData, Texture2DData, Texture3DData, TextureArrayData, TextureCubeData, TextureCubeArrayData } from '@luma.gl/core';
|
|
3
|
+
export type AsyncTextureProps = Omit<TextureProps, 'data'> & AsyncTextureDataProps;
|
|
4
|
+
type AsyncTextureDataProps = AsyncTexture1DProps | AsyncTexture2DProps | AsyncTexture3DProps | AsyncTextureArrayProps | AsyncTextureCubeProps | AsyncTextureCubeArrayProps;
|
|
5
|
+
type AsyncTexture1DProps = {
|
|
6
|
+
dimension: '1d';
|
|
7
|
+
data: Promise<Texture1DData> | Texture1DData | null;
|
|
8
|
+
};
|
|
9
|
+
type AsyncTexture2DProps = {
|
|
10
|
+
dimension?: '2d';
|
|
11
|
+
data: Promise<Texture2DData> | Texture2DData | null;
|
|
12
|
+
};
|
|
13
|
+
type AsyncTexture3DProps = {
|
|
14
|
+
dimension: '3d';
|
|
15
|
+
data: Promise<Texture3DData> | Texture3DData | null;
|
|
16
|
+
};
|
|
17
|
+
type AsyncTextureArrayProps = {
|
|
18
|
+
dimension: '2d-array';
|
|
19
|
+
data: Promise<TextureArrayData> | TextureArrayData | null;
|
|
20
|
+
};
|
|
21
|
+
type AsyncTextureCubeProps = {
|
|
22
|
+
dimension: 'cube';
|
|
23
|
+
data: Promise<TextureCubeData> | TextureCubeData | null;
|
|
24
|
+
};
|
|
25
|
+
type AsyncTextureCubeArrayProps = {
|
|
26
|
+
dimension: 'cube-array';
|
|
27
|
+
data: Promise<TextureCubeArrayData> | TextureCubeArrayData | null;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* It is very convenient to be able to initialize textures with promises
|
|
31
|
+
* This can add considerable complexity to the Texture class, and doesn't
|
|
32
|
+
* fit with the immutable nature of WebGPU resources.
|
|
33
|
+
* Instead, luma.gl offers async textures as a separate class.
|
|
34
|
+
*/
|
|
35
|
+
export declare class AsyncTexture {
|
|
36
|
+
readonly device: Device;
|
|
37
|
+
texture: Texture;
|
|
38
|
+
sampler: Sampler;
|
|
39
|
+
view: TextureView;
|
|
40
|
+
readonly ready: Promise<void>;
|
|
41
|
+
isReady: boolean;
|
|
42
|
+
destroyed: boolean;
|
|
43
|
+
protected resolveReady: () => void;
|
|
44
|
+
protected rejectReady: (error: Error) => void;
|
|
45
|
+
constructor(device: Device, props: AsyncTextureProps);
|
|
46
|
+
initAsync(props: AsyncTextureProps): Promise<void>;
|
|
47
|
+
destroy(): void;
|
|
48
|
+
}
|
|
49
|
+
export {};
|
|
50
|
+
//# sourceMappingURL=async-texture.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-texture.d.ts","sourceRoot":"","sources":["../../src/async-texture/async-texture.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAC,MAAM,eAAe,CAAC;AAEvF,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACrB,MAAM,eAAe,CAAC;AAIvB,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,GAAG,qBAAqB,CAAC;AAEnF,KAAK,qBAAqB,GACtB,mBAAmB,GACnB,mBAAmB,GACnB,mBAAmB,GACnB,sBAAsB,GACtB,qBAAqB,GACrB,0BAA0B,CAAC;AAE/B,KAAK,mBAAmB,GAAG;IAAC,SAAS,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,aAAa,GAAG,IAAI,CAAA;CAAC,CAAC;AAClG,KAAK,mBAAmB,GAAG;IAAC,SAAS,CAAC,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,aAAa,GAAG,IAAI,CAAA;CAAC,CAAC;AACnG,KAAK,mBAAmB,GAAG;IAAC,SAAS,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,aAAa,GAAG,IAAI,CAAA;CAAC,CAAC;AAClG,KAAK,sBAAsB,GAAG;IAC5B,SAAS,EAAE,UAAU,CAAC;IACtB,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,gBAAgB,GAAG,IAAI,CAAC;CAC3D,CAAC;AACF,KAAK,qBAAqB,GAAG;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe,GAAG,IAAI,CAAC;CACzD,CAAC;AACF,KAAK,0BAA0B,GAAG;IAChC,SAAS,EAAE,YAAY,CAAC;IACxB,IAAI,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,oBAAoB,GAAG,IAAI,CAAC;CACnE,CAAC;AAKF;;;;;GAKG;AACH,qBAAa,YAAY;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAIxB,OAAO,EAAE,OAAO,CAAC;IAEjB,OAAO,EAAE,OAAO,CAAC;IAEjB,IAAI,EAAE,WAAW,CAAC;IAElB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAS;IACzB,SAAS,EAAE,OAAO,CAAS;IAE3B,SAAS,CAAC,YAAY,EAAE,MAAM,IAAI,CAAY;IAC9C,SAAS,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAY;gBAE7C,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB;IAmB9C,SAAS,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBxD,OAAO,IAAI,IAAI;CAchB"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
// luma.gl, MIT license
|
|
2
|
+
// Copyright (c) vis.gl contributors
|
|
3
|
+
import { loadImageBitmap } from "../application-utils/load-file.js";
|
|
4
|
+
/**
|
|
5
|
+
* It is very convenient to be able to initialize textures with promises
|
|
6
|
+
* This can add considerable complexity to the Texture class, and doesn't
|
|
7
|
+
* fit with the immutable nature of WebGPU resources.
|
|
8
|
+
* Instead, luma.gl offers async textures as a separate class.
|
|
9
|
+
*/
|
|
10
|
+
export class AsyncTexture {
|
|
11
|
+
device;
|
|
12
|
+
// TODO - should we type these as possibly `null`? It will make usage harder?
|
|
13
|
+
// @ts-expect-error
|
|
14
|
+
texture;
|
|
15
|
+
// @ts-expect-error
|
|
16
|
+
sampler;
|
|
17
|
+
// @ts-expect-error
|
|
18
|
+
view;
|
|
19
|
+
ready;
|
|
20
|
+
isReady = false;
|
|
21
|
+
destroyed = false;
|
|
22
|
+
resolveReady = () => { };
|
|
23
|
+
rejectReady = () => { };
|
|
24
|
+
constructor(device, props) {
|
|
25
|
+
this.device = device;
|
|
26
|
+
// Signature: new AsyncTexture(device, {data: url})
|
|
27
|
+
if (typeof props?.data === 'string' && props.dimension === '2d') {
|
|
28
|
+
props = { ...props, data: loadImageBitmap(props.data) };
|
|
29
|
+
}
|
|
30
|
+
this.ready = new Promise((resolve, reject) => {
|
|
31
|
+
this.resolveReady = () => {
|
|
32
|
+
this.isReady = true;
|
|
33
|
+
resolve();
|
|
34
|
+
};
|
|
35
|
+
this.rejectReady = reject;
|
|
36
|
+
});
|
|
37
|
+
this.initAsync(props);
|
|
38
|
+
}
|
|
39
|
+
async initAsync(props) {
|
|
40
|
+
let resolveReady;
|
|
41
|
+
let rejectReady;
|
|
42
|
+
const asyncData = props.data;
|
|
43
|
+
const data = await awaitAllPromises(asyncData).then(resolveReady, rejectReady);
|
|
44
|
+
// Check that we haven't been destroyed while waiting for texture data to load
|
|
45
|
+
if (this.destroyed) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
// Now we can actually create the texture
|
|
49
|
+
// @ts-expect-error Discriminated union
|
|
50
|
+
const syncProps = { ...props, data };
|
|
51
|
+
this.texture = this.device.createTexture(syncProps);
|
|
52
|
+
this.sampler = this.texture.sampler;
|
|
53
|
+
this.view = this.texture.view;
|
|
54
|
+
this.isReady = true;
|
|
55
|
+
}
|
|
56
|
+
destroy() {
|
|
57
|
+
if (this.texture) {
|
|
58
|
+
this.texture.destroy();
|
|
59
|
+
// @ts-expect-error
|
|
60
|
+
this.texture = null;
|
|
61
|
+
}
|
|
62
|
+
this.destroyed = true;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// HELPERS
|
|
66
|
+
/** Resolve all promises in a nested data structure */
|
|
67
|
+
async function awaitAllPromises(x) {
|
|
68
|
+
x = await x;
|
|
69
|
+
if (Array.isArray(x)) {
|
|
70
|
+
return x.map(awaitAllPromises);
|
|
71
|
+
}
|
|
72
|
+
if (x && typeof x === 'object' && x.constructor === Object) {
|
|
73
|
+
const entries = Object.entries(x).map(([key, value]) => [key, awaitAllPromises(value)]);
|
|
74
|
+
return Object.fromEntries(entries);
|
|
75
|
+
}
|
|
76
|
+
return x;
|
|
77
|
+
}
|
package/dist/computation.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type { TypedArray } from '@luma.gl/core';
|
|
2
1
|
import type { ComputePipelineProps, Shader, Binding } from '@luma.gl/core';
|
|
3
2
|
import { Device, Buffer, ComputePipeline, ComputePass, UniformStore } from '@luma.gl/core';
|
|
4
3
|
import type { ShaderModule, PlatformInfo } from '@luma.gl/shadertools';
|
|
5
4
|
import { ShaderAssembler } from '@luma.gl/shadertools';
|
|
5
|
+
import { TypedArray } from '@math.gl/types';
|
|
6
6
|
import { ShaderInputs } from "./shader-inputs.js";
|
|
7
7
|
import { PipelineFactory } from "./lib/pipeline-factory.js";
|
|
8
8
|
import { ShaderFactory } from "./lib/shader-factory.js";
|
|
@@ -44,11 +44,12 @@ export declare class Computation {
|
|
|
44
44
|
};
|
|
45
45
|
/** Bindings (textures, samplers, uniform buffers) */
|
|
46
46
|
bindings: Record<string, Binding>;
|
|
47
|
-
/** The underlying GPU
|
|
47
|
+
/** The underlying GPU pipeline. */
|
|
48
48
|
pipeline: ComputePipeline;
|
|
49
|
+
/** Assembled compute shader source */
|
|
50
|
+
source: string;
|
|
49
51
|
/** the underlying compiled compute shader */
|
|
50
52
|
shader: Shader;
|
|
51
|
-
source: string;
|
|
52
53
|
/** ShaderInputs instance */
|
|
53
54
|
shaderInputs: ShaderInputs;
|
|
54
55
|
_uniformStore: UniformStore;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"computation.d.ts","sourceRoot":"","sources":["../src/computation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"computation.d.ts","sourceRoot":"","sources":["../src/computation.ts"],"names":[],"mappings":"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"}
|
package/dist/computation.js
CHANGED
|
@@ -2,12 +2,14 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
import { Buffer, ComputePipeline, UniformStore } from '@luma.gl/core';
|
|
5
|
-
import { log
|
|
5
|
+
import { log } from '@luma.gl/core';
|
|
6
6
|
import { getTypedArrayFromDataType } from '@luma.gl/core';
|
|
7
7
|
import { ShaderAssembler, getShaderLayoutFromWGSL } from '@luma.gl/shadertools';
|
|
8
|
+
import { isNumericArray } from '@math.gl/types';
|
|
8
9
|
import { ShaderInputs } from "./shader-inputs.js";
|
|
9
10
|
import { PipelineFactory } from "./lib/pipeline-factory.js";
|
|
10
11
|
import { ShaderFactory } from "./lib/shader-factory.js";
|
|
12
|
+
import { uid } from "./utils/uid.js";
|
|
11
13
|
// import {getDebugTableForShaderLayout} from '../debug/debug-shader-layout';
|
|
12
14
|
const LOG_DRAW_PRIORITY = 2;
|
|
13
15
|
const LOG_DRAW_TIMEOUT = 10000;
|
|
@@ -42,13 +44,16 @@ export class Computation {
|
|
|
42
44
|
userData = {};
|
|
43
45
|
/** Bindings (textures, samplers, uniform buffers) */
|
|
44
46
|
bindings = {};
|
|
45
|
-
/** The underlying GPU
|
|
47
|
+
/** The underlying GPU pipeline. */
|
|
46
48
|
pipeline;
|
|
49
|
+
/** Assembled compute shader source */
|
|
50
|
+
source;
|
|
47
51
|
/** the underlying compiled compute shader */
|
|
52
|
+
// @ts-ignore Set in function called from constructor
|
|
48
53
|
shader;
|
|
49
|
-
source;
|
|
50
54
|
/** ShaderInputs instance */
|
|
51
55
|
shaderInputs;
|
|
56
|
+
// @ts-ignore Set in function called from constructor
|
|
52
57
|
_uniformStore;
|
|
53
58
|
_pipelineNeedsUpdate = 'newly created';
|
|
54
59
|
_getModuleUniforms;
|
|
@@ -65,7 +70,9 @@ export class Computation {
|
|
|
65
70
|
Object.assign(this.userData, props.userData);
|
|
66
71
|
// Setup shader module inputs
|
|
67
72
|
const moduleMap = Object.fromEntries(this.props.modules?.map(module => [module.name, module]) || []);
|
|
68
|
-
|
|
73
|
+
// @ts-ignore TODO - fix up typing?
|
|
74
|
+
this.shaderInputs = props.shaderInputs || new ShaderInputs(moduleMap);
|
|
75
|
+
this.setShaderInputs(this.shaderInputs);
|
|
69
76
|
// Support WGSL shader layout introspection
|
|
70
77
|
// TODO - Don't modify props!!
|
|
71
78
|
this.props.shaderLayout ||= getShaderLayoutFromWGSL(this.props.source);
|
|
@@ -76,12 +83,13 @@ export class Computation {
|
|
|
76
83
|
this.pipelineFactory =
|
|
77
84
|
props.pipelineFactory || PipelineFactory.getDefaultPipelineFactory(this.device);
|
|
78
85
|
this.shaderFactory = props.shaderFactory || ShaderFactory.getDefaultShaderFactory(this.device);
|
|
79
|
-
const { source, getUniforms } = this.props.shaderAssembler.
|
|
86
|
+
const { source, getUniforms } = this.props.shaderAssembler.assembleWGSLShader({
|
|
80
87
|
platformInfo,
|
|
81
88
|
...this.props,
|
|
82
89
|
modules
|
|
83
90
|
});
|
|
84
91
|
this.source = source;
|
|
92
|
+
// @ts-ignore
|
|
85
93
|
this._getModuleUniforms = getUniforms;
|
|
86
94
|
// Create the pipeline
|
|
87
95
|
// @note order is important
|
|
@@ -158,7 +166,7 @@ export class Computation {
|
|
|
158
166
|
// TODO better way to extract bindings
|
|
159
167
|
const keys = Object.keys(uniforms).filter(k => {
|
|
160
168
|
const uniform = uniforms[k];
|
|
161
|
-
return !
|
|
169
|
+
return (!isNumericArray(uniform) && typeof uniform !== 'number' && typeof uniform !== 'boolean');
|
|
162
170
|
});
|
|
163
171
|
const bindings = {};
|
|
164
172
|
for (const k of keys) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copy-texture-to-image.d.ts","sourceRoot":"","sources":["../../src/debug/copy-texture-to-image.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,OAAO,EAAE,WAAW,EAAC,MAAM,eAAe,CAAC;AAGnD;;;GAGG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,gBAAgB,CAAC;CAChC,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,OAAO,GAAG,WAAW,EAC7B,OAAO,CAAC,EAAE,yBAAyB,GAClC,gBAAgB,CAMlB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,OAAO,GAAG,WAAW,EAC7B,OAAO,GAAE,yBAA8B,GACtC,MAAM,
|
|
1
|
+
{"version":3,"file":"copy-texture-to-image.d.ts","sourceRoot":"","sources":["../../src/debug/copy-texture-to-image.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,OAAO,EAAE,WAAW,EAAC,MAAM,eAAe,CAAC;AAGnD;;;GAGG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,gBAAgB,CAAC;CAChC,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,OAAO,GAAG,WAAW,EAC7B,OAAO,CAAC,EAAE,yBAAyB,GAClC,gBAAgB,CAMlB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,OAAO,GAAG,WAAW,EAC7B,OAAO,GAAE,yBAA8B,GACtC,MAAM,CA4BR"}
|
|
@@ -35,8 +35,11 @@ export function copyTextureToDataUrl(source, options = {}) {
|
|
|
35
35
|
canvas.width = width;
|
|
36
36
|
canvas.height = height;
|
|
37
37
|
const context = canvas.getContext('2d');
|
|
38
|
+
if (!context) {
|
|
39
|
+
throw new Error('Failed to create context');
|
|
40
|
+
}
|
|
38
41
|
// Copy the pixels to a 2D canvas
|
|
39
|
-
const imageData = context
|
|
42
|
+
const imageData = context?.createImageData(width, height);
|
|
40
43
|
imageData.data.set(data);
|
|
41
44
|
context.putImageData(imageData, 0, 0);
|
|
42
45
|
return canvas.toDataURL('image/png');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug-framebuffer.d.ts","sourceRoot":"","sources":["../../src/debug/debug-framebuffer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"debug-framebuffer.d.ts","sourceRoot":"","sources":["../../src/debug/debug-framebuffer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,WAAW,EAAE,OAAO,EAAC,MAAM,eAAe,CAAC;AAQxD,qDAAqD;AAErD,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,WAAW,GAAG,OAAO,EAC1B,EACE,EAAE,EACF,OAAO,EACP,MAAM,EACN,GAAS,EACT,IAAU,EACV,SAAa,EACd,EAAE;IACD,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,QA6CF"}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
1
4
|
// import {copyTextureToImage} from '../debug/copy-texture-to-image';
|
|
2
5
|
/** Only works with 1st device? */
|
|
3
6
|
let canvas = null;
|
|
@@ -30,17 +33,19 @@ export function debugFramebuffer(fbo, { id, minimap, opaque, top = '0', left = '
|
|
|
30
33
|
// const image = copyTextureToImage(fbo, {targetMaxHeight: 100, targetImage});
|
|
31
34
|
// ctx.drawImage(image, 0, 0);
|
|
32
35
|
const color = fbo.device.readPixelsToArrayWebGL(fbo);
|
|
33
|
-
const imageData = ctx
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
36
|
+
const imageData = ctx?.createImageData(fbo.width, fbo.height);
|
|
37
|
+
if (imageData) {
|
|
38
|
+
// Full map
|
|
39
|
+
const offset = 0;
|
|
40
|
+
// if (color.some((v) => v > 0)) {
|
|
41
|
+
// console.error('THERE IS NON-ZERO DATA IN THE FBO!');
|
|
42
|
+
// }
|
|
43
|
+
for (let i = 0; i < color.length; i += 4) {
|
|
44
|
+
imageData.data[offset + i + 0] = color[i + 0] * rgbaScale;
|
|
45
|
+
imageData.data[offset + i + 1] = color[i + 1] * rgbaScale;
|
|
46
|
+
imageData.data[offset + i + 2] = color[i + 2] * rgbaScale;
|
|
47
|
+
imageData.data[offset + i + 3] = opaque ? 255 : color[i + 3] * rgbaScale;
|
|
48
|
+
}
|
|
49
|
+
ctx?.putImageData(imageData, 0, 0);
|
|
44
50
|
}
|
|
45
|
-
ctx.putImageData(imageData, 0, 0);
|
|
46
51
|
}
|