@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.
Files changed (138) hide show
  1. package/dist/animation/key-frames.d.ts.map +1 -1
  2. package/dist/animation/key-frames.js +3 -0
  3. package/dist/animation-loop/animation-loop-template.d.ts.map +1 -1
  4. package/dist/animation-loop/animation-loop-template.js +3 -0
  5. package/dist/animation-loop/animation-loop.d.ts +1 -1
  6. package/dist/animation-loop/animation-loop.d.ts.map +1 -1
  7. package/dist/animation-loop/animation-loop.js +5 -4
  8. package/dist/animation-loop/animation-props.d.ts.map +1 -1
  9. package/dist/animation-loop/animation-props.js +3 -0
  10. package/dist/animation-loop/request-animation-frame.d.ts +3 -0
  11. package/dist/animation-loop/request-animation-frame.d.ts.map +1 -0
  12. package/dist/animation-loop/request-animation-frame.js +16 -0
  13. package/dist/application-utils/load-file.d.ts +22 -0
  14. package/dist/application-utils/load-file.d.ts.map +1 -0
  15. package/dist/application-utils/load-file.js +43 -0
  16. package/dist/application-utils/random.d.ts +3 -0
  17. package/dist/application-utils/random.d.ts.map +1 -0
  18. package/dist/application-utils/random.js +16 -0
  19. package/dist/async-texture/async-texture.d.ts +50 -0
  20. package/dist/async-texture/async-texture.d.ts.map +1 -0
  21. package/dist/async-texture/async-texture.js +77 -0
  22. package/dist/computation.d.ts +4 -3
  23. package/dist/computation.d.ts.map +1 -1
  24. package/dist/computation.js +14 -6
  25. package/dist/debug/copy-texture-to-image.d.ts.map +1 -1
  26. package/dist/debug/copy-texture-to-image.js +4 -1
  27. package/dist/debug/debug-framebuffer.d.ts.map +1 -1
  28. package/dist/debug/debug-framebuffer.js +17 -12
  29. package/dist/debug/pixel-data-utils.d.ts +1 -1
  30. package/dist/dist.dev.js +1194 -474
  31. package/dist/dist.min.js +27 -25
  32. package/dist/geometries/cone-geometry.d.ts.map +1 -1
  33. package/dist/geometries/cone-geometry.js +4 -1
  34. package/dist/geometries/cube-geometry.d.ts.map +1 -1
  35. package/dist/geometries/cube-geometry.js +4 -1
  36. package/dist/geometries/cylinder-geometry.d.ts.map +1 -1
  37. package/dist/geometries/cylinder-geometry.js +4 -1
  38. package/dist/geometries/ico-sphere-geometry.d.ts.map +1 -1
  39. package/dist/geometries/ico-sphere-geometry.js +4 -1
  40. package/dist/geometries/plane-geometry.d.ts.map +1 -1
  41. package/dist/geometries/plane-geometry.js +4 -1
  42. package/dist/geometries/sphere-geometry.d.ts.map +1 -1
  43. package/dist/geometries/sphere-geometry.js +4 -1
  44. package/dist/geometries/truncated-cone-geometry.d.ts.map +1 -1
  45. package/dist/geometries/truncated-cone-geometry.js +4 -1
  46. package/dist/geometry/geometry-table.d.ts +2 -1
  47. package/dist/geometry/geometry-table.d.ts.map +1 -1
  48. package/dist/geometry/geometry-utils.d.ts.map +1 -1
  49. package/dist/geometry/geometry-utils.js +3 -1
  50. package/dist/geometry/geometry.d.ts +5 -4
  51. package/dist/geometry/geometry.d.ts.map +1 -1
  52. package/dist/geometry/geometry.js +9 -5
  53. package/dist/geometry/gpu-geometry.d.ts +1 -1
  54. package/dist/geometry/gpu-geometry.d.ts.map +1 -1
  55. package/dist/geometry/gpu-geometry.js +18 -6
  56. package/dist/geometry/gpu-table.js +3 -0
  57. package/dist/index.cjs +492 -245
  58. package/dist/index.cjs.map +4 -4
  59. package/dist/index.d.ts +5 -0
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +8 -0
  62. package/dist/lib/clip-space.d.ts.map +1 -1
  63. package/dist/lib/clip-space.js +3 -0
  64. package/dist/lib/pipeline-factory.d.ts +3 -2
  65. package/dist/lib/pipeline-factory.d.ts.map +1 -1
  66. package/dist/lib/pipeline-factory.js +12 -8
  67. package/dist/lib/shader-factory.d.ts +3 -2
  68. package/dist/lib/shader-factory.d.ts.map +1 -1
  69. package/dist/lib/shader-factory.js +11 -4
  70. package/dist/model/model.d.ts +10 -6
  71. package/dist/model/model.d.ts.map +1 -1
  72. package/dist/model/model.js +66 -9
  73. package/dist/model/split-uniforms-and-bindings.d.ts +9 -0
  74. package/dist/model/split-uniforms-and-bindings.d.ts.map +1 -0
  75. package/dist/model/split-uniforms-and-bindings.js +20 -0
  76. package/dist/scenegraph/group-node.d.ts +1 -1
  77. package/dist/scenegraph/group-node.d.ts.map +1 -1
  78. package/dist/scenegraph/group-node.js +3 -0
  79. package/dist/scenegraph/model-node.d.ts +2 -2
  80. package/dist/scenegraph/model-node.d.ts.map +1 -1
  81. package/dist/scenegraph/model-node.js +6 -3
  82. package/dist/scenegraph/scenegraph-node.d.ts +5 -6
  83. package/dist/scenegraph/scenegraph-node.d.ts.map +1 -1
  84. package/dist/scenegraph/scenegraph-node.js +11 -8
  85. package/dist/shader-inputs.d.ts +0 -1
  86. package/dist/shader-inputs.d.ts.map +1 -1
  87. package/dist/shader-inputs.js +5 -3
  88. package/dist/transform/buffer-transform.d.ts.map +1 -1
  89. package/dist/transform/buffer-transform.js +8 -2
  90. package/dist/transform/texture-transform.d.ts +2 -2
  91. package/dist/transform/texture-transform.d.ts.map +1 -1
  92. package/dist/transform/texture-transform.js +1 -0
  93. package/dist/utils/deep-equal.d.ts +9 -0
  94. package/dist/utils/deep-equal.d.ts.map +1 -0
  95. package/dist/utils/deep-equal.js +50 -0
  96. package/dist/utils/uid.d.ts +7 -0
  97. package/dist/utils/uid.d.ts.map +1 -0
  98. package/dist/utils/uid.js +14 -0
  99. package/package.json +7 -6
  100. package/src/animation/key-frames.ts +4 -0
  101. package/src/animation-loop/animation-loop-template.ts +4 -0
  102. package/src/animation-loop/animation-loop.ts +6 -4
  103. package/src/animation-loop/animation-props.ts +4 -0
  104. package/src/animation-loop/request-animation-frame.ts +19 -0
  105. package/src/application-utils/load-file.ts +53 -0
  106. package/src/application-utils/random.ts +18 -0
  107. package/src/async-texture/async-texture.ts +140 -0
  108. package/src/computation.ts +17 -9
  109. package/src/debug/copy-texture-to-image.ts +4 -1
  110. package/src/debug/debug-framebuffer.ts +18 -12
  111. package/src/debug/pixel-data-utils.ts +1 -1
  112. package/src/geometries/cone-geometry.ts +5 -1
  113. package/src/geometries/cube-geometry.ts +5 -1
  114. package/src/geometries/cylinder-geometry.ts +5 -1
  115. package/src/geometries/ico-sphere-geometry.ts +5 -1
  116. package/src/geometries/plane-geometry.ts +5 -1
  117. package/src/geometries/sphere-geometry.ts +5 -1
  118. package/src/geometries/truncated-cone-geometry.ts +5 -1
  119. package/src/geometry/geometry-table.ts +2 -1
  120. package/src/geometry/geometry-utils.ts +3 -1
  121. package/src/geometry/geometry.ts +16 -19
  122. package/src/geometry/gpu-geometry.ts +20 -14
  123. package/src/geometry/gpu-table.ts +4 -0
  124. package/src/index.ts +15 -0
  125. package/src/lib/clip-space.ts +4 -0
  126. package/src/lib/pipeline-factory.ts +17 -16
  127. package/src/lib/shader-factory.ts +13 -6
  128. package/src/model/model.ts +72 -18
  129. package/src/model/split-uniforms-and-bindings.ts +31 -0
  130. package/src/scenegraph/group-node.ts +4 -0
  131. package/src/scenegraph/model-node.ts +9 -5
  132. package/src/scenegraph/scenegraph-node.ts +17 -13
  133. package/src/shader-inputs.ts +5 -3
  134. package/src/transform/buffer-transform.ts +8 -9
  135. package/src/transform/texture-transform.ts +2 -1
  136. package/src/utils/deep-equal.ts +51 -0
  137. package/src/utils/uid.ts +16 -0
  138. 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":"AACA,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
+ {"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,3 +1,6 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
1
4
  /** Holds a list of key frames (timestamped values) */
2
5
  export class KeyFrames {
3
6
  startIndex = -1;
@@ -1 +1 @@
1
- {"version":3,"file":"animation-loop-template.d.ts","sourceRoot":"","sources":["../../src/animation-loop/animation-loop-template.ts"],"names":[],"mappings":"AAAA,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"}
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"}
@@ -1,3 +1,6 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
1
4
  /**
2
5
  * Minimal class that represents a "componentized" rendering life cycle
3
6
  * (resource construction, repeated rendering, resource destruction)
@@ -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":"AAIA,OAAO,EAAO,MAAM,EAAC,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAC,QAAQ,EAAC,iCAA8B;AAC/C,OAAO,EAAC,cAAc,EAAC,6BAA0B;AACjD,OAAO,EAAC,KAAK,EAAE,IAAI,EAAC,MAAM,iBAAiB,CAAC;AAI5C,+BAA+B;AAC/B,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEjC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,MAAM,CAAC;IAC5C,YAAY,CAAC,EAAE,CAAC,cAAc,EAAE,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACpE,QAAQ,CAAC,EAAE,CAAC,cAAc,EAAE,cAAc,KAAK,OAAO,CAAC;IACvD,UAAU,CAAC,EAAE,CAAC,cAAc,EAAE,cAAc,KAAK,IAAI,CAAC;IACtD,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,KAAK,IAAI,CAAC;IAElC,KAAK,CAAC,EAAE,KAAK,CAAC;IAGd,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IAEtC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACpC,CAAC;AAqBF,gCAAgC;AAChC,qBAAa,aAAa;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC7B,MAAM,EAAE,iBAAiB,GAAG,eAAe,GAAG,IAAI,CAAQ;IAE1D,KAAK,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IACpC,cAAc,EAAE,cAAc,GAAG,IAAI,CAAQ;IAC7C,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAQ;IACjC,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,IAAI,CAAC;IACd,OAAO,EAAE,IAAI,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;IAEhB,OAAO,EAAE,GAAG,CAAC;IAEb,WAAW,EAAE,MAAM,GAAG,KAAK,CAAiB;IAE5C,YAAY,EAAE,OAAO,CAAS;IAC9B,QAAQ,EAAE,OAAO,CAAS;IAC1B,iBAAiB,EAAE,GAAG,CAAQ;IAC9B,iBAAiB,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI,CAAQ;IACxD,iBAAiB,EAAE,CAAC,CAAC,aAAa,EAAE,aAAa,KAAK,IAAI,CAAC,GAAG,IAAI,CAAQ;IAC1E,aAAa,EAAE,MAAM,CAAK;gBAOd,KAAK,EAAE,kBAAkB;IA8BrC,OAAO,IAAI,IAAI;IAKf,iCAAiC;IACjC,MAAM,IAAI,IAAI;IAId,kDAAkD;IAClD,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKpC,gDAAgD;IAChD,QAAQ,CAAC,KAAK,EAAE,yBAAyB,GAAG,IAAI;IAahD,kDAAkD;IAC5C,KAAK;IAuCX,yDAAyD;IACzD,IAAI;IAiBJ,8BAA8B;IAC9B,MAAM,IAAI,IAAI;IA0Bd,8EAA8E;IAC9E,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ;IAK5C,wBAAwB;IACxB,cAAc,IAAI,IAAI;IAItB,oCAAoC;IACpC,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC;IAWvC,6CAA6C;IACvC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAWlC,WAAW,IAAI,IAAI;IAcnB,WAAW,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI;IAc/B,sBAAsB,IAAI,IAAI;IAc9B,qBAAqB,IAAI,IAAI;IAe7B,eAAe,IAAI,IAAI;IAUvB,YAAY,CAAC,cAAc,EAAE,cAAc,GAAG,IAAI;IAelD,iBAAiB,IAAI,IAAI;IAIzB,WAAW,IAAI,IAAI;IAMnB,yBAAyB,IAAI,IAAI;IAgCjC,kBAAkB,IAAI,cAAc;IAQpC,qBAAqB,IAAI,IAAI;IAoC7B,+BAA+B;IACzB,WAAW;IASjB,cAAc,IAAI,IAAI;IAsBtB,iBAAiB,IAAI;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC;IAsBpE,6BAA6B;IAC7B,eAAe,IAAI,IAAI;IAgBvB;;;OAGG;IACH,0BAA0B,IAAI,IAAI;IAMlC,iBAAiB;IAuBjB,eAAe;IAWf,mBAAmB;IAOnB,YAAY,CAAC,KAAK,EAAE,KAAK;IAMzB,aAAa,CAAC,KAAK,EAAE,KAAK;CAG3B"}
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 '@luma.gl/core';
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.submit();
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
- if (!this.device) {
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: this.device?.canvasContext?.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":"AAAA,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"}
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"}
@@ -1 +1,4 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
1
4
  export {};
@@ -0,0 +1,3 @@
1
+ export declare function requestAnimationFrame(callback: (time?: any) => void): any;
2
+ export declare function cancelAnimationFrame(timerId: any): void;
3
+ //# sourceMappingURL=request-animation-frame.d.ts.map
@@ -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,3 @@
1
+ /** Creates a deterministic pseudorandom number generator */
2
+ export declare function makeRandomGenerator(): () => number;
3
+ //# sourceMappingURL=random.d.ts.map
@@ -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
+ }
@@ -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 "program". @note May be recreated if parameters change */
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":"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"}
1
+ {"version":3,"file":"computation.d.ts","sourceRoot":"","sources":["../src/computation.ts"],"names":[],"mappings":"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"}
@@ -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, uid, isNumberArray } from '@luma.gl/core';
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 "program". @note May be recreated if parameters change */
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
- this.setShaderInputs(props.shaderInputs || new ShaderInputs(moduleMap));
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.assembleShader({
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 !isNumberArray(uniform) && typeof uniform !== 'number' && typeof uniform !== 'boolean';
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,CAyBR"}
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.createImageData(width, height);
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":"AAAA,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,QA2CF"}
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.createImageData(fbo.width, fbo.height);
34
- // Full map
35
- const offset = 0;
36
- // if (color.some((v) => v > 0)) {
37
- // console.error('THERE IS NON-ZERO DATA IN THE FBO!');
38
- // }
39
- for (let i = 0; i < color.length; i += 4) {
40
- imageData.data[offset + i + 0] = color[i + 0] * rgbaScale;
41
- imageData.data[offset + i + 1] = color[i + 1] * rgbaScale;
42
- imageData.data[offset + i + 2] = color[i + 2] * rgbaScale;
43
- imageData.data[offset + i + 3] = opaque ? 255 : color[i + 3] * rgbaScale;
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
  }
@@ -1,4 +1,4 @@
1
- import { TypedArray } from '@luma.gl/core';
1
+ import { TypedArray } from '@math.gl/core';
2
2
  /**
3
3
  * Flip rows (can be used on arrays returned from `Framebuffer.readPixels`)
4
4
  * https: *stackoverflow.com/questions/41969562/