@luma.gl/engine 9.1.0-alpha.9 → 9.1.0-beta.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/dist/animation/key-frames.js +1 -0
  2. package/dist/animation/key-frames.js.map +1 -0
  3. package/dist/animation/timeline.js +1 -0
  4. package/dist/animation/timeline.js.map +1 -0
  5. package/dist/animation-loop/animation-loop-template.js +1 -0
  6. package/dist/animation-loop/animation-loop-template.js.map +1 -0
  7. package/dist/animation-loop/animation-loop.d.ts +2 -0
  8. package/dist/animation-loop/animation-loop.d.ts.map +1 -1
  9. package/dist/animation-loop/animation-loop.js +24 -6
  10. package/dist/animation-loop/animation-loop.js.map +1 -0
  11. package/dist/animation-loop/animation-props.js +1 -0
  12. package/dist/animation-loop/animation-props.js.map +1 -0
  13. package/dist/animation-loop/make-animation-loop.d.ts +5 -1
  14. package/dist/animation-loop/make-animation-loop.d.ts.map +1 -1
  15. package/dist/animation-loop/make-animation-loop.js +3 -1
  16. package/dist/animation-loop/make-animation-loop.js.map +1 -0
  17. package/dist/animation-loop/request-animation-frame.d.ts +4 -2
  18. package/dist/animation-loop/request-animation-frame.d.ts.map +1 -1
  19. package/dist/animation-loop/request-animation-frame.js +5 -3
  20. package/dist/animation-loop/request-animation-frame.js.map +1 -0
  21. package/dist/application-utils/load-file.d.ts +1 -1
  22. package/dist/application-utils/load-file.d.ts.map +1 -1
  23. package/dist/application-utils/load-file.js +2 -2
  24. package/dist/application-utils/load-file.js.map +1 -0
  25. package/dist/application-utils/random.js +1 -0
  26. package/dist/application-utils/random.js.map +1 -0
  27. package/dist/async-texture/async-texture.d.ts +14 -2
  28. package/dist/async-texture/async-texture.d.ts.map +1 -1
  29. package/dist/async-texture/async-texture.js +31 -0
  30. package/dist/async-texture/async-texture.js.map +1 -0
  31. package/dist/compute/buffer-transform.d.ts +41 -0
  32. package/dist/compute/buffer-transform.d.ts.map +1 -0
  33. package/dist/{transform → compute}/buffer-transform.js +19 -12
  34. package/dist/compute/buffer-transform.js.map +1 -0
  35. package/dist/{computation.d.ts → compute/computation.d.ts} +3 -3
  36. package/dist/compute/computation.d.ts.map +1 -0
  37. package/dist/{computation.js → compute/computation.js} +7 -8
  38. package/dist/compute/computation.js.map +1 -0
  39. package/dist/compute/swap.d.ts +48 -0
  40. package/dist/compute/swap.d.ts.map +1 -0
  41. package/dist/compute/swap.js +91 -0
  42. package/dist/compute/swap.js.map +1 -0
  43. package/dist/{transform → compute}/texture-transform.d.ts +0 -6
  44. package/dist/compute/texture-transform.d.ts.map +1 -0
  45. package/dist/{transform → compute}/texture-transform.js +7 -13
  46. package/dist/compute/texture-transform.js.map +1 -0
  47. package/dist/debug/copy-texture-to-image.js +1 -0
  48. package/dist/debug/copy-texture-to-image.js.map +1 -0
  49. package/dist/debug/debug-framebuffer.js +2 -1
  50. package/dist/debug/debug-framebuffer.js.map +1 -0
  51. package/dist/debug/debug-shader-layout.js +2 -1
  52. package/dist/debug/debug-shader-layout.js.map +1 -0
  53. package/dist/debug/pixel-data-utils.js +1 -0
  54. package/dist/debug/pixel-data-utils.js.map +1 -0
  55. package/dist/dist.dev.js +2588 -5862
  56. package/dist/dist.min.js +420 -103
  57. package/dist/factories/pipeline-factory.d.ts.map +1 -0
  58. package/dist/{lib → factories}/pipeline-factory.js +1 -0
  59. package/dist/factories/pipeline-factory.js.map +1 -0
  60. package/dist/factories/shader-factory.d.ts.map +1 -0
  61. package/dist/{lib → factories}/shader-factory.js +1 -0
  62. package/dist/factories/shader-factory.js.map +1 -0
  63. package/dist/geometries/cone-geometry.js +1 -0
  64. package/dist/geometries/cone-geometry.js.map +1 -0
  65. package/dist/geometries/cube-geometry.js +1 -0
  66. package/dist/geometries/cube-geometry.js.map +1 -0
  67. package/dist/geometries/cylinder-geometry.js +1 -0
  68. package/dist/geometries/cylinder-geometry.js.map +1 -0
  69. package/dist/geometries/ico-sphere-geometry.js +1 -0
  70. package/dist/geometries/ico-sphere-geometry.js.map +1 -0
  71. package/dist/geometries/plane-geometry.js +1 -0
  72. package/dist/geometries/plane-geometry.js.map +1 -0
  73. package/dist/geometries/sphere-geometry.js +1 -0
  74. package/dist/geometries/sphere-geometry.js.map +1 -0
  75. package/dist/geometries/truncated-cone-geometry.js +1 -0
  76. package/dist/geometries/truncated-cone-geometry.js.map +1 -0
  77. package/dist/geometry/geometry-table.js +1 -0
  78. package/dist/geometry/geometry-table.js.map +1 -0
  79. package/dist/geometry/geometry-utils.js +1 -0
  80. package/dist/geometry/geometry-utils.js.map +1 -0
  81. package/dist/geometry/geometry.js +1 -0
  82. package/dist/geometry/geometry.js.map +1 -0
  83. package/dist/geometry/gpu-geometry.js +1 -0
  84. package/dist/geometry/gpu-geometry.js.map +1 -0
  85. package/dist/geometry/gpu-table.js +1 -0
  86. package/dist/geometry/gpu-table.js.map +1 -0
  87. package/dist/index.cjs +1268 -173
  88. package/dist/index.cjs.map +4 -4
  89. package/dist/index.d.ts +23 -12
  90. package/dist/index.d.ts.map +1 -1
  91. package/dist/index.js +19 -9
  92. package/dist/index.js.map +1 -0
  93. package/dist/model/model.d.ts +11 -10
  94. package/dist/model/model.d.ts.map +1 -1
  95. package/dist/model/model.js +77 -58
  96. package/dist/model/model.js.map +1 -0
  97. package/dist/model/split-uniforms-and-bindings.d.ts +1 -1
  98. package/dist/model/split-uniforms-and-bindings.d.ts.map +1 -1
  99. package/dist/model/split-uniforms-and-bindings.js +2 -1
  100. package/dist/model/split-uniforms-and-bindings.js.map +1 -0
  101. package/dist/models/billboard-texture-model.d.ts +23 -0
  102. package/dist/models/billboard-texture-model.d.ts.map +1 -0
  103. package/dist/models/billboard-texture-model.js +78 -0
  104. package/dist/models/billboard-texture-model.js.map +1 -0
  105. package/dist/models/billboard-texture-module.d.ts +10 -0
  106. package/dist/models/billboard-texture-module.d.ts.map +1 -0
  107. package/dist/models/billboard-texture-module.js +37 -0
  108. package/dist/models/billboard-texture-module.js.map +1 -0
  109. package/dist/{lib → models}/clip-space.d.ts +3 -1
  110. package/dist/models/clip-space.d.ts.map +1 -0
  111. package/dist/models/clip-space.js +77 -0
  112. package/dist/models/clip-space.js.map +1 -0
  113. package/dist/modules/picking/color-picking.d.ts +28 -0
  114. package/dist/modules/picking/color-picking.d.ts.map +1 -0
  115. package/dist/modules/picking/color-picking.js +177 -0
  116. package/dist/modules/picking/color-picking.js.map +1 -0
  117. package/dist/modules/picking/index-picking.d.ts +32 -0
  118. package/dist/modules/picking/index-picking.d.ts.map +1 -0
  119. package/dist/modules/picking/index-picking.js +148 -0
  120. package/dist/modules/picking/index-picking.js.map +1 -0
  121. package/dist/modules/picking/legacy-picking-manager.d.ts +27 -0
  122. package/dist/modules/picking/legacy-picking-manager.d.ts.map +1 -0
  123. package/dist/modules/picking/legacy-picking-manager.js +76 -0
  124. package/dist/modules/picking/legacy-picking-manager.js.map +1 -0
  125. package/dist/modules/picking/picking-manager.d.ts +45 -0
  126. package/dist/modules/picking/picking-manager.d.ts.map +1 -0
  127. package/dist/modules/picking/picking-manager.js +101 -0
  128. package/dist/modules/picking/picking-manager.js.map +1 -0
  129. package/dist/modules/picking/picking-uniforms.d.ts +79 -0
  130. package/dist/modules/picking/picking-uniforms.d.ts.map +1 -0
  131. package/dist/modules/picking/picking-uniforms.js +109 -0
  132. package/dist/modules/picking/picking-uniforms.js.map +1 -0
  133. package/dist/passes/get-fragment-shader.d.ts +12 -0
  134. package/dist/passes/get-fragment-shader.d.ts.map +1 -0
  135. package/dist/passes/get-fragment-shader.js +117 -0
  136. package/dist/passes/get-fragment-shader.js.map +1 -0
  137. package/dist/passes/shader-pass-renderer.d.ts +63 -0
  138. package/dist/passes/shader-pass-renderer.d.ts.map +1 -0
  139. package/dist/passes/shader-pass-renderer.js +197 -0
  140. package/dist/passes/shader-pass-renderer.js.map +1 -0
  141. package/dist/scenegraph/group-node.js +1 -0
  142. package/dist/scenegraph/group-node.js.map +1 -0
  143. package/dist/scenegraph/model-node.js +1 -0
  144. package/dist/scenegraph/model-node.js.map +1 -0
  145. package/dist/scenegraph/scenegraph-node.js +1 -0
  146. package/dist/scenegraph/scenegraph-node.js.map +1 -0
  147. package/dist/shader-inputs.d.ts +8 -21
  148. package/dist/shader-inputs.d.ts.map +1 -1
  149. package/dist/shader-inputs.js +15 -11
  150. package/dist/shader-inputs.js.map +1 -0
  151. package/dist/utils/deep-equal.js +1 -0
  152. package/dist/utils/deep-equal.js.map +1 -0
  153. package/dist/utils/uid.js +1 -0
  154. package/dist/utils/uid.js.map +1 -0
  155. package/package.json +6 -6
  156. package/src/animation-loop/animation-loop.ts +27 -6
  157. package/src/animation-loop/make-animation-loop.ts +8 -3
  158. package/src/animation-loop/request-animation-frame.ts +4 -3
  159. package/src/application-utils/load-file.ts +2 -4
  160. package/src/async-texture/async-texture.ts +39 -7
  161. package/src/{transform → compute}/buffer-transform.ts +30 -14
  162. package/src/{computation.ts → compute/computation.ts} +14 -8
  163. package/src/compute/swap.ts +116 -0
  164. package/src/{transform → compute}/texture-transform.ts +6 -16
  165. package/src/debug/debug-framebuffer.ts +1 -1
  166. package/src/debug/debug-shader-layout.ts +1 -1
  167. package/src/index.ts +35 -16
  168. package/src/model/model.ts +116 -66
  169. package/src/model/split-uniforms-and-bindings.ts +4 -4
  170. package/src/models/billboard-texture-model.ts +98 -0
  171. package/src/models/billboard-texture-module.ts +49 -0
  172. package/src/models/clip-space.ts +88 -0
  173. package/src/modules/picking/README.md +88 -0
  174. package/src/modules/picking/color-picking.ts +190 -0
  175. package/src/modules/picking/index-picking.ts +156 -0
  176. package/src/modules/picking/legacy-picking-manager.ts +99 -0
  177. package/src/modules/picking/picking-manager.ts +137 -0
  178. package/src/modules/picking/picking-uniforms.ts +179 -0
  179. package/src/passes/get-fragment-shader.ts +129 -0
  180. package/src/passes/shader-pass-renderer.ts +252 -0
  181. package/src/shader-inputs.ts +27 -48
  182. package/dist/computation.d.ts.map +0 -1
  183. package/dist/lib/clip-space.d.ts.map +0 -1
  184. package/dist/lib/clip-space.js +0 -46
  185. package/dist/lib/pipeline-factory.d.ts.map +0 -1
  186. package/dist/lib/shader-factory.d.ts.map +0 -1
  187. package/dist/transform/buffer-transform.d.ts +0 -35
  188. package/dist/transform/buffer-transform.d.ts.map +0 -1
  189. package/dist/transform/texture-transform.d.ts.map +0 -1
  190. package/src/lib/clip-space.ts +0 -53
  191. /package/dist/{lib → factories}/pipeline-factory.d.ts +0 -0
  192. /package/dist/{lib → factories}/shader-factory.d.ts +0 -0
  193. /package/src/{lib → factories}/pipeline-factory.ts +0 -0
  194. /package/src/{lib → factories}/shader-factory.ts +0 -0
@@ -0,0 +1,63 @@
1
+ import { Device, RenderPass, Texture } from '@luma.gl/core';
2
+ import type { ShaderPass } from '@luma.gl/shadertools';
3
+ import { ShaderInputs } from "../shader-inputs.js";
4
+ import { AsyncTexture } from "../async-texture/async-texture.js";
5
+ import { ClipSpace } from "../models/clip-space.js";
6
+ import { SwapFramebuffers } from "../compute/swap.js";
7
+ import { BackgroundTextureModel } from "../models/billboard-texture-model.js";
8
+ type ShaderSubPass = NonNullable<ShaderPass['passes']>[0];
9
+ /** Props for ShaderPassRenderer */
10
+ export type ShaderPassRendererProps = {
11
+ /** List of ShaderPasses to apply to the sourceTexture */
12
+ shaderPasses: ShaderPass[];
13
+ /** Optional typed ShaderInputs object for setting uniforms */
14
+ shaderInputs: ShaderInputs;
15
+ };
16
+ /** A pass that renders a given texture into screen space */
17
+ export declare class ShaderPassRenderer {
18
+ device: Device;
19
+ shaderInputs: ShaderInputs;
20
+ passRenderers: PassRenderer[];
21
+ swapFramebuffers: SwapFramebuffers;
22
+ /** For rendering to the screen */
23
+ clipSpace: ClipSpace;
24
+ textureModel: BackgroundTextureModel;
25
+ constructor(device: Device, props: ShaderPassRendererProps);
26
+ /** Destroys resources created by this ShaderPassRenderer */
27
+ destroy(): void;
28
+ resize(width: number, height: number): void;
29
+ renderToScreen(options: {
30
+ sourceTexture: AsyncTexture;
31
+ uniforms: any;
32
+ bindings: any;
33
+ }): boolean;
34
+ /** Runs the shaderPasses in sequence on the sourceTexture and returns a texture with the results.
35
+ * @returns null if the the sourceTexture has not yet been loaded
36
+ */
37
+ renderToTexture(options: {
38
+ sourceTexture: AsyncTexture;
39
+ uniforms: any;
40
+ bindings: any;
41
+ }): Texture | null;
42
+ }
43
+ /** renders one ShaderPass */
44
+ declare class PassRenderer {
45
+ shaderPass: ShaderPass;
46
+ subPassRenderers: SubPassRenderer[];
47
+ constructor(device: Device, shaderPass: ShaderPass, props?: {});
48
+ destroy(): void;
49
+ }
50
+ /** Renders one subpass of a ShaderPass */
51
+ declare class SubPassRenderer {
52
+ model: ClipSpace;
53
+ shaderPass: ShaderPass;
54
+ subPass: ShaderSubPass;
55
+ constructor(device: Device, shaderPass: ShaderPass, subPass: ShaderSubPass);
56
+ destroy(): void;
57
+ render(options: {
58
+ renderPass: RenderPass;
59
+ bindings: any;
60
+ }): void;
61
+ }
62
+ export {};
63
+ //# sourceMappingURL=shader-pass-renderer.d.ts.map
@@ -0,0 +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;IAe7F;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE;QACvB,aAAa,EAAE,YAAY,CAAC;QAC5B,QAAQ,EAAE,GAAG,CAAC;QACd,QAAQ,EAAE,GAAG,CAAC;KACf,GAAG,OAAO,GAAG,IAAI;CAuDnB;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;IAuB1E,OAAO;IAIP,MAAM,CAAC,OAAO,EAAE;QAAC,UAAU,EAAE,UAAU,CAAC;QAAC,QAAQ,EAAE,GAAG,CAAA;KAAC,GAAG,IAAI;CAa/D"}
@@ -0,0 +1,197 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { initializeShaderModule } from '@luma.gl/shadertools';
5
+ import { ShaderInputs } from "../shader-inputs.js";
6
+ import { ClipSpace } from "../models/clip-space.js";
7
+ import { SwapFramebuffers } from "../compute/swap.js";
8
+ import { BackgroundTextureModel } from "../models/billboard-texture-model.js";
9
+ import { getFragmentShaderForRenderPass } from "./get-fragment-shader.js";
10
+ /** A pass that renders a given texture into screen space */
11
+ export class ShaderPassRenderer {
12
+ device;
13
+ shaderInputs;
14
+ passRenderers;
15
+ swapFramebuffers;
16
+ /** For rendering to the screen */
17
+ clipSpace;
18
+ textureModel;
19
+ constructor(device, props) {
20
+ this.device = device;
21
+ props.shaderPasses.map(shaderPass => initializeShaderModule(shaderPass));
22
+ const modules = props.shaderPasses.reduce((object, shaderPass) => ({ ...object, [shaderPass.name]: shaderPass }), {});
23
+ this.shaderInputs = props.shaderInputs || new ShaderInputs(modules);
24
+ const size = device.getCanvasContext().getPixelSize();
25
+ this.swapFramebuffers = new SwapFramebuffers(device, {
26
+ colorAttachments: ['rgba8unorm'],
27
+ width: size[0],
28
+ height: size[1]
29
+ });
30
+ this.textureModel = new BackgroundTextureModel(device, {
31
+ backgroundTexture: this.swapFramebuffers.current.colorAttachments[0].texture
32
+ });
33
+ this.clipSpace = new ClipSpace(device, {
34
+ source: /* wgsl */ `\
35
+ @group(0) @binding(0) var sourceTexture: texture_2d<f32>;
36
+ @group(0) @binding(1) var sourceTextureSampler: sampler;
37
+
38
+ @fragment
39
+ fn fragmentMain(inputs: FragmentInputs) -> @location(0) vec4<f32> {
40
+ let texCoord: vec2<f32> = inputs.coordinate;
41
+ return textureSample(sourceTexture, sourceTextureSampler, texCoord);
42
+ }
43
+ `,
44
+ fs: /* glsl */ `\
45
+ #version 300 es
46
+
47
+ uniform sampler2D sourceTexture;
48
+ in vec2 uv;
49
+ in vec2 coordinate;
50
+ out vec4 fragColor;
51
+
52
+ void main() {
53
+ vec2 texCoord = coordinate;
54
+ fragColor = texture(sourceTexture, coordinate);
55
+ }
56
+ `
57
+ });
58
+ this.passRenderers = props.shaderPasses.map(shaderPass => new PassRenderer(device, shaderPass));
59
+ }
60
+ /** Destroys resources created by this ShaderPassRenderer */
61
+ destroy() {
62
+ for (const subPassRenderer of this.passRenderers) {
63
+ subPassRenderer.destroy();
64
+ }
65
+ this.swapFramebuffers.destroy();
66
+ this.clipSpace.destroy();
67
+ }
68
+ resize(width, height) {
69
+ this.swapFramebuffers.resize({ width, height });
70
+ // this.props.passes.forEach(pass => pass.resize(width, height));
71
+ }
72
+ renderToScreen(options) {
73
+ // Run the shader passes and generate an output texture
74
+ const outputTexture = this.renderToTexture(options);
75
+ if (!outputTexture) {
76
+ // source texture not yet loaded
77
+ return false;
78
+ }
79
+ const renderPass = this.device.beginRenderPass({ clearColor: [0, 0, 0, 1], clearDepth: 1 });
80
+ this.clipSpace.setBindings({ sourceTexture: outputTexture });
81
+ this.clipSpace.draw(renderPass);
82
+ renderPass.end();
83
+ return true;
84
+ }
85
+ /** Runs the shaderPasses in sequence on the sourceTexture and returns a texture with the results.
86
+ * @returns null if the the sourceTexture has not yet been loaded
87
+ */
88
+ renderToTexture(options) {
89
+ const { sourceTexture } = options;
90
+ if (!sourceTexture.isReady) {
91
+ return null;
92
+ }
93
+ this.textureModel.destroy();
94
+ this.textureModel = new BackgroundTextureModel(this.device, {
95
+ backgroundTexture: sourceTexture
96
+ });
97
+ // Clear the current texture before we begin
98
+ const clearTexturePass = this.device.beginRenderPass({
99
+ framebuffer: this.swapFramebuffers.current,
100
+ clearColor: [0, 0, 0, 1]
101
+ });
102
+ this.textureModel.draw(clearTexturePass);
103
+ clearTexturePass.end();
104
+ // const commandEncoder = this.device.createCommandEncoder();
105
+ // commandEncoder.copyTextureToTexture({
106
+ // sourceTexture: sourceTexture.texture,
107
+ // destinationTexture: this.swapFramebuffers.current.colorAttachments[0].texture
108
+ // });
109
+ // commandEncoder.finish();
110
+ let first = true;
111
+ for (const passRenderer of this.passRenderers) {
112
+ for (const subPassRenderer of passRenderer.subPassRenderers) {
113
+ if (!first) {
114
+ this.swapFramebuffers.swap();
115
+ }
116
+ first = false;
117
+ const swapBufferTexture = this.swapFramebuffers.current.colorAttachments[0].texture;
118
+ const bindings = {
119
+ sourceTexture: swapBufferTexture
120
+ // texSize: [sourceTextures.width, sourceTextures.height]
121
+ };
122
+ const renderPass = this.device.beginRenderPass({
123
+ framebuffer: this.swapFramebuffers.next,
124
+ clearColor: [0, 0, 0, 1],
125
+ clearDepth: 1
126
+ });
127
+ subPassRenderer.render({ renderPass, bindings });
128
+ renderPass.end();
129
+ }
130
+ }
131
+ this.swapFramebuffers.swap();
132
+ const outputTexture = this.swapFramebuffers.current.colorAttachments[0].texture;
133
+ return outputTexture;
134
+ }
135
+ }
136
+ /** renders one ShaderPass */
137
+ class PassRenderer {
138
+ shaderPass;
139
+ subPassRenderers;
140
+ constructor(device, shaderPass, props = {}) {
141
+ this.shaderPass = shaderPass;
142
+ // const id = `${shaderPass.name}-pass`;
143
+ const subPasses = shaderPass.passes || [];
144
+ // normalizePasses(gl, module, id, props);
145
+ this.subPassRenderers = subPasses.map(subPass => {
146
+ // const idn = `${id}-${subPasses.length + 1}`;
147
+ return new SubPassRenderer(device, shaderPass, subPass);
148
+ });
149
+ }
150
+ destroy() {
151
+ for (const subPassRenderer of this.subPassRenderers) {
152
+ subPassRenderer.destroy();
153
+ }
154
+ }
155
+ }
156
+ /** Renders one subpass of a ShaderPass */
157
+ class SubPassRenderer {
158
+ model;
159
+ shaderPass;
160
+ subPass;
161
+ constructor(device, shaderPass, subPass) {
162
+ this.shaderPass = shaderPass;
163
+ this.subPass = subPass;
164
+ const action = subPass.action || (subPass.filter && 'filter') || (subPass.sampler && 'sample') || 'filter';
165
+ const fs = getFragmentShaderForRenderPass({
166
+ shaderPass,
167
+ action,
168
+ shadingLanguage: device.info.shadingLanguage
169
+ });
170
+ this.model = new ClipSpace(device, {
171
+ id: `${shaderPass.name}-subpass`,
172
+ source: fs,
173
+ fs,
174
+ modules: [shaderPass],
175
+ parameters: {
176
+ depthWriteEnabled: false,
177
+ depthCompare: 'always'
178
+ }
179
+ });
180
+ }
181
+ destroy() {
182
+ this.model.destroy();
183
+ }
184
+ render(options) {
185
+ const { renderPass, bindings } = options;
186
+ this.model.shaderInputs.setProps({
187
+ [this.shaderPass.name]: this.shaderPass.uniforms || {}
188
+ });
189
+ this.model.shaderInputs.setProps({
190
+ [this.shaderPass.name]: this.subPass.uniforms || {}
191
+ });
192
+ // this.model.setBindings(this.subPass.bindings || {});
193
+ this.model.setBindings(bindings || {});
194
+ this.model.draw(renderPass);
195
+ }
196
+ }
197
+ //# sourceMappingURL=shader-pass-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shader-pass-renderer.js","sourceRoot":"","sources":["../../src/passes/shader-pass-renderer.ts"],"names":[],"mappings":"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"}
@@ -85,3 +85,4 @@ export class GroupNode extends ScenegraphNode {
85
85
  }
86
86
  }
87
87
  }
88
+ //# sourceMappingURL=group-node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-node.js","sourceRoot":"","sources":["../../src/scenegraph/group-node.ts"],"names":[],"mappings":"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"}
@@ -36,3 +36,4 @@ export class ModelNode extends ScenegraphNode {
36
36
  return this.model.draw(renderPass);
37
37
  }
38
38
  }
39
+ //# sourceMappingURL=model-node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-node.js","sourceRoot":"","sources":["../../src/scenegraph/model-node.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAGpC,OAAO,EAAC,cAAc,EAAsB,6BAA0B;AAStE,MAAM,OAAO,SAAU,SAAQ,cAAc;IAClC,KAAK,CAAQ;IACtB,MAAM,GAAgC,IAAI,CAAC;IAC3C,gBAAgB,CAAQ;IAExB,8EAA8E;IAC9E,yBAAyB;IACzB,wBAAwB;IACxB,sBAAsB;IAEtB,YAAY,KAAqB;QAC/B,KAAK,CAAC,KAAK,CAAC,CAAC;QAEb,0CAA0C;QAC1C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,IAAI,EAAE,CAAC;QACrD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAEQ,OAAO;QACd,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACrB,mBAAmB;YACnB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9D,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;IAC7B,CAAC;IAEQ,SAAS;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,uBAAuB;IACvB,IAAI,CAAC,UAAsB;QACzB,yDAAyD;QACzD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;CACF"}
@@ -154,3 +154,4 @@ export class ScenegraphNode {
154
154
  Object.assign(this.props, props);
155
155
  }
156
156
  }
157
+ //# sourceMappingURL=scenegraph-node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scenegraph-node.js","sourceRoot":"","sources":["../../src/scenegraph/scenegraph-node.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,5 @@
1
- import type { UniformValue, Texture, Sampler } from '@luma.gl/core';
1
+ import type { Binding, UniformValue } from '@luma.gl/core';
2
2
  import { ShaderModule } from '@luma.gl/shadertools';
3
- type BindingValue = Buffer | Texture | Sampler;
4
- /** Minimal ShaderModule subset, we don't need shader code etc */
5
- export type ShaderModuleInputs<PropsT extends Record<string, unknown> = Record<string, unknown>, UniformsT extends Record<string, UniformValue> = Record<string, UniformValue>, BindingsT extends Record<string, BindingValue> = Record<string, BindingValue>> = {
6
- defaultUniforms?: UniformsT;
7
- getUniforms?: (props?: any, oldProps?: any) => Record<string, BindingValue | UniformValue>;
8
- /** Not used. Used to access props type */
9
- props?: PropsT;
10
- bindings?: Record<keyof BindingsT, {
11
- location: number;
12
- type: 'texture' | 'sampler' | 'uniforms';
13
- }>;
14
- uniformTypes?: any;
15
- };
16
3
  /**
17
4
  * ShaderInputs holds uniform and binding values for one or more shader modules,
18
5
  * - It can generate binary data for any uniform buffer
@@ -26,19 +13,19 @@ export declare class ShaderInputs<ShaderPropsT extends Partial<Record<string, Re
26
13
  * @todo should should this include the resolved dependencies?
27
14
  */
28
15
  modules: Readonly<{
29
- [P in keyof ShaderPropsT]: ShaderModuleInputs<ShaderPropsT[P]>;
16
+ [P in keyof ShaderPropsT]: ShaderModule<ShaderPropsT[P]>;
30
17
  }>;
31
18
  /** Stores the uniform values for each module */
32
19
  moduleUniforms: Record<keyof ShaderPropsT, Record<string, UniformValue>>;
33
20
  /** Stores the uniform bindings for each module */
34
- moduleBindings: Record<keyof ShaderPropsT, Record<string, Texture | Sampler>>;
21
+ moduleBindings: Record<keyof ShaderPropsT, Record<string, Binding>>;
35
22
  /** Tracks if uniforms have changed */
36
23
  /**
37
24
  * Create a new UniformStore instance
38
25
  * @param modules
39
26
  */
40
27
  constructor(modules: {
41
- [P in keyof ShaderPropsT]?: ShaderModuleInputs<ShaderPropsT[P]>;
28
+ [P in keyof ShaderPropsT]?: ShaderModule<ShaderPropsT[P], any>;
42
29
  });
43
30
  /** Destroy */
44
31
  destroy(): void;
@@ -48,17 +35,17 @@ export declare class ShaderInputs<ShaderPropsT extends Partial<Record<string, Re
48
35
  setProps(props: Partial<{
49
36
  [P in keyof ShaderPropsT]?: Partial<ShaderPropsT[P]>;
50
37
  }>): void;
51
- /** Merges all bindings for the shader (from the various modules) */
52
38
  /**
53
39
  * Return the map of modules
54
40
  * @todo should should this include the resolved dependencies?
55
41
  */
56
42
  getModules(): ShaderModule[];
57
43
  /** Get all uniform values for all modules */
58
- getUniformValues(): Record<keyof ShaderPropsT, Record<string, UniformValue>>;
44
+ getUniformValues(): Partial<Record<keyof ShaderPropsT, Record<string, UniformValue>>>;
59
45
  /** Merges all bindings for the shader (from the various modules) */
60
- getBindings(): Record<string, Texture | Sampler>;
46
+ getBindingValues(): Record<string, Binding>;
47
+ /** Return a debug table that can be used for console.table() or log.table() */
61
48
  getDebugTable(): Record<string, Record<string, unknown>>;
49
+ _addModule(module: ShaderModule): void;
62
50
  }
63
- export {};
64
51
  //# sourceMappingURL=shader-inputs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shader-inputs.d.ts","sourceRoot":"","sources":["../src/shader-inputs.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,YAAY,EAAE,OAAO,EAAE,OAAO,EAAC,MAAM,eAAe,CAAC;AAGlE,OAAO,EAA8B,YAAY,EAAC,MAAM,sBAAsB,CAAC;AAG/E,KAAK,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAE/C,iEAAiE;AACjE,MAAM,MAAM,kBAAkB,CAC5B,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChE,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,EAC7E,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,IAC3E;IACF,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG,KAAK,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAAC,CAAC;IAE3F,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,QAAQ,CAAC,EAAE,MAAM,CACf,MAAM,SAAS,EACf;QACE,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;KAC1C,CACF,CAAC;IAEF,YAAY,CAAC,EAAE,GAAG,CAAC;CACpB,CAAC;AAEF;;;;;;GAMG;AACH,qBAAa,YAAY,CACvB,YAAY,SAAS,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAC7E,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CACxC;IAED;;;OAGG;IAEH,OAAO,EAAE,QAAQ,CAAC;SAAE,CAAC,IAAI,MAAM,YAAY,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;KAAC,CAAC,CAAC;IAEpF,gDAAgD;IAChD,cAAc,EAAE,MAAM,CAAC,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IACzE,mDAAmD;IACnD,cAAc,EAAE,MAAM,CAAC,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAC9E,sCAAsC;IAGtC;;;OAGG;gBAES,OAAO,EAAE;SAAE,CAAC,IAAI,MAAM,YAAY,CAAC,CAAC,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;KAAC;IA4BtF,cAAc;IACd,OAAO,IAAI,IAAI;IAEf;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;SAAE,CAAC,IAAI,MAAM,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;KAAC,CAAC,GAAG,IAAI;IAyBtF,oEAAoE;IAKpE;;;OAGG;IACH,UAAU,IAAI,YAAY,EAAE;IAI5B,6CAA6C;IAC7C,gBAAgB,IAAI,MAAM,CAAC,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAI5E,oEAAoE;IACpE,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC;IAQhD,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAYzD"}
1
+ {"version":3,"file":"shader-inputs.d.ts","sourceRoot":"","sources":["../src/shader-inputs.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,OAAO,EAAE,YAAY,EAAC,MAAM,eAAe,CAAC;AAGzD,OAAO,EAA8B,YAAY,EAAC,MAAM,sBAAsB,CAAC;AAG/E;;;;;;GAMG;AACH,qBAAa,YAAY,CACvB,YAAY,SAAS,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAC7E,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CACxC;IAED;;;OAGG;IAEH,OAAO,EAAE,QAAQ,CAAC;SAAE,CAAC,IAAI,MAAM,YAAY,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;KAAC,CAAC,CAAC;IAE9E,gDAAgD;IAChD,cAAc,EAAE,MAAM,CAAC,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IACzE,mDAAmD;IACnD,cAAc,EAAE,MAAM,CAAC,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpE,sCAAsC;IAGtC;;;OAGG;gBAES,OAAO,EAAE;SAAE,CAAC,IAAI,MAAM,YAAY,CAAC,CAAC,EAAE,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;KAAC;IA2BrF,cAAc;IACd,OAAO,IAAI,IAAI;IAEf;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;SAAE,CAAC,IAAI,MAAM,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;KAAC,CAAC,GAAG,IAAI;IAyBtF;;;OAGG;IACH,UAAU,IAAI,YAAY,EAAE;IAI5B,6CAA6C;IAC7C,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IAIrF,oEAAoE;IACpE,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAU3C,+EAA+E;IAC/E,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAaxD,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;CAMvC"}
@@ -45,10 +45,10 @@ export class ShaderInputs {
45
45
  this.moduleBindings = {};
46
46
  // Initialize the modules
47
47
  for (const [name, module] of Object.entries(modules)) {
48
- const moduleName = name;
49
- // Get default uniforms from module
50
- this.moduleUniforms[moduleName] = module.defaultUniforms || {};
51
- this.moduleBindings[moduleName] = {};
48
+ this._addModule(module);
49
+ if (module.name && name !== module.name) {
50
+ log.warn(`Module name: ${name} vs ${module.name}`)();
51
+ }
52
52
  }
53
53
  }
54
54
  /** Destroy */
@@ -68,8 +68,7 @@ export class ShaderInputs {
68
68
  }
69
69
  const oldUniforms = this.moduleUniforms[moduleName];
70
70
  const oldBindings = this.moduleBindings[moduleName];
71
- let uniformsAndBindings = module.getUniforms?.(moduleProps, this.moduleUniforms[moduleName]);
72
- uniformsAndBindings ||= { ...this.moduleUniforms[moduleName], ...moduleProps };
71
+ const uniformsAndBindings = module.getUniforms?.(moduleProps, oldUniforms) || moduleProps;
73
72
  const { uniforms, bindings } = splitUniformsAndBindings(uniformsAndBindings);
74
73
  this.moduleUniforms[moduleName] = { ...oldUniforms, ...uniforms };
75
74
  this.moduleBindings[moduleName] = { ...oldBindings, ...bindings };
@@ -77,10 +76,6 @@ export class ShaderInputs {
77
76
  // console.log(`setProps(${String(moduleName)}`, moduleName, this.moduleUniforms[moduleName])
78
77
  }
79
78
  }
80
- /** Merges all bindings for the shader (from the various modules) */
81
- // getUniformBlocks(): Record<string, Texture | Sampler> {
82
- // return this.moduleUniforms;
83
- // }
84
79
  /**
85
80
  * Return the map of modules
86
81
  * @todo should should this include the resolved dependencies?
@@ -93,13 +88,15 @@ export class ShaderInputs {
93
88
  return this.moduleUniforms;
94
89
  }
95
90
  /** Merges all bindings for the shader (from the various modules) */
96
- getBindings() {
91
+ getBindingValues() {
97
92
  const bindings = {};
98
93
  for (const moduleBindings of Object.values(this.moduleBindings)) {
99
94
  Object.assign(bindings, moduleBindings);
100
95
  }
101
96
  return bindings;
102
97
  }
98
+ // INTERNAL
99
+ /** Return a debug table that can be used for console.table() or log.table() */
103
100
  getDebugTable() {
104
101
  const table = {};
105
102
  for (const [moduleName, module] of Object.entries(this.moduleUniforms)) {
@@ -112,4 +109,11 @@ export class ShaderInputs {
112
109
  }
113
110
  return table;
114
111
  }
112
+ _addModule(module) {
113
+ const moduleName = module.name;
114
+ // Get default uniforms from module
115
+ this.moduleUniforms[moduleName] = module.defaultUniforms || {};
116
+ this.moduleBindings[moduleName] = {};
117
+ }
115
118
  }
119
+ //# sourceMappingURL=shader-inputs.js.map
@@ -0,0 +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,0HAA0H;AAC1H,OAAO,EAAC,2BAA2B,EAAe,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAC,wBAAwB,EAAC,+CAA4C;AAE7E;;;;;;GAMG;AACH,MAAM,OAAO,YAAY;IAKvB;;;OAGG;IACH,+BAA+B;IAC/B,OAAO,CAAuE;IAE9E,gDAAgD;IAChD,cAAc,CAA2D;IACzE,mDAAmD;IACnD,cAAc,CAAsD;IACpE,sCAAsC;IACtC,qEAAqE;IAErE;;;OAGG;IACH,+BAA+B;IAC/B,YAAY,OAAyE;QACnF,oCAAoC;QACpC,MAAM,eAAe,GAAG,2BAA2B,CACjD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAC7D,CAAC;QACF,KAAK,MAAM,cAAc,IAAI,eAAe,EAAE,CAAC;YAC7C,aAAa;YACb,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC;QAChD,CAAC;QAED,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,oCAAoC,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QAEzE,oGAAoG;QACpG,+BAA+B;QAC/B,IAAI,CAAC,OAAO,GAAG,OAAqE,CAAC;QACrF,IAAI,CAAC,cAAc,GAAG,EAA8D,CAAC;QACrF,IAAI,CAAC,cAAc,GAAG,EAAyD,CAAC;QAEhF,yBAAyB;QACzB,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACrD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACxB,IAAI,MAAM,CAAC,IAAI,IAAI,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;gBACxC,GAAG,CAAC,IAAI,CAAC,gBAAgB,IAAI,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YACvD,CAAC;QACH,CAAC;IACH,CAAC;IAED,cAAc;IACd,OAAO,KAAU,CAAC;IAElB;;OAEG;IACH,QAAQ,CAAC,KAAsE;QAC7E,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACtC,MAAM,UAAU,GAAG,IAA0B,CAAC;YAC9C,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACxC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,wCAAwC;gBACxC,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,YAAY,CAAC,EAAE,CAAC;gBACvC,SAAS,CAAC,kCAAkC;YAC9C,CAAC;YAED,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAgC,CAAC;YACnF,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YACpD,MAAM,mBAAmB,GACvB,MAAM,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,IAAK,WAAmB,CAAC;YAEzE,MAAM,EAAC,QAAQ,EAAE,QAAQ,EAAC,GAAG,wBAAwB,CAAC,mBAAmB,CAAC,CAAC;YAC3E,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,EAAC,GAAG,WAAW,EAAE,GAAG,QAAQ,EAAC,CAAC;YAChE,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,EAAC,GAAG,WAAW,EAAE,GAAG,QAAQ,EAAC,CAAC;YAChE,6CAA6C;YAE7C,6FAA6F;QAC/F,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,UAAU;QACR,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,6CAA6C;IAC7C,gBAAgB;QACd,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,oEAAoE;IACpE,gBAAgB;QACd,MAAM,QAAQ,GAAG,EAA6B,CAAC;QAC/C,KAAK,MAAM,cAAc,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YAChE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,WAAW;IAEX,+EAA+E;IAC/E,aAAa;QACX,MAAM,KAAK,GAA4C,EAAE,CAAC;QAC1D,KAAK,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YACvE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClD,KAAK,CAAC,GAAG,UAAU,IAAI,GAAG,EAAE,CAAC,GAAG;oBAC9B,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,YAAY,EAAE,CAAC,GAAyB,CAAC;oBACxE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;iBACrB,CAAC;YACJ,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,UAAU,CAAC,MAAoB;QAC7B,MAAM,UAAU,GAAG,MAAM,CAAC,IAA0B,CAAC;QACrD,mCAAmC;QACnC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC;QAC/D,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;IACvC,CAAC;CACF"}
@@ -48,3 +48,4 @@ export function deepEqual(a, b, depth) {
48
48
  }
49
49
  return false;
50
50
  }
51
+ //# sourceMappingURL=deep-equal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deep-equal.js","sourceRoot":"","sources":["../../src/utils/deep-equal.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC;;;;;;GAMG;AACH,+BAA+B;AAC/B,MAAM,UAAU,SAAS,CAAC,CAAM,EAAE,CAAM,EAAE,KAAa;IACrD,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;YAC/C,OAAO,KAAK,CAAC;QACf,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;gBACtC,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QACnD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;YAClC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B,OAAO,KAAK,CAAC;YACf,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;gBAC1C,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
package/dist/utils/uid.js CHANGED
@@ -12,3 +12,4 @@ export function uid(id = 'id') {
12
12
  const count = uidCounters[id]++;
13
13
  return `${id}-${count}`;
14
14
  }
15
+ //# sourceMappingURL=uid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uid.js","sourceRoot":"","sources":["../../src/utils/uid.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,MAAM,WAAW,GAA2B,EAAE,CAAC;AAE/C;;;;IAII;AACJ,MAAM,UAAU,GAAG,CAAC,KAAa,IAAI;IACnC,WAAW,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;IAChC,OAAO,GAAG,EAAE,IAAI,KAAK,EAAE,CAAC;AAC1B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@luma.gl/engine",
3
- "version": "9.1.0-alpha.9",
3
+ "version": "9.1.0-beta.11",
4
4
  "description": "3D Engine Components for luma.gl",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -40,14 +40,14 @@
40
40
  "prepublishOnly": "npm run build-minified-bundle && npm run build-dev-bundle"
41
41
  },
42
42
  "peerDependencies": {
43
- "@luma.gl/core": "^9.0.0-beta"
43
+ "@luma.gl/core": "^9.1.0-beta.1",
44
+ "@luma.gl/shadertools": "^9.1.0-beta.1"
44
45
  },
45
46
  "dependencies": {
46
- "@luma.gl/shadertools": "9.1.0-alpha.9",
47
- "@math.gl/core": "^4.0.0",
48
- "@math.gl/types": "^4.0.0",
47
+ "@math.gl/core": "^4.1.0",
48
+ "@math.gl/types": "^4.1.0",
49
49
  "@probe.gl/log": "^4.0.8",
50
50
  "@probe.gl/stats": "^4.0.8"
51
51
  },
52
- "gitHead": "ff05b21269181dbb782ba7c8c1546900288ee6a1"
52
+ "gitHead": "aab3748ab83360e6ee611f9b4a2d805e5f17fb01"
53
53
  }
@@ -3,7 +3,10 @@
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
5
  import {luma, Device} from '@luma.gl/core';
6
- import {requestAnimationFrame, cancelAnimationFrame} from './request-animation-frame';
6
+ import {
7
+ requestAnimationFramePolyfill,
8
+ cancelAnimationFramePolyfill
9
+ } from './request-animation-frame';
7
10
  import {Timeline} from '../animation/timeline';
8
11
  import {AnimationProps} from './animation-props';
9
12
  import {Stats, Stat} from '@probe.gl/stats';
@@ -77,6 +80,7 @@ export class AnimationLoop {
77
80
  _nextFramePromise: Promise<AnimationLoop> | null = null;
78
81
  _resolveNextFrame: ((animationLoop: AnimationLoop) => void) | null = null;
79
82
  _cpuStartTime: number = 0;
83
+ _error: Error | null = null;
80
84
 
81
85
  // _gpuTimeQuery: Query | null = null;
82
86
 
@@ -123,6 +127,23 @@ export class AnimationLoop {
123
127
  this.destroy();
124
128
  }
125
129
 
130
+ setError(error: Error): void {
131
+ this.props.onError(error);
132
+ this._error = 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
+ }
145
+ }
146
+
126
147
  /** Flags this animation loop as needing redraw */
127
148
  setNeedsRedraw(reason: string): this {
128
149
  this.needsRedraw = this.needsRedraw || reason;
@@ -189,7 +210,7 @@ export class AnimationLoop {
189
210
  if (this._running) {
190
211
  // call callback
191
212
  // If stop is called immediately, we can end up in a state where props haven't been initialized...
192
- if (this.animationProps) {
213
+ if (this.animationProps && !this._error) {
193
214
  this.props.onFinalize(this.animationProps);
194
215
  }
195
216
 
@@ -203,7 +224,7 @@ export class AnimationLoop {
203
224
 
204
225
  /** Explicitly draw a frame */
205
226
  redraw(): this {
206
- if (this.device?.isLost) {
227
+ if (this.device?.isLost || this._error) {
207
228
  return this;
208
229
  }
209
230
 
@@ -302,7 +323,7 @@ export class AnimationLoop {
302
323
  // if (this.display && this.display.requestAnimationFrame) {
303
324
  // this._animationFrameId = this.display.requestAnimationFrame(this._animationFrame.bind(this));
304
325
  // }
305
- this._animationFrameId = requestAnimationFrame(this._animationFrame.bind(this));
326
+ this._animationFrameId = requestAnimationFramePolyfill(this._animationFrame.bind(this));
306
327
  }
307
328
 
308
329
  _cancelAnimationFrame(): void {
@@ -313,10 +334,10 @@ export class AnimationLoop {
313
334
  // VR display has a separate animation frame to sync with headset
314
335
  // TODO WebVR API discontinued, replaced by WebXR: https://immersive-web.github.io/webxr/
315
336
  // See https://developer.mozilla.org/en-US/docs/Web/API/VRDisplay/requestAnimationFrame
316
- // if (this.display && this.display.cancelAnimationFrame) {
337
+ // if (this.display && this.display.cancelAnimationFramePolyfill) {
317
338
  // this.display.cancelAnimationFrame(this._animationFrameId);
318
339
  // }
319
- cancelAnimationFrame(this._animationFrameId);
340
+ cancelAnimationFramePolyfill(this._animationFrameId);
320
341
  this._animationFrameId = null;
321
342
  }
322
343
 
@@ -2,7 +2,7 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
- import {luma} from '@luma.gl/core';
5
+ import {luma, Adapter} 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';
@@ -10,7 +10,10 @@ import type {AnimationProps} from './animation-props';
10
10
  export type MakeAnimationLoopProps = Omit<
11
11
  AnimationLoopProps,
12
12
  'onCreateDevice' | 'onInitialize' | 'onRedraw' | 'onFinalize'
13
- >;
13
+ > & {
14
+ /** List of adapters to use when creating the device */
15
+ adapters?: Adapter[];
16
+ };
14
17
 
15
18
  /** Instantiates and runs the render loop */
16
19
  export function makeAnimationLoop(
@@ -19,7 +22,9 @@ export function makeAnimationLoop(
19
22
  ): AnimationLoop {
20
23
  let renderLoop: AnimationLoopTemplate | null = null;
21
24
 
22
- const device = props?.device || luma.createDevice({id: 'animation-loop'});
25
+ const device =
26
+ props?.device ||
27
+ luma.createDevice({id: 'animation-loop', adapters: props?.adapters, createCanvasContext: true});
23
28
 
24
29
  // Create an animation loop;
25
30
  const animationLoop = new AnimationLoop({