@luma.gl/engine 9.1.9 → 9.2.0-alpha.2
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 +5 -0
- package/dist/animation-loop/animation-loop.d.ts +12 -12
- package/dist/animation-loop/animation-loop.d.ts.map +1 -1
- package/dist/animation-loop/animation-loop.js +26 -62
- package/dist/animation-loop/animation-loop.js.map +1 -1
- package/dist/animation-loop/animation-props.d.ts +3 -4
- package/dist/animation-loop/animation-props.d.ts.map +1 -1
- package/dist/animation-loop/make-animation-loop.d.ts +4 -1
- package/dist/animation-loop/make-animation-loop.d.ts.map +1 -1
- package/dist/animation-loop/make-animation-loop.js +39 -7
- package/dist/animation-loop/make-animation-loop.js.map +1 -1
- package/dist/async-texture/async-texture.d.ts +106 -2
- package/dist/async-texture/async-texture.d.ts.map +1 -1
- package/dist/async-texture/async-texture.js +281 -13
- package/dist/async-texture/async-texture.js.map +1 -1
- package/dist/compute/computation.d.ts +1 -1
- package/dist/compute/computation.d.ts.map +1 -1
- package/dist/compute/computation.js +2 -2
- package/dist/compute/computation.js.map +1 -1
- package/dist/compute/swap.d.ts.map +1 -1
- package/dist/compute/swap.js +6 -2
- package/dist/compute/swap.js.map +1 -1
- package/dist/compute/texture-transform.d.ts.map +1 -1
- package/dist/compute/texture-transform.js +4 -2
- package/dist/compute/texture-transform.js.map +1 -1
- package/dist/debug/copy-texture-to-image.d.ts +23 -1
- package/dist/debug/copy-texture-to-image.d.ts.map +1 -1
- package/dist/debug/copy-texture-to-image.js +37 -1
- package/dist/debug/copy-texture-to-image.js.map +1 -1
- package/dist/dist.dev.js +566 -232
- package/dist/dist.min.js +26 -26
- package/dist/factories/pipeline-factory.d.ts +11 -1
- package/dist/factories/pipeline-factory.d.ts.map +1 -1
- package/dist/factories/pipeline-factory.js +107 -25
- package/dist/factories/pipeline-factory.js.map +1 -1
- package/dist/factories/shader-factory.d.ts +5 -1
- package/dist/factories/shader-factory.d.ts.map +1 -1
- package/dist/factories/shader-factory.js +40 -6
- package/dist/factories/shader-factory.js.map +1 -1
- package/dist/geometries/cube-geometry.d.ts +3 -3
- package/dist/geometries/cube-geometry.d.ts.map +1 -1
- package/dist/geometry/geometry.d.ts.map +1 -1
- package/dist/geometry/geometry.js +3 -2
- package/dist/geometry/geometry.js.map +1 -1
- package/dist/index.cjs +581 -251
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/model/model.d.ts +4 -25
- package/dist/model/model.d.ts.map +1 -1
- package/dist/model/model.js +26 -71
- package/dist/model/model.js.map +1 -1
- package/dist/models/billboard-texture-model.d.ts.map +1 -1
- package/dist/models/billboard-texture-model.js +6 -4
- package/dist/models/billboard-texture-model.js.map +1 -1
- package/dist/modules/picking/legacy-picking-manager.d.ts +1 -1
- package/dist/modules/picking/legacy-picking-manager.d.ts.map +1 -1
- package/dist/modules/picking/legacy-picking-manager.js +1 -1
- package/dist/modules/picking/legacy-picking-manager.js.map +1 -1
- package/dist/modules/picking/picking-manager.d.ts +2 -2
- package/dist/modules/picking/picking-manager.d.ts.map +1 -1
- package/dist/modules/picking/picking-manager.js +2 -2
- package/dist/modules/picking/picking-manager.js.map +1 -1
- package/dist/passes/get-fragment-shader.js +2 -2
- package/dist/passes/shader-pass-renderer.d.ts +4 -4
- package/dist/passes/shader-pass-renderer.d.ts.map +1 -1
- package/dist/passes/shader-pass-renderer.js +15 -5
- package/dist/passes/shader-pass-renderer.js.map +1 -1
- package/dist/shader-inputs.js +1 -1
- package/dist/shader-inputs.js.map +1 -1
- package/dist/utils/buffer-layout-helper.d.ts +12 -0
- package/dist/utils/buffer-layout-helper.d.ts.map +1 -0
- package/dist/utils/buffer-layout-helper.js +41 -0
- package/dist/utils/buffer-layout-helper.js.map +1 -0
- package/dist/utils/buffer-layout-order.d.ts +3 -0
- package/dist/utils/buffer-layout-order.d.ts.map +1 -0
- package/dist/utils/buffer-layout-order.js +16 -0
- package/dist/utils/buffer-layout-order.js.map +1 -0
- package/package.json +4 -4
- package/src/animation-loop/animation-loop.ts +31 -71
- package/src/animation-loop/animation-props.ts +3 -5
- package/src/animation-loop/make-animation-loop.ts +41 -9
- package/src/async-texture/async-texture.ts +386 -23
- package/src/async-texture/texture-setters.ts.disabled +296 -0
- package/src/compute/computation.ts +3 -3
- package/src/compute/swap.ts +7 -2
- package/src/compute/texture-transform.ts +4 -2
- package/src/debug/copy-texture-to-image.ts +52 -2
- package/src/factories/pipeline-factory.ts +122 -26
- package/src/factories/shader-factory.ts +43 -7
- package/src/geometry/geometry.ts +3 -2
- package/src/index.ts +12 -0
- package/src/model/model.ts +31 -86
- package/src/models/billboard-texture-model.ts +6 -4
- package/src/modules/picking/legacy-picking-manager.ts +2 -2
- package/src/modules/picking/picking-manager.ts +3 -3
- package/src/passes/get-fragment-shader.ts +2 -2
- package/src/passes/shader-pass-renderer.ts +18 -8
- package/src/shader-inputs.ts +1 -1
- package/src/utils/buffer-layout-helper.ts +51 -0
- package/src/utils/buffer-layout-order.ts +26 -0
|
@@ -27,11 +27,11 @@ export function getFragmentShaderForRenderPass(options) {
|
|
|
27
27
|
function getFilterShaderWGSL(func) {
|
|
28
28
|
return /* wgsl */ `\
|
|
29
29
|
// Binding 0:1 is reserved for shader passes
|
|
30
|
-
@group(0) @binding(0) var<uniform> brightnessContrast : brightnessContrastUniforms;
|
|
30
|
+
// @group(0) @binding(0) var<uniform> brightnessContrast : brightnessContrastUniforms;
|
|
31
31
|
@group(0) @binding(1) var texture: texture_2d<f32>;
|
|
32
32
|
@group(0) @binding(2) var sampler: sampler;
|
|
33
33
|
|
|
34
|
-
struct FragmentInputs
|
|
34
|
+
struct FragmentInputs {
|
|
35
35
|
@location(0) fragUV: vec2f,
|
|
36
36
|
@location(1) fragPosition: vec4f,
|
|
37
37
|
@location(2) fragCoordinate: vec4f
|
|
@@ -28,16 +28,16 @@ export declare class ShaderPassRenderer {
|
|
|
28
28
|
resize(width: number, height: number): void;
|
|
29
29
|
renderToScreen(options: {
|
|
30
30
|
sourceTexture: AsyncTexture;
|
|
31
|
-
uniforms
|
|
32
|
-
bindings
|
|
31
|
+
uniforms?: any;
|
|
32
|
+
bindings?: any;
|
|
33
33
|
}): boolean;
|
|
34
34
|
/** Runs the shaderPasses in sequence on the sourceTexture and returns a texture with the results.
|
|
35
35
|
* @returns null if the the sourceTexture has not yet been loaded
|
|
36
36
|
*/
|
|
37
37
|
renderToTexture(options: {
|
|
38
38
|
sourceTexture: AsyncTexture;
|
|
39
|
-
uniforms
|
|
40
|
-
bindings
|
|
39
|
+
uniforms?: any;
|
|
40
|
+
bindings?: any;
|
|
41
41
|
}): Texture | null;
|
|
42
42
|
}
|
|
43
43
|
/** renders one ShaderPass */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader-pass-renderer.d.ts","sourceRoot":"","sources":["../../src/passes/shader-pass-renderer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAC,MAAM,eAAe,CAAC;AAC1D,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAC,YAAY,EAAC,4BAAyB;AAC9C,OAAO,EAAC,YAAY,EAAC,0CAAuC;AAC5D,OAAO,EAAC,SAAS,EAAC,gCAA6B;AAC/C,OAAO,EAAC,gBAAgB,EAAC,2BAAwB;AACjD,OAAO,EAAC,sBAAsB,EAAC,6CAA0C;AAIzE,KAAK,aAAa,GAAG,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE1D,mCAAmC;AACnC,MAAM,MAAM,uBAAuB,GAAG;IACpC,yDAAyD;IACzD,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,8DAA8D;IAC9D,YAAY,EAAE,YAAY,CAAC;CAC5B,CAAC;AAEF,4DAA4D;AAC5D,qBAAa,kBAAkB;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,kCAAkC;IAClC,SAAS,EAAE,SAAS,CAAC;IACrB,YAAY,EAAE,sBAAsB,CAAC;gBAEzB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,uBAAuB;IAoD1D,4DAA4D;IAC5D,OAAO;IAQP,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAK3C,cAAc,CAAC,OAAO,EAAE;QAAC,aAAa,EAAE,YAAY,CAAC;QAAC,QAAQ,EAAE,GAAG,CAAC;QAAC,QAAQ,EAAE,GAAG,CAAA;KAAC,GAAG,OAAO;
|
|
1
|
+
{"version":3,"file":"shader-pass-renderer.d.ts","sourceRoot":"","sources":["../../src/passes/shader-pass-renderer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAC,MAAM,eAAe,CAAC;AAC1D,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAC,YAAY,EAAC,4BAAyB;AAC9C,OAAO,EAAC,YAAY,EAAC,0CAAuC;AAC5D,OAAO,EAAC,SAAS,EAAC,gCAA6B;AAC/C,OAAO,EAAC,gBAAgB,EAAC,2BAAwB;AACjD,OAAO,EAAC,sBAAsB,EAAC,6CAA0C;AAIzE,KAAK,aAAa,GAAG,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE1D,mCAAmC;AACnC,MAAM,MAAM,uBAAuB,GAAG;IACpC,yDAAyD;IACzD,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,8DAA8D;IAC9D,YAAY,EAAE,YAAY,CAAC;CAC5B,CAAC;AAEF,4DAA4D;AAC5D,qBAAa,kBAAkB;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,kCAAkC;IAClC,SAAS,EAAE,SAAS,CAAC;IACrB,YAAY,EAAE,sBAAsB,CAAC;gBAEzB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,uBAAuB;IAoD1D,4DAA4D;IAC5D,OAAO;IAQP,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAK3C,cAAc,CAAC,OAAO,EAAE;QAAC,aAAa,EAAE,YAAY,CAAC;QAAC,QAAQ,CAAC,EAAE,GAAG,CAAC;QAAC,QAAQ,CAAC,EAAE,GAAG,CAAA;KAAC,GAAG,OAAO;IAwB/F;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE;QACvB,aAAa,EAAE,YAAY,CAAC;QAC5B,QAAQ,CAAC,EAAE,GAAG,CAAC;QACf,QAAQ,CAAC,EAAE,GAAG,CAAC;KAChB,GAAG,OAAO,GAAG,IAAI;CAyDnB;AAED,6BAA6B;AAC7B,cAAM,YAAY;IAChB,UAAU,EAAE,UAAU,CAAC;IACvB,gBAAgB,EAAE,eAAe,EAAE,CAAC;gBAExB,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,KAAK;IAa9D,OAAO;CAKR;AAED,0CAA0C;AAC1C,cAAM,eAAe;IACnB,KAAK,EAAE,SAAS,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,aAAa,CAAC;gBAEX,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa;IAsB1E,OAAO;IAIP,MAAM,CAAC,OAAO,EAAE;QAAC,UAAU,EAAE,UAAU,CAAC;QAAC,QAAQ,EAAE,GAAG,CAAA;KAAC,GAAG,IAAI;CAa/D"}
|
|
@@ -21,9 +21,9 @@ export class ShaderPassRenderer {
|
|
|
21
21
|
props.shaderPasses.map(shaderPass => initializeShaderModule(shaderPass));
|
|
22
22
|
const modules = props.shaderPasses.reduce((object, shaderPass) => ({ ...object, [shaderPass.name]: shaderPass }), {});
|
|
23
23
|
this.shaderInputs = props.shaderInputs || new ShaderInputs(modules);
|
|
24
|
-
const size = device.getCanvasContext().
|
|
24
|
+
const size = device.getCanvasContext().getDrawingBufferSize();
|
|
25
25
|
this.swapFramebuffers = new SwapFramebuffers(device, {
|
|
26
|
-
colorAttachments: [
|
|
26
|
+
colorAttachments: [device.preferredColorFormat],
|
|
27
27
|
width: size[0],
|
|
28
28
|
height: size[1]
|
|
29
29
|
});
|
|
@@ -76,7 +76,16 @@ void main() {
|
|
|
76
76
|
// source texture not yet loaded
|
|
77
77
|
return false;
|
|
78
78
|
}
|
|
79
|
-
const
|
|
79
|
+
const framebuffer = this.device
|
|
80
|
+
.getDefaultCanvasContext()
|
|
81
|
+
// @ts-expect-error TODO - remove after republish
|
|
82
|
+
.getCurrentFramebuffer({ depthStencilAttachment: false });
|
|
83
|
+
const renderPass = this.device.beginRenderPass({
|
|
84
|
+
id: 'shader-pass-renderer-to-screen',
|
|
85
|
+
framebuffer,
|
|
86
|
+
clearColor: [0, 0, 0, 1],
|
|
87
|
+
clearDepth: 1
|
|
88
|
+
});
|
|
80
89
|
this.clipSpace.setBindings({ sourceTexture: outputTexture });
|
|
81
90
|
this.clipSpace.draw(renderPass);
|
|
82
91
|
renderPass.end();
|
|
@@ -96,6 +105,7 @@ void main() {
|
|
|
96
105
|
});
|
|
97
106
|
// Clear the current texture before we begin
|
|
98
107
|
const clearTexturePass = this.device.beginRenderPass({
|
|
108
|
+
id: 'shader-pass-renderer-clear-texture',
|
|
99
109
|
framebuffer: this.swapFramebuffers.current,
|
|
100
110
|
clearColor: [0, 0, 0, 1]
|
|
101
111
|
});
|
|
@@ -120,6 +130,7 @@ void main() {
|
|
|
120
130
|
// texSize: [sourceTextures.width, sourceTextures.height]
|
|
121
131
|
};
|
|
122
132
|
const renderPass = this.device.beginRenderPass({
|
|
133
|
+
id: 'shader-pass-renderer-run-pass',
|
|
123
134
|
framebuffer: this.swapFramebuffers.next,
|
|
124
135
|
clearColor: [0, 0, 0, 1],
|
|
125
136
|
clearDepth: 1
|
|
@@ -173,8 +184,7 @@ class SubPassRenderer {
|
|
|
173
184
|
fs,
|
|
174
185
|
modules: [shaderPass],
|
|
175
186
|
parameters: {
|
|
176
|
-
depthWriteEnabled: false
|
|
177
|
-
depthCompare: 'always'
|
|
187
|
+
depthWriteEnabled: false
|
|
178
188
|
}
|
|
179
189
|
});
|
|
180
190
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader-pass-renderer.js","sourceRoot":"","sources":["../../src/passes/shader-pass-renderer.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAIpC,OAAO,EAAC,sBAAsB,EAAC,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAC,YAAY,EAAC,4BAAyB;AAE9C,OAAO,EAAC,SAAS,EAAC,gCAA6B;AAC/C,OAAO,EAAC,gBAAgB,EAAC,2BAAwB;AACjD,OAAO,EAAC,sBAAsB,EAAC,6CAA0C;AAEzE,OAAO,EAAC,8BAA8B,EAAC,iCAA8B;AAYrE,4DAA4D;AAC5D,MAAM,OAAO,kBAAkB;IAC7B,MAAM,CAAS;IACf,YAAY,CAAe;IAC3B,aAAa,CAAiB;IAC9B,gBAAgB,CAAmB;IACnC,kCAAkC;IAClC,SAAS,CAAY;IACrB,YAAY,CAAyB;IAErC,YAAY,MAAc,EAAE,KAA8B;QACxD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC,CAAC;QAEzE,MAAM,OAAO,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CACvC,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC,EAAC,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,UAAU,EAAC,CAAC,EACpE,EAAE,CACH,CAAC;QACF,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,IAAI,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;QAEpE,MAAM,IAAI,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"shader-pass-renderer.js","sourceRoot":"","sources":["../../src/passes/shader-pass-renderer.ts"],"names":[],"mappings":"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"}
|
package/dist/shader-inputs.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
import { log } from '@luma.gl/core';
|
|
5
|
-
// import type {
|
|
5
|
+
// import type {VariableShaderType, UniformValue, UniformFormat, UniformInfoDevice, Texture, Sampler} from '@luma.gl/core';
|
|
6
6
|
import { getShaderModuleDependencies } from '@luma.gl/shadertools';
|
|
7
7
|
import { splitUniformsAndBindings } from "./model/split-uniforms-and-bindings.js";
|
|
8
8
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader-inputs.js","sourceRoot":"","sources":["../src/shader-inputs.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAGpC,OAAO,EAAC,GAAG,EAAC,MAAM,eAAe,CAAC;AAClC,
|
|
1
|
+
{"version":3,"file":"shader-inputs.js","sourceRoot":"","sources":["../src/shader-inputs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type BufferLayout } from '@luma.gl/core';
|
|
2
|
+
/** BufferLayoutHelper is a helper class that should not be used directly by applications */
|
|
3
|
+
export declare class BufferLayoutHelper {
|
|
4
|
+
bufferLayouts: BufferLayout[];
|
|
5
|
+
constructor(bufferLayouts: BufferLayout[]);
|
|
6
|
+
getBufferLayout(name: string): BufferLayout | null;
|
|
7
|
+
/** Get attribute names from a BufferLayout */
|
|
8
|
+
getAttributeNamesForBuffer(bufferLayout: BufferLayout): string[];
|
|
9
|
+
mergeBufferLayouts(bufferLayouts1: BufferLayout[], bufferLayouts2: BufferLayout[]): BufferLayout[];
|
|
10
|
+
getBufferIndex(bufferName: string): number;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=buffer-layout-helper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buffer-layout-helper.d.ts","sourceRoot":"","sources":["../../src/utils/buffer-layout-helper.ts"],"names":[],"mappings":"AAIA,OAAO,EAAM,KAAK,YAAY,EAAC,MAAM,eAAe,CAAC;AAErD,4FAA4F;AAC5F,qBAAa,kBAAkB;IAC7B,aAAa,EAAE,YAAY,EAAE,CAAC;gBAElB,aAAa,EAAE,YAAY,EAAE;IAIzC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAIlD,8CAA8C;IAC9C,0BAA0B,CAAC,YAAY,EAAE,YAAY,GAAG,MAAM,EAAE;IAMhE,kBAAkB,CAChB,cAAc,EAAE,YAAY,EAAE,EAC9B,cAAc,EAAE,YAAY,EAAE,GAC7B,YAAY,EAAE;IAajB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;CAS3C"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
import { log } from '@luma.gl/core';
|
|
5
|
+
/** BufferLayoutHelper is a helper class that should not be used directly by applications */
|
|
6
|
+
export class BufferLayoutHelper {
|
|
7
|
+
bufferLayouts;
|
|
8
|
+
constructor(bufferLayouts) {
|
|
9
|
+
this.bufferLayouts = bufferLayouts;
|
|
10
|
+
}
|
|
11
|
+
getBufferLayout(name) {
|
|
12
|
+
return this.bufferLayouts.find(layout => layout.name === name) || null;
|
|
13
|
+
}
|
|
14
|
+
/** Get attribute names from a BufferLayout */
|
|
15
|
+
getAttributeNamesForBuffer(bufferLayout) {
|
|
16
|
+
return bufferLayout.attributes
|
|
17
|
+
? bufferLayout.attributes?.map(layout => layout.attribute)
|
|
18
|
+
: [bufferLayout.name];
|
|
19
|
+
}
|
|
20
|
+
mergeBufferLayouts(bufferLayouts1, bufferLayouts2) {
|
|
21
|
+
const mergedLayouts = [...bufferLayouts1];
|
|
22
|
+
for (const attribute of bufferLayouts2) {
|
|
23
|
+
const index = mergedLayouts.findIndex(attribute2 => attribute2.name === attribute.name);
|
|
24
|
+
if (index < 0) {
|
|
25
|
+
mergedLayouts.push(attribute);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
mergedLayouts[index] = attribute;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return mergedLayouts;
|
|
32
|
+
}
|
|
33
|
+
getBufferIndex(bufferName) {
|
|
34
|
+
const bufferIndex = this.bufferLayouts.findIndex(layout => layout.name === bufferName);
|
|
35
|
+
if (bufferIndex === -1) {
|
|
36
|
+
log.warn(`BufferLayout: Missing buffer for "${bufferName}".`)();
|
|
37
|
+
}
|
|
38
|
+
return bufferIndex;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=buffer-layout-helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buffer-layout-helper.js","sourceRoot":"","sources":["../../src/utils/buffer-layout-helper.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EAAC,GAAG,EAAoB,MAAM,eAAe,CAAC;AAErD,4FAA4F;AAC5F,MAAM,OAAO,kBAAkB;IAC7B,aAAa,CAAiB;IAE9B,YAAY,aAA6B;QACvC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAED,eAAe,CAAC,IAAY;QAC1B,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC;IACzE,CAAC;IAED,8CAA8C;IAC9C,0BAA0B,CAAC,YAA0B;QACnD,OAAO,YAAY,CAAC,UAAU;YAC5B,CAAC,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC;YAC1D,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,kBAAkB,CAChB,cAA8B,EAC9B,cAA8B;QAE9B,MAAM,aAAa,GAAG,CAAC,GAAG,cAAc,CAAC,CAAC;QAC1C,KAAK,MAAM,SAAS,IAAI,cAAc,EAAE,CAAC;YACvC,MAAM,KAAK,GAAG,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC,CAAC;YACxF,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACd,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;YACnC,CAAC;QACH,CAAC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,cAAc,CAAC,UAAkB;QAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;QAEvF,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;YACvB,GAAG,CAAC,IAAI,CAAC,qCAAqC,UAAU,IAAI,CAAC,EAAE,CAAC;QAClE,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buffer-layout-order.d.ts","sourceRoot":"","sources":["../../src/utils/buffer-layout-order.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,KAAK,YAAY,EAAE,KAAK,YAAY,EAAC,MAAM,eAAe,CAAC;AAEnE,wBAAgB,yCAAyC,CACvD,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,YAAY,EAAE,GAC3B,YAAY,EAAE,CAgBhB"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
export function sortedBufferLayoutByShaderSourceLocations(shaderLayout, bufferLayout) {
|
|
5
|
+
const shaderLayoutMap = Object.fromEntries(shaderLayout.attributes.map(attr => [attr.name, attr.location]));
|
|
6
|
+
const sortedLayout = bufferLayout.slice();
|
|
7
|
+
sortedLayout.sort((a, b) => {
|
|
8
|
+
const attributeNamesA = a.attributes ? a.attributes.map(attr => attr.attribute) : [a.name];
|
|
9
|
+
const attributeNamesB = b.attributes ? b.attributes.map(attr => attr.attribute) : [b.name];
|
|
10
|
+
const minLocationA = Math.min(...attributeNamesA.map(name => shaderLayoutMap[name]));
|
|
11
|
+
const minLocationB = Math.min(...attributeNamesB.map(name => shaderLayoutMap[name]));
|
|
12
|
+
return minLocationA - minLocationB;
|
|
13
|
+
});
|
|
14
|
+
return sortedLayout;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=buffer-layout-order.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buffer-layout-order.js","sourceRoot":"","sources":["../../src/utils/buffer-layout-order.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAIpC,MAAM,UAAU,yCAAyC,CACvD,YAA0B,EAC1B,YAA4B;IAE5B,MAAM,eAAe,GAAG,MAAM,CAAC,WAAW,CACxC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAChE,CAAC;IAEF,MAAM,YAAY,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC;IAC1C,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACzB,MAAM,eAAe,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3F,MAAM,eAAe,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3F,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrF,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAErF,OAAO,YAAY,GAAG,YAAY,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,OAAO,YAAY,CAAC;AACtB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@luma.gl/engine",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.2.0-alpha.2",
|
|
4
4
|
"description": "3D Engine Components for luma.gl",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -40,8 +40,8 @@
|
|
|
40
40
|
"prepublishOnly": "npm run build-minified-bundle && npm run build-dev-bundle"
|
|
41
41
|
},
|
|
42
42
|
"peerDependencies": {
|
|
43
|
-
"@luma.gl/core": "
|
|
44
|
-
"@luma.gl/shadertools": "
|
|
43
|
+
"@luma.gl/core": "9.2.0-alpha.1",
|
|
44
|
+
"@luma.gl/shadertools": "9.2.0-alpha.1"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
47
|
"@math.gl/core": "^4.1.0",
|
|
@@ -49,5 +49,5 @@
|
|
|
49
49
|
"@probe.gl/log": "^4.0.8",
|
|
50
50
|
"@probe.gl/stats": "^4.0.8"
|
|
51
51
|
},
|
|
52
|
-
"gitHead": "
|
|
52
|
+
"gitHead": "dc1e71675ea19a4afbb59d3b9dcd3b01deea3cae"
|
|
53
53
|
}
|
|
@@ -27,38 +27,30 @@ export type AnimationLoopProps = {
|
|
|
27
27
|
|
|
28
28
|
// view parameters - TODO move to CanvasContext?
|
|
29
29
|
autoResizeViewport?: boolean;
|
|
30
|
-
autoResizeDrawingBuffer?: boolean;
|
|
31
|
-
useDevicePixels?: number | boolean;
|
|
32
30
|
};
|
|
33
31
|
|
|
34
32
|
export type MutableAnimationLoopProps = {
|
|
35
33
|
// view parameters
|
|
36
34
|
autoResizeViewport?: boolean;
|
|
37
|
-
autoResizeDrawingBuffer?: boolean;
|
|
38
|
-
useDevicePixels?: number | boolean;
|
|
39
35
|
};
|
|
40
36
|
|
|
41
|
-
|
|
42
|
-
|
|
37
|
+
/** Convenient animation loop */
|
|
38
|
+
export class AnimationLoop {
|
|
39
|
+
static defaultAnimationLoopProps = {
|
|
40
|
+
device: null!,
|
|
43
41
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
onFinalize: () => {},
|
|
50
|
-
onError: error => console.error(error), // eslint-disable-line no-console
|
|
42
|
+
onAddHTML: () => '',
|
|
43
|
+
onInitialize: async () => null,
|
|
44
|
+
onRender: () => {},
|
|
45
|
+
onFinalize: () => {},
|
|
46
|
+
onError: error => console.error(error), // eslint-disable-line no-console
|
|
51
47
|
|
|
52
|
-
|
|
48
|
+
stats: luma.stats.get(`animation-loop-${statIdCounter++}`),
|
|
53
49
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
autoResizeDrawingBuffer: false
|
|
58
|
-
};
|
|
50
|
+
// view parameters
|
|
51
|
+
autoResizeViewport: false
|
|
52
|
+
} as const satisfies Readonly<Required<AnimationLoopProps>>;
|
|
59
53
|
|
|
60
|
-
/** Convenient animation loop */
|
|
61
|
-
export class AnimationLoop {
|
|
62
54
|
device: Device | null = null;
|
|
63
55
|
canvas: HTMLCanvasElement | OffscreenCanvas | null = null;
|
|
64
56
|
|
|
@@ -88,26 +80,20 @@ export class AnimationLoop {
|
|
|
88
80
|
* @param {HTMLCanvasElement} canvas - if provided, width and height will be passed to context
|
|
89
81
|
*/
|
|
90
82
|
constructor(props: AnimationLoopProps) {
|
|
91
|
-
this.props = {...
|
|
83
|
+
this.props = {...AnimationLoop.defaultAnimationLoopProps, ...props};
|
|
92
84
|
props = this.props;
|
|
93
85
|
|
|
94
86
|
if (!props.device) {
|
|
95
87
|
throw new Error('No device provided');
|
|
96
88
|
}
|
|
97
89
|
|
|
98
|
-
const {useDevicePixels = true} = this.props;
|
|
99
|
-
|
|
100
90
|
// state
|
|
101
91
|
this.stats = props.stats || new Stats({id: 'animation-loop-stats'});
|
|
102
92
|
this.cpuTime = this.stats.get('CPU Time');
|
|
103
93
|
this.gpuTime = this.stats.get('GPU Time');
|
|
104
94
|
this.frameRate = this.stats.get('Frame Rate');
|
|
105
95
|
|
|
106
|
-
this.setProps({
|
|
107
|
-
autoResizeViewport: props.autoResizeViewport,
|
|
108
|
-
autoResizeDrawingBuffer: props.autoResizeDrawingBuffer,
|
|
109
|
-
useDevicePixels
|
|
110
|
-
});
|
|
96
|
+
this.setProps({autoResizeViewport: props.autoResizeViewport});
|
|
111
97
|
|
|
112
98
|
// Bind methods
|
|
113
99
|
this.start = this.start.bind(this);
|
|
@@ -127,21 +113,9 @@ export class AnimationLoop {
|
|
|
127
113
|
this.destroy();
|
|
128
114
|
}
|
|
129
115
|
|
|
130
|
-
|
|
116
|
+
reportError(error: Error): void {
|
|
131
117
|
this.props.onError(error);
|
|
132
|
-
this._error =
|
|
133
|
-
const canvas = this.device?.canvasContext?.canvas;
|
|
134
|
-
if (canvas instanceof HTMLCanvasElement) {
|
|
135
|
-
const errorDiv = document.createElement('h1');
|
|
136
|
-
errorDiv.innerHTML = error.message;
|
|
137
|
-
errorDiv.style.position = 'absolute';
|
|
138
|
-
errorDiv.style.top = '20%'; // left: 50%; transform: translate(-50%, -50%);';
|
|
139
|
-
errorDiv.style.left = '10px';
|
|
140
|
-
errorDiv.style.color = 'black';
|
|
141
|
-
errorDiv.style.backgroundColor = 'red';
|
|
142
|
-
document.body.appendChild(errorDiv);
|
|
143
|
-
// canvas.style.position = 'absolute';
|
|
144
|
-
}
|
|
118
|
+
this._error = error;
|
|
145
119
|
}
|
|
146
120
|
|
|
147
121
|
/** Flags this animation loop as needing redraw */
|
|
@@ -150,17 +124,10 @@ export class AnimationLoop {
|
|
|
150
124
|
return this;
|
|
151
125
|
}
|
|
152
126
|
|
|
153
|
-
/** TODO - move these props to CanvasContext? */
|
|
154
127
|
setProps(props: MutableAnimationLoopProps): this {
|
|
155
128
|
if ('autoResizeViewport' in props) {
|
|
156
129
|
this.props.autoResizeViewport = props.autoResizeViewport || false;
|
|
157
130
|
}
|
|
158
|
-
if ('autoResizeDrawingBuffer' in props) {
|
|
159
|
-
this.props.autoResizeDrawingBuffer = props.autoResizeDrawingBuffer || false;
|
|
160
|
-
}
|
|
161
|
-
if ('useDevicePixels' in props) {
|
|
162
|
-
this.props.useDevicePixels = props.useDevicePixels || false;
|
|
163
|
-
}
|
|
164
131
|
return this;
|
|
165
132
|
}
|
|
166
133
|
|
|
@@ -292,7 +259,6 @@ export class AnimationLoop {
|
|
|
292
259
|
this._updateAnimationProps();
|
|
293
260
|
|
|
294
261
|
// Default viewport setup, in case onInitialize wants to render
|
|
295
|
-
this._resizeCanvasDrawingBuffer();
|
|
296
262
|
this._resizeViewport();
|
|
297
263
|
|
|
298
264
|
// this._gpuTimeQuery = Query.isSupported(this.gl, ['timers']) ? new Query(this.gl) : null;
|
|
@@ -371,26 +337,30 @@ export class AnimationLoop {
|
|
|
371
337
|
}
|
|
372
338
|
|
|
373
339
|
_setupFrame(): void {
|
|
374
|
-
this._resizeCanvasDrawingBuffer();
|
|
375
340
|
this._resizeViewport();
|
|
376
341
|
}
|
|
377
342
|
|
|
378
343
|
// Initialize the object that will be passed to app callbacks
|
|
379
344
|
_initializeAnimationProps(): void {
|
|
380
|
-
const
|
|
381
|
-
|
|
382
|
-
if (!this.device || !canvas) {
|
|
345
|
+
const canvasContext = this.device?.getDefaultCanvasContext();
|
|
346
|
+
if (!this.device || !canvasContext) {
|
|
383
347
|
throw new Error('loop');
|
|
384
348
|
}
|
|
349
|
+
|
|
350
|
+
const canvas = canvasContext?.canvas;
|
|
351
|
+
const useDevicePixels = canvasContext.props.useDevicePixels;
|
|
352
|
+
|
|
385
353
|
this.animationProps = {
|
|
386
354
|
animationLoop: this,
|
|
387
355
|
|
|
388
356
|
device: this.device,
|
|
357
|
+
canvasContext,
|
|
389
358
|
canvas,
|
|
359
|
+
// @ts-expect-error Deprecated
|
|
360
|
+
useDevicePixels,
|
|
361
|
+
|
|
390
362
|
timeline: this.timeline,
|
|
391
363
|
|
|
392
|
-
// Initial values
|
|
393
|
-
useDevicePixels: this.props.useDevicePixels,
|
|
394
364
|
needsRedraw: false,
|
|
395
365
|
|
|
396
366
|
// Placeholders
|
|
@@ -460,7 +430,7 @@ export class AnimationLoop {
|
|
|
460
430
|
if (!this.device) {
|
|
461
431
|
throw new Error('No device provided');
|
|
462
432
|
}
|
|
463
|
-
this.canvas = this.device.
|
|
433
|
+
this.canvas = this.device.getDefaultCanvasContext().canvas || null;
|
|
464
434
|
// this._createInfoDiv();
|
|
465
435
|
}
|
|
466
436
|
|
|
@@ -491,11 +461,11 @@ export class AnimationLoop {
|
|
|
491
461
|
return {width: 1, height: 1, aspect: 1};
|
|
492
462
|
}
|
|
493
463
|
// https://webglfundamentals.org/webgl/lessons/webgl-resizing-the-canvas.html
|
|
494
|
-
const [width, height] = this.device?.
|
|
464
|
+
const [width, height] = this.device?.getDefaultCanvasContext().getDevicePixelSize() || [1, 1];
|
|
495
465
|
|
|
496
466
|
// https://webglfundamentals.org/webgl/lessons/webgl-anti-patterns.html
|
|
497
467
|
let aspect = 1;
|
|
498
|
-
const canvas = this.device?.
|
|
468
|
+
const canvas = this.device?.getDefaultCanvasContext().canvas;
|
|
499
469
|
|
|
500
470
|
// @ts-expect-error
|
|
501
471
|
if (canvas && canvas.clientHeight) {
|
|
@@ -508,7 +478,7 @@ export class AnimationLoop {
|
|
|
508
478
|
return {width, height, aspect};
|
|
509
479
|
}
|
|
510
480
|
|
|
511
|
-
/** Default viewport setup */
|
|
481
|
+
/** @deprecated Default viewport setup */
|
|
512
482
|
_resizeViewport(): void {
|
|
513
483
|
// TODO can we use canvas context to code this in a portable way?
|
|
514
484
|
// @ts-expect-error Expose on canvasContext
|
|
@@ -525,16 +495,6 @@ export class AnimationLoop {
|
|
|
525
495
|
}
|
|
526
496
|
}
|
|
527
497
|
|
|
528
|
-
/**
|
|
529
|
-
* Resize the render buffer of the canvas to match canvas client size
|
|
530
|
-
* Optionally multiplying with devicePixel ratio
|
|
531
|
-
*/
|
|
532
|
-
_resizeCanvasDrawingBuffer(): void {
|
|
533
|
-
if (this.props.autoResizeDrawingBuffer) {
|
|
534
|
-
this.device?.canvasContext?.resize({useDevicePixels: this.props.useDevicePixels});
|
|
535
|
-
}
|
|
536
|
-
}
|
|
537
|
-
|
|
538
498
|
_beginFrameTimers() {
|
|
539
499
|
this.frameRate.timeEnd();
|
|
540
500
|
this.frameRate.timeStart();
|
|
@@ -2,18 +2,16 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
|
-
import {Device} from '@luma.gl/core';
|
|
5
|
+
import {CanvasContext, Device} from '@luma.gl/core';
|
|
6
6
|
import {Timeline} from '../animation/timeline';
|
|
7
7
|
import type {AnimationLoop} from './animation-loop';
|
|
8
8
|
|
|
9
9
|
/** Properties passed to every render frame */
|
|
10
10
|
export type AnimationProps = {
|
|
11
|
-
device: Device;
|
|
12
11
|
animationLoop: AnimationLoop;
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
device: Device;
|
|
13
|
+
canvasContext: CanvasContext;
|
|
15
14
|
canvas: HTMLCanvasElement | OffscreenCanvas;
|
|
16
|
-
useDevicePixels: number | boolean;
|
|
17
15
|
width: number;
|
|
18
16
|
height: number;
|
|
19
17
|
aspect: number;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
|
-
import {luma, Adapter} from '@luma.gl/core';
|
|
5
|
+
import {luma, Adapter, Device} from '@luma.gl/core';
|
|
6
6
|
import {AnimationLoopTemplate} from './animation-loop-template';
|
|
7
7
|
import {AnimationLoop, AnimationLoopProps} from './animation-loop';
|
|
8
8
|
import type {AnimationProps} from './animation-props';
|
|
@@ -15,7 +15,10 @@ export type MakeAnimationLoopProps = Omit<
|
|
|
15
15
|
adapters?: Adapter[];
|
|
16
16
|
};
|
|
17
17
|
|
|
18
|
-
/**
|
|
18
|
+
/**
|
|
19
|
+
* Instantiates an animation loop and initializes it with the template.
|
|
20
|
+
* @note The application needs to call `start()` on the returned animation loop to start the rendering loop.
|
|
21
|
+
*/
|
|
19
22
|
export function makeAnimationLoop(
|
|
20
23
|
AnimationLoopTemplateCtor: typeof AnimationLoopTemplate,
|
|
21
24
|
props?: MakeAnimationLoopProps
|
|
@@ -33,10 +36,16 @@ export function makeAnimationLoop(
|
|
|
33
36
|
device,
|
|
34
37
|
|
|
35
38
|
async onInitialize(animationProps: AnimationProps): Promise<unknown> {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
39
|
+
clearError(animationProps.animationLoop.device!);
|
|
40
|
+
try {
|
|
41
|
+
// @ts-expect-error abstract to prevent instantiation
|
|
42
|
+
renderLoop = new AnimationLoopTemplateCtor(animationProps);
|
|
43
|
+
// Any async loading can be handled here
|
|
44
|
+
return await renderLoop?.onInitialize(animationProps);
|
|
45
|
+
} catch (error) {
|
|
46
|
+
setError(animationProps.animationLoop.device!, error as Error);
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
40
49
|
},
|
|
41
50
|
|
|
42
51
|
onRender: (animationProps: AnimationProps) => renderLoop?.onRender(animationProps),
|
|
@@ -51,8 +60,31 @@ export function makeAnimationLoop(
|
|
|
51
60
|
return this.AnimationLoopTemplateCtor.info;
|
|
52
61
|
};
|
|
53
62
|
|
|
54
|
-
// Start the loop automatically
|
|
55
|
-
// animationLoop.start();
|
|
56
|
-
|
|
57
63
|
return animationLoop;
|
|
58
64
|
}
|
|
65
|
+
|
|
66
|
+
function setError(device: Device, error: Error): void {
|
|
67
|
+
const canvas = device?.getDefaultCanvasContext().canvas;
|
|
68
|
+
if (canvas instanceof HTMLCanvasElement) {
|
|
69
|
+
canvas.style.overflow = 'visible';
|
|
70
|
+
let errorDiv = document.getElementById('animation-loop-error');
|
|
71
|
+
errorDiv?.remove();
|
|
72
|
+
errorDiv = document.createElement('h1');
|
|
73
|
+
errorDiv.id = 'animation-loop-error';
|
|
74
|
+
errorDiv.innerHTML = error.message;
|
|
75
|
+
errorDiv.style.position = 'absolute';
|
|
76
|
+
errorDiv.style.top = '10px'; // left: 50%; transform: translate(-50%, -50%);';
|
|
77
|
+
errorDiv.style.left = '10px';
|
|
78
|
+
errorDiv.style.color = 'black';
|
|
79
|
+
errorDiv.style.backgroundColor = 'red';
|
|
80
|
+
canvas.parentElement?.appendChild(errorDiv);
|
|
81
|
+
// canvas.style.position = 'absolute';
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function clearError(device: Device): void {
|
|
86
|
+
const errorDiv = document.getElementById('animation-loop-error');
|
|
87
|
+
if (errorDiv) {
|
|
88
|
+
errorDiv.remove();
|
|
89
|
+
}
|
|
90
|
+
}
|