@onerjs/core 8.54.1 → 8.54.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/Collisions/gpuPicker.js +7 -6
  2. package/Collisions/gpuPicker.js.map +1 -1
  3. package/Engines/Extensions/engine.texture2DArrayImageSource.d.ts +6 -0
  4. package/Engines/Extensions/engine.texture2DArrayImageSource.js +9 -0
  5. package/Engines/Extensions/engine.texture2DArrayImageSource.js.map +1 -0
  6. package/Engines/Extensions/engine.texture2DArrayImageSource.pure.d.ts +7 -0
  7. package/Engines/Extensions/engine.texture2DArrayImageSource.pure.js +40 -0
  8. package/Engines/Extensions/engine.texture2DArrayImageSource.pure.js.map +1 -0
  9. package/Engines/Extensions/engine.texture2DArrayImageSource.types.d.ts +21 -0
  10. package/Engines/Extensions/engine.texture2DArrayImageSource.types.js +2 -0
  11. package/Engines/Extensions/engine.texture2DArrayImageSource.types.js.map +1 -0
  12. package/Engines/Extensions/pure.d.ts +1 -0
  13. package/Engines/Extensions/pure.js +1 -0
  14. package/Engines/Extensions/pure.js.map +1 -1
  15. package/Engines/WebGPU/Extensions/engine.texture2DArrayImageSource.d.ts +6 -0
  16. package/Engines/WebGPU/Extensions/engine.texture2DArrayImageSource.js +9 -0
  17. package/Engines/WebGPU/Extensions/engine.texture2DArrayImageSource.js.map +1 -0
  18. package/Engines/WebGPU/Extensions/engine.texture2DArrayImageSource.pure.d.ts +7 -0
  19. package/Engines/WebGPU/Extensions/engine.texture2DArrayImageSource.pure.js +23 -0
  20. package/Engines/WebGPU/Extensions/engine.texture2DArrayImageSource.pure.js.map +1 -0
  21. package/Engines/WebGPU/Extensions/pure.d.ts +1 -0
  22. package/Engines/WebGPU/Extensions/pure.js +1 -0
  23. package/Engines/WebGPU/Extensions/pure.js.map +1 -1
  24. package/Engines/engine.d.ts +30 -0
  25. package/Engines/thinNativeEngine.pure.js +4 -4
  26. package/Engines/thinNativeEngine.pure.js.map +1 -1
  27. package/Lights/Clustered/clusteredLightContainer.pure.js +6 -0
  28. package/Lights/Clustered/clusteredLightContainer.pure.js.map +1 -1
  29. package/Loading/Plugins/babylonFileLoader.d.ts +10 -0
  30. package/Loading/Plugins/babylonFileLoader.js +18 -0
  31. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  32. package/Loading/Plugins/babylonFileLoader.pure.js +10 -2
  33. package/Loading/Plugins/babylonFileLoader.pure.js.map +1 -1
  34. package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js +2 -1
  35. package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js.map +1 -1
  36. package/Materials/Node/nodeMaterial.pure.d.ts +13 -5
  37. package/Materials/Node/nodeMaterial.pure.js +20 -2
  38. package/Materials/Node/nodeMaterial.pure.js.map +1 -1
  39. package/Materials/Textures/index.d.ts +1 -0
  40. package/Materials/Textures/index.js +1 -0
  41. package/Materials/Textures/index.js.map +1 -1
  42. package/Materials/Textures/pure.d.ts +1 -0
  43. package/Materials/Textures/pure.js +1 -0
  44. package/Materials/Textures/pure.js.map +1 -1
  45. package/Materials/Textures/rawTexture2DArray.functions.d.ts +66 -0
  46. package/Materials/Textures/rawTexture2DArray.functions.js +130 -0
  47. package/Materials/Textures/rawTexture2DArray.functions.js.map +1 -0
  48. package/Materials/Textures/renderTargetTexture.pure.js +7 -0
  49. package/Materials/Textures/renderTargetTexture.pure.js.map +1 -1
  50. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.d.ts +13 -0
  51. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js +15 -0
  52. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js.map +1 -1
  53. package/Misc/snapshotRenderingHelper.js +2 -1
  54. package/Misc/snapshotRenderingHelper.js.map +1 -1
  55. package/Physics/v2/Plugins/havokPlugin.js +15 -0
  56. package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
  57. package/Physics/v2/characterController.d.ts +17 -0
  58. package/Physics/v2/characterController.js +40 -0
  59. package/Physics/v2/characterController.js.map +1 -1
  60. package/Rendering/IBLShadows/iblShadowsAccumulationPass.d.ts +3 -1
  61. package/Rendering/IBLShadows/iblShadowsAccumulationPass.js +25 -4
  62. package/Rendering/IBLShadows/iblShadowsAccumulationPass.js.map +1 -1
  63. package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js +6 -5
  64. package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js.map +1 -1
  65. package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.d.ts +3 -1
  66. package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.js +16 -4
  67. package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.js.map +1 -1
  68. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js +6 -5
  69. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js.map +1 -1
  70. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.d.ts +3 -1
  71. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js +16 -4
  72. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js.map +1 -1
  73. package/Rendering/depthRenderer.d.ts +2 -0
  74. package/Rendering/depthRenderer.js +2 -0
  75. package/Rendering/depthRenderer.js.map +1 -1
  76. package/Rendering/depthRenderer.pure.js +3 -2
  77. package/Rendering/depthRenderer.pure.js.map +1 -1
  78. package/Rendering/fluidRenderer/fluidRenderer.pure.js +6 -0
  79. package/Rendering/fluidRenderer/fluidRenderer.pure.js.map +1 -1
  80. package/Rendering/geometryBufferRenderer.pure.js +5 -5
  81. package/Rendering/geometryBufferRenderer.pure.js.map +1 -1
  82. package/XR/features/WebXRBodyTracking.pure.d.ts +0 -28
  83. package/XR/features/WebXRBodyTracking.pure.js.map +1 -1
  84. package/package.json +1 -1
@@ -20,6 +20,7 @@ export * from "./Procedurals/index.js";
20
20
  export * from "./rawCubeTexture.js";
21
21
  export * from "./rawTexture.js";
22
22
  export * from "./rawTexture2DArray.js";
23
+ export * from "./rawTexture2DArray.functions.js";
23
24
  export * from "./rawTexture3D.js";
24
25
  export * from "./refractionTexture.js";
25
26
  export * from "./renderTargetTexture.js";
@@ -21,6 +21,7 @@ export * from "./Procedurals/index.js";
21
21
  export * from "./rawCubeTexture.js";
22
22
  export * from "./rawTexture.js";
23
23
  export * from "./rawTexture2DArray.js";
24
+ export * from "./rawTexture2DArray.functions.js";
24
25
  export * from "./rawTexture3D.js";
25
26
  export * from "./refractionTexture.js";
26
27
  export * from "./renderTargetTexture.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Textures/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,cAAc,eAAe,CAAC;AAE9B,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AAEzC,kCAAkC;AAClC,cAAc,qCAAqC,CAAC;AACpD,cAAc,iCAAiC,CAAC;AAEhD,gBAAgB;AAChB,cAAc,mCAAmC,CAAC;AAClD,cAAc,qCAAqC,CAAC;AACpD,cAAc,uCAAuC,CAAC;AACtD,cAAc,yCAAyC,CAAC;AACxD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,iDAAiD,CAAC;AAChE,cAAc,mDAAmD,CAAC;AAElE,8DAA8D;AAC9D,cAAc,qDAAqD,CAAC;AACpE,cAAc,mDAAmD,CAAC;AAClE,cAAc,wDAAwD,CAAC;AACvE,cAAc,iDAAiD,CAAC;AAChE,cAAc,+CAA+C,CAAC;AAC9D,cAAc,oDAAoD,CAAC;AAEnE,oEAAoE;AACpE,cAAc,6DAA6D,CAAC;AAC5E,cAAc,wDAAwD,CAAC;AACvE,cAAc,qDAAqD,CAAC;AACpE,cAAc,yDAAyD,CAAC;AACxE,cAAc,oDAAoD,CAAC;AACnE,cAAc,iDAAiD,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-restricted-imports */\r\nexport * from \"./baseTexture\";\r\n\r\nexport * from \"./baseTexture.polynomial\";\r\nexport * from \"./colorGradingTexture\";\r\nexport * from \"./cubeTexture\";\r\nexport * from \"./dynamicTexture\";\r\nexport * from \"./equiRectangularCubeTexture\";\r\nexport * from \"./externalTexture\";\r\nexport * from \"./Filtering/hdrFiltering\";\r\nexport * from \"./envCubeTexture\";\r\nexport * from \"./hdrCubeTexture\";\r\nexport * from \"./exrCubeTexture\";\r\nexport * from \"./htmlElementTexture\";\r\nexport * from \"./HTML/index\";\r\nexport * from \"./internalTexture\";\r\nexport * from \"./Loaders/index\";\r\nexport * from \"./mirrorTexture\";\r\nexport * from \"./multiRenderTarget\";\r\nexport * from \"./Packer/index\";\r\nexport * from \"./Procedurals/index\";\r\nexport * from \"./rawCubeTexture\";\r\nexport * from \"./rawTexture\";\r\nexport * from \"./rawTexture2DArray\";\r\nexport * from \"./rawTexture3D\";\r\nexport * from \"./refractionTexture\";\r\nexport * from \"./renderTargetTexture\";\r\nexport * from \"./reflectionProbeTexture\";\r\nexport * from \"./textureMerger\";\r\nexport * from \"./textureSampler\";\r\nexport * from \"./textureProcessor\";\r\nexport * from \"./texture\";\r\nexport * from \"./thinTexture\";\r\nexport * from \"./thinRenderTargetTexture\";\r\nexport * from \"./videoTexture\";\r\nexport * from \"./ktx2decoderTypes\";\r\nexport * from \"./textureCreationOptions\";\r\n\r\n// Shaders for procedural textures\r\nexport * from \"../../ShadersWGSL/procedural.vertex\";\r\nexport * from \"../../Shaders/procedural.vertex\";\r\n\r\n// HDR filtering\r\nexport * from \"../../Shaders/hdrFiltering.vertex\";\r\nexport * from \"../../Shaders/hdrFiltering.fragment\";\r\nexport * from \"../../ShadersWGSL/hdrFiltering.vertex\";\r\nexport * from \"../../ShadersWGSL/hdrFiltering.fragment\";\r\nexport * from \"../../Shaders/hdrIrradianceFiltering.vertex\";\r\nexport * from \"../../Shaders/hdrIrradianceFiltering.fragment\";\r\nexport * from \"../../ShadersWGSL/hdrIrradianceFiltering.vertex\";\r\nexport * from \"../../ShadersWGSL/hdrIrradianceFiltering.fragment\";\r\n\r\n// HDR filtering shader includes (needed by external packages)\r\nexport * from \"../../ShadersWGSL/ShadersInclude/importanceSampling\";\r\nexport * from \"../../ShadersWGSL/ShadersInclude/pbrBRDFFunctions\";\r\nexport * from \"../../ShadersWGSL/ShadersInclude/hdrFilteringFunctions\";\r\nexport * from \"../../Shaders/ShadersInclude/importanceSampling\";\r\nexport * from \"../../Shaders/ShadersInclude/pbrBRDFFunctions\";\r\nexport * from \"../../Shaders/ShadersInclude/hdrFilteringFunctions\";\r\n\r\n// Intersection & LTC helper functions (needed by external packages)\r\nexport * from \"../../ShadersWGSL/ShadersInclude/clusteredLightingFunctions\";\r\nexport * from \"../../ShadersWGSL/ShadersInclude/intersectionFunctions\";\r\nexport * from \"../../ShadersWGSL/ShadersInclude/ltcHelperFunctions\";\r\nexport * from \"../../Shaders/ShadersInclude/clusteredLightingFunctions\";\r\nexport * from \"../../Shaders/ShadersInclude/intersectionFunctions\";\r\nexport * from \"../../Shaders/ShadersInclude/ltcHelperFunctions\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Textures/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,cAAc,eAAe,CAAC;AAE9B,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AAEzC,kCAAkC;AAClC,cAAc,qCAAqC,CAAC;AACpD,cAAc,iCAAiC,CAAC;AAEhD,gBAAgB;AAChB,cAAc,mCAAmC,CAAC;AAClD,cAAc,qCAAqC,CAAC;AACpD,cAAc,uCAAuC,CAAC;AACtD,cAAc,yCAAyC,CAAC;AACxD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,iDAAiD,CAAC;AAChE,cAAc,mDAAmD,CAAC;AAElE,8DAA8D;AAC9D,cAAc,qDAAqD,CAAC;AACpE,cAAc,mDAAmD,CAAC;AAClE,cAAc,wDAAwD,CAAC;AACvE,cAAc,iDAAiD,CAAC;AAChE,cAAc,+CAA+C,CAAC;AAC9D,cAAc,oDAAoD,CAAC;AAEnE,oEAAoE;AACpE,cAAc,6DAA6D,CAAC;AAC5E,cAAc,wDAAwD,CAAC;AACvE,cAAc,qDAAqD,CAAC;AACpE,cAAc,yDAAyD,CAAC;AACxE,cAAc,oDAAoD,CAAC;AACnE,cAAc,iDAAiD,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-restricted-imports */\r\nexport * from \"./baseTexture\";\r\n\r\nexport * from \"./baseTexture.polynomial\";\r\nexport * from \"./colorGradingTexture\";\r\nexport * from \"./cubeTexture\";\r\nexport * from \"./dynamicTexture\";\r\nexport * from \"./equiRectangularCubeTexture\";\r\nexport * from \"./externalTexture\";\r\nexport * from \"./Filtering/hdrFiltering\";\r\nexport * from \"./envCubeTexture\";\r\nexport * from \"./hdrCubeTexture\";\r\nexport * from \"./exrCubeTexture\";\r\nexport * from \"./htmlElementTexture\";\r\nexport * from \"./HTML/index\";\r\nexport * from \"./internalTexture\";\r\nexport * from \"./Loaders/index\";\r\nexport * from \"./mirrorTexture\";\r\nexport * from \"./multiRenderTarget\";\r\nexport * from \"./Packer/index\";\r\nexport * from \"./Procedurals/index\";\r\nexport * from \"./rawCubeTexture\";\r\nexport * from \"./rawTexture\";\r\nexport * from \"./rawTexture2DArray\";\r\nexport * from \"./rawTexture2DArray.functions\";\r\nexport * from \"./rawTexture3D\";\r\nexport * from \"./refractionTexture\";\r\nexport * from \"./renderTargetTexture\";\r\nexport * from \"./reflectionProbeTexture\";\r\nexport * from \"./textureMerger\";\r\nexport * from \"./textureSampler\";\r\nexport * from \"./textureProcessor\";\r\nexport * from \"./texture\";\r\nexport * from \"./thinTexture\";\r\nexport * from \"./thinRenderTargetTexture\";\r\nexport * from \"./videoTexture\";\r\nexport * from \"./ktx2decoderTypes\";\r\nexport * from \"./textureCreationOptions\";\r\n\r\n// Shaders for procedural textures\r\nexport * from \"../../ShadersWGSL/procedural.vertex\";\r\nexport * from \"../../Shaders/procedural.vertex\";\r\n\r\n// HDR filtering\r\nexport * from \"../../Shaders/hdrFiltering.vertex\";\r\nexport * from \"../../Shaders/hdrFiltering.fragment\";\r\nexport * from \"../../ShadersWGSL/hdrFiltering.vertex\";\r\nexport * from \"../../ShadersWGSL/hdrFiltering.fragment\";\r\nexport * from \"../../Shaders/hdrIrradianceFiltering.vertex\";\r\nexport * from \"../../Shaders/hdrIrradianceFiltering.fragment\";\r\nexport * from \"../../ShadersWGSL/hdrIrradianceFiltering.vertex\";\r\nexport * from \"../../ShadersWGSL/hdrIrradianceFiltering.fragment\";\r\n\r\n// HDR filtering shader includes (needed by external packages)\r\nexport * from \"../../ShadersWGSL/ShadersInclude/importanceSampling\";\r\nexport * from \"../../ShadersWGSL/ShadersInclude/pbrBRDFFunctions\";\r\nexport * from \"../../ShadersWGSL/ShadersInclude/hdrFilteringFunctions\";\r\nexport * from \"../../Shaders/ShadersInclude/importanceSampling\";\r\nexport * from \"../../Shaders/ShadersInclude/pbrBRDFFunctions\";\r\nexport * from \"../../Shaders/ShadersInclude/hdrFilteringFunctions\";\r\n\r\n// Intersection & LTC helper functions (needed by external packages)\r\nexport * from \"../../ShadersWGSL/ShadersInclude/clusteredLightingFunctions\";\r\nexport * from \"../../ShadersWGSL/ShadersInclude/intersectionFunctions\";\r\nexport * from \"../../ShadersWGSL/ShadersInclude/ltcHelperFunctions\";\r\nexport * from \"../../Shaders/ShadersInclude/clusteredLightingFunctions\";\r\nexport * from \"../../Shaders/ShadersInclude/intersectionFunctions\";\r\nexport * from \"../../Shaders/ShadersInclude/ltcHelperFunctions\";\r\n"]}
@@ -21,6 +21,7 @@ export * from "./Procedurals/pure.js";
21
21
  export * from "./rawCubeTexture.js";
22
22
  export * from "./rawTexture.js";
23
23
  export * from "./rawTexture2DArray.js";
24
+ export * from "./rawTexture2DArray.functions.js";
24
25
  export * from "./rawTexture3D.js";
25
26
  export * from "./refractionTexture.js";
26
27
  export * from "./renderTargetTexture.pure.js";
@@ -22,6 +22,7 @@ export * from "./Procedurals/pure.js";
22
22
  export * from "./rawCubeTexture.js";
23
23
  export * from "./rawTexture.js";
24
24
  export * from "./rawTexture2DArray.js";
25
+ export * from "./rawTexture2DArray.functions.js";
25
26
  export * from "./rawTexture3D.js";
26
27
  export * from "./refractionTexture.js";
27
28
  export * from "./renderTargetTexture.pure.js";
@@ -1 +1 @@
1
- {"version":3,"file":"pure.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Textures/pure.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,6DAA6D;AAC7D,cAAc,oBAAoB,CAAC;AACnC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mCAAmC,CAAC;AAClD,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC","sourcesContent":["/** Pure barrel — re-exports only side-effect-free modules */\n/* eslint-disable @typescript-eslint/no-restricted-imports */\nexport * from \"./baseTexture.pure\";\nexport * from \"./baseTexture.polynomial.pure\";\nexport * from \"./colorGradingTexture.pure\";\nexport * from \"./cubeTexture.pure\";\nexport * from \"./dynamicTexture.pure\";\nexport * from \"./equiRectangularCubeTexture.pure\";\nexport * from \"./externalTexture\";\nexport * from \"./Filtering/hdrFiltering\";\nexport * from \"./envCubeTexture.pure\";\nexport * from \"./hdrCubeTexture.pure\";\nexport * from \"./exrCubeTexture.pure\";\nexport * from \"./htmlElementTexture.pure\";\nexport * from \"./HTML/pure\";\nexport * from \"./internalTexture\";\nexport * from \"./Loaders/pure\";\nexport * from \"./mirrorTexture.pure\";\nexport * from \"./multiRenderTarget.pure\";\nexport * from \"./Packer/pure\";\nexport * from \"./Procedurals/pure\";\nexport * from \"./rawCubeTexture\";\nexport * from \"./rawTexture\";\nexport * from \"./rawTexture2DArray\";\nexport * from \"./rawTexture3D\";\nexport * from \"./refractionTexture\";\nexport * from \"./renderTargetTexture.pure\";\nexport * from \"./reflectionProbeTexture.pure\";\nexport * from \"./textureMerger\";\nexport * from \"./textureSampler\";\nexport * from \"./textureProcessor\";\nexport * from \"./texture.pure\";\nexport * from \"./thinTexture\";\nexport * from \"./thinRenderTargetTexture\";\nexport * from \"./videoTexture.pure\";\nexport * from \"./ktx2decoderTypes\";\nexport * from \"./textureCreationOptions\";\n"]}
1
+ {"version":3,"file":"pure.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Textures/pure.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,6DAA6D;AAC7D,cAAc,oBAAoB,CAAC;AACnC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mCAAmC,CAAC;AAClD,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC","sourcesContent":["/** Pure barrel — re-exports only side-effect-free modules */\n/* eslint-disable @typescript-eslint/no-restricted-imports */\nexport * from \"./baseTexture.pure\";\nexport * from \"./baseTexture.polynomial.pure\";\nexport * from \"./colorGradingTexture.pure\";\nexport * from \"./cubeTexture.pure\";\nexport * from \"./dynamicTexture.pure\";\nexport * from \"./equiRectangularCubeTexture.pure\";\nexport * from \"./externalTexture\";\nexport * from \"./Filtering/hdrFiltering\";\nexport * from \"./envCubeTexture.pure\";\nexport * from \"./hdrCubeTexture.pure\";\nexport * from \"./exrCubeTexture.pure\";\nexport * from \"./htmlElementTexture.pure\";\nexport * from \"./HTML/pure\";\nexport * from \"./internalTexture\";\nexport * from \"./Loaders/pure\";\nexport * from \"./mirrorTexture.pure\";\nexport * from \"./multiRenderTarget.pure\";\nexport * from \"./Packer/pure\";\nexport * from \"./Procedurals/pure\";\nexport * from \"./rawCubeTexture\";\nexport * from \"./rawTexture\";\nexport * from \"./rawTexture2DArray\";\nexport * from \"./rawTexture2DArray.functions\";\nexport * from \"./rawTexture3D\";\nexport * from \"./refractionTexture\";\nexport * from \"./renderTargetTexture.pure\";\nexport * from \"./reflectionProbeTexture.pure\";\nexport * from \"./textureMerger\";\nexport * from \"./textureSampler\";\nexport * from \"./textureProcessor\";\nexport * from \"./texture.pure\";\nexport * from \"./thinTexture\";\nexport * from \"./thinRenderTargetTexture\";\nexport * from \"./videoTexture.pure\";\nexport * from \"./ktx2decoderTypes\";\nexport * from \"./textureCreationOptions\";\n"]}
@@ -0,0 +1,66 @@
1
+ import { type ImageSource } from "../../types.js";
2
+ import { type Scene } from "../../scene.js";
3
+ import { RawTexture2DArray } from "./rawTexture2DArray.js";
4
+ /**
5
+ * These helpers populate 2D array texture layers from decoded image sources.
6
+ * They rely on the AbstractEngine.updateTextureArrayLayerFromImageSource engine extension, which is
7
+ * an opt-in side effect. Register it before use by importing the matching module for your backend:
8
+ * - WebGL2: import "../../Engines/Extensions/engine.texture2DArrayImageSource.js";
9
+ * - WebGPU: import "../../Engines/WebGPU/Extensions/engine.texture2DArrayImageSource.js";
10
+ * (the full Engine build does not register it by default to keep it out of every engine bundle).
11
+ *
12
+ * Consuming the result: the built-in way to sample a chosen layer is Node Material's Texture block,
13
+ * which exposes a `layer` input (feed it a Float) and samples the array at that layer for you — no
14
+ * custom shader code required. If you instead write your own shader, declare a `sampler2DArray`
15
+ * (GLSL) / `texture_2d_array<f32>` (WGSL) uniform and sample it with an explicit integer layer index;
16
+ * the classic StandardMaterial / PBRMaterial texture slots are plain 2D and cannot read an array layer.
17
+ */
18
+ /**
19
+ * Options controlling how an image source is uploaded into a 2D array texture layer.
20
+ */
21
+ export interface IUploadImageToTexture2DArrayLayerOptions {
22
+ /** Defines if the source must be stored with the Y axis inverted (false by default) */
23
+ invertY?: boolean;
24
+ /** Defines if the source alpha must be premultiplied (false by default) */
25
+ premultiplyAlpha?: boolean;
26
+ }
27
+ /**
28
+ * Options controlling the creation of a 2D array texture from a list of image urls.
29
+ */
30
+ export interface ICreateTexture2DArrayFromImageUrlsOptions extends IUploadImageToTexture2DArrayLayerOptions {
31
+ /** Defines if mip levels should be generated (true by default) */
32
+ generateMipMaps?: boolean;
33
+ /** Defines the sampling mode to use (Texture.TRILINEAR_SAMPLINGMODE by default) */
34
+ samplingMode?: number;
35
+ /** Defines the texture type (Constants.TEXTURETYPE_UNSIGNED_BYTE by default) */
36
+ textureType?: number;
37
+ /** Options forwarded to createImageBitmap when decoding each url */
38
+ imageBitmapOptions?: ImageBitmapOptions;
39
+ }
40
+ /**
41
+ * Uploads a decoded image source (ImageBitmap, canvas, video, image element...) into a single layer of a 2D array texture.
42
+ * This is the image-source counterpart to RawTexture2DArray.update, which only accepts raw bytes.
43
+ * @param texture defines the 2D array texture to upload into
44
+ * @param source defines the image source to upload
45
+ * @param layer defines the array layer to upload into
46
+ * @param options defines optional upload settings (invertY, premultiplyAlpha)
47
+ */
48
+ export declare function UploadImageToTexture2DArrayLayer(texture: RawTexture2DArray, source: ImageSource, layer: number, options?: IUploadImageToTexture2DArrayLayerOptions): void;
49
+ /**
50
+ * Fetches an image from a url, decodes it and uploads it into a single layer of a 2D array texture.
51
+ * @param texture defines the 2D array texture to upload into
52
+ * @param url defines the url of the image to load
53
+ * @param layer defines the array layer to upload into
54
+ * @param options defines optional upload settings (invertY, premultiplyAlpha)
55
+ * @returns a promise resolved once the layer has been uploaded
56
+ */
57
+ export declare function LoadImageToTexture2DArrayLayerAsync(texture: RawTexture2DArray, url: string, layer: number, options?: IUploadImageToTexture2DArrayLayerOptions): Promise<void>;
58
+ /**
59
+ * Creates a 2D array texture and fills each layer from a list of image urls.
60
+ * All images must share the same dimensions.
61
+ * @param scene defines the hosting scene
62
+ * @param urls defines the url of the image for each layer (at least one)
63
+ * @param options defines optional creation and upload settings
64
+ * @returns a promise resolved with the created RawTexture2DArray
65
+ */
66
+ export declare function CreateTexture2DArrayFromImageUrlsAsync(scene: Scene, urls: readonly [string, ...string[]], options?: ICreateTexture2DArrayFromImageUrlsOptions): Promise<RawTexture2DArray>;
@@ -0,0 +1,130 @@
1
+
2
+ import { _IsSideEffectImplemented, _WarnImport } from "../../Misc/devTools.js";
3
+ import { RawTexture2DArray } from "./rawTexture2DArray.js";
4
+ /**
5
+ * Uploads a decoded image source (ImageBitmap, canvas, video, image element...) into a single layer of a 2D array texture.
6
+ * This is the image-source counterpart to RawTexture2DArray.update, which only accepts raw bytes.
7
+ * @param texture defines the 2D array texture to upload into
8
+ * @param source defines the image source to upload
9
+ * @param layer defines the array layer to upload into
10
+ * @param options defines optional upload settings (invertY, premultiplyAlpha)
11
+ */
12
+ export function UploadImageToTexture2DArrayLayer(texture, source, layer, options) {
13
+ const internalTexture = texture.getInternalTexture();
14
+ if (!internalTexture) {
15
+ throw new Error("Cannot upload to a 2D array texture that has no internal texture.");
16
+ }
17
+ if (!Number.isInteger(layer) || layer < 0 || layer >= texture.depth) {
18
+ throw new Error(`Layer ${layer} is out of range for a 2D array texture with ${texture.depth} layers.`);
19
+ }
20
+ const scene = texture.getScene();
21
+ if (!scene) {
22
+ throw new Error("Cannot upload to a 2D array texture that is not attached to a scene.");
23
+ }
24
+ const engine = scene.getEngine();
25
+ // updateTextureArrayLayerFromImageSource is an opt-in engine extension. When the consumer never
26
+ // imported it, the augmented method is missing, so fail early with the standard side-effect import
27
+ // message (matching the engine.rawTexture family) instead of a generic "is not a function" error.
28
+ if (!_IsSideEffectImplemented(engine.updateTextureArrayLayerFromImageSource)) {
29
+ throw _WarnImport("engine.texture2DArrayImageSource");
30
+ }
31
+ engine.updateTextureArrayLayerFromImageSource(internalTexture, source, layer, options?.invertY ?? false, options?.premultiplyAlpha ?? false);
32
+ }
33
+ /**
34
+ * Fetches an image from a url, decodes it and uploads it into a single layer of a 2D array texture.
35
+ * @param texture defines the 2D array texture to upload into
36
+ * @param url defines the url of the image to load
37
+ * @param layer defines the array layer to upload into
38
+ * @param options defines optional upload settings (invertY, premultiplyAlpha)
39
+ * @returns a promise resolved once the layer has been uploaded
40
+ */
41
+ export async function LoadImageToTexture2DArrayLayerAsync(texture, url, layer, options) {
42
+ const response = await fetch(url);
43
+ if (!response.ok) {
44
+ throw new Error(`Failed to fetch image "${url}": ${response.status} ${response.statusText}`);
45
+ }
46
+ const blob = await response.blob();
47
+ const bitmap = await createImageBitmap(blob);
48
+ try {
49
+ UploadImageToTexture2DArrayLayer(texture, bitmap, layer, options);
50
+ }
51
+ finally {
52
+ bitmap.close();
53
+ }
54
+ }
55
+ /**
56
+ * Creates a 2D array texture and fills each layer from a list of image urls.
57
+ * All images must share the same dimensions.
58
+ * @param scene defines the hosting scene
59
+ * @param urls defines the url of the image for each layer (at least one)
60
+ * @param options defines optional creation and upload settings
61
+ * @returns a promise resolved with the created RawTexture2DArray
62
+ */
63
+ export async function CreateTexture2DArrayFromImageUrlsAsync(scene, urls, options) {
64
+ // allSettled (not all): a rejected fetch/decode must not leak the layers that
65
+ // already decoded. Promise.all rejects on the first failure and never enters the
66
+ // try/finally below, orphaning every ImageBitmap that resolved. Close the
67
+ // fulfilled ones here, then rethrow the original failure.
68
+ const results = await Promise.allSettled(urls.map(async (url) => {
69
+ const response = await fetch(url);
70
+ if (!response.ok) {
71
+ throw new Error(`Failed to fetch image "${url}": ${response.status} ${response.statusText}`);
72
+ }
73
+ return await createImageBitmap(await response.blob(), options?.imageBitmapOptions);
74
+ }));
75
+ const firstRejection = results.find((result) => result.status === "rejected");
76
+ if (firstRejection) {
77
+ for (const result of results) {
78
+ if (result.status === "fulfilled") {
79
+ result.value.close();
80
+ }
81
+ }
82
+ throw firstRejection.reason;
83
+ }
84
+ const bitmaps = results.filter((result) => result.status === "fulfilled").map((result) => result.value);
85
+ try {
86
+ const width = bitmaps[0].width;
87
+ const height = bitmaps[0].height;
88
+ for (let index = 1; index < bitmaps.length; index++) {
89
+ const bitmap = bitmaps[index];
90
+ if (bitmap.width !== width || bitmap.height !== height) {
91
+ throw new Error(`All images must share the same dimensions. Image at index ${index} is ${bitmap.width}x${bitmap.height}, expected ${width}x${height}.`);
92
+ }
93
+ }
94
+ const texture = new RawTexture2DArray(null, width, height, bitmaps.length, 5, scene, options?.generateMipMaps ?? true, options?.invertY ?? false, options?.samplingMode, options?.textureType);
95
+ try {
96
+ const uploadOptions = {
97
+ invertY: options?.invertY ?? false,
98
+ premultiplyAlpha: options?.premultiplyAlpha ?? false,
99
+ };
100
+ // updateTextureArrayLayerFromImageSource rebuilds the whole mip chain on each upload when mips
101
+ // are enabled. Uploading N layers that way is O(N) redundant mip generation, so suppress it
102
+ // per-layer and let only the final upload regenerate the mips once — a single generateMipmap
103
+ // covers every layer of the array.
104
+ const internalTexture = texture.getInternalTexture();
105
+ const generateMipMaps = internalTexture?.generateMipMaps ?? false;
106
+ if (internalTexture && generateMipMaps) {
107
+ internalTexture.generateMipMaps = false;
108
+ }
109
+ for (let layer = 0; layer < bitmaps.length; layer++) {
110
+ if (internalTexture && generateMipMaps && layer === bitmaps.length - 1) {
111
+ internalTexture.generateMipMaps = true;
112
+ }
113
+ UploadImageToTexture2DArrayLayer(texture, bitmaps[layer], layer, uploadOptions);
114
+ }
115
+ return texture;
116
+ }
117
+ catch (error) {
118
+ // A layer upload can throw (out-of-range layer, missing engine extension, backend upload
119
+ // failure). Dispose the freshly allocated GPU texture so it does not leak, then rethrow.
120
+ texture.dispose();
121
+ throw error;
122
+ }
123
+ }
124
+ finally {
125
+ for (let index = 0; index < bitmaps.length; index++) {
126
+ bitmaps[index].close();
127
+ }
128
+ }
129
+ }
130
+ //# sourceMappingURL=rawTexture2DArray.functions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rawTexture2DArray.functions.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Textures/rawTexture2DArray.functions.ts"],"names":[],"mappings":"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","sourcesContent":["import { type ImageSource } from \"../../types\";\r\nimport { type Scene } from \"../../scene\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport { _IsSideEffectImplemented, _WarnImport } from \"../../Misc/devTools\";\r\nimport { RawTexture2DArray } from \"./rawTexture2DArray\";\r\n\r\n/**\r\n * These helpers populate 2D array texture layers from decoded image sources.\r\n * They rely on the AbstractEngine.updateTextureArrayLayerFromImageSource engine extension, which is\r\n * an opt-in side effect. Register it before use by importing the matching module for your backend:\r\n * - WebGL2: import \"core/Engines/Extensions/engine.texture2DArrayImageSource\";\r\n * - WebGPU: import \"core/Engines/WebGPU/Extensions/engine.texture2DArrayImageSource\";\r\n * (the full Engine build does not register it by default to keep it out of every engine bundle).\r\n *\r\n * Consuming the result: the built-in way to sample a chosen layer is Node Material's Texture block,\r\n * which exposes a `layer` input (feed it a Float) and samples the array at that layer for you — no\r\n * custom shader code required. If you instead write your own shader, declare a `sampler2DArray`\r\n * (GLSL) / `texture_2d_array<f32>` (WGSL) uniform and sample it with an explicit integer layer index;\r\n * the classic StandardMaterial / PBRMaterial texture slots are plain 2D and cannot read an array layer.\r\n */\r\n\r\n/**\r\n * Options controlling how an image source is uploaded into a 2D array texture layer.\r\n */\r\nexport interface IUploadImageToTexture2DArrayLayerOptions {\r\n /** Defines if the source must be stored with the Y axis inverted (false by default) */\r\n invertY?: boolean;\r\n /** Defines if the source alpha must be premultiplied (false by default) */\r\n premultiplyAlpha?: boolean;\r\n}\r\n\r\n/**\r\n * Options controlling the creation of a 2D array texture from a list of image urls.\r\n */\r\nexport interface ICreateTexture2DArrayFromImageUrlsOptions extends IUploadImageToTexture2DArrayLayerOptions {\r\n /** Defines if mip levels should be generated (true by default) */\r\n generateMipMaps?: boolean;\r\n /** Defines the sampling mode to use (Texture.TRILINEAR_SAMPLINGMODE by default) */\r\n samplingMode?: number;\r\n /** Defines the texture type (Constants.TEXTURETYPE_UNSIGNED_BYTE by default) */\r\n textureType?: number;\r\n /** Options forwarded to createImageBitmap when decoding each url */\r\n imageBitmapOptions?: ImageBitmapOptions;\r\n}\r\n\r\n/**\r\n * Uploads a decoded image source (ImageBitmap, canvas, video, image element...) into a single layer of a 2D array texture.\r\n * This is the image-source counterpart to RawTexture2DArray.update, which only accepts raw bytes.\r\n * @param texture defines the 2D array texture to upload into\r\n * @param source defines the image source to upload\r\n * @param layer defines the array layer to upload into\r\n * @param options defines optional upload settings (invertY, premultiplyAlpha)\r\n */\r\nexport function UploadImageToTexture2DArrayLayer(texture: RawTexture2DArray, source: ImageSource, layer: number, options?: IUploadImageToTexture2DArrayLayerOptions): void {\r\n const internalTexture = texture.getInternalTexture();\r\n if (!internalTexture) {\r\n throw new Error(\"Cannot upload to a 2D array texture that has no internal texture.\");\r\n }\r\n\r\n if (!Number.isInteger(layer) || layer < 0 || layer >= texture.depth) {\r\n throw new Error(`Layer ${layer} is out of range for a 2D array texture with ${texture.depth} layers.`);\r\n }\r\n\r\n const scene = texture.getScene();\r\n if (!scene) {\r\n throw new Error(\"Cannot upload to a 2D array texture that is not attached to a scene.\");\r\n }\r\n\r\n const engine = scene.getEngine();\r\n // updateTextureArrayLayerFromImageSource is an opt-in engine extension. When the consumer never\r\n // imported it, the augmented method is missing, so fail early with the standard side-effect import\r\n // message (matching the engine.rawTexture family) instead of a generic \"is not a function\" error.\r\n if (!_IsSideEffectImplemented(engine.updateTextureArrayLayerFromImageSource)) {\r\n throw _WarnImport(\"engine.texture2DArrayImageSource\");\r\n }\r\n\r\n engine.updateTextureArrayLayerFromImageSource(internalTexture, source, layer, options?.invertY ?? false, options?.premultiplyAlpha ?? false);\r\n}\r\n\r\n/**\r\n * Fetches an image from a url, decodes it and uploads it into a single layer of a 2D array texture.\r\n * @param texture defines the 2D array texture to upload into\r\n * @param url defines the url of the image to load\r\n * @param layer defines the array layer to upload into\r\n * @param options defines optional upload settings (invertY, premultiplyAlpha)\r\n * @returns a promise resolved once the layer has been uploaded\r\n */\r\nexport async function LoadImageToTexture2DArrayLayerAsync(\r\n texture: RawTexture2DArray,\r\n url: string,\r\n layer: number,\r\n options?: IUploadImageToTexture2DArrayLayerOptions\r\n): Promise<void> {\r\n const response = await fetch(url);\r\n if (!response.ok) {\r\n throw new Error(`Failed to fetch image \"${url}\": ${response.status} ${response.statusText}`);\r\n }\r\n const blob = await response.blob();\r\n const bitmap = await createImageBitmap(blob);\r\n try {\r\n UploadImageToTexture2DArrayLayer(texture, bitmap, layer, options);\r\n } finally {\r\n bitmap.close();\r\n }\r\n}\r\n\r\n/**\r\n * Creates a 2D array texture and fills each layer from a list of image urls.\r\n * All images must share the same dimensions.\r\n * @param scene defines the hosting scene\r\n * @param urls defines the url of the image for each layer (at least one)\r\n * @param options defines optional creation and upload settings\r\n * @returns a promise resolved with the created RawTexture2DArray\r\n */\r\nexport async function CreateTexture2DArrayFromImageUrlsAsync(\r\n scene: Scene,\r\n urls: readonly [string, ...string[]],\r\n options?: ICreateTexture2DArrayFromImageUrlsOptions\r\n): Promise<RawTexture2DArray> {\r\n // allSettled (not all): a rejected fetch/decode must not leak the layers that\r\n // already decoded. Promise.all rejects on the first failure and never enters the\r\n // try/finally below, orphaning every ImageBitmap that resolved. Close the\r\n // fulfilled ones here, then rethrow the original failure.\r\n const results = await Promise.allSettled(\r\n urls.map(async (url) => {\r\n const response = await fetch(url);\r\n if (!response.ok) {\r\n throw new Error(`Failed to fetch image \"${url}\": ${response.status} ${response.statusText}`);\r\n }\r\n return await createImageBitmap(await response.blob(), options?.imageBitmapOptions);\r\n })\r\n );\r\n\r\n const firstRejection = results.find((result): result is PromiseRejectedResult => result.status === \"rejected\");\r\n if (firstRejection) {\r\n for (const result of results) {\r\n if (result.status === \"fulfilled\") {\r\n result.value.close();\r\n }\r\n }\r\n throw firstRejection.reason;\r\n }\r\n\r\n const bitmaps = results.filter((result): result is PromiseFulfilledResult<ImageBitmap> => result.status === \"fulfilled\").map((result) => result.value) as [\r\n ImageBitmap,\r\n ...ImageBitmap[],\r\n ];\r\n\r\n try {\r\n const width = bitmaps[0].width;\r\n const height = bitmaps[0].height;\r\n\r\n for (let index = 1; index < bitmaps.length; index++) {\r\n const bitmap = bitmaps[index];\r\n if (bitmap.width !== width || bitmap.height !== height) {\r\n throw new Error(`All images must share the same dimensions. Image at index ${index} is ${bitmap.width}x${bitmap.height}, expected ${width}x${height}.`);\r\n }\r\n }\r\n\r\n const texture = new RawTexture2DArray(\r\n null,\r\n width,\r\n height,\r\n bitmaps.length,\r\n Constants.TEXTUREFORMAT_RGBA,\r\n scene,\r\n options?.generateMipMaps ?? true,\r\n options?.invertY ?? false,\r\n options?.samplingMode,\r\n options?.textureType\r\n );\r\n\r\n try {\r\n const uploadOptions: IUploadImageToTexture2DArrayLayerOptions = {\r\n invertY: options?.invertY ?? false,\r\n premultiplyAlpha: options?.premultiplyAlpha ?? false,\r\n };\r\n\r\n // updateTextureArrayLayerFromImageSource rebuilds the whole mip chain on each upload when mips\r\n // are enabled. Uploading N layers that way is O(N) redundant mip generation, so suppress it\r\n // per-layer and let only the final upload regenerate the mips once — a single generateMipmap\r\n // covers every layer of the array.\r\n const internalTexture = texture.getInternalTexture();\r\n const generateMipMaps = internalTexture?.generateMipMaps ?? false;\r\n if (internalTexture && generateMipMaps) {\r\n internalTexture.generateMipMaps = false;\r\n }\r\n\r\n for (let layer = 0; layer < bitmaps.length; layer++) {\r\n if (internalTexture && generateMipMaps && layer === bitmaps.length - 1) {\r\n internalTexture.generateMipMaps = true;\r\n }\r\n UploadImageToTexture2DArrayLayer(texture, bitmaps[layer], layer, uploadOptions);\r\n }\r\n\r\n return texture;\r\n } catch (error) {\r\n // A layer upload can throw (out-of-range layer, missing engine extension, backend upload\r\n // failure). Dispose the freshly allocated GPU texture so it does not leak, then rethrow.\r\n texture.dispose();\r\n throw error;\r\n }\r\n } finally {\r\n for (let index = 0; index < bitmaps.length; index++) {\r\n bitmaps[index].close();\r\n }\r\n }\r\n}\r\n"]}
@@ -5,6 +5,7 @@ import { Texture } from "../../Materials/Textures/texture.pure.js";
5
5
  import { PostProcessManager } from "../../PostProcesses/postProcessManager.js";
6
6
 
7
7
  import { FloorPOT, NearestPOT } from "../../Misc/tools.functions.js";
8
+ import { RegisterAbstractEngineTexture } from "../../Engines/AbstractEngine/abstractEngine.texture.pure.js";
8
9
  import { Logger } from "../../Misc/logger.js";
9
10
  import { ObjectRenderer } from "../../Rendering/objectRenderer.js";
10
11
  import { Effect } from "../effect.pure.js";
@@ -999,6 +1000,12 @@ export function RegisterRenderTargetTexture() {
999
1000
  return;
1000
1001
  }
1001
1002
  _Registered = true;
1003
+ // Depth-stencil render targets (shadow maps, RTT depth, etc.) call
1004
+ // AbstractEngine.createDepthStencilTexture, which is only installed by the
1005
+ // abstractEngine.texture registration. This module imports the pure engine
1006
+ // (side-effect free), so pull the registration in here to guarantee the method
1007
+ // exists whenever a render target texture is used.
1008
+ RegisterAbstractEngineTexture();
1002
1009
  /**
1003
1010
  * Sets a depth stencil texture from a render target on the engine to be used in the shader.
1004
1011
  * @param channel Name of the sampler variable.