@luma.gl/engine 9.2.5 → 9.3.0-alpha.10

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 (186) hide show
  1. package/dist/animation-loop/animation-loop.d.ts +11 -5
  2. package/dist/animation-loop/animation-loop.d.ts.map +1 -1
  3. package/dist/animation-loop/animation-loop.js +83 -47
  4. package/dist/animation-loop/animation-loop.js.map +1 -1
  5. package/dist/animation-loop/make-animation-loop.js +7 -1
  6. package/dist/animation-loop/make-animation-loop.js.map +1 -1
  7. package/dist/animation-loop/request-animation-frame.d.ts.map +1 -1
  8. package/dist/animation-loop/request-animation-frame.js +23 -6
  9. package/dist/animation-loop/request-animation-frame.js.map +1 -1
  10. package/dist/compute/computation.d.ts +3 -7
  11. package/dist/compute/computation.d.ts.map +1 -1
  12. package/dist/compute/computation.js +16 -13
  13. package/dist/compute/computation.js.map +1 -1
  14. package/dist/compute/swap.d.ts +2 -0
  15. package/dist/compute/swap.d.ts.map +1 -1
  16. package/dist/compute/swap.js +10 -5
  17. package/dist/compute/swap.js.map +1 -1
  18. package/dist/dist.dev.js +2639 -1290
  19. package/dist/dist.min.js +325 -210
  20. package/dist/dynamic-texture/dynamic-texture.d.ts +102 -0
  21. package/dist/dynamic-texture/dynamic-texture.d.ts.map +1 -0
  22. package/dist/dynamic-texture/dynamic-texture.js +556 -0
  23. package/dist/dynamic-texture/dynamic-texture.js.map +1 -0
  24. package/dist/dynamic-texture/texture-data.d.ts +144 -0
  25. package/dist/dynamic-texture/texture-data.d.ts.map +1 -0
  26. package/dist/dynamic-texture/texture-data.js +208 -0
  27. package/dist/dynamic-texture/texture-data.js.map +1 -0
  28. package/dist/geometries/cone-geometry.d.ts +3 -1
  29. package/dist/geometries/cone-geometry.d.ts.map +1 -1
  30. package/dist/geometries/cone-geometry.js.map +1 -1
  31. package/dist/geometries/cylinder-geometry.d.ts +2 -1
  32. package/dist/geometries/cylinder-geometry.d.ts.map +1 -1
  33. package/dist/geometries/cylinder-geometry.js.map +1 -1
  34. package/dist/geometry/gpu-geometry.d.ts.map +1 -1
  35. package/dist/geometry/gpu-geometry.js +8 -3
  36. package/dist/geometry/gpu-geometry.js.map +1 -1
  37. package/dist/index.cjs +2497 -1212
  38. package/dist/index.cjs.map +4 -4
  39. package/dist/index.d.ts +20 -6
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +12 -4
  42. package/dist/index.js.map +1 -1
  43. package/dist/material/material-factory.d.ts +73 -0
  44. package/dist/material/material-factory.d.ts.map +1 -0
  45. package/dist/material/material-factory.js +111 -0
  46. package/dist/material/material-factory.js.map +1 -0
  47. package/dist/material/material.d.ts +84 -0
  48. package/dist/material/material.d.ts.map +1 -0
  49. package/dist/material/material.js +176 -0
  50. package/dist/material/material.js.map +1 -0
  51. package/dist/model/model.d.ts +47 -16
  52. package/dist/model/model.d.ts.map +1 -1
  53. package/dist/model/model.js +113 -47
  54. package/dist/model/model.js.map +1 -1
  55. package/dist/model/split-uniforms-and-bindings.d.ts +4 -3
  56. package/dist/model/split-uniforms-and-bindings.d.ts.map +1 -1
  57. package/dist/model/split-uniforms-and-bindings.js +2 -2
  58. package/dist/model/split-uniforms-and-bindings.js.map +1 -1
  59. package/dist/models/billboard-texture-model.d.ts +8 -5
  60. package/dist/models/billboard-texture-model.d.ts.map +1 -1
  61. package/dist/models/billboard-texture-model.js +77 -23
  62. package/dist/models/billboard-texture-model.js.map +1 -1
  63. package/dist/models/billboard-texture-module.d.ts +1 -1
  64. package/dist/models/billboard-texture-module.js +1 -1
  65. package/dist/models/clip-space.js +7 -7
  66. package/dist/models/directional-light-model.d.ts +7 -0
  67. package/dist/models/directional-light-model.d.ts.map +1 -0
  68. package/dist/models/directional-light-model.js +23 -0
  69. package/dist/models/directional-light-model.js.map +1 -0
  70. package/dist/models/light-model-utils.d.ts +69 -0
  71. package/dist/models/light-model-utils.d.ts.map +1 -0
  72. package/dist/models/light-model-utils.js +395 -0
  73. package/dist/models/light-model-utils.js.map +1 -0
  74. package/dist/models/point-light-model.d.ts +7 -0
  75. package/dist/models/point-light-model.d.ts.map +1 -0
  76. package/dist/models/point-light-model.js +22 -0
  77. package/dist/models/point-light-model.js.map +1 -0
  78. package/dist/models/spot-light-model.d.ts +7 -0
  79. package/dist/models/spot-light-model.d.ts.map +1 -0
  80. package/dist/models/spot-light-model.js +23 -0
  81. package/dist/models/spot-light-model.js.map +1 -0
  82. package/dist/modules/picking/color-picking.d.ts +5 -9
  83. package/dist/modules/picking/color-picking.d.ts.map +1 -1
  84. package/dist/modules/picking/color-picking.js +122 -115
  85. package/dist/modules/picking/color-picking.js.map +1 -1
  86. package/dist/modules/picking/index-picking.d.ts +4 -4
  87. package/dist/modules/picking/index-picking.d.ts.map +1 -1
  88. package/dist/modules/picking/index-picking.js +36 -16
  89. package/dist/modules/picking/index-picking.js.map +1 -1
  90. package/dist/modules/picking/legacy-color-picking.d.ts +26 -0
  91. package/dist/modules/picking/legacy-color-picking.d.ts.map +1 -0
  92. package/dist/modules/picking/legacy-color-picking.js +7 -0
  93. package/dist/modules/picking/legacy-color-picking.js.map +1 -0
  94. package/dist/modules/picking/picking-manager.d.ts +29 -3
  95. package/dist/modules/picking/picking-manager.d.ts.map +1 -1
  96. package/dist/modules/picking/picking-manager.js +188 -41
  97. package/dist/modules/picking/picking-manager.js.map +1 -1
  98. package/dist/modules/picking/picking-uniforms.d.ts +13 -12
  99. package/dist/modules/picking/picking-uniforms.d.ts.map +1 -1
  100. package/dist/modules/picking/picking-uniforms.js +27 -14
  101. package/dist/modules/picking/picking-uniforms.js.map +1 -1
  102. package/dist/modules/picking/picking.d.ts +25 -0
  103. package/dist/modules/picking/picking.d.ts.map +1 -0
  104. package/dist/modules/picking/picking.js +18 -0
  105. package/dist/modules/picking/picking.js.map +1 -0
  106. package/dist/passes/get-fragment-shader.js +12 -27
  107. package/dist/passes/get-fragment-shader.js.map +1 -1
  108. package/dist/passes/shader-pass-renderer.d.ts +5 -7
  109. package/dist/passes/shader-pass-renderer.d.ts.map +1 -1
  110. package/dist/passes/shader-pass-renderer.js +16 -42
  111. package/dist/passes/shader-pass-renderer.js.map +1 -1
  112. package/dist/scenegraph/group-node.d.ts +5 -0
  113. package/dist/scenegraph/group-node.d.ts.map +1 -1
  114. package/dist/scenegraph/group-node.js +12 -0
  115. package/dist/scenegraph/group-node.js.map +1 -1
  116. package/dist/scenegraph/model-node.d.ts +2 -2
  117. package/dist/scenegraph/model-node.d.ts.map +1 -1
  118. package/dist/scenegraph/model-node.js.map +1 -1
  119. package/dist/scenegraph/scenegraph-node.d.ts +1 -1
  120. package/dist/scenegraph/scenegraph-node.d.ts.map +1 -1
  121. package/dist/scenegraph/scenegraph-node.js +23 -15
  122. package/dist/scenegraph/scenegraph-node.js.map +1 -1
  123. package/dist/shader-inputs.d.ts +9 -7
  124. package/dist/shader-inputs.d.ts.map +1 -1
  125. package/dist/shader-inputs.js +84 -4
  126. package/dist/shader-inputs.js.map +1 -1
  127. package/dist/utils/buffer-layout-order.d.ts.map +1 -1
  128. package/dist/utils/buffer-layout-order.js +12 -2
  129. package/dist/utils/buffer-layout-order.js.map +1 -1
  130. package/dist/utils/shader-module-utils.d.ts +7 -0
  131. package/dist/utils/shader-module-utils.d.ts.map +1 -0
  132. package/dist/utils/shader-module-utils.js +46 -0
  133. package/dist/utils/shader-module-utils.js.map +1 -0
  134. package/package.json +6 -6
  135. package/src/animation-loop/animation-loop.ts +89 -50
  136. package/src/animation-loop/make-animation-loop.ts +13 -5
  137. package/src/animation-loop/request-animation-frame.ts +32 -6
  138. package/src/compute/computation.ts +32 -17
  139. package/src/compute/swap.ts +13 -7
  140. package/src/dynamic-texture/dynamic-texture.ts +732 -0
  141. package/src/dynamic-texture/texture-data.ts +336 -0
  142. package/src/geometries/cone-geometry.ts +6 -1
  143. package/src/geometries/cylinder-geometry.ts +5 -1
  144. package/src/geometry/gpu-geometry.ts +8 -3
  145. package/src/index.ts +38 -8
  146. package/src/material/material-factory.ts +157 -0
  147. package/src/material/material.ts +254 -0
  148. package/src/model/model.ts +158 -67
  149. package/src/model/split-uniforms-and-bindings.ts +8 -6
  150. package/src/models/billboard-texture-model.ts +88 -27
  151. package/src/models/billboard-texture-module.ts +1 -1
  152. package/src/models/clip-space.ts +7 -7
  153. package/src/models/directional-light-model.ts +32 -0
  154. package/src/models/light-model-utils.ts +587 -0
  155. package/src/models/point-light-model.ts +31 -0
  156. package/src/models/spot-light-model.ts +32 -0
  157. package/src/modules/picking/color-picking.ts +123 -122
  158. package/src/modules/picking/index-picking.ts +36 -16
  159. package/src/modules/picking/legacy-color-picking.ts +8 -0
  160. package/src/modules/picking/picking-manager.ts +252 -50
  161. package/src/modules/picking/picking-uniforms.ts +39 -24
  162. package/src/modules/picking/picking.ts +22 -0
  163. package/src/passes/get-fragment-shader.ts +12 -27
  164. package/src/passes/shader-pass-renderer.ts +25 -48
  165. package/src/scenegraph/group-node.ts +16 -0
  166. package/src/scenegraph/model-node.ts +2 -2
  167. package/src/scenegraph/scenegraph-node.ts +27 -16
  168. package/src/shader-inputs.ts +165 -15
  169. package/src/utils/buffer-layout-order.ts +18 -2
  170. package/src/utils/shader-module-utils.ts +65 -0
  171. package/dist/async-texture/async-texture.d.ts +0 -166
  172. package/dist/async-texture/async-texture.d.ts.map +0 -1
  173. package/dist/async-texture/async-texture.js +0 -386
  174. package/dist/async-texture/async-texture.js.map +0 -1
  175. package/dist/factories/pipeline-factory.d.ts +0 -37
  176. package/dist/factories/pipeline-factory.d.ts.map +0 -1
  177. package/dist/factories/pipeline-factory.js +0 -181
  178. package/dist/factories/pipeline-factory.js.map +0 -1
  179. package/dist/factories/shader-factory.d.ts +0 -22
  180. package/dist/factories/shader-factory.d.ts.map +0 -1
  181. package/dist/factories/shader-factory.js +0 -88
  182. package/dist/factories/shader-factory.js.map +0 -1
  183. package/src/async-texture/async-texture.ts +0 -551
  184. package/src/factories/pipeline-factory.ts +0 -224
  185. package/src/factories/shader-factory.ts +0 -103
  186. /package/src/{async-texture/texture-setters.ts.disabled → dynamic-texture/texture-data.ts.disabled} +0 -0
package/dist/index.d.ts CHANGED
@@ -8,16 +8,22 @@ export type { MakeAnimationLoopProps } from "./animation-loop/make-animation-loo
8
8
  export { makeAnimationLoop } from "./animation-loop/make-animation-loop.js";
9
9
  export type { ModelProps } from "./model/model.js";
10
10
  export { Model } from "./model/model.js";
11
+ export type { MaterialProps } from "./material/material.js";
12
+ export { Material } from "./material/material.js";
13
+ export type { MaterialFactoryProps } from "./material/material-factory.js";
14
+ export { MaterialFactory } from "./material/material-factory.js";
11
15
  export type { BufferTransformProps } from "./compute/buffer-transform.js";
12
16
  export { BufferTransform } from "./compute/buffer-transform.js";
13
17
  export type { TextureTransformProps } from "./compute/texture-transform.js";
14
18
  export { TextureTransform } from "./compute/texture-transform.js";
15
- export { PipelineFactory } from "./factories/pipeline-factory.js";
16
- export { ShaderFactory } from "./factories/shader-factory.js";
17
19
  export type { ClipSpaceProps } from "./models/clip-space.js";
18
20
  export { ClipSpace } from "./models/clip-space.js";
19
21
  export type { BackgroundTextureModelProps } from "./models/billboard-texture-model.js";
20
22
  export { BackgroundTextureModel } from "./models/billboard-texture-model.js";
23
+ export type { BaseLightModelProps, PointLightModelProps, SpotLightModelProps, DirectionalLightModelProps } from "./models/light-model-utils.js";
24
+ export { PointLightModel } from "./models/point-light-model.js";
25
+ export { SpotLightModel } from "./models/spot-light-model.js";
26
+ export { DirectionalLightModel } from "./models/directional-light-model.js";
21
27
  export { ScenegraphNode } from "./scenegraph/scenegraph-node.js";
22
28
  export { GroupNode } from "./scenegraph/group-node.js";
23
29
  export type { ModelNodeProps } from "./scenegraph/model-node.js";
@@ -50,12 +56,20 @@ export { SwapBuffers } from "./compute/swap.js";
50
56
  export { SwapFramebuffers } from "./compute/swap.js";
51
57
  export type { ComputationProps } from "./compute/computation.js";
52
58
  export { Computation } from "./compute/computation.js";
53
- export type { TextureCubeFace, TextureImageData, TextureData, Texture1DData, Texture2DData, Texture3DData, TextureCubeData, TextureArrayData, TextureCubeArrayData } from "./async-texture/async-texture.js";
54
- export type { AsyncTextureProps } from "./async-texture/async-texture.js";
55
- export { AsyncTexture } from "./async-texture/async-texture.js";
56
- export { PickingManager } from "./modules/picking/picking-manager.js";
59
+ export type { TextureCubeFace, TextureImageData, Texture1DData, Texture2DData, Texture3DData, TextureCubeData, TextureArrayData, TextureCubeArrayData } from "./dynamic-texture/texture-data.js";
60
+ export type { DynamicTextureProps } from "./dynamic-texture/dynamic-texture.js";
61
+ export { DynamicTexture } from "./dynamic-texture/dynamic-texture.js";
62
+ export type { PickInfo, PickingMode, ResolvedPickingMode, PickingBackend, PickingManagerProps, ResolvedPickingBackend } from "./modules/picking/picking-manager.js";
63
+ export { PickingManager, supportsIndexPicking, resolvePickingMode, resolvePickingBackend } from "./modules/picking/picking-manager.js";
64
+ export { picking } from "./modules/picking/picking.js";
57
65
  export { picking as indexPicking } from "./modules/picking/index-picking.js";
58
66
  export { picking as colorPicking } from "./modules/picking/color-picking.js";
59
67
  export { requestAnimationFramePolyfill, cancelAnimationFramePolyfill } from "./animation-loop/request-animation-frame.js";
60
68
  export { LegacyPickingManager } from "./modules/picking/legacy-picking-manager.js";
69
+ export { legacyColorPicking } from "./modules/picking/legacy-color-picking.js";
70
+ import { DynamicTexture, type DynamicTextureProps } from "./dynamic-texture/dynamic-texture.js";
71
+ /** @deprecated use DynamicTexture */
72
+ export declare const AsyncTexture: typeof DynamicTexture;
73
+ /** @deprecated use DynamicTextureProps */
74
+ export type AsyncTextureProps = DynamicTextureProps;
61
75
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -9,12 +9,15 @@ export { AnimationLoopTemplate } from "./animation-loop/animation-loop-template.
9
9
  export { AnimationLoop } from "./animation-loop/animation-loop.js";
10
10
  export { makeAnimationLoop } from "./animation-loop/make-animation-loop.js";
11
11
  export { Model } from "./model/model.js";
12
+ export { Material } from "./material/material.js";
13
+ export { MaterialFactory } from "./material/material-factory.js";
12
14
  export { BufferTransform } from "./compute/buffer-transform.js";
13
15
  export { TextureTransform } from "./compute/texture-transform.js";
14
- export { PipelineFactory } from "./factories/pipeline-factory.js";
15
- export { ShaderFactory } from "./factories/shader-factory.js";
16
16
  export { ClipSpace } from "./models/clip-space.js";
17
17
  export { BackgroundTextureModel } from "./models/billboard-texture-model.js";
18
+ export { PointLightModel } from "./models/point-light-model.js";
19
+ export { SpotLightModel } from "./models/spot-light-model.js";
20
+ export { DirectionalLightModel } from "./models/directional-light-model.js";
18
21
  // Scenegraph Core nodes
19
22
  export { ScenegraphNode } from "./scenegraph/scenegraph-node.js";
20
23
  export { GroupNode } from "./scenegraph/group-node.js";
@@ -37,11 +40,16 @@ export { Swap } from "./compute/swap.js";
37
40
  export { SwapBuffers } from "./compute/swap.js";
38
41
  export { SwapFramebuffers } from "./compute/swap.js";
39
42
  export { Computation } from "./compute/computation.js";
40
- export { AsyncTexture } from "./async-texture/async-texture.js";
41
- export { PickingManager } from "./modules/picking/picking-manager.js";
43
+ export { DynamicTexture } from "./dynamic-texture/dynamic-texture.js";
44
+ export { PickingManager, supportsIndexPicking, resolvePickingMode, resolvePickingBackend } from "./modules/picking/picking-manager.js";
45
+ export { picking } from "./modules/picking/picking.js";
42
46
  export { picking as indexPicking } from "./modules/picking/index-picking.js";
43
47
  export { picking as colorPicking } from "./modules/picking/color-picking.js";
44
48
  export { requestAnimationFramePolyfill, cancelAnimationFramePolyfill } from "./animation-loop/request-animation-frame.js";
45
49
  // DEPRECATED
46
50
  export { LegacyPickingManager } from "./modules/picking/legacy-picking-manager.js";
51
+ export { legacyColorPicking } from "./modules/picking/legacy-color-picking.js";
52
+ import { DynamicTexture } from "./dynamic-texture/dynamic-texture.js";
53
+ /** @deprecated use DynamicTexture */
54
+ export const AsyncTexture = DynamicTexture;
47
55
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,qBAAqB;AAErB,YAAY;AACZ,OAAO,EAAC,QAAQ,EAAC,gCAA6B;AAC9C,OAAO,EAAC,SAAS,EAAC,kCAA+B;AAGjD,OAAO,EAAC,qBAAqB,EAAC,oDAAiD;AAG/E,OAAO,EAAC,aAAa,EAAC,2CAAwC;AAG9D,OAAO,EAAC,iBAAiB,EAAC,gDAA6C;AAGvE,OAAO,EAAC,KAAK,EAAC,yBAAsB;AAIpC,OAAO,EAAC,eAAe,EAAC,sCAAmC;AAE3D,OAAO,EAAC,gBAAgB,EAAC,uCAAoC;AAE7D,OAAO,EAAC,eAAe,EAAC,wCAAqC;AAC7D,OAAO,EAAC,aAAa,EAAC,sCAAmC;AAIzD,OAAO,EAAC,SAAS,EAAC,+BAA4B;AAE9C,OAAO,EAAC,sBAAsB,EAAC,4CAAyC;AAExE,wBAAwB;AACxB,OAAO,EAAC,cAAc,EAAC,wCAAqC;AAC5D,OAAO,EAAC,SAAS,EAAC,mCAAgC;AAElD,OAAO,EAAC,SAAS,EAAC,mCAAgC;AAIlD,OAAO,EAAC,QAAQ,EAAC,+BAA4B;AAE7C,OAAO,EAAC,WAAW,EAAC,mCAAgC;AAIpD,OAAO,EAAC,YAAY,EAAC,sCAAmC;AAExD,OAAO,EAAC,YAAY,EAAC,sCAAmC;AAExD,OAAO,EAAC,gBAAgB,EAAC,0CAAuC;AAEhE,OAAO,EAAC,iBAAiB,EAAC,4CAAyC;AAEnE,OAAO,EAAC,aAAa,EAAC,uCAAoC;AAE1D,OAAO,EAAC,cAAc,EAAC,wCAAqC;AAE5D,OAAO,EAAC,qBAAqB,EAAC,gDAA6C;AAE3E,OAAO,EAAC,YAAY,EAAC,2BAAwB;AAE7C,wBAAwB;AACxB,OAAO,EAAC,mBAAmB,EAAC,sCAAmC;AAC/D,OAAO,EAAC,aAAa,EAAE,SAAS,EAAE,eAAe,EAAC,yCAAsC;AAIxF,OAAO,EAAC,kBAAkB,EAAC,yCAAsC;AAEjE,OAAO,EAAC,IAAI,EAAC,0BAAuB;AACpC,OAAO,EAAC,WAAW,EAAC,0BAAuB;AAC3C,OAAO,EAAC,gBAAgB,EAAC,0BAAuB;AAGhD,OAAO,EAAC,WAAW,EAAC,iCAA8B;AAelD,OAAO,EAAC,YAAY,EAAC,yCAAsC;AAE3D,OAAO,EAAC,cAAc,EAAC,6CAA0C;AACjE,OAAO,EAAC,OAAO,IAAI,YAAY,EAAC,2CAAwC;AACxE,OAAO,EAAC,OAAO,IAAI,YAAY,EAAC,2CAAwC;AAExE,OAAO,EACL,6BAA6B,EAC7B,4BAA4B,EAC7B,oDAAiD;AAElD,aAAa;AAEb,OAAO,EAAC,oBAAoB,EAAC,oDAAiD"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,qBAAqB;AAErB,YAAY;AACZ,OAAO,EAAC,QAAQ,EAAC,gCAA6B;AAC9C,OAAO,EAAC,SAAS,EAAC,kCAA+B;AAGjD,OAAO,EAAC,qBAAqB,EAAC,oDAAiD;AAG/E,OAAO,EAAC,aAAa,EAAC,2CAAwC;AAG9D,OAAO,EAAC,iBAAiB,EAAC,gDAA6C;AAGvE,OAAO,EAAC,KAAK,EAAC,yBAAsB;AAEpC,OAAO,EAAC,QAAQ,EAAC,+BAA4B;AAE7C,OAAO,EAAC,eAAe,EAAC,uCAAoC;AAI5D,OAAO,EAAC,eAAe,EAAC,sCAAmC;AAE3D,OAAO,EAAC,gBAAgB,EAAC,uCAAoC;AAI7D,OAAO,EAAC,SAAS,EAAC,+BAA4B;AAE9C,OAAO,EAAC,sBAAsB,EAAC,4CAAyC;AAOxE,OAAO,EAAC,eAAe,EAAC,sCAAmC;AAC3D,OAAO,EAAC,cAAc,EAAC,qCAAkC;AACzD,OAAO,EAAC,qBAAqB,EAAC,4CAAyC;AAEvE,wBAAwB;AACxB,OAAO,EAAC,cAAc,EAAC,wCAAqC;AAC5D,OAAO,EAAC,SAAS,EAAC,mCAAgC;AAElD,OAAO,EAAC,SAAS,EAAC,mCAAgC;AAIlD,OAAO,EAAC,QAAQ,EAAC,+BAA4B;AAE7C,OAAO,EAAC,WAAW,EAAC,mCAAgC;AAIpD,OAAO,EAAC,YAAY,EAAC,sCAAmC;AAExD,OAAO,EAAC,YAAY,EAAC,sCAAmC;AAExD,OAAO,EAAC,gBAAgB,EAAC,0CAAuC;AAEhE,OAAO,EAAC,iBAAiB,EAAC,4CAAyC;AAEnE,OAAO,EAAC,aAAa,EAAC,uCAAoC;AAE1D,OAAO,EAAC,cAAc,EAAC,wCAAqC;AAE5D,OAAO,EAAC,qBAAqB,EAAC,gDAA6C;AAE3E,OAAO,EAAC,YAAY,EAAC,2BAAwB;AAE7C,wBAAwB;AACxB,OAAO,EAAC,mBAAmB,EAAC,sCAAmC;AAC/D,OAAO,EAAC,aAAa,EAAE,SAAS,EAAE,eAAe,EAAC,yCAAsC;AAIxF,OAAO,EAAC,kBAAkB,EAAC,yCAAsC;AAEjE,OAAO,EAAC,IAAI,EAAC,0BAAuB;AACpC,OAAO,EAAC,WAAW,EAAC,0BAAuB;AAC3C,OAAO,EAAC,gBAAgB,EAAC,0BAAuB;AAGhD,OAAO,EAAC,WAAW,EAAC,iCAA8B;AAclD,OAAO,EAAC,cAAc,EAAC,6CAA0C;AAUjE,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACtB,6CAA0C;AAC3C,OAAO,EAAC,OAAO,EAAC,qCAAkC;AAClD,OAAO,EAAC,OAAO,IAAI,YAAY,EAAC,2CAAwC;AACxE,OAAO,EAAC,OAAO,IAAI,YAAY,EAAC,2CAAwC;AAExE,OAAO,EACL,6BAA6B,EAC7B,4BAA4B,EAC7B,oDAAiD;AAElD,aAAa;AAEb,OAAO,EAAC,oBAAoB,EAAC,oDAAiD;AAC9E,OAAO,EAAC,kBAAkB,EAAC,kDAA+C;AAE1E,OAAO,EAAC,cAAc,EAA2B,6CAA0C;AAC3F,qCAAqC;AACrC,MAAM,CAAC,MAAM,YAAY,GAAG,cAAc,CAAC"}
@@ -0,0 +1,73 @@
1
+ import type { Binding, BindingsByGroup, Device } from '@luma.gl/core';
2
+ import type { ShaderModule } from '@luma.gl/shadertools';
3
+ import type { Material, MaterialProps } from "./material.js";
4
+ type MaterialModuleProps = Partial<Record<string, Record<string, unknown>>>;
5
+ type MaterialBindings = Record<string, Binding | import('../dynamic-texture/dynamic-texture').DynamicTexture>;
6
+ /** Logical bind-group slot reserved for material-owned bindings. */
7
+ export declare const MATERIAL_BIND_GROUP = 3;
8
+ /** Construction props for {@link MaterialFactory}. */
9
+ export type MaterialFactoryProps = {
10
+ /** Shader modules that define the material schema for bind group `3`. */
11
+ modules?: ShaderModule[];
12
+ };
13
+ /**
14
+ * Creates typed {@link Material} instances for a stable material binding schema.
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * const pbrFactory = new MaterialFactory<
19
+ * {pbrMaterial: PBRMaterialUniforms},
20
+ * PBRMaterialBindings
21
+ * >(device, {modules: [pbrMaterial]});
22
+ * const pbr = pbrFactory.createMaterial();
23
+ * pbr.setProps({pbrMaterial: {baseColorFactor: [1, 0, 0, 1]}});
24
+ * const pbrVariant = pbr.clone({bindings: {pbr_baseColorSampler: texture}});
25
+ * ```
26
+ *
27
+ * @example
28
+ * ```ts
29
+ * const phongFactory = new MaterialFactory<
30
+ * {phongMaterial: PhongMaterialProps},
31
+ * {}
32
+ * >(device, {modules: [phongMaterial]});
33
+ * const phong = phongFactory.createMaterial();
34
+ * phong.setProps({phongMaterial: {ambient: 0.4, diffuse: 0.7}});
35
+ * const phongVariant = phong.clone({moduleProps: {phongMaterial: {shininess: 64}}});
36
+ * ```
37
+ *
38
+ * @example
39
+ * ```ts
40
+ * const gouraudFactory = new MaterialFactory<
41
+ * {gouraudMaterial: GouraudMaterialProps},
42
+ * {}
43
+ * >(device, {modules: [gouraudMaterial]});
44
+ * const gouraud = gouraudFactory.createMaterial();
45
+ * gouraud.setProps({gouraudMaterial: {ambient: 0.25}});
46
+ * const gouraudVariant = gouraud.clone({moduleProps: {gouraudMaterial: {diffuse: 0.8}}});
47
+ * ```
48
+ */
49
+ export declare class MaterialFactory<TModuleProps extends MaterialModuleProps = MaterialModuleProps, TBindings extends MaterialBindings = MaterialBindings> {
50
+ /** Device that creates materials for this schema. */
51
+ readonly device: Device;
52
+ /** Shader modules that define the material schema. */
53
+ readonly modules: ShaderModule[];
54
+ private _materialBindingNames;
55
+ private _materialModuleNames;
56
+ constructor(device: Device, props?: MaterialFactoryProps);
57
+ /** Creates one typed material instance for this factory's schema. */
58
+ createMaterial(props?: Omit<MaterialProps<TModuleProps, TBindings>, 'factory' | 'modules'>): Material<TModuleProps, TBindings>;
59
+ /** Returns the logical material-owned resource binding names. */
60
+ getBindingNames(): string[];
61
+ /** Returns `true` when the supplied binding belongs to this material schema. */
62
+ ownsBinding(bindingName: string): boolean;
63
+ /** Returns `true` when the supplied shader module is owned by this material schema. */
64
+ ownsModule(moduleName: string): boolean;
65
+ /** Packages resolved material bindings into bind group `3`. */
66
+ getBindingsByGroup(bindings: Partial<{
67
+ [K in keyof TBindings]: Binding;
68
+ }> & Record<string, Binding>): BindingsByGroup;
69
+ }
70
+ /** Returns the module name corresponding to an auto-generated `*Uniforms` binding. */
71
+ export declare function getModuleNameFromUniformBinding(bindingName: string): string | null;
72
+ export {};
73
+ //# sourceMappingURL=material-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"material-factory.d.ts","sourceRoot":"","sources":["../../src/material/material-factory.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAC,MAAM,eAAe,CAAC;AACpE,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,sBAAsB,CAAC;AAEvD,OAAO,KAAK,EAAC,QAAQ,EAAE,aAAa,EAAC,sBAAmB;AAGxD,KAAK,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAC5E,KAAK,gBAAgB,GAAG,MAAM,CAC5B,MAAM,EACN,OAAO,GAAG,OAAO,oCAAoC,EAAE,cAAc,CACtE,CAAC;AAEF,oEAAoE;AACpE,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,sDAAsD;AACtD,MAAM,MAAM,oBAAoB,GAAG;IACjC,yEAAyE;IACzE,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;CAC1B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,qBAAa,eAAe,CAC1B,YAAY,SAAS,mBAAmB,GAAG,mBAAmB,EAC9D,SAAS,SAAS,gBAAgB,GAAG,gBAAgB;IAErD,qDAAqD;IACrD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,sDAAsD;IACtD,QAAQ,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC;IAEjC,OAAO,CAAC,qBAAqB,CAAc;IAC3C,OAAO,CAAC,oBAAoB,CAAc;gBAE9B,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,oBAAyB;IAW5D,qEAAqE;IACrE,cAAc,CACZ,KAAK,GAAE,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,CAAM,GAC9E,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC;IAOpC,iEAAiE;IACjE,eAAe,IAAI,MAAM,EAAE;IAI3B,gFAAgF;IAChF,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IASzC,uFAAuF;IACvF,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAIvC,+DAA+D;IAC/D,kBAAkB,CAChB,QAAQ,EAAE,OAAO,CAAC;SAAE,CAAC,IAAI,MAAM,SAAS,GAAG,OAAO;KAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7E,eAAe;CAGnB;AAED,sFAAsF;AACtF,wBAAgB,+BAA+B,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAElF"}
@@ -0,0 +1,111 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { ShaderInputs } from "../shader-inputs.js";
5
+ import { Material as MaterialClass } from "./material.js";
6
+ /** Logical bind-group slot reserved for material-owned bindings. */
7
+ export const MATERIAL_BIND_GROUP = 3;
8
+ /**
9
+ * Creates typed {@link Material} instances for a stable material binding schema.
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * const pbrFactory = new MaterialFactory<
14
+ * {pbrMaterial: PBRMaterialUniforms},
15
+ * PBRMaterialBindings
16
+ * >(device, {modules: [pbrMaterial]});
17
+ * const pbr = pbrFactory.createMaterial();
18
+ * pbr.setProps({pbrMaterial: {baseColorFactor: [1, 0, 0, 1]}});
19
+ * const pbrVariant = pbr.clone({bindings: {pbr_baseColorSampler: texture}});
20
+ * ```
21
+ *
22
+ * @example
23
+ * ```ts
24
+ * const phongFactory = new MaterialFactory<
25
+ * {phongMaterial: PhongMaterialProps},
26
+ * {}
27
+ * >(device, {modules: [phongMaterial]});
28
+ * const phong = phongFactory.createMaterial();
29
+ * phong.setProps({phongMaterial: {ambient: 0.4, diffuse: 0.7}});
30
+ * const phongVariant = phong.clone({moduleProps: {phongMaterial: {shininess: 64}}});
31
+ * ```
32
+ *
33
+ * @example
34
+ * ```ts
35
+ * const gouraudFactory = new MaterialFactory<
36
+ * {gouraudMaterial: GouraudMaterialProps},
37
+ * {}
38
+ * >(device, {modules: [gouraudMaterial]});
39
+ * const gouraud = gouraudFactory.createMaterial();
40
+ * gouraud.setProps({gouraudMaterial: {ambient: 0.25}});
41
+ * const gouraudVariant = gouraud.clone({moduleProps: {gouraudMaterial: {diffuse: 0.8}}});
42
+ * ```
43
+ */
44
+ export class MaterialFactory {
45
+ /** Device that creates materials for this schema. */
46
+ device;
47
+ /** Shader modules that define the material schema. */
48
+ modules;
49
+ _materialBindingNames;
50
+ _materialModuleNames;
51
+ constructor(device, props = {}) {
52
+ this.device = device;
53
+ this.modules = props.modules || [];
54
+ const shaderInputs = new ShaderInputs(Object.fromEntries(this.modules.map(module => [module.name, module])));
55
+ this._materialBindingNames = getMaterialBindingNames(shaderInputs);
56
+ this._materialModuleNames = getMaterialModuleNames(shaderInputs);
57
+ }
58
+ /** Creates one typed material instance for this factory's schema. */
59
+ createMaterial(props = {}) {
60
+ return new MaterialClass(this.device, {
61
+ ...props,
62
+ factory: this
63
+ });
64
+ }
65
+ /** Returns the logical material-owned resource binding names. */
66
+ getBindingNames() {
67
+ return Array.from(this._materialBindingNames);
68
+ }
69
+ /** Returns `true` when the supplied binding belongs to this material schema. */
70
+ ownsBinding(bindingName) {
71
+ if (this._materialBindingNames.has(bindingName)) {
72
+ return true;
73
+ }
74
+ const aliasedModuleName = getModuleNameFromUniformBinding(bindingName);
75
+ return aliasedModuleName ? this._materialModuleNames.has(aliasedModuleName) : false;
76
+ }
77
+ /** Returns `true` when the supplied shader module is owned by this material schema. */
78
+ ownsModule(moduleName) {
79
+ return this._materialModuleNames.has(moduleName);
80
+ }
81
+ /** Packages resolved material bindings into bind group `3`. */
82
+ getBindingsByGroup(bindings) {
83
+ return Object.keys(bindings).length > 0 ? { [MATERIAL_BIND_GROUP]: bindings } : {};
84
+ }
85
+ }
86
+ /** Returns the module name corresponding to an auto-generated `*Uniforms` binding. */
87
+ export function getModuleNameFromUniformBinding(bindingName) {
88
+ return bindingName.endsWith('Uniforms') ? bindingName.slice(0, -'Uniforms'.length) : null;
89
+ }
90
+ function getMaterialBindingNames(shaderInputs) {
91
+ const bindingNames = new Set();
92
+ for (const module of Object.values(shaderInputs.modules)) {
93
+ for (const binding of module.bindingLayout || []) {
94
+ if (binding.group === MATERIAL_BIND_GROUP) {
95
+ bindingNames.add(binding.name);
96
+ }
97
+ }
98
+ }
99
+ return bindingNames;
100
+ }
101
+ function getMaterialModuleNames(shaderInputs) {
102
+ const moduleNames = new Set();
103
+ for (const module of Object.values(shaderInputs.modules)) {
104
+ if (module.name &&
105
+ module.bindingLayout?.some(binding => binding.group === MATERIAL_BIND_GROUP && binding.name === module.name)) {
106
+ moduleNames.add(module.name);
107
+ }
108
+ }
109
+ return moduleNames;
110
+ }
111
+ //# sourceMappingURL=material-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"material-factory.js","sourceRoot":"","sources":["../../src/material/material-factory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ import type { Binding, BindingsByGroup, Device } from '@luma.gl/core';
2
+ import type { ShaderModule } from '@luma.gl/shadertools';
3
+ import { DynamicTexture } from "../dynamic-texture/dynamic-texture.js";
4
+ import { ShaderInputs } from "../shader-inputs.js";
5
+ import { MaterialFactory } from "./material-factory.js";
6
+ type MaterialModuleProps = Partial<Record<string, Record<string, unknown>>>;
7
+ type MaterialBindings = Record<string, Binding | DynamicTexture>;
8
+ type MaterialPropsUpdate<TModuleProps extends MaterialModuleProps> = Partial<{
9
+ [P in keyof TModuleProps]?: Partial<TModuleProps[P]>;
10
+ }>;
11
+ /** Construction props for one typed {@link Material}. */
12
+ export type MaterialProps<TModuleProps extends MaterialModuleProps = MaterialModuleProps, TBindings extends MaterialBindings = MaterialBindings> = {
13
+ /** Optional application-provided identifier. */
14
+ id?: string;
15
+ /** Factory that owns the material schema. */
16
+ factory?: MaterialFactory<TModuleProps, TBindings>;
17
+ /** Optional pre-created shader inputs for the material modules. */
18
+ shaderInputs?: ShaderInputs<TModuleProps>;
19
+ /** Shader modules used when a factory is not supplied. */
20
+ modules?: ShaderModule[];
21
+ /** Initial material-owned resource bindings. */
22
+ bindings?: Partial<TBindings>;
23
+ };
24
+ /** Structural overrides applied when cloning a {@link Material}. */
25
+ export type MaterialCloneProps<TModuleProps extends MaterialModuleProps = MaterialModuleProps, TBindings extends MaterialBindings = MaterialBindings> = {
26
+ /** Optional identifier for the cloned material. */
27
+ id?: string;
28
+ /** Replacement material-owned resource bindings. */
29
+ bindings?: Partial<TBindings>;
30
+ /** Additional uniform/module props applied to the clone. */
31
+ moduleProps?: MaterialPropsUpdate<TModuleProps>;
32
+ /** Optional full replacement shader-input store. */
33
+ shaderInputs?: ShaderInputs<TModuleProps>;
34
+ };
35
+ /**
36
+ * Material owns bind group `3` resources and uniforms for one material instance.
37
+ *
38
+ * `setProps()` mutates uniform values in place. Structural resource changes are
39
+ * expressed through `clone({...})`, which creates a new material identity.
40
+ */
41
+ export declare class Material<TModuleProps extends MaterialModuleProps = MaterialModuleProps, TBindings extends MaterialBindings = MaterialBindings> {
42
+ /** Application-provided identifier. */
43
+ readonly id: string;
44
+ /** Device that owns the material resources. */
45
+ readonly device: Device;
46
+ /** Factory that defines the material schema. */
47
+ readonly factory: MaterialFactory<TModuleProps, TBindings>;
48
+ /** Shader inputs for the material-owned modules. */
49
+ readonly shaderInputs: ShaderInputs<TModuleProps>;
50
+ /** Internal binding store including uniform buffers and resource bindings. */
51
+ readonly bindings: Record<string, Binding | DynamicTexture>;
52
+ private _uniformStore;
53
+ private _bindGroupCacheToken;
54
+ constructor(device: Device, props?: MaterialProps<TModuleProps, TBindings>);
55
+ /** Destroys managed uniform-buffer resources owned by this material. */
56
+ destroy(): void;
57
+ /** Creates a new material variant with optional structural and uniform overrides. */
58
+ clone(props?: MaterialCloneProps<TModuleProps, TBindings>): Material<TModuleProps, TBindings>;
59
+ /** Returns `true` if this material owns the supplied binding name. */
60
+ ownsBinding(bindingName: string): boolean;
61
+ /** Returns `true` if this material owns the supplied shader module. */
62
+ ownsModule(moduleName: string): boolean;
63
+ /** Updates material uniform/module props in place without changing material identity. */
64
+ setProps(props: MaterialPropsUpdate<TModuleProps>): void;
65
+ /** Updates managed uniform buffers and shader-input-owned bindings. */
66
+ updateShaderInputs(): void;
67
+ /** Returns the material-owned resource bindings without internal uniform buffers. */
68
+ getResourceBindings(): Partial<TBindings>;
69
+ /** Returns the resolved bindings, including internal uniform buffers and ready textures. */
70
+ getBindings(): Partial<{
71
+ [K in keyof TBindings]: Binding;
72
+ }> & Record<string, Binding>;
73
+ /** Packages resolved material bindings into logical bind group `3`. */
74
+ getBindingsByGroup(): BindingsByGroup;
75
+ /** Returns the stable bind-group cache token for the requested bind group. */
76
+ getBindGroupCacheKey(group: number): object | null;
77
+ /** Returns the latest update timestamp across material-owned resources. */
78
+ getBindingsUpdateTimestamp(): number;
79
+ /** Replaces owned resource bindings and invalidates the material cache identity when needed. */
80
+ private _replaceOwnedBindings;
81
+ private _setOwnedBindings;
82
+ }
83
+ export {};
84
+ //# sourceMappingURL=material.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"material.d.ts","sourceRoot":"","sources":["../../src/material/material.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,176 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { Buffer, Sampler, Texture, TextureView, UniformStore } from '@luma.gl/core';
5
+ import { DynamicTexture } from "../dynamic-texture/dynamic-texture.js";
6
+ import { ShaderInputs } from "../shader-inputs.js";
7
+ import { shaderModuleHasUniforms } from "../utils/shader-module-utils.js";
8
+ import { uid } from "../utils/uid.js";
9
+ import { getModuleNameFromUniformBinding, MATERIAL_BIND_GROUP, MaterialFactory } from "./material-factory.js";
10
+ /**
11
+ * Material owns bind group `3` resources and uniforms for one material instance.
12
+ *
13
+ * `setProps()` mutates uniform values in place. Structural resource changes are
14
+ * expressed through `clone({...})`, which creates a new material identity.
15
+ */
16
+ export class Material {
17
+ /** Application-provided identifier. */
18
+ id;
19
+ /** Device that owns the material resources. */
20
+ device;
21
+ /** Factory that defines the material schema. */
22
+ factory;
23
+ /** Shader inputs for the material-owned modules. */
24
+ shaderInputs;
25
+ /** Internal binding store including uniform buffers and resource bindings. */
26
+ bindings = {};
27
+ _uniformStore;
28
+ _bindGroupCacheToken = {};
29
+ constructor(device, props = {}) {
30
+ this.id = props.id || uid('material');
31
+ this.device = device;
32
+ this.factory =
33
+ props.factory ||
34
+ new MaterialFactory(device, {
35
+ modules: props.modules || props.shaderInputs?.getModules() || []
36
+ });
37
+ const moduleMap = Object.fromEntries((props.shaderInputs?.getModules() || this.factory.modules).map(module => [
38
+ module.name,
39
+ module
40
+ ]));
41
+ this.shaderInputs = props.shaderInputs || new ShaderInputs(moduleMap);
42
+ this._uniformStore = new UniformStore(this.device, this.shaderInputs.modules);
43
+ for (const [moduleName, module] of Object.entries(this.shaderInputs.modules)) {
44
+ if (this.ownsModule(moduleName) && shaderModuleHasUniforms(module)) {
45
+ const uniformBuffer = this._uniformStore.getManagedUniformBuffer(moduleName);
46
+ this.bindings[`${moduleName}Uniforms`] = uniformBuffer;
47
+ }
48
+ }
49
+ this.updateShaderInputs();
50
+ if (props.bindings) {
51
+ this._replaceOwnedBindings(props.bindings);
52
+ }
53
+ }
54
+ /** Destroys managed uniform-buffer resources owned by this material. */
55
+ destroy() {
56
+ this._uniformStore.destroy();
57
+ }
58
+ /** Creates a new material variant with optional structural and uniform overrides. */
59
+ clone(props = {}) {
60
+ const material = this.factory.createMaterial({
61
+ id: props.id,
62
+ shaderInputs: props.shaderInputs,
63
+ bindings: {
64
+ ...this.getResourceBindings(),
65
+ ...props.bindings
66
+ }
67
+ });
68
+ if (!props.shaderInputs) {
69
+ material.setProps(this.shaderInputs.getUniformValues());
70
+ }
71
+ if (props.moduleProps) {
72
+ material.setProps(props.moduleProps);
73
+ }
74
+ return material;
75
+ }
76
+ /** Returns `true` if this material owns the supplied binding name. */
77
+ ownsBinding(bindingName) {
78
+ return this.factory.ownsBinding(bindingName);
79
+ }
80
+ /** Returns `true` if this material owns the supplied shader module. */
81
+ ownsModule(moduleName) {
82
+ return this.factory.ownsModule(moduleName);
83
+ }
84
+ /** Updates material uniform/module props in place without changing material identity. */
85
+ setProps(props) {
86
+ this.shaderInputs.setProps(props);
87
+ this.updateShaderInputs();
88
+ }
89
+ /** Updates managed uniform buffers and shader-input-owned bindings. */
90
+ updateShaderInputs() {
91
+ this._uniformStore.setUniforms(this.shaderInputs.getUniformValues());
92
+ const didChange = this._setOwnedBindings(this.shaderInputs.getBindingValues());
93
+ if (didChange) {
94
+ this._bindGroupCacheToken = {};
95
+ }
96
+ }
97
+ /** Returns the material-owned resource bindings without internal uniform buffers. */
98
+ getResourceBindings() {
99
+ const resourceBindings = {};
100
+ for (const [name, binding] of Object.entries(this.bindings)) {
101
+ if (!getModuleNameFromUniformBinding(name)) {
102
+ resourceBindings[name] = binding;
103
+ }
104
+ }
105
+ return resourceBindings;
106
+ }
107
+ /** Returns the resolved bindings, including internal uniform buffers and ready textures. */
108
+ getBindings() {
109
+ const validBindings = {};
110
+ const validBindingsMap = validBindings;
111
+ for (const [name, binding] of Object.entries(this.bindings)) {
112
+ if (binding instanceof DynamicTexture) {
113
+ if (binding.isReady) {
114
+ validBindingsMap[name] = binding.texture;
115
+ }
116
+ }
117
+ else {
118
+ validBindingsMap[name] = binding;
119
+ }
120
+ }
121
+ return validBindings;
122
+ }
123
+ /** Packages resolved material bindings into logical bind group `3`. */
124
+ getBindingsByGroup() {
125
+ return this.factory.getBindingsByGroup(this.getBindings());
126
+ }
127
+ /** Returns the stable bind-group cache token for the requested bind group. */
128
+ getBindGroupCacheKey(group) {
129
+ return group === MATERIAL_BIND_GROUP ? this._bindGroupCacheToken : null;
130
+ }
131
+ /** Returns the latest update timestamp across material-owned resources. */
132
+ getBindingsUpdateTimestamp() {
133
+ let timestamp = 0;
134
+ for (const binding of Object.values(this.bindings)) {
135
+ if (binding instanceof TextureView) {
136
+ timestamp = Math.max(timestamp, binding.texture.updateTimestamp);
137
+ }
138
+ else if (binding instanceof Buffer || binding instanceof Texture) {
139
+ timestamp = Math.max(timestamp, binding.updateTimestamp);
140
+ }
141
+ else if (binding instanceof DynamicTexture) {
142
+ timestamp = binding.texture
143
+ ? Math.max(timestamp, binding.texture.updateTimestamp)
144
+ : Infinity;
145
+ }
146
+ else if (!(binding instanceof Sampler)) {
147
+ timestamp = Math.max(timestamp, binding.buffer.updateTimestamp);
148
+ }
149
+ }
150
+ return timestamp;
151
+ }
152
+ /** Replaces owned resource bindings and invalidates the material cache identity when needed. */
153
+ _replaceOwnedBindings(bindings) {
154
+ const didChange = this._setOwnedBindings(bindings);
155
+ if (didChange) {
156
+ this._bindGroupCacheToken = {};
157
+ }
158
+ }
159
+ _setOwnedBindings(bindings) {
160
+ let didChange = false;
161
+ for (const [name, binding] of Object.entries(bindings)) {
162
+ if (binding === undefined) {
163
+ continue;
164
+ }
165
+ if (!this.ownsBinding(name)) {
166
+ continue;
167
+ }
168
+ if (this.bindings[name] !== binding) {
169
+ this.bindings[name] = binding;
170
+ didChange = true;
171
+ }
172
+ }
173
+ return didChange;
174
+ }
175
+ }
176
+ //# sourceMappingURL=material.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"material.js","sourceRoot":"","sources":["../../src/material/material.ts"],"names":[],"mappings":"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"}