@onerjs/core 9.0.2 → 9.0.3

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 (473) hide show
  1. package/Buffers/buffer.pure.js +4 -0
  2. package/Buffers/buffer.pure.js.map +1 -1
  3. package/Cameras/camera.pure.d.ts +14 -0
  4. package/Cameras/camera.pure.js +15 -0
  5. package/Cameras/camera.pure.js.map +1 -1
  6. package/Compute/computeShader.pure.d.ts +2 -1
  7. package/Compute/computeShader.pure.js +29 -10
  8. package/Compute/computeShader.pure.js.map +1 -1
  9. package/Culling/ray.core.js +22 -9
  10. package/Culling/ray.core.js.map +1 -1
  11. package/Engines/IDrawContext.d.ts +2 -0
  12. package/Engines/IDrawContext.js.map +1 -1
  13. package/Engines/Native/nativeInterfaces.d.ts +55 -4
  14. package/Engines/Native/nativeInterfaces.js.map +1 -1
  15. package/Engines/Native/nativeRenderTargetWrapper.d.ts +1 -0
  16. package/Engines/Native/nativeRenderTargetWrapper.js +5 -1
  17. package/Engines/Native/nativeRenderTargetWrapper.js.map +1 -1
  18. package/Engines/Processors/shaderCodeInliner.d.ts +2 -0
  19. package/Engines/Processors/shaderCodeInliner.js +251 -6
  20. package/Engines/Processors/shaderCodeInliner.js.map +1 -1
  21. package/Engines/Processors/shaderProcessor.js +10 -1
  22. package/Engines/Processors/shaderProcessor.js.map +1 -1
  23. package/Engines/WebGPU/Extensions/engine.debugging.pure.js +12 -0
  24. package/Engines/WebGPU/Extensions/engine.debugging.pure.js.map +1 -1
  25. package/Engines/WebGPU/Extensions/engine.multiRender.pure.js +0 -1
  26. package/Engines/WebGPU/Extensions/engine.multiRender.pure.js.map +1 -1
  27. package/Engines/WebGPU/Extensions/engine.query.pure.js +5 -0
  28. package/Engines/WebGPU/Extensions/engine.query.pure.js.map +1 -1
  29. package/Engines/WebGPU/webgpuBufferManager.js +7 -0
  30. package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
  31. package/Engines/WebGPU/webgpuCacheTextureView.d.ts +1 -1
  32. package/Engines/WebGPU/webgpuCacheTextureView.js +20 -8
  33. package/Engines/WebGPU/webgpuCacheTextureView.js.map +1 -1
  34. package/Engines/WebGPU/webgpuDrawContext.d.ts +2 -0
  35. package/Engines/WebGPU/webgpuDrawContext.js +6 -0
  36. package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
  37. package/Engines/WebGPU/webgpuQuerySet.d.ts +3 -3
  38. package/Engines/WebGPU/webgpuQuerySet.js +23 -9
  39. package/Engines/WebGPU/webgpuQuerySet.js.map +1 -1
  40. package/Engines/WebGPU/webgpuRenderPassCommandStream.d.ts +156 -0
  41. package/Engines/WebGPU/webgpuRenderPassCommandStream.js +323 -0
  42. package/Engines/WebGPU/webgpuRenderPassCommandStream.js.map +1 -0
  43. package/Engines/WebGPU/webgpuTextureManager.d.ts +1 -1
  44. package/Engines/WebGPU/webgpuTextureManager.js +4 -3
  45. package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
  46. package/Engines/WebGPU/webgpuTimestampQuery.d.ts +3 -1
  47. package/Engines/WebGPU/webgpuTimestampQuery.js +9 -6
  48. package/Engines/WebGPU/webgpuTimestampQuery.js.map +1 -1
  49. package/Engines/abstractEngine.pure.d.ts +2 -0
  50. package/Engines/abstractEngine.pure.js +14 -5
  51. package/Engines/abstractEngine.pure.js.map +1 -1
  52. package/Engines/constants.d.ts +6 -0
  53. package/Engines/constants.js +6 -0
  54. package/Engines/constants.js.map +1 -1
  55. package/Engines/engine.d.ts +198 -24
  56. package/Engines/pure.d.ts +1 -0
  57. package/Engines/pure.js +1 -0
  58. package/Engines/pure.js.map +1 -1
  59. package/Engines/renderCommandBatcher.pure.d.ts +16 -0
  60. package/Engines/renderCommandBatcher.pure.js +24 -0
  61. package/Engines/renderCommandBatcher.pure.js.map +1 -0
  62. package/Engines/thinEngine.functions.js +3 -2
  63. package/Engines/thinEngine.functions.js.map +1 -1
  64. package/Engines/thinEngine.pure.js +18 -2
  65. package/Engines/thinEngine.pure.js.map +1 -1
  66. package/Engines/thinNativeEngine.pure.d.ts +10 -7
  67. package/Engines/thinNativeEngine.pure.js +117 -46
  68. package/Engines/thinNativeEngine.pure.js.map +1 -1
  69. package/Engines/thinWebGPUEngine.d.ts +8 -0
  70. package/Engines/thinWebGPUEngine.js +11 -0
  71. package/Engines/thinWebGPUEngine.js.map +1 -1
  72. package/Engines/webgpuEngine.pure.d.ts +60 -1
  73. package/Engines/webgpuEngine.pure.js +238 -42
  74. package/Engines/webgpuEngine.pure.js.map +1 -1
  75. package/FlowGraph/Blocks/Data/Audio/flowGraphGetSoundVolumeBlock.pure.d.ts +3 -3
  76. package/FlowGraph/Blocks/Data/Audio/flowGraphGetSoundVolumeBlock.pure.js +2 -1
  77. package/FlowGraph/Blocks/Data/Audio/flowGraphGetSoundVolumeBlock.pure.js.map +1 -1
  78. package/FlowGraph/Blocks/Data/Audio/flowGraphIsSoundPlayingBlock.pure.d.ts +3 -3
  79. package/FlowGraph/Blocks/Data/Audio/flowGraphIsSoundPlayingBlock.pure.js +2 -1
  80. package/FlowGraph/Blocks/Data/Audio/flowGraphIsSoundPlayingBlock.pure.js.map +1 -1
  81. package/FlowGraph/Blocks/Event/flowGraphMeshIntersectionEventBlock.d.ts +5 -0
  82. package/FlowGraph/Blocks/Event/flowGraphMeshIntersectionEventBlock.js +8 -0
  83. package/FlowGraph/Blocks/Event/flowGraphMeshIntersectionEventBlock.js.map +1 -0
  84. package/FlowGraph/Blocks/Event/flowGraphMeshIntersectionEventBlock.pure.d.ts +77 -0
  85. package/FlowGraph/Blocks/Event/flowGraphMeshIntersectionEventBlock.pure.js +141 -0
  86. package/FlowGraph/Blocks/Event/flowGraphMeshIntersectionEventBlock.pure.js.map +1 -0
  87. package/FlowGraph/Blocks/Event/flowGraphSoundEndedEventBlock.pure.d.ts +5 -3
  88. package/FlowGraph/Blocks/Event/flowGraphSoundEndedEventBlock.pure.js +38 -7
  89. package/FlowGraph/Blocks/Event/flowGraphSoundEndedEventBlock.pure.js.map +1 -1
  90. package/FlowGraph/Blocks/Event/index.d.ts +1 -0
  91. package/FlowGraph/Blocks/Event/index.js +1 -0
  92. package/FlowGraph/Blocks/Event/index.js.map +1 -1
  93. package/FlowGraph/Blocks/Event/pure.d.ts +1 -0
  94. package/FlowGraph/Blocks/Event/pure.js +1 -0
  95. package/FlowGraph/Blocks/Event/pure.js.map +1 -1
  96. package/FlowGraph/Blocks/Execution/Audio/flowGraphPauseSoundBlock.pure.d.ts +3 -3
  97. package/FlowGraph/Blocks/Execution/Audio/flowGraphPauseSoundBlock.pure.js +2 -1
  98. package/FlowGraph/Blocks/Execution/Audio/flowGraphPauseSoundBlock.pure.js.map +1 -1
  99. package/FlowGraph/Blocks/Execution/Audio/flowGraphPlaySoundBlock.pure.d.ts +3 -3
  100. package/FlowGraph/Blocks/Execution/Audio/flowGraphPlaySoundBlock.pure.js +2 -1
  101. package/FlowGraph/Blocks/Execution/Audio/flowGraphPlaySoundBlock.pure.js.map +1 -1
  102. package/FlowGraph/Blocks/Execution/Audio/flowGraphSetSoundVolumeBlock.pure.d.ts +3 -3
  103. package/FlowGraph/Blocks/Execution/Audio/flowGraphSetSoundVolumeBlock.pure.js +2 -1
  104. package/FlowGraph/Blocks/Execution/Audio/flowGraphSetSoundVolumeBlock.pure.js.map +1 -1
  105. package/FlowGraph/Blocks/Execution/Audio/flowGraphStopSoundBlock.pure.d.ts +3 -3
  106. package/FlowGraph/Blocks/Execution/Audio/flowGraphStopSoundBlock.pure.js +2 -1
  107. package/FlowGraph/Blocks/Execution/Audio/flowGraphStopSoundBlock.pure.js.map +1 -1
  108. package/FlowGraph/Blocks/allBlocks.pure.js +2 -0
  109. package/FlowGraph/Blocks/allBlocks.pure.js.map +1 -1
  110. package/FlowGraph/Blocks/flowGraphBlockFactory.js +2 -0
  111. package/FlowGraph/Blocks/flowGraphBlockFactory.js.map +1 -1
  112. package/FlowGraph/Blocks/flowGraphBlockNames.d.ts +1 -0
  113. package/FlowGraph/Blocks/flowGraphBlockNames.js +1 -0
  114. package/FlowGraph/Blocks/flowGraphBlockNames.js.map +1 -1
  115. package/FlowGraph/flowGraph.d.ts +12 -1
  116. package/FlowGraph/flowGraph.js +38 -0
  117. package/FlowGraph/flowGraph.js.map +1 -1
  118. package/FlowGraph/flowGraphCoordinator.d.ts +44 -0
  119. package/FlowGraph/flowGraphCoordinator.js +141 -0
  120. package/FlowGraph/flowGraphCoordinator.js.map +1 -1
  121. package/FlowGraph/flowGraphDataConnection.pure.js +41 -14
  122. package/FlowGraph/flowGraphDataConnection.pure.js.map +1 -1
  123. package/FlowGraph/flowGraphParser.js +105 -5
  124. package/FlowGraph/flowGraphParser.js.map +1 -1
  125. package/FlowGraph/flowGraphSoundAssets.d.ts +40 -0
  126. package/FlowGraph/flowGraphSoundAssets.js +33 -0
  127. package/FlowGraph/flowGraphSoundAssets.js.map +1 -0
  128. package/FlowGraph/index.d.ts +1 -0
  129. package/FlowGraph/index.js +1 -0
  130. package/FlowGraph/index.js.map +1 -1
  131. package/FlowGraph/pure.d.ts +1 -0
  132. package/FlowGraph/pure.js +1 -0
  133. package/FlowGraph/pure.js.map +1 -1
  134. package/FlowGraph/serialization.d.ts +8 -0
  135. package/FlowGraph/serialization.js +31 -12
  136. package/FlowGraph/serialization.js.map +1 -1
  137. package/FlowGraph/typeDefinitions.d.ts +25 -0
  138. package/FlowGraph/typeDefinitions.js.map +1 -1
  139. package/FrameGraph/Tasks/PostProcesses/taaTask.js +2 -0
  140. package/FrameGraph/Tasks/PostProcesses/taaTask.js.map +1 -1
  141. package/Instrumentation/engineInstrumentation.d.ts +1 -0
  142. package/Instrumentation/engineInstrumentation.js +25 -6
  143. package/Instrumentation/engineInstrumentation.js.map +1 -1
  144. package/Lights/Clustered/clusteredLightContainer.pure.js +2 -0
  145. package/Lights/Clustered/clusteredLightContainer.pure.js.map +1 -1
  146. package/Lights/Shadows/cascadedShadowGenerator.pure.d.ts +36 -1
  147. package/Lights/Shadows/cascadedShadowGenerator.pure.js +202 -27
  148. package/Lights/Shadows/cascadedShadowGenerator.pure.js.map +1 -1
  149. package/Lights/directionalLight.pure.d.ts +24 -10
  150. package/Lights/directionalLight.pure.js +29 -11
  151. package/Lights/directionalLight.pure.js.map +1 -1
  152. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js +4 -4
  153. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js.map +1 -1
  154. package/Materials/Node/Blocks/Dual/lightBlock.pure.js +1 -1
  155. package/Materials/Node/Blocks/Dual/lightBlock.pure.js.map +1 -1
  156. package/Materials/Node/Blocks/Input/inputBlock.pure.js +4 -0
  157. package/Materials/Node/Blocks/Input/inputBlock.pure.js.map +1 -1
  158. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.pure.d.ts +9 -0
  159. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.pure.js +23 -3
  160. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.pure.js.map +1 -1
  161. package/Materials/PBR/openpbrMaterial.pure.js +1 -1
  162. package/Materials/PBR/openpbrMaterial.pure.js.map +1 -1
  163. package/Materials/PBR/pbrBaseMaterial.pure.d.ts +9 -0
  164. package/Materials/PBR/pbrBaseMaterial.pure.js +60 -1
  165. package/Materials/PBR/pbrBaseMaterial.pure.js.map +1 -1
  166. package/Materials/PBR/pbrBaseSimpleMaterial.d.ts +11 -0
  167. package/Materials/PBR/pbrBaseSimpleMaterial.js +21 -2
  168. package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
  169. package/Materials/PBR/pbrMaterial.pure.d.ts +12 -0
  170. package/Materials/PBR/pbrMaterial.pure.js +23 -3
  171. package/Materials/PBR/pbrMaterial.pure.js.map +1 -1
  172. package/Materials/Textures/Filtering/hdrIrradianceFiltering.d.ts +1 -0
  173. package/Materials/Textures/Filtering/hdrIrradianceFiltering.js +10 -0
  174. package/Materials/Textures/Filtering/hdrIrradianceFiltering.js.map +1 -1
  175. package/Materials/Textures/HTML/htmlInCanvasPolyfill.d.ts +5 -0
  176. package/Materials/Textures/HTML/htmlInCanvasPolyfill.js +7 -0
  177. package/Materials/Textures/HTML/htmlInCanvasPolyfill.js.map +1 -1
  178. package/Materials/Textures/HTML/htmlInteractionManager.d.ts +9 -3
  179. package/Materials/Textures/HTML/htmlInteractionManager.js +64 -5
  180. package/Materials/Textures/HTML/htmlInteractionManager.js.map +1 -1
  181. package/Materials/Textures/HTML/htmlTexture.d.ts +11 -11
  182. package/Materials/Textures/HTML/htmlTexture.js +106 -65
  183. package/Materials/Textures/HTML/htmlTexture.js.map +1 -1
  184. package/Materials/Textures/Loaders/internalTextureLoader.d.ts +2 -1
  185. package/Materials/Textures/Loaders/internalTextureLoader.js.map +1 -1
  186. package/Materials/Textures/Loaders/ktxTextureLoader.d.ts +2 -1
  187. package/Materials/Textures/Loaders/ktxTextureLoader.js +4 -50
  188. package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
  189. package/Materials/Textures/Procedurals/proceduralTexture.pure.js +10 -0
  190. package/Materials/Textures/Procedurals/proceduralTexture.pure.js.map +1 -1
  191. package/Materials/Textures/dynamicTexture.pure.js +6 -0
  192. package/Materials/Textures/dynamicTexture.pure.js.map +1 -1
  193. package/Materials/Textures/ktx2encoderTypes.d.ts +51 -0
  194. package/Materials/Textures/ktx2encoderTypes.js +2 -0
  195. package/Materials/Textures/ktx2encoderTypes.js.map +1 -0
  196. package/Materials/Textures/renderTargetTexture.pure.js +10 -2
  197. package/Materials/Textures/renderTargetTexture.pure.js.map +1 -1
  198. package/Materials/Textures/textureMerger.d.ts +11 -0
  199. package/Materials/Textures/textureMerger.js +34 -19
  200. package/Materials/Textures/textureMerger.js.map +1 -1
  201. package/Materials/Textures/textureProcessor.d.ts +145 -0
  202. package/Materials/Textures/textureProcessor.js +445 -45
  203. package/Materials/Textures/textureProcessor.js.map +1 -1
  204. package/Materials/Textures/textureSampling.functions.d.ts +41 -0
  205. package/Materials/Textures/textureSampling.functions.js +82 -0
  206. package/Materials/Textures/textureSampling.functions.js.map +1 -0
  207. package/Materials/drawWrapper.d.ts +8 -0
  208. package/Materials/drawWrapper.js +19 -0
  209. package/Materials/drawWrapper.js.map +1 -1
  210. package/Materials/effect.pure.d.ts +6 -0
  211. package/Materials/effect.pure.js +28 -6
  212. package/Materials/effect.pure.js.map +1 -1
  213. package/Materials/effect.webgl.functions.pure.js +1 -1
  214. package/Materials/effect.webgl.functions.pure.js.map +1 -1
  215. package/Materials/material.pure.d.ts +5 -0
  216. package/Materials/material.pure.js +9 -2
  217. package/Materials/material.pure.js.map +1 -1
  218. package/Materials/materialFlags.d.ts +6 -0
  219. package/Materials/materialFlags.js +14 -0
  220. package/Materials/materialFlags.js.map +1 -1
  221. package/Materials/materialHelper.functions.d.ts +2 -1
  222. package/Materials/materialHelper.functions.js +36 -2
  223. package/Materials/materialHelper.functions.js.map +1 -1
  224. package/Materials/materialHelper.geometryrendering.js +19 -16
  225. package/Materials/materialHelper.geometryrendering.js.map +1 -1
  226. package/Materials/materialPluginManager.pure.js +12 -8
  227. package/Materials/materialPluginManager.pure.js.map +1 -1
  228. package/Materials/prePassConfiguration.js +19 -16
  229. package/Materials/prePassConfiguration.js.map +1 -1
  230. package/Materials/shaderMaterial.pure.js +19 -6
  231. package/Materials/shaderMaterial.pure.js.map +1 -1
  232. package/Materials/shadowDepthWrapper.d.ts +6 -0
  233. package/Materials/shadowDepthWrapper.js +17 -0
  234. package/Materials/shadowDepthWrapper.js.map +1 -1
  235. package/Meshes/Compression/dracoCodec.d.ts +14 -0
  236. package/Meshes/Compression/dracoCodec.js +22 -0
  237. package/Meshes/Compression/dracoCodec.js.map +1 -1
  238. package/Meshes/Compression/dracoDecoder.d.ts +1 -0
  239. package/Meshes/Compression/dracoDecoder.js +27 -0
  240. package/Meshes/Compression/dracoDecoder.js.map +1 -1
  241. package/Meshes/Compression/dracoEncoder.d.ts +1 -0
  242. package/Meshes/Compression/dracoEncoder.js +8 -0
  243. package/Meshes/Compression/dracoEncoder.js.map +1 -1
  244. package/Meshes/Compression/meshoptCompression.d.ts +1 -0
  245. package/Meshes/Compression/meshoptCompression.js +9 -0
  246. package/Meshes/Compression/meshoptCompression.js.map +1 -1
  247. package/Meshes/GaussianSplatting/gaussianSplattingGpuSorter.d.ts +415 -0
  248. package/Meshes/GaussianSplatting/gaussianSplattingGpuSorter.js +912 -0
  249. package/Meshes/GaussianSplatting/gaussianSplattingGpuSorter.js.map +1 -0
  250. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.d.ts +3 -0
  251. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js +40 -9
  252. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js.map +1 -1
  253. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.d.ts +112 -8
  254. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +696 -74
  255. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
  256. package/Meshes/abstractMesh.pure.js +12 -4
  257. package/Meshes/abstractMesh.pure.js.map +1 -1
  258. package/Meshes/geometry.d.ts +5 -0
  259. package/Meshes/geometry.js +25 -0
  260. package/Meshes/geometry.js.map +1 -1
  261. package/Meshes/index.d.ts +1 -0
  262. package/Meshes/index.js +1 -0
  263. package/Meshes/index.js.map +1 -1
  264. package/Meshes/mesh.pure.d.ts +7 -0
  265. package/Meshes/mesh.pure.js +18 -13
  266. package/Meshes/mesh.pure.js.map +1 -1
  267. package/Meshes/pure.d.ts +1 -0
  268. package/Meshes/pure.js +1 -0
  269. package/Meshes/pure.js.map +1 -1
  270. package/Meshes/subMesh.pure.d.ts +3 -0
  271. package/Meshes/subMesh.pure.js +26 -0
  272. package/Meshes/subMesh.pure.js.map +1 -1
  273. package/Meshes/thinInstanceMesh.pure.js +5 -3
  274. package/Meshes/thinInstanceMesh.pure.js.map +1 -1
  275. package/Misc/index.d.ts +1 -0
  276. package/Misc/index.js +1 -0
  277. package/Misc/index.js.map +1 -1
  278. package/Misc/khronosTextureContainer2.d.ts +3 -2
  279. package/Misc/khronosTextureContainer2.js +24 -6
  280. package/Misc/khronosTextureContainer2.js.map +1 -1
  281. package/Misc/khronosTextureContainer2Encoder.d.ts +166 -0
  282. package/Misc/khronosTextureContainer2Encoder.js +556 -0
  283. package/Misc/khronosTextureContainer2Encoder.js.map +1 -0
  284. package/Misc/khronosTextureContainer2EncoderWorker.d.ts +61 -0
  285. package/Misc/khronosTextureContainer2EncoderWorker.js +55 -0
  286. package/Misc/khronosTextureContainer2EncoderWorker.js.map +1 -0
  287. package/Misc/pure.d.ts +1 -0
  288. package/Misc/pure.js +1 -0
  289. package/Misc/pure.js.map +1 -1
  290. package/Misc/textureFormat.functions.d.ts +6 -0
  291. package/Misc/textureFormat.functions.js +54 -0
  292. package/Misc/textureFormat.functions.js.map +1 -0
  293. package/Misc/textureTools.d.ts +6 -2
  294. package/Misc/textureTools.js +100 -42
  295. package/Misc/textureTools.js.map +1 -1
  296. package/Misc/tools.pure.js +1 -1
  297. package/Misc/tools.pure.js.map +1 -1
  298. package/Particles/Node/Blocks/systemBlock.pure.d.ts +1 -1
  299. package/Particles/Node/Blocks/systemBlock.pure.js +6 -3
  300. package/Particles/Node/Blocks/systemBlock.pure.js.map +1 -1
  301. package/Particles/computeShaderParticleSystem.pure.js +5 -0
  302. package/Particles/computeShaderParticleSystem.pure.js.map +1 -1
  303. package/Particles/gpuParticleSystem.pure.d.ts +2 -0
  304. package/Particles/gpuParticleSystem.pure.js +25 -1
  305. package/Particles/gpuParticleSystem.pure.js.map +1 -1
  306. package/Particles/solidParticle.d.ts +5 -0
  307. package/Particles/solidParticle.js +5 -0
  308. package/Particles/solidParticle.js.map +1 -1
  309. package/Particles/solidParticleSystem.d.ts +10 -0
  310. package/Particles/solidParticleSystem.js +72 -13
  311. package/Particles/solidParticleSystem.js.map +1 -1
  312. package/Particles/thinParticleSystem.pure.js +4 -0
  313. package/Particles/thinParticleSystem.pure.js.map +1 -1
  314. package/PostProcesses/RenderPipeline/Pipelines/taaMaterialManager.pure.d.ts +27 -6
  315. package/PostProcesses/RenderPipeline/Pipelines/taaMaterialManager.pure.js +60 -5
  316. package/PostProcesses/RenderPipeline/Pipelines/taaMaterialManager.pure.js.map +1 -1
  317. package/PostProcesses/thinTAAPostProcess.d.ts +1 -0
  318. package/PostProcesses/thinTAAPostProcess.js +17 -1
  319. package/PostProcesses/thinTAAPostProcess.js.map +1 -1
  320. package/PostProcesses/volumetricLightScatteringPostProcess.pure.d.ts +2 -1
  321. package/PostProcesses/volumetricLightScatteringPostProcess.pure.js +6 -5
  322. package/PostProcesses/volumetricLightScatteringPostProcess.pure.js.map +1 -1
  323. package/Rendering/boundingBoxRenderer.pure.js +2 -3
  324. package/Rendering/boundingBoxRenderer.pure.js.map +1 -1
  325. package/Rendering/geometryBufferRenderer.pure.js +8 -2
  326. package/Rendering/geometryBufferRenderer.pure.js.map +1 -1
  327. package/Rendering/objectRenderer.d.ts +1 -0
  328. package/Rendering/objectRenderer.js +14 -0
  329. package/Rendering/objectRenderer.js.map +1 -1
  330. package/Shaders/ShadersInclude/bumpFragmentMainFunctions.js +2 -2
  331. package/Shaders/ShadersInclude/bumpFragmentMainFunctions.js.map +1 -1
  332. package/Shaders/ShadersInclude/bumpVertex.js +1 -1
  333. package/Shaders/ShadersInclude/bumpVertex.js.map +1 -1
  334. package/Shaders/ShadersInclude/bumpVertexDeclaration.js +1 -1
  335. package/Shaders/ShadersInclude/bumpVertexDeclaration.js.map +1 -1
  336. package/Shaders/ShadersInclude/hdrFilteringFunctions.js +5 -1
  337. package/Shaders/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
  338. package/Shaders/ShadersInclude/helperFunctions.js +2 -2
  339. package/Shaders/ShadersInclude/helperFunctions.js.map +1 -1
  340. package/Shaders/ShadersInclude/openpbrBackgroundTransmission.js +1 -1
  341. package/Shaders/ShadersInclude/openpbrBackgroundTransmission.js.map +1 -1
  342. package/Shaders/ShadersInclude/openpbrVertexDeclaration.js +6 -0
  343. package/Shaders/ShadersInclude/openpbrVertexDeclaration.js.map +1 -1
  344. package/Shaders/ShadersInclude/pbrBlockFinalLitComponents.js +11 -1
  345. package/Shaders/ShadersInclude/pbrBlockFinalLitComponents.js.map +1 -1
  346. package/Shaders/ShadersInclude/pbrBlockNormalFinal.js +9 -0
  347. package/Shaders/ShadersInclude/pbrBlockNormalFinal.js.map +1 -1
  348. package/Shaders/ShadersInclude/pbrBlockReflectance.js +1 -1
  349. package/Shaders/ShadersInclude/pbrBlockReflectance.js.map +1 -1
  350. package/Shaders/ShadersInclude/pbrClusteredLightingFunctions.js +1 -1
  351. package/Shaders/ShadersInclude/pbrClusteredLightingFunctions.js.map +1 -1
  352. package/Shaders/ShadersInclude/pbrFragmentDeclaration.js +7 -1
  353. package/Shaders/ShadersInclude/pbrFragmentDeclaration.js.map +1 -1
  354. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js +1 -0
  355. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
  356. package/Shaders/ShadersInclude/pbrIBLFunctions.js +12 -0
  357. package/Shaders/ShadersInclude/pbrIBLFunctions.js.map +1 -1
  358. package/Shaders/ShadersInclude/pbrUboDeclaration.js +1 -1
  359. package/Shaders/ShadersInclude/pbrUboDeclaration.js.map +1 -1
  360. package/Shaders/ShadersInclude/pbrVertexDeclaration.js +3 -0
  361. package/Shaders/ShadersInclude/pbrVertexDeclaration.js.map +1 -1
  362. package/Shaders/geometry.vertex.js +6 -6
  363. package/Shaders/geometry.vertex.js.map +1 -1
  364. package/Shaders/gpuUpdateParticles.vertex.js +1 -1
  365. package/Shaders/gpuUpdateParticles.vertex.js.map +1 -1
  366. package/Shaders/lod.fragment.js +15 -2
  367. package/Shaders/lod.fragment.js.map +1 -1
  368. package/Shaders/lod3D.fragment.js +15 -2
  369. package/Shaders/lod3D.fragment.js.map +1 -1
  370. package/Shaders/lodCube.fragment.js +15 -2
  371. package/Shaders/lodCube.fragment.js.map +1 -1
  372. package/Shaders/openpbr.vertex.js +2 -0
  373. package/Shaders/openpbr.vertex.js.map +1 -1
  374. package/Shaders/pbr.fragment.js +12 -1
  375. package/Shaders/pbr.fragment.js.map +1 -1
  376. package/Shaders/pbr.vertex.js +2 -0
  377. package/Shaders/pbr.vertex.js.map +1 -1
  378. package/Shaders/textureMerger.fragment.js +28 -0
  379. package/Shaders/textureMerger.fragment.js.map +1 -1
  380. package/Shaders/textureProcessor.fragment.js +26 -4
  381. package/Shaders/textureProcessor.fragment.js.map +1 -1
  382. package/Shaders/volumetricLightScattering.fragment.js +1 -1
  383. package/Shaders/volumetricLightScattering.fragment.js.map +1 -1
  384. package/ShadersWGSL/ShadersInclude/bumpFragmentMainFunctions.js +2 -2
  385. package/ShadersWGSL/ShadersInclude/bumpFragmentMainFunctions.js.map +1 -1
  386. package/ShadersWGSL/ShadersInclude/bumpVertex.js +1 -1
  387. package/ShadersWGSL/ShadersInclude/bumpVertex.js.map +1 -1
  388. package/ShadersWGSL/ShadersInclude/bumpVertexDeclaration.js +1 -1
  389. package/ShadersWGSL/ShadersInclude/bumpVertexDeclaration.js.map +1 -1
  390. package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js +1 -1
  391. package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
  392. package/ShadersWGSL/ShadersInclude/helperFunctions.js +2 -2
  393. package/ShadersWGSL/ShadersInclude/helperFunctions.js.map +1 -1
  394. package/ShadersWGSL/ShadersInclude/lightFragment.js +44 -2
  395. package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
  396. package/ShadersWGSL/ShadersInclude/lightUboDeclaration.js +17 -3
  397. package/ShadersWGSL/ShadersInclude/lightUboDeclaration.js.map +1 -1
  398. package/ShadersWGSL/ShadersInclude/lightVxUboDeclaration.js +12 -1
  399. package/ShadersWGSL/ShadersInclude/lightVxUboDeclaration.js.map +1 -1
  400. package/ShadersWGSL/ShadersInclude/openpbrBackgroundTransmission.js +1 -1
  401. package/ShadersWGSL/ShadersInclude/openpbrBackgroundTransmission.js.map +1 -1
  402. package/ShadersWGSL/ShadersInclude/pbrBlockFinalLitComponents.js +11 -1
  403. package/ShadersWGSL/ShadersInclude/pbrBlockFinalLitComponents.js.map +1 -1
  404. package/ShadersWGSL/ShadersInclude/pbrBlockNormalFinal.js +9 -0
  405. package/ShadersWGSL/ShadersInclude/pbrBlockNormalFinal.js.map +1 -1
  406. package/ShadersWGSL/ShadersInclude/pbrBlockReflectance.js +1 -1
  407. package/ShadersWGSL/ShadersInclude/pbrBlockReflectance.js.map +1 -1
  408. package/ShadersWGSL/ShadersInclude/pbrClusteredLightingFunctions.js +1 -1
  409. package/ShadersWGSL/ShadersInclude/pbrClusteredLightingFunctions.js.map +1 -1
  410. package/ShadersWGSL/ShadersInclude/pbrDirectLightingSetupFunctions.js +1 -1
  411. package/ShadersWGSL/ShadersInclude/pbrDirectLightingSetupFunctions.js.map +1 -1
  412. package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.js +1 -0
  413. package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
  414. package/ShadersWGSL/ShadersInclude/pbrIBLFunctions.js +8 -0
  415. package/ShadersWGSL/ShadersInclude/pbrIBLFunctions.js.map +1 -1
  416. package/ShadersWGSL/ShadersInclude/pbrUboDeclaration.js +1 -1
  417. package/ShadersWGSL/ShadersInclude/pbrUboDeclaration.js.map +1 -1
  418. package/ShadersWGSL/ShadersInclude/prePassVertex.js +2 -2
  419. package/ShadersWGSL/ShadersInclude/prePassVertex.js.map +1 -1
  420. package/ShadersWGSL/ShadersInclude/prePassVertexDeclaration.js +1 -1
  421. package/ShadersWGSL/ShadersInclude/prePassVertexDeclaration.js.map +1 -1
  422. package/ShadersWGSL/ShadersInclude/sceneUboDeclaration.js +3 -1
  423. package/ShadersWGSL/ShadersInclude/sceneUboDeclaration.js.map +1 -1
  424. package/ShadersWGSL/ShadersInclude/shadowsVertex.js +16 -0
  425. package/ShadersWGSL/ShadersInclude/shadowsVertex.js.map +1 -1
  426. package/ShadersWGSL/default.fragment.js +4 -4
  427. package/ShadersWGSL/default.fragment.js.map +1 -1
  428. package/ShadersWGSL/default.vertex.js +1 -1
  429. package/ShadersWGSL/default.vertex.js.map +1 -1
  430. package/ShadersWGSL/gaussianSplatting.vertex.js +3 -3
  431. package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
  432. package/ShadersWGSL/gpuUpdateParticles.compute.js +1 -1
  433. package/ShadersWGSL/gpuUpdateParticles.compute.js.map +1 -1
  434. package/ShadersWGSL/gsSortCount.compute.d.ts +5 -0
  435. package/ShadersWGSL/gsSortCount.compute.js +19 -0
  436. package/ShadersWGSL/gsSortCount.compute.js.map +1 -0
  437. package/ShadersWGSL/gsSortKeys.compute.d.ts +5 -0
  438. package/ShadersWGSL/gsSortKeys.compute.js +49 -0
  439. package/ShadersWGSL/gsSortKeys.compute.js.map +1 -0
  440. package/ShadersWGSL/gsSortOutput.compute.d.ts +5 -0
  441. package/ShadersWGSL/gsSortOutput.compute.js +28 -0
  442. package/ShadersWGSL/gsSortOutput.compute.js.map +1 -0
  443. package/ShadersWGSL/gsSortScanLocal.compute.d.ts +5 -0
  444. package/ShadersWGSL/gsSortScanLocal.compute.js +23 -0
  445. package/ShadersWGSL/gsSortScanLocal.compute.js.map +1 -0
  446. package/ShadersWGSL/gsSortScanSums.compute.d.ts +5 -0
  447. package/ShadersWGSL/gsSortScanSums.compute.js +19 -0
  448. package/ShadersWGSL/gsSortScanSums.compute.js.map +1 -0
  449. package/ShadersWGSL/gsSortScatter.compute.d.ts +5 -0
  450. package/ShadersWGSL/gsSortScatter.compute.js +33 -0
  451. package/ShadersWGSL/gsSortScatter.compute.js.map +1 -0
  452. package/ShadersWGSL/lod.fragment.js +14 -2
  453. package/ShadersWGSL/lod.fragment.js.map +1 -1
  454. package/ShadersWGSL/lod3D.fragment.js +14 -2
  455. package/ShadersWGSL/lod3D.fragment.js.map +1 -1
  456. package/ShadersWGSL/lodCube.fragment.js +14 -2
  457. package/ShadersWGSL/lodCube.fragment.js.map +1 -1
  458. package/ShadersWGSL/openpbr.vertex.js +3 -1
  459. package/ShadersWGSL/openpbr.vertex.js.map +1 -1
  460. package/ShadersWGSL/pbr.fragment.js +11 -0
  461. package/ShadersWGSL/pbr.fragment.js.map +1 -1
  462. package/ShadersWGSL/pbr.vertex.js +3 -1
  463. package/ShadersWGSL/pbr.vertex.js.map +1 -1
  464. package/ShadersWGSL/textureMerger.fragment.js +40 -4
  465. package/ShadersWGSL/textureMerger.fragment.js.map +1 -1
  466. package/ShadersWGSL/textureProcessor.fragment.js +26 -4
  467. package/ShadersWGSL/textureProcessor.fragment.js.map +1 -1
  468. package/Sprites/spriteRenderer.js +15 -5
  469. package/Sprites/spriteRenderer.js.map +1 -1
  470. package/package.json +1 -1
  471. package/scene.pure.d.ts +23 -1
  472. package/scene.pure.js +83 -1
  473. package/scene.pure.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"thinInstanceMesh.pure.js","sourceRoot":"","sources":["../../../../dev/core/src/Meshes/thinInstanceMesh.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { type Nullable, type DeepImmutableObject, type FloatArray } from \"../types\";\r\nimport { type Vector2, Vector3, TmpVectors, Matrix } from \"../Maths/math.vector.pure\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { BoundingInfo } from \"core/Culling/boundingInfo\";\r\nimport { Mesh } from \"../Meshes/mesh.pure\";\r\nimport { VertexBuffer, Buffer } from \"../Buffers/buffer.pure\";\r\n\r\nconst BakedVertexAnimationSettingsInstancedKind = \"bakedVertexAnimationSettingsInstanced\";\r\n\r\nfunction HasCpuReadableBakedVertexAnimationData(mesh: Mesh): boolean {\r\n const textureData = mesh.bakedVertexAnimationManager?.texture?.getInternalTexture()?._bufferView;\r\n\r\n return textureData instanceof Float32Array || textureData instanceof Uint16Array;\r\n}\r\n\r\nfunction ExtractMinAndMaxToRef(data: FloatArray, count: number, minimum: Vector3, maximum: Vector3): void {\r\n minimum.setAll(Number.POSITIVE_INFINITY);\r\n maximum.setAll(Number.NEGATIVE_INFINITY);\r\n\r\n for (let index = 0; index < count * 3; index += 3) {\r\n const x = data[index];\r\n const y = data[index + 1];\r\n const z = data[index + 2];\r\n\r\n if (x < minimum.x) {\r\n minimum.x = x;\r\n }\r\n if (y < minimum.y) {\r\n minimum.y = y;\r\n }\r\n if (z < minimum.z) {\r\n minimum.z = z;\r\n }\r\n if (x > maximum.x) {\r\n maximum.x = x;\r\n }\r\n if (y > maximum.y) {\r\n maximum.y = y;\r\n }\r\n if (z > maximum.z) {\r\n maximum.z = z;\r\n }\r\n }\r\n}\r\n\r\nfunction ApplyBoundingBiasToMinAndMax(minimum: Vector3, maximum: Vector3, bias: Nullable<Vector2>): void {\r\n if (!bias) {\r\n return;\r\n }\r\n\r\n minimum.x -= minimum.x * bias.x + bias.y;\r\n minimum.y -= minimum.y * bias.x + bias.y;\r\n minimum.z -= minimum.z * bias.x + bias.y;\r\n maximum.x += maximum.x * bias.x + bias.y;\r\n maximum.y += maximum.y * bias.x + bias.y;\r\n maximum.z += maximum.z * bias.x + bias.y;\r\n}\r\n\r\nfunction UpdateTransformedMinAndMaxToRef(minimum: Vector3, maximum: Vector3, matrix: Matrix, globalMinimum: Vector3, globalMaximum: Vector3): void {\r\n const corner = TmpVectors.Vector3[7];\r\n const transformed = TmpVectors.Vector3[8];\r\n\r\n for (let x = 0; x < 2; ++x) {\r\n for (let y = 0; y < 2; ++y) {\r\n for (let z = 0; z < 2; ++z) {\r\n corner.set(x ? maximum.x : minimum.x, y ? maximum.y : minimum.y, z ? maximum.z : minimum.z);\r\n Vector3.TransformCoordinatesToRef(corner, matrix, transformed);\r\n globalMinimum.minimizeInPlace(transformed);\r\n globalMaximum.maximizeInPlace(transformed);\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction UpdateTransformedDataMinAndMaxToRef(data: FloatArray, count: number, matrix: Matrix, globalMinimum: Vector3, globalMaximum: Vector3): void {\r\n const transformed = TmpVectors.Vector3[7];\r\n\r\n for (let index = 0; index < count * 3; index += 3) {\r\n Vector3.TransformCoordinatesFromFloatsToRef(data[index], data[index + 1], data[index + 2], matrix, transformed);\r\n globalMinimum.minimizeInPlace(transformed);\r\n globalMaximum.maximizeInPlace(transformed);\r\n }\r\n}\r\n\r\nfunction UpdateRawBoundingVectors(vectors: Vector3[], rawBoundingInfo: BoundingInfo): void {\r\n vectors.length = 0;\r\n\r\n for (let v = 0; v < rawBoundingInfo.boundingBox.vectors.length; ++v) {\r\n vectors.push(rawBoundingInfo.boundingBox.vectors[v].clone());\r\n }\r\n}\r\n\r\nfunction TryUpdateBakedVertexAnimationThinInstanceBoundingInfo(mesh: Mesh, vectors: Vector3[], applyMorph: boolean): boolean {\r\n const storage = mesh._userThinInstanceBuffersStorage;\r\n const bakedVertexAnimationSettingsData = storage?.data[BakedVertexAnimationSettingsInstancedKind];\r\n const bakedVertexAnimationSettingsStride = storage?.strides[BakedVertexAnimationSettingsInstancedKind];\r\n\r\n if (!bakedVertexAnimationSettingsData || !bakedVertexAnimationSettingsStride || bakedVertexAnimationSettingsStride < 4 || !HasCpuReadableBakedVertexAnimationData(mesh)) {\r\n return false;\r\n }\r\n\r\n const matrixData = mesh._thinInstanceDataStorage.matrixData;\r\n if (!matrixData) {\r\n return false;\r\n }\r\n\r\n const cache = {};\r\n const settings = TmpVectors.Vector4[0];\r\n const rawMinimum = TmpVectors.Vector3[1];\r\n const rawMaximum = TmpVectors.Vector3[2];\r\n const globalMinimum = TmpVectors.Vector3[3];\r\n const globalMaximum = TmpVectors.Vector3[4];\r\n const localMinimum = TmpVectors.Vector3[5];\r\n const localMaximum = TmpVectors.Vector3[6];\r\n const matrix = TmpVectors.Matrix[2];\r\n const bias = mesh.geometry ? mesh.geometry.boundingBias : null;\r\n const vertexCount = mesh.getTotalVertices();\r\n\r\n rawMinimum.setAll(Number.POSITIVE_INFINITY);\r\n rawMaximum.setAll(Number.NEGATIVE_INFINITY);\r\n globalMinimum.setAll(Number.POSITIVE_INFINITY);\r\n globalMaximum.setAll(Number.NEGATIVE_INFINITY);\r\n\r\n for (let index = 0; index < mesh._thinInstanceDataStorage.instancesCount; ++index) {\r\n const settingsOffset = index * bakedVertexAnimationSettingsStride;\r\n settings.set(\r\n bakedVertexAnimationSettingsData[settingsOffset],\r\n bakedVertexAnimationSettingsData[settingsOffset + 1],\r\n bakedVertexAnimationSettingsData[settingsOffset + 2],\r\n bakedVertexAnimationSettingsData[settingsOffset + 3]\r\n );\r\n\r\n const positionData = mesh._getData(\r\n {\r\n applyMorph,\r\n applyBakedVertexAnimation: true,\r\n bakedVertexAnimationSettings: settings,\r\n updatePositionsArray: false,\r\n cache,\r\n },\r\n null,\r\n VertexBuffer.PositionKind\r\n );\r\n\r\n if (!positionData) {\r\n return false;\r\n }\r\n\r\n ExtractMinAndMaxToRef(positionData, vertexCount, localMinimum, localMaximum);\r\n ApplyBoundingBiasToMinAndMax(localMinimum, localMaximum, bias);\r\n rawMinimum.minimizeInPlace(localMinimum);\r\n rawMaximum.maximizeInPlace(localMaximum);\r\n\r\n Matrix.FromArrayToRef(matrixData, index * 16, matrix);\r\n if (bias) {\r\n UpdateTransformedMinAndMaxToRef(localMinimum, localMaximum, matrix, globalMinimum, globalMaximum);\r\n } else {\r\n UpdateTransformedDataMinAndMaxToRef(positionData, vertexCount, matrix, globalMinimum, globalMaximum);\r\n }\r\n }\r\n\r\n if (!isFinite(rawMinimum.x) || !isFinite(globalMinimum.x)) {\r\n return false;\r\n }\r\n\r\n const boundingInfo = mesh.getBoundingInfo();\r\n boundingInfo.reConstruct(globalMinimum, globalMaximum);\r\n mesh.rawBoundingInfo = new BoundingInfo(rawMinimum, rawMaximum);\r\n UpdateRawBoundingVectors(vectors, mesh.rawBoundingInfo);\r\n\r\n mesh._updateBoundingInfo();\r\n\r\n return true;\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for thinInstanceMesh.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterThinInstanceMesh(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n Mesh.prototype.thinInstanceAdd = function (matrix: DeepImmutableObject<Matrix> | Array<DeepImmutableObject<Matrix>>, refresh: boolean = true): number {\r\n if (!this.getScene().getEngine().getCaps().instancedArrays) {\r\n Logger.Error(\"Thin Instances are not supported on this device as Instanced Array extension not supported\");\r\n return -1;\r\n }\r\n\r\n this._thinInstanceUpdateBufferSize(\"matrix\", Array.isArray(matrix) ? matrix.length : 1);\r\n\r\n const index = this._thinInstanceDataStorage.instancesCount;\r\n\r\n if (Array.isArray(matrix)) {\r\n for (let i = 0; i < matrix.length; ++i) {\r\n this.thinInstanceSetMatrixAt(this._thinInstanceDataStorage.instancesCount++, matrix[i], i === matrix.length - 1 && refresh);\r\n }\r\n } else {\r\n this.thinInstanceSetMatrixAt(this._thinInstanceDataStorage.instancesCount++, matrix, refresh);\r\n }\r\n\r\n return index;\r\n };\r\n\r\n Mesh.prototype.thinInstanceAddSelf = function (refresh: boolean = true): number {\r\n return this.thinInstanceAdd(Matrix.IdentityReadOnly, refresh);\r\n };\r\n\r\n Mesh.prototype.thinInstanceRegisterAttribute = function (kind: string, stride: number): void {\r\n // preserve backward compatibility\r\n if (kind === VertexBuffer.ColorKind) {\r\n kind = VertexBuffer.ColorInstanceKind;\r\n }\r\n\r\n this.removeVerticesData(kind);\r\n\r\n this._thinInstanceInitializeUserStorage();\r\n\r\n this._userThinInstanceBuffersStorage.strides[kind] = stride;\r\n this._userThinInstanceBuffersStorage.sizes[kind] = stride * Math.max(32, this._thinInstanceDataStorage.instancesCount); // Initial size\r\n this._userThinInstanceBuffersStorage.data[kind] = new Float32Array(this._userThinInstanceBuffersStorage.sizes[kind]);\r\n this._userThinInstanceBuffersStorage.vertexBuffers[kind] = new VertexBuffer(\r\n this.getEngine(),\r\n this._userThinInstanceBuffersStorage.data[kind],\r\n kind,\r\n true,\r\n false,\r\n stride,\r\n true\r\n );\r\n\r\n this.setVerticesBuffer(this._userThinInstanceBuffersStorage.vertexBuffers[kind]!);\r\n };\r\n\r\n Mesh.prototype.thinInstanceSetMatrixAt = function (index: number, matrix: DeepImmutableObject<Matrix>, refresh: boolean = true): boolean {\r\n if (!this._thinInstanceDataStorage.matrixData || index >= this._thinInstanceDataStorage.instancesCount) {\r\n return false;\r\n }\r\n\r\n const matrixData = this._thinInstanceDataStorage.matrixData;\r\n\r\n matrix.copyToArray(matrixData, index * 16);\r\n\r\n if (this._thinInstanceDataStorage.worldMatrices) {\r\n this._thinInstanceDataStorage.worldMatrices[index] = matrix as Matrix;\r\n }\r\n\r\n if (refresh) {\r\n this.thinInstanceBufferUpdated(\"matrix\");\r\n\r\n if (!this.doNotSyncBoundingInfo) {\r\n this.thinInstanceRefreshBoundingInfo(false);\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n\r\n Mesh.prototype.thinInstanceSetAttributeAt = function (kind: string, index: number, value: Array<number>, refresh: boolean = true): boolean {\r\n // preserve backward compatibility\r\n if (kind === VertexBuffer.ColorKind) {\r\n kind = VertexBuffer.ColorInstanceKind;\r\n }\r\n\r\n if (!this._userThinInstanceBuffersStorage || !this._userThinInstanceBuffersStorage.data[kind] || index >= this._thinInstanceDataStorage.instancesCount) {\r\n return false;\r\n }\r\n\r\n this._thinInstanceUpdateBufferSize(kind, 0); // make sur the buffer for the kind attribute is big enough\r\n\r\n this._userThinInstanceBuffersStorage.data[kind].set(value, index * this._userThinInstanceBuffersStorage.strides[kind]);\r\n\r\n if (refresh) {\r\n this.thinInstanceBufferUpdated(kind);\r\n }\r\n\r\n return true;\r\n };\r\n\r\n Object.defineProperty(Mesh.prototype, \"thinInstanceCount\", {\r\n get: function (this: Mesh) {\r\n return this._thinInstanceDataStorage.instancesCount;\r\n },\r\n set: function (this: Mesh, value: number) {\r\n const matrixData = this._thinInstanceDataStorage.matrixData ?? this.source?._thinInstanceDataStorage.matrixData;\r\n const numMaxInstances = matrixData ? matrixData.length / 16 : 0;\r\n\r\n if (value <= numMaxInstances) {\r\n this._thinInstanceDataStorage.instancesCount = value;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n });\r\n\r\n Mesh.prototype._thinInstanceCreateMatrixBuffer = function (kind: string, buffer: Float32Array, staticBuffer: boolean = true): Buffer {\r\n const matrixBuffer = new Buffer(this.getEngine(), buffer, !staticBuffer, 16, false, true);\r\n\r\n for (let i = 0; i < 4; i++) {\r\n this.setVerticesBuffer(matrixBuffer.createVertexBuffer(kind + i, i * 4, 4));\r\n }\r\n\r\n return matrixBuffer;\r\n };\r\n\r\n Mesh.prototype.thinInstanceSetBuffer = function (kind: string, buffer: Nullable<Float32Array>, stride: number = 0, staticBuffer: boolean = true): void {\r\n stride = stride || 16;\r\n\r\n if (kind === \"matrix\") {\r\n this._thinInstanceDataStorage.matrixBuffer?.dispose();\r\n this._thinInstanceDataStorage.matrixBuffer = null;\r\n this._thinInstanceDataStorage.matrixBufferSize = buffer ? buffer.length : 32 * stride;\r\n this._thinInstanceDataStorage.matrixData = buffer;\r\n this._thinInstanceDataStorage.worldMatrices = null;\r\n\r\n if (buffer !== null) {\r\n this._thinInstanceDataStorage.instancesCount = buffer.length / stride;\r\n this._thinInstanceDataStorage.matrixBuffer = this._thinInstanceCreateMatrixBuffer(\"world\", buffer, staticBuffer);\r\n\r\n if (!this.doNotSyncBoundingInfo) {\r\n this.thinInstanceRefreshBoundingInfo(false);\r\n }\r\n } else {\r\n this._thinInstanceDataStorage.instancesCount = 0;\r\n if (!this.doNotSyncBoundingInfo) {\r\n // mesh has no more thin instances, so need to recompute the bounding box because it's the regular mesh that will now be displayed\r\n this.refreshBoundingInfo();\r\n }\r\n }\r\n } else if (kind === \"previousMatrix\") {\r\n this._thinInstanceDataStorage.previousMatrixBuffer?.dispose();\r\n this._thinInstanceDataStorage.previousMatrixBuffer = null;\r\n this._thinInstanceDataStorage.previousMatrixData = buffer;\r\n if (buffer !== null) {\r\n this._thinInstanceDataStorage.previousMatrixBuffer = this._thinInstanceCreateMatrixBuffer(\"previousWorld\", buffer, staticBuffer);\r\n }\r\n } else if (kind === \"splatIndex\" && buffer) {\r\n this._thinInstanceDataStorage.matrixBuffer?.dispose();\r\n this._thinInstanceInitializeUserStorage();\r\n this._thinInstanceDataStorage.instancesCount = buffer.length / stride;\r\n this._userThinInstanceBuffersStorage.data[kind] = buffer;\r\n this._userThinInstanceBuffersStorage.strides[kind] = stride;\r\n this._userThinInstanceBuffersStorage.sizes[kind] = buffer.length;\r\n const splatInstancesBuffer = new Buffer(this.getEngine(), buffer, true, 16, false, true);\r\n this._thinInstanceDataStorage.matrixBuffer = splatInstancesBuffer;\r\n for (let i = 0; i < 4; i++) {\r\n this.setVerticesBuffer(splatInstancesBuffer.createVertexBuffer(kind + i, i * 4, 4));\r\n }\r\n } else {\r\n // color for instanced mesh is ColorInstanceKind and not ColorKind because of native that needs to do the differenciation\r\n // hot switching kind here to preserve backward compatibility\r\n if (kind === VertexBuffer.ColorKind) {\r\n kind = VertexBuffer.ColorInstanceKind;\r\n }\r\n\r\n if (buffer === null) {\r\n if (this._userThinInstanceBuffersStorage?.data[kind]) {\r\n this.removeVerticesData(kind);\r\n delete this._userThinInstanceBuffersStorage.data[kind];\r\n delete this._userThinInstanceBuffersStorage.strides[kind];\r\n delete this._userThinInstanceBuffersStorage.sizes[kind];\r\n delete this._userThinInstanceBuffersStorage.vertexBuffers[kind];\r\n }\r\n } else {\r\n this._thinInstanceInitializeUserStorage();\r\n\r\n this._userThinInstanceBuffersStorage.data[kind] = buffer;\r\n this._userThinInstanceBuffersStorage.strides[kind] = stride;\r\n this._userThinInstanceBuffersStorage.sizes[kind] = buffer.length;\r\n this._userThinInstanceBuffersStorage.vertexBuffers[kind] = new VertexBuffer(this.getEngine(), buffer, kind, !staticBuffer, false, stride, true);\r\n\r\n this.setVerticesBuffer(this._userThinInstanceBuffersStorage.vertexBuffers[kind]!);\r\n }\r\n }\r\n };\r\n\r\n Mesh.prototype.thinInstanceBufferUpdated = function (kind: string): void {\r\n if (kind === \"matrix\") {\r\n if (this.thinInstanceAllowAutomaticStaticBufferRecreation && this._thinInstanceDataStorage.matrixBuffer && !this._thinInstanceDataStorage.matrixBuffer.isUpdatable()) {\r\n this._thinInstanceRecreateBuffer(kind);\r\n }\r\n this._thinInstanceDataStorage.matrixBuffer?.updateDirectly(this._thinInstanceDataStorage.matrixData!, 0, this._thinInstanceDataStorage.instancesCount);\r\n } else if (kind === \"previousMatrix\") {\r\n if (\r\n this.thinInstanceAllowAutomaticStaticBufferRecreation &&\r\n this._thinInstanceDataStorage.previousMatrixBuffer &&\r\n !this._thinInstanceDataStorage.previousMatrixBuffer.isUpdatable()\r\n ) {\r\n this._thinInstanceRecreateBuffer(kind);\r\n }\r\n this._thinInstanceDataStorage.previousMatrixBuffer?.updateDirectly(this._thinInstanceDataStorage.previousMatrixData!, 0, this._thinInstanceDataStorage.instancesCount);\r\n } else if (kind === \"splatIndex\") {\r\n this._thinInstanceDataStorage.matrixBuffer?.updateDirectly(this._userThinInstanceBuffersStorage.data[kind], 0, this._thinInstanceDataStorage.instancesCount);\r\n } else {\r\n // preserve backward compatibility\r\n if (kind === VertexBuffer.ColorKind) {\r\n kind = VertexBuffer.ColorInstanceKind;\r\n }\r\n\r\n if (this._userThinInstanceBuffersStorage?.vertexBuffers[kind]) {\r\n if (this.thinInstanceAllowAutomaticStaticBufferRecreation && !this._userThinInstanceBuffersStorage.vertexBuffers[kind]!.isUpdatable()) {\r\n this._thinInstanceRecreateBuffer(kind);\r\n }\r\n this._userThinInstanceBuffersStorage.vertexBuffers[kind]!.updateDirectly(this._userThinInstanceBuffersStorage.data[kind], 0);\r\n }\r\n }\r\n };\r\n\r\n Mesh.prototype.thinInstancePartialBufferUpdate = function (kind: string, dataOrLength: Float32Array | number, offset: number): void {\r\n if (kind === \"matrix\") {\r\n if (this._thinInstanceDataStorage.matrixBuffer) {\r\n if (typeof dataOrLength === \"number\") {\r\n this._thinInstanceDataStorage.matrixBuffer.updateDirectly(\r\n new Float32Array(\r\n this._thinInstanceDataStorage.matrixData!.buffer,\r\n this._thinInstanceDataStorage.matrixData!.byteOffset + offset * 16 * Float32Array.BYTES_PER_ELEMENT,\r\n dataOrLength * 16\r\n ),\r\n offset * 16\r\n );\r\n } else {\r\n this._thinInstanceDataStorage.matrixBuffer.updateDirectly(dataOrLength, offset);\r\n }\r\n }\r\n } else {\r\n // preserve backward compatibility\r\n if (kind === VertexBuffer.ColorKind) {\r\n kind = VertexBuffer.ColorInstanceKind;\r\n }\r\n\r\n if (this._userThinInstanceBuffersStorage?.vertexBuffers[kind]) {\r\n const buffer = this._userThinInstanceBuffersStorage.vertexBuffers[kind]!;\r\n if (typeof dataOrLength === \"number\") {\r\n const data = new Float32Array(\r\n this._userThinInstanceBuffersStorage.data[kind].buffer,\r\n this._userThinInstanceBuffersStorage.data[kind].byteOffset + offset * this._userThinInstanceBuffersStorage.strides[kind] * Float32Array.BYTES_PER_ELEMENT,\r\n dataOrLength * this._userThinInstanceBuffersStorage.strides[kind]\r\n );\r\n this._userThinInstanceBuffersStorage.vertexBuffers[kind]!.updateDirectly(data, offset * this._userThinInstanceBuffersStorage.strides[kind]);\r\n } else {\r\n buffer.updateDirectly(dataOrLength, offset);\r\n }\r\n }\r\n }\r\n };\r\n\r\n Mesh.prototype.thinInstanceGetWorldMatrices = function (): Matrix[] {\r\n if (!this._thinInstanceDataStorage.matrixData || !this._thinInstanceDataStorage.matrixBuffer) {\r\n return [];\r\n }\r\n const matrixData = this._thinInstanceDataStorage.matrixData;\r\n\r\n if (!this._thinInstanceDataStorage.worldMatrices) {\r\n this._thinInstanceDataStorage.worldMatrices = [] as Matrix[];\r\n\r\n for (let i = 0; i < this._thinInstanceDataStorage.instancesCount; ++i) {\r\n this._thinInstanceDataStorage.worldMatrices[i] = Matrix.FromArray(matrixData, i * 16);\r\n }\r\n }\r\n\r\n return this._thinInstanceDataStorage.worldMatrices;\r\n };\r\n\r\n Mesh.prototype.thinInstanceRefreshBoundingInfo = function (\r\n forceRefreshParentInfo: boolean = false,\r\n applySkeleton: boolean = false,\r\n applyMorph: boolean = false,\r\n applyBakedVertexAnimation: boolean = false\r\n ) {\r\n if (!this._thinInstanceDataStorage.matrixData || !this._thinInstanceDataStorage.matrixBuffer) {\r\n return;\r\n }\r\n\r\n const vectors = this._thinInstanceDataStorage.boundingVectors;\r\n\r\n if (forceRefreshParentInfo || !this.rawBoundingInfo) {\r\n vectors.length = 0;\r\n if (applyBakedVertexAnimation && TryUpdateBakedVertexAnimationThinInstanceBoundingInfo(this, vectors, applyMorph)) {\r\n return;\r\n }\r\n\r\n const useBakedVertexAnimation = applyBakedVertexAnimation && this.bakedVertexAnimationManager?.isEnabled && HasCpuReadableBakedVertexAnimationData(this);\r\n if (useBakedVertexAnimation) {\r\n this.refreshBoundingInfo({ applySkeleton, applyMorph, applyBakedVertexAnimation: true, updatePositionsArray: false });\r\n } else {\r\n this.refreshBoundingInfo(applySkeleton, applyMorph);\r\n }\r\n const boundingInfo = this.getBoundingInfo();\r\n this.rawBoundingInfo = new BoundingInfo(boundingInfo.minimum, boundingInfo.maximum);\r\n }\r\n\r\n const boundingInfo = this.getBoundingInfo();\r\n const matrixData = this._thinInstanceDataStorage.matrixData;\r\n\r\n if (vectors.length === 0) {\r\n for (let v = 0; v < boundingInfo.boundingBox.vectors.length; ++v) {\r\n vectors.push(boundingInfo.boundingBox.vectors[v].clone());\r\n }\r\n }\r\n\r\n TmpVectors.Vector3[0].setAll(Number.POSITIVE_INFINITY); // min\r\n TmpVectors.Vector3[1].setAll(Number.NEGATIVE_INFINITY); // max\r\n\r\n for (let i = 0; i < this._thinInstanceDataStorage.instancesCount; ++i) {\r\n Matrix.FromArrayToRef(matrixData, i * 16, TmpVectors.Matrix[0]);\r\n\r\n for (let v = 0; v < vectors.length; ++v) {\r\n Vector3.TransformCoordinatesToRef(vectors[v], TmpVectors.Matrix[0], TmpVectors.Vector3[2]);\r\n TmpVectors.Vector3[0].minimizeInPlace(TmpVectors.Vector3[2]);\r\n TmpVectors.Vector3[1].maximizeInPlace(TmpVectors.Vector3[2]);\r\n }\r\n }\r\n\r\n boundingInfo.reConstruct(TmpVectors.Vector3[0], TmpVectors.Vector3[1]);\r\n\r\n this._updateBoundingInfo();\r\n };\r\n\r\n Mesh.prototype._thinInstanceRecreateBuffer = function (kind: string, staticBuffer: boolean = true) {\r\n if (kind === \"matrix\") {\r\n this._thinInstanceDataStorage.matrixBuffer?.dispose();\r\n this._thinInstanceDataStorage.matrixBuffer = this._thinInstanceCreateMatrixBuffer(\"world\", this._thinInstanceDataStorage.matrixData, staticBuffer);\r\n } else if (kind === \"previousMatrix\") {\r\n if (this._scene.needsPreviousWorldMatrices) {\r\n this._thinInstanceDataStorage.previousMatrixBuffer?.dispose();\r\n this._thinInstanceDataStorage.previousMatrixBuffer = this._thinInstanceCreateMatrixBuffer(\r\n \"previousWorld\",\r\n this._thinInstanceDataStorage.previousMatrixData ?? this._thinInstanceDataStorage.matrixData,\r\n staticBuffer\r\n );\r\n }\r\n } else {\r\n if (kind === VertexBuffer.ColorKind) {\r\n kind = VertexBuffer.ColorInstanceKind;\r\n }\r\n\r\n this._userThinInstanceBuffersStorage.vertexBuffers[kind]?.dispose();\r\n this._userThinInstanceBuffersStorage.vertexBuffers[kind] = new VertexBuffer(\r\n this.getEngine(),\r\n this._userThinInstanceBuffersStorage.data[kind],\r\n kind,\r\n !staticBuffer,\r\n false,\r\n this._userThinInstanceBuffersStorage.strides[kind],\r\n true\r\n );\r\n this.setVerticesBuffer(this._userThinInstanceBuffersStorage.vertexBuffers[kind]!);\r\n }\r\n };\r\n\r\n Mesh.prototype._thinInstanceUpdateBufferSize = function (kind: string, numInstances: number = 1) {\r\n // preserve backward compatibility\r\n if (kind === VertexBuffer.ColorKind) {\r\n kind = VertexBuffer.ColorInstanceKind;\r\n }\r\n\r\n const kindIsMatrix = kind === \"matrix\";\r\n\r\n if (!kindIsMatrix && (!this._userThinInstanceBuffersStorage || !this._userThinInstanceBuffersStorage.strides[kind])) {\r\n return;\r\n }\r\n\r\n const stride = kindIsMatrix ? 16 : this._userThinInstanceBuffersStorage.strides[kind];\r\n const currentSize = kindIsMatrix ? this._thinInstanceDataStorage.matrixBufferSize : this._userThinInstanceBuffersStorage.sizes[kind];\r\n let data = kindIsMatrix ? this._thinInstanceDataStorage.matrixData : this._userThinInstanceBuffersStorage.data[kind];\r\n\r\n const bufferSize = (this._thinInstanceDataStorage.instancesCount + numInstances) * stride;\r\n\r\n let newSize = currentSize;\r\n\r\n while (newSize < bufferSize) {\r\n newSize *= 2;\r\n }\r\n\r\n if (!data || currentSize != newSize) {\r\n if (!data) {\r\n data = new Float32Array(newSize);\r\n } else {\r\n const newData = new Float32Array(newSize);\r\n newData.set(data, 0);\r\n data = newData;\r\n }\r\n\r\n if (kindIsMatrix) {\r\n this._thinInstanceDataStorage.matrixBuffer?.dispose();\r\n this._thinInstanceDataStorage.matrixBuffer = this._thinInstanceCreateMatrixBuffer(\"world\", data, false);\r\n this._thinInstanceDataStorage.matrixData = data;\r\n this._thinInstanceDataStorage.matrixBufferSize = newSize;\r\n if (this._scene.needsPreviousWorldMatrices && !this._thinInstanceDataStorage.previousMatrixData) {\r\n this._thinInstanceDataStorage.previousMatrixBuffer?.dispose();\r\n this._thinInstanceDataStorage.previousMatrixBuffer = this._thinInstanceCreateMatrixBuffer(\"previousWorld\", data, false);\r\n }\r\n } else {\r\n this._userThinInstanceBuffersStorage.vertexBuffers[kind]?.dispose();\r\n\r\n this._userThinInstanceBuffersStorage.data[kind] = data;\r\n this._userThinInstanceBuffersStorage.sizes[kind] = newSize;\r\n this._userThinInstanceBuffersStorage.vertexBuffers[kind] = new VertexBuffer(this.getEngine(), data, kind, true, false, stride, true);\r\n\r\n this.setVerticesBuffer(this._userThinInstanceBuffersStorage.vertexBuffers[kind]!);\r\n }\r\n }\r\n };\r\n\r\n Mesh.prototype._thinInstanceInitializeUserStorage = function () {\r\n if (!this._userThinInstanceBuffersStorage) {\r\n this._userThinInstanceBuffersStorage = {\r\n data: {},\r\n sizes: {},\r\n vertexBuffers: {},\r\n strides: {},\r\n };\r\n }\r\n };\r\n\r\n Mesh.prototype._disposeThinInstanceSpecificData = function () {\r\n if (this._thinInstanceDataStorage?.matrixBuffer) {\r\n this._thinInstanceDataStorage.matrixBuffer.dispose();\r\n this._thinInstanceDataStorage.matrixBuffer = null;\r\n }\r\n if (this._thinInstanceDataStorage?.previousMatrixBuffer) {\r\n this._thinInstanceDataStorage.previousMatrixBuffer.dispose();\r\n this._thinInstanceDataStorage.previousMatrixBuffer = null;\r\n }\r\n };\r\n}\r\n"]}
1
+ {"version":3,"file":"thinInstanceMesh.pure.js","sourceRoot":"","sources":["../../../../dev/core/src/Meshes/thinInstanceMesh.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { type Nullable, type DeepImmutableObject, type FloatArray } from \"../types\";\r\nimport { type Vector2, Vector3, TmpVectors, Matrix } from \"../Maths/math.vector.pure\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { BoundingInfo } from \"core/Culling/boundingInfo\";\r\nimport { Mesh } from \"../Meshes/mesh.pure\";\r\nimport { VertexBuffer, Buffer } from \"../Buffers/buffer.pure\";\r\n\r\nconst BakedVertexAnimationSettingsInstancedKind = \"bakedVertexAnimationSettingsInstanced\";\r\n\r\nfunction HasCpuReadableBakedVertexAnimationData(mesh: Mesh): boolean {\r\n const textureData = mesh.bakedVertexAnimationManager?.texture?.getInternalTexture()?._bufferView;\r\n\r\n return textureData instanceof Float32Array || textureData instanceof Uint16Array;\r\n}\r\n\r\nfunction ExtractMinAndMaxToRef(data: FloatArray, count: number, minimum: Vector3, maximum: Vector3): void {\r\n minimum.setAll(Number.POSITIVE_INFINITY);\r\n maximum.setAll(Number.NEGATIVE_INFINITY);\r\n\r\n for (let index = 0; index < count * 3; index += 3) {\r\n const x = data[index];\r\n const y = data[index + 1];\r\n const z = data[index + 2];\r\n\r\n if (x < minimum.x) {\r\n minimum.x = x;\r\n }\r\n if (y < minimum.y) {\r\n minimum.y = y;\r\n }\r\n if (z < minimum.z) {\r\n minimum.z = z;\r\n }\r\n if (x > maximum.x) {\r\n maximum.x = x;\r\n }\r\n if (y > maximum.y) {\r\n maximum.y = y;\r\n }\r\n if (z > maximum.z) {\r\n maximum.z = z;\r\n }\r\n }\r\n}\r\n\r\nfunction ApplyBoundingBiasToMinAndMax(minimum: Vector3, maximum: Vector3, bias: Nullable<Vector2>): void {\r\n if (!bias) {\r\n return;\r\n }\r\n\r\n minimum.x -= minimum.x * bias.x + bias.y;\r\n minimum.y -= minimum.y * bias.x + bias.y;\r\n minimum.z -= minimum.z * bias.x + bias.y;\r\n maximum.x += maximum.x * bias.x + bias.y;\r\n maximum.y += maximum.y * bias.x + bias.y;\r\n maximum.z += maximum.z * bias.x + bias.y;\r\n}\r\n\r\nfunction UpdateTransformedMinAndMaxToRef(minimum: Vector3, maximum: Vector3, matrix: Matrix, globalMinimum: Vector3, globalMaximum: Vector3): void {\r\n const corner = TmpVectors.Vector3[7];\r\n const transformed = TmpVectors.Vector3[8];\r\n\r\n for (let x = 0; x < 2; ++x) {\r\n for (let y = 0; y < 2; ++y) {\r\n for (let z = 0; z < 2; ++z) {\r\n corner.set(x ? maximum.x : minimum.x, y ? maximum.y : minimum.y, z ? maximum.z : minimum.z);\r\n Vector3.TransformCoordinatesToRef(corner, matrix, transformed);\r\n globalMinimum.minimizeInPlace(transformed);\r\n globalMaximum.maximizeInPlace(transformed);\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction UpdateTransformedDataMinAndMaxToRef(data: FloatArray, count: number, matrix: Matrix, globalMinimum: Vector3, globalMaximum: Vector3): void {\r\n const transformed = TmpVectors.Vector3[7];\r\n\r\n for (let index = 0; index < count * 3; index += 3) {\r\n Vector3.TransformCoordinatesFromFloatsToRef(data[index], data[index + 1], data[index + 2], matrix, transformed);\r\n globalMinimum.minimizeInPlace(transformed);\r\n globalMaximum.maximizeInPlace(transformed);\r\n }\r\n}\r\n\r\nfunction UpdateRawBoundingVectors(vectors: Vector3[], rawBoundingInfo: BoundingInfo): void {\r\n vectors.length = 0;\r\n\r\n for (let v = 0; v < rawBoundingInfo.boundingBox.vectors.length; ++v) {\r\n vectors.push(rawBoundingInfo.boundingBox.vectors[v].clone());\r\n }\r\n}\r\n\r\nfunction TryUpdateBakedVertexAnimationThinInstanceBoundingInfo(mesh: Mesh, vectors: Vector3[], applyMorph: boolean): boolean {\r\n const storage = mesh._userThinInstanceBuffersStorage;\r\n const bakedVertexAnimationSettingsData = storage?.data[BakedVertexAnimationSettingsInstancedKind];\r\n const bakedVertexAnimationSettingsStride = storage?.strides[BakedVertexAnimationSettingsInstancedKind];\r\n\r\n if (!bakedVertexAnimationSettingsData || !bakedVertexAnimationSettingsStride || bakedVertexAnimationSettingsStride < 4 || !HasCpuReadableBakedVertexAnimationData(mesh)) {\r\n return false;\r\n }\r\n\r\n const matrixData = mesh._thinInstanceDataStorage.matrixData;\r\n if (!matrixData) {\r\n return false;\r\n }\r\n\r\n const cache = {};\r\n const settings = TmpVectors.Vector4[0];\r\n const rawMinimum = TmpVectors.Vector3[1];\r\n const rawMaximum = TmpVectors.Vector3[2];\r\n const globalMinimum = TmpVectors.Vector3[3];\r\n const globalMaximum = TmpVectors.Vector3[4];\r\n const localMinimum = TmpVectors.Vector3[5];\r\n const localMaximum = TmpVectors.Vector3[6];\r\n const matrix = TmpVectors.Matrix[2];\r\n const bias = mesh.geometry ? mesh.geometry.boundingBias : null;\r\n const vertexCount = mesh.getTotalVertices();\r\n\r\n rawMinimum.setAll(Number.POSITIVE_INFINITY);\r\n rawMaximum.setAll(Number.NEGATIVE_INFINITY);\r\n globalMinimum.setAll(Number.POSITIVE_INFINITY);\r\n globalMaximum.setAll(Number.NEGATIVE_INFINITY);\r\n\r\n for (let index = 0; index < mesh._thinInstanceDataStorage.instancesCount; ++index) {\r\n const settingsOffset = index * bakedVertexAnimationSettingsStride;\r\n settings.set(\r\n bakedVertexAnimationSettingsData[settingsOffset],\r\n bakedVertexAnimationSettingsData[settingsOffset + 1],\r\n bakedVertexAnimationSettingsData[settingsOffset + 2],\r\n bakedVertexAnimationSettingsData[settingsOffset + 3]\r\n );\r\n\r\n const positionData = mesh._getData(\r\n {\r\n applyMorph,\r\n applyBakedVertexAnimation: true,\r\n bakedVertexAnimationSettings: settings,\r\n updatePositionsArray: false,\r\n cache,\r\n },\r\n null,\r\n VertexBuffer.PositionKind\r\n );\r\n\r\n if (!positionData) {\r\n return false;\r\n }\r\n\r\n ExtractMinAndMaxToRef(positionData, vertexCount, localMinimum, localMaximum);\r\n ApplyBoundingBiasToMinAndMax(localMinimum, localMaximum, bias);\r\n rawMinimum.minimizeInPlace(localMinimum);\r\n rawMaximum.maximizeInPlace(localMaximum);\r\n\r\n Matrix.FromArrayToRef(matrixData, index * 16, matrix);\r\n if (bias) {\r\n UpdateTransformedMinAndMaxToRef(localMinimum, localMaximum, matrix, globalMinimum, globalMaximum);\r\n } else {\r\n UpdateTransformedDataMinAndMaxToRef(positionData, vertexCount, matrix, globalMinimum, globalMaximum);\r\n }\r\n }\r\n\r\n if (!isFinite(rawMinimum.x) || !isFinite(globalMinimum.x)) {\r\n return false;\r\n }\r\n\r\n const boundingInfo = mesh.getBoundingInfo();\r\n boundingInfo.reConstruct(globalMinimum, globalMaximum);\r\n mesh.rawBoundingInfo = new BoundingInfo(rawMinimum, rawMaximum);\r\n UpdateRawBoundingVectors(vectors, mesh.rawBoundingInfo);\r\n\r\n mesh._updateBoundingInfo();\r\n\r\n return true;\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for thinInstanceMesh.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterThinInstanceMesh(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n Mesh.prototype.thinInstanceAdd = function (matrix: DeepImmutableObject<Matrix> | Array<DeepImmutableObject<Matrix>>, refresh: boolean = true): number {\r\n if (!this.getScene().getEngine().getCaps().instancedArrays) {\r\n Logger.Error(\"Thin Instances are not supported on this device as Instanced Array extension not supported\");\r\n return -1;\r\n }\r\n\r\n this._thinInstanceUpdateBufferSize(\"matrix\", Array.isArray(matrix) ? matrix.length : 1);\r\n\r\n const index = this._thinInstanceDataStorage.instancesCount;\r\n\r\n if (Array.isArray(matrix)) {\r\n for (let i = 0; i < matrix.length; ++i) {\r\n this.thinInstanceSetMatrixAt(this._thinInstanceDataStorage.instancesCount++, matrix[i], i === matrix.length - 1 && refresh);\r\n }\r\n } else {\r\n this.thinInstanceSetMatrixAt(this._thinInstanceDataStorage.instancesCount++, matrix, refresh);\r\n }\r\n\r\n return index;\r\n };\r\n\r\n Mesh.prototype.thinInstanceAddSelf = function (refresh: boolean = true): number {\r\n return this.thinInstanceAdd(Matrix.IdentityReadOnly, refresh);\r\n };\r\n\r\n Mesh.prototype.thinInstanceRegisterAttribute = function (kind: string, stride: number): void {\r\n // preserve backward compatibility\r\n if (kind === VertexBuffer.ColorKind) {\r\n kind = VertexBuffer.ColorInstanceKind;\r\n }\r\n\r\n this.removeVerticesData(kind);\r\n\r\n this._thinInstanceInitializeUserStorage();\r\n\r\n this._userThinInstanceBuffersStorage.strides[kind] = stride;\r\n this._userThinInstanceBuffersStorage.sizes[kind] = stride * Math.max(32, this._thinInstanceDataStorage.instancesCount); // Initial size\r\n this._userThinInstanceBuffersStorage.data[kind] = new Float32Array(this._userThinInstanceBuffersStorage.sizes[kind]);\r\n this._userThinInstanceBuffersStorage.vertexBuffers[kind] = new VertexBuffer(\r\n this.getEngine(),\r\n this._userThinInstanceBuffersStorage.data[kind],\r\n kind,\r\n true,\r\n false,\r\n stride,\r\n true\r\n );\r\n\r\n this.setVerticesBuffer(this._userThinInstanceBuffersStorage.vertexBuffers[kind]!);\r\n };\r\n\r\n Mesh.prototype.thinInstanceSetMatrixAt = function (index: number, matrix: DeepImmutableObject<Matrix>, refresh: boolean = true): boolean {\r\n if (!this._thinInstanceDataStorage.matrixData || index >= this._thinInstanceDataStorage.instancesCount) {\r\n return false;\r\n }\r\n\r\n const matrixData = this._thinInstanceDataStorage.matrixData;\r\n\r\n matrix.copyToArray(matrixData, index * 16);\r\n\r\n if (this._thinInstanceDataStorage.worldMatrices) {\r\n this._thinInstanceDataStorage.worldMatrices[index] = matrix as Matrix;\r\n }\r\n\r\n if (refresh) {\r\n this.thinInstanceBufferUpdated(\"matrix\");\r\n\r\n if (!this.doNotSyncBoundingInfo) {\r\n this.thinInstanceRefreshBoundingInfo(false);\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n\r\n Mesh.prototype.thinInstanceSetAttributeAt = function (kind: string, index: number, value: Array<number>, refresh: boolean = true): boolean {\r\n // preserve backward compatibility\r\n if (kind === VertexBuffer.ColorKind) {\r\n kind = VertexBuffer.ColorInstanceKind;\r\n }\r\n\r\n if (!this._userThinInstanceBuffersStorage || !this._userThinInstanceBuffersStorage.data[kind] || index >= this._thinInstanceDataStorage.instancesCount) {\r\n return false;\r\n }\r\n\r\n this._thinInstanceUpdateBufferSize(kind, 0); // make sur the buffer for the kind attribute is big enough\r\n\r\n this._userThinInstanceBuffersStorage.data[kind].set(value, index * this._userThinInstanceBuffersStorage.strides[kind]);\r\n\r\n if (refresh) {\r\n this.thinInstanceBufferUpdated(kind);\r\n }\r\n\r\n return true;\r\n };\r\n\r\n Object.defineProperty(Mesh.prototype, \"thinInstanceCount\", {\r\n get: function (this: Mesh) {\r\n return this._thinInstanceDataStorage.instancesCount;\r\n },\r\n set: function (this: Mesh, value: number) {\r\n const matrixData = this._thinInstanceDataStorage.matrixData ?? this.source?._thinInstanceDataStorage.matrixData;\r\n const numMaxInstances = matrixData ? matrixData.length / 16 : 0;\r\n\r\n if (value <= numMaxInstances) {\r\n this._thinInstanceDataStorage.instancesCount = value;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n });\r\n\r\n Mesh.prototype._thinInstanceCreateMatrixBuffer = function (kind: string, buffer: Float32Array, staticBuffer: boolean = true): Buffer {\r\n const matrixBuffer = new Buffer(this.getEngine(), buffer, !staticBuffer, 16, false, true);\r\n\r\n for (let i = 0; i < 4; i++) {\r\n this.setVerticesBuffer(matrixBuffer.createVertexBuffer(kind + i, i * 4, 4));\r\n }\r\n\r\n return matrixBuffer;\r\n };\r\n\r\n Mesh.prototype.thinInstanceSetBuffer = function (kind: string, buffer: Nullable<Float32Array>, stride: number = 0, staticBuffer: boolean = true): void {\r\n stride = stride || 16;\r\n\r\n if (kind === \"matrix\") {\r\n this._thinInstanceDataStorage.matrixBuffer?.dispose();\r\n this._thinInstanceDataStorage.matrixBuffer = null;\r\n this._thinInstanceDataStorage.matrixBufferSize = buffer ? buffer.length : 32 * stride;\r\n this._thinInstanceDataStorage.matrixData = buffer;\r\n this._thinInstanceDataStorage.worldMatrices = null;\r\n\r\n if (buffer !== null) {\r\n this._thinInstanceDataStorage.instancesCount = buffer.length / stride;\r\n this._thinInstanceDataStorage.matrixBuffer = this._thinInstanceCreateMatrixBuffer(\"world\", buffer, staticBuffer);\r\n\r\n if (!this.doNotSyncBoundingInfo) {\r\n this.thinInstanceRefreshBoundingInfo(false);\r\n }\r\n } else {\r\n this._thinInstanceDataStorage.instancesCount = 0;\r\n if (!this.doNotSyncBoundingInfo) {\r\n // mesh has no more thin instances, so need to recompute the bounding box because it's the regular mesh that will now be displayed\r\n this.refreshBoundingInfo();\r\n }\r\n }\r\n } else if (kind === \"previousMatrix\") {\r\n this._thinInstanceDataStorage.previousMatrixBuffer?.dispose();\r\n this._thinInstanceDataStorage.previousMatrixBuffer = null;\r\n this._thinInstanceDataStorage.previousMatrixData = buffer;\r\n if (buffer !== null) {\r\n this._thinInstanceDataStorage.previousMatrixBuffer = this._thinInstanceCreateMatrixBuffer(\"previousWorld\", buffer, staticBuffer);\r\n }\r\n } else if (kind === \"splatIndex\" && buffer) {\r\n this._thinInstanceDataStorage.matrixBuffer?.dispose();\r\n this._thinInstanceInitializeUserStorage();\r\n this._thinInstanceDataStorage.instancesCount = buffer.length / stride;\r\n this._userThinInstanceBuffersStorage.data[kind] = buffer;\r\n this._userThinInstanceBuffersStorage.strides[kind] = stride;\r\n this._userThinInstanceBuffersStorage.sizes[kind] = buffer.length;\r\n const splatInstancesBuffer = new Buffer(this.getEngine(), buffer, true, 16, false, true);\r\n this._thinInstanceDataStorage.matrixBuffer = splatInstancesBuffer;\r\n for (let i = 0; i < 4; i++) {\r\n this.setVerticesBuffer(splatInstancesBuffer.createVertexBuffer(kind + i, i * 4, 4));\r\n }\r\n } else {\r\n // color for instanced mesh is ColorInstanceKind and not ColorKind because of native that needs to do the differenciation\r\n // hot switching kind here to preserve backward compatibility\r\n if (kind === VertexBuffer.ColorKind) {\r\n kind = VertexBuffer.ColorInstanceKind;\r\n }\r\n\r\n if (buffer === null) {\r\n if (this._userThinInstanceBuffersStorage?.data[kind]) {\r\n this.removeVerticesData(kind);\r\n delete this._userThinInstanceBuffersStorage.data[kind];\r\n delete this._userThinInstanceBuffersStorage.strides[kind];\r\n delete this._userThinInstanceBuffersStorage.sizes[kind];\r\n delete this._userThinInstanceBuffersStorage.vertexBuffers[kind];\r\n }\r\n } else {\r\n this._thinInstanceInitializeUserStorage();\r\n\r\n this._userThinInstanceBuffersStorage.data[kind] = buffer;\r\n this._userThinInstanceBuffersStorage.strides[kind] = stride;\r\n this._userThinInstanceBuffersStorage.sizes[kind] = buffer.length;\r\n this._userThinInstanceBuffersStorage.vertexBuffers[kind] = new VertexBuffer(this.getEngine(), buffer, kind, !staticBuffer, false, stride, true);\r\n\r\n this.setVerticesBuffer(this._userThinInstanceBuffersStorage.vertexBuffers[kind]!);\r\n }\r\n }\r\n };\r\n\r\n Mesh.prototype.thinInstanceBufferUpdated = function (kind: string): void {\r\n // With no visible instance, upload the whole buffer: nothing else re-syncs it when the count goes back up\r\n const instancesCount = this._thinInstanceDataStorage.instancesCount || undefined;\r\n if (kind === \"matrix\") {\r\n if (this.thinInstanceAllowAutomaticStaticBufferRecreation && this._thinInstanceDataStorage.matrixBuffer && !this._thinInstanceDataStorage.matrixBuffer.isUpdatable()) {\r\n this._thinInstanceRecreateBuffer(kind);\r\n }\r\n this._thinInstanceDataStorage.matrixBuffer?.updateDirectly(this._thinInstanceDataStorage.matrixData!, 0, instancesCount);\r\n } else if (kind === \"previousMatrix\") {\r\n if (\r\n this.thinInstanceAllowAutomaticStaticBufferRecreation &&\r\n this._thinInstanceDataStorage.previousMatrixBuffer &&\r\n !this._thinInstanceDataStorage.previousMatrixBuffer.isUpdatable()\r\n ) {\r\n this._thinInstanceRecreateBuffer(kind);\r\n }\r\n this._thinInstanceDataStorage.previousMatrixBuffer?.updateDirectly(this._thinInstanceDataStorage.previousMatrixData!, 0, instancesCount);\r\n } else if (kind === \"splatIndex\") {\r\n this._thinInstanceDataStorage.matrixBuffer?.updateDirectly(this._userThinInstanceBuffersStorage.data[kind], 0, instancesCount);\r\n } else {\r\n // preserve backward compatibility\r\n if (kind === VertexBuffer.ColorKind) {\r\n kind = VertexBuffer.ColorInstanceKind;\r\n }\r\n\r\n if (this._userThinInstanceBuffersStorage?.vertexBuffers[kind]) {\r\n if (this.thinInstanceAllowAutomaticStaticBufferRecreation && !this._userThinInstanceBuffersStorage.vertexBuffers[kind]!.isUpdatable()) {\r\n this._thinInstanceRecreateBuffer(kind);\r\n }\r\n this._userThinInstanceBuffersStorage.vertexBuffers[kind]!.updateDirectly(this._userThinInstanceBuffersStorage.data[kind], 0);\r\n }\r\n }\r\n };\r\n\r\n Mesh.prototype.thinInstancePartialBufferUpdate = function (kind: string, dataOrLength: Float32Array | number, offset: number): void {\r\n if (kind === \"matrix\") {\r\n if (this._thinInstanceDataStorage.matrixBuffer) {\r\n if (typeof dataOrLength === \"number\") {\r\n this._thinInstanceDataStorage.matrixBuffer.updateDirectly(\r\n new Float32Array(\r\n this._thinInstanceDataStorage.matrixData!.buffer,\r\n this._thinInstanceDataStorage.matrixData!.byteOffset + offset * 16 * Float32Array.BYTES_PER_ELEMENT,\r\n dataOrLength * 16\r\n ),\r\n offset * 16\r\n );\r\n } else {\r\n this._thinInstanceDataStorage.matrixBuffer.updateDirectly(dataOrLength, offset);\r\n }\r\n }\r\n } else {\r\n // preserve backward compatibility\r\n if (kind === VertexBuffer.ColorKind) {\r\n kind = VertexBuffer.ColorInstanceKind;\r\n }\r\n\r\n if (this._userThinInstanceBuffersStorage?.vertexBuffers[kind]) {\r\n const buffer = this._userThinInstanceBuffersStorage.vertexBuffers[kind]!;\r\n if (typeof dataOrLength === \"number\") {\r\n const data = new Float32Array(\r\n this._userThinInstanceBuffersStorage.data[kind].buffer,\r\n this._userThinInstanceBuffersStorage.data[kind].byteOffset + offset * this._userThinInstanceBuffersStorage.strides[kind] * Float32Array.BYTES_PER_ELEMENT,\r\n dataOrLength * this._userThinInstanceBuffersStorage.strides[kind]\r\n );\r\n this._userThinInstanceBuffersStorage.vertexBuffers[kind]!.updateDirectly(data, offset * this._userThinInstanceBuffersStorage.strides[kind]);\r\n } else {\r\n buffer.updateDirectly(dataOrLength, offset);\r\n }\r\n }\r\n }\r\n };\r\n\r\n Mesh.prototype.thinInstanceGetWorldMatrices = function (): Matrix[] {\r\n if (!this._thinInstanceDataStorage.matrixData || !this._thinInstanceDataStorage.matrixBuffer) {\r\n return [];\r\n }\r\n const matrixData = this._thinInstanceDataStorage.matrixData;\r\n\r\n if (!this._thinInstanceDataStorage.worldMatrices) {\r\n this._thinInstanceDataStorage.worldMatrices = [] as Matrix[];\r\n\r\n for (let i = 0; i < this._thinInstanceDataStorage.instancesCount; ++i) {\r\n this._thinInstanceDataStorage.worldMatrices[i] = Matrix.FromArray(matrixData, i * 16);\r\n }\r\n }\r\n\r\n return this._thinInstanceDataStorage.worldMatrices;\r\n };\r\n\r\n Mesh.prototype.thinInstanceRefreshBoundingInfo = function (\r\n forceRefreshParentInfo: boolean = false,\r\n applySkeleton: boolean = false,\r\n applyMorph: boolean = false,\r\n applyBakedVertexAnimation: boolean = false\r\n ) {\r\n if (!this._thinInstanceDataStorage.matrixData || !this._thinInstanceDataStorage.matrixBuffer) {\r\n return;\r\n }\r\n\r\n const vectors = this._thinInstanceDataStorage.boundingVectors;\r\n\r\n if (forceRefreshParentInfo || !this.rawBoundingInfo) {\r\n vectors.length = 0;\r\n if (applyBakedVertexAnimation && TryUpdateBakedVertexAnimationThinInstanceBoundingInfo(this, vectors, applyMorph)) {\r\n return;\r\n }\r\n\r\n const useBakedVertexAnimation = applyBakedVertexAnimation && this.bakedVertexAnimationManager?.isEnabled && HasCpuReadableBakedVertexAnimationData(this);\r\n if (useBakedVertexAnimation) {\r\n this.refreshBoundingInfo({ applySkeleton, applyMorph, applyBakedVertexAnimation: true, updatePositionsArray: false });\r\n } else {\r\n this.refreshBoundingInfo(applySkeleton, applyMorph);\r\n }\r\n const boundingInfo = this.getBoundingInfo();\r\n this.rawBoundingInfo = new BoundingInfo(boundingInfo.minimum, boundingInfo.maximum);\r\n }\r\n\r\n const boundingInfo = this.getBoundingInfo();\r\n const matrixData = this._thinInstanceDataStorage.matrixData;\r\n\r\n if (vectors.length === 0) {\r\n for (let v = 0; v < boundingInfo.boundingBox.vectors.length; ++v) {\r\n vectors.push(boundingInfo.boundingBox.vectors[v].clone());\r\n }\r\n }\r\n\r\n TmpVectors.Vector3[0].setAll(Number.POSITIVE_INFINITY); // min\r\n TmpVectors.Vector3[1].setAll(Number.NEGATIVE_INFINITY); // max\r\n\r\n for (let i = 0; i < this._thinInstanceDataStorage.instancesCount; ++i) {\r\n Matrix.FromArrayToRef(matrixData, i * 16, TmpVectors.Matrix[0]);\r\n\r\n for (let v = 0; v < vectors.length; ++v) {\r\n Vector3.TransformCoordinatesToRef(vectors[v], TmpVectors.Matrix[0], TmpVectors.Vector3[2]);\r\n TmpVectors.Vector3[0].minimizeInPlace(TmpVectors.Vector3[2]);\r\n TmpVectors.Vector3[1].maximizeInPlace(TmpVectors.Vector3[2]);\r\n }\r\n }\r\n\r\n boundingInfo.reConstruct(TmpVectors.Vector3[0], TmpVectors.Vector3[1]);\r\n\r\n this._updateBoundingInfo();\r\n };\r\n\r\n Mesh.prototype._thinInstanceRecreateBuffer = function (kind: string, staticBuffer: boolean = true) {\r\n if (kind === \"matrix\") {\r\n this._thinInstanceDataStorage.matrixBuffer?.dispose();\r\n this._thinInstanceDataStorage.matrixBuffer = this._thinInstanceCreateMatrixBuffer(\"world\", this._thinInstanceDataStorage.matrixData, staticBuffer);\r\n } else if (kind === \"previousMatrix\") {\r\n if (this._scene.needsPreviousWorldMatrices) {\r\n this._thinInstanceDataStorage.previousMatrixBuffer?.dispose();\r\n this._thinInstanceDataStorage.previousMatrixBuffer = this._thinInstanceCreateMatrixBuffer(\r\n \"previousWorld\",\r\n this._thinInstanceDataStorage.previousMatrixData ?? this._thinInstanceDataStorage.matrixData,\r\n staticBuffer\r\n );\r\n }\r\n } else {\r\n if (kind === VertexBuffer.ColorKind) {\r\n kind = VertexBuffer.ColorInstanceKind;\r\n }\r\n\r\n this._userThinInstanceBuffersStorage.vertexBuffers[kind]?.dispose();\r\n this._userThinInstanceBuffersStorage.vertexBuffers[kind] = new VertexBuffer(\r\n this.getEngine(),\r\n this._userThinInstanceBuffersStorage.data[kind],\r\n kind,\r\n !staticBuffer,\r\n false,\r\n this._userThinInstanceBuffersStorage.strides[kind],\r\n true\r\n );\r\n this.setVerticesBuffer(this._userThinInstanceBuffersStorage.vertexBuffers[kind]!);\r\n }\r\n };\r\n\r\n Mesh.prototype._thinInstanceUpdateBufferSize = function (kind: string, numInstances: number = 1) {\r\n // preserve backward compatibility\r\n if (kind === VertexBuffer.ColorKind) {\r\n kind = VertexBuffer.ColorInstanceKind;\r\n }\r\n\r\n const kindIsMatrix = kind === \"matrix\";\r\n\r\n if (!kindIsMatrix && (!this._userThinInstanceBuffersStorage || !this._userThinInstanceBuffersStorage.strides[kind])) {\r\n return;\r\n }\r\n\r\n const stride = kindIsMatrix ? 16 : this._userThinInstanceBuffersStorage.strides[kind];\r\n const currentSize = kindIsMatrix ? this._thinInstanceDataStorage.matrixBufferSize : this._userThinInstanceBuffersStorage.sizes[kind];\r\n let data = kindIsMatrix ? this._thinInstanceDataStorage.matrixData : this._userThinInstanceBuffersStorage.data[kind];\r\n\r\n const bufferSize = (this._thinInstanceDataStorage.instancesCount + numInstances) * stride;\r\n\r\n let newSize = currentSize;\r\n\r\n while (newSize < bufferSize) {\r\n newSize *= 2;\r\n }\r\n\r\n if (!data || currentSize != newSize) {\r\n if (!data) {\r\n data = new Float32Array(newSize);\r\n } else {\r\n const newData = new Float32Array(newSize);\r\n newData.set(data, 0);\r\n data = newData;\r\n }\r\n\r\n if (kindIsMatrix) {\r\n this._thinInstanceDataStorage.matrixBuffer?.dispose();\r\n this._thinInstanceDataStorage.matrixBuffer = this._thinInstanceCreateMatrixBuffer(\"world\", data, false);\r\n this._thinInstanceDataStorage.matrixData = data;\r\n this._thinInstanceDataStorage.matrixBufferSize = newSize;\r\n if (this._scene.needsPreviousWorldMatrices && !this._thinInstanceDataStorage.previousMatrixData) {\r\n this._thinInstanceDataStorage.previousMatrixBuffer?.dispose();\r\n this._thinInstanceDataStorage.previousMatrixBuffer = this._thinInstanceCreateMatrixBuffer(\"previousWorld\", data, false);\r\n }\r\n } else {\r\n this._userThinInstanceBuffersStorage.vertexBuffers[kind]?.dispose();\r\n\r\n this._userThinInstanceBuffersStorage.data[kind] = data;\r\n this._userThinInstanceBuffersStorage.sizes[kind] = newSize;\r\n this._userThinInstanceBuffersStorage.vertexBuffers[kind] = new VertexBuffer(this.getEngine(), data, kind, true, false, stride, true);\r\n\r\n this.setVerticesBuffer(this._userThinInstanceBuffersStorage.vertexBuffers[kind]!);\r\n }\r\n }\r\n };\r\n\r\n Mesh.prototype._thinInstanceInitializeUserStorage = function () {\r\n if (!this._userThinInstanceBuffersStorage) {\r\n this._userThinInstanceBuffersStorage = {\r\n data: {},\r\n sizes: {},\r\n vertexBuffers: {},\r\n strides: {},\r\n };\r\n }\r\n };\r\n\r\n Mesh.prototype._disposeThinInstanceSpecificData = function () {\r\n if (this._thinInstanceDataStorage?.matrixBuffer) {\r\n this._thinInstanceDataStorage.matrixBuffer.dispose();\r\n this._thinInstanceDataStorage.matrixBuffer = null;\r\n }\r\n if (this._thinInstanceDataStorage?.previousMatrixBuffer) {\r\n this._thinInstanceDataStorage.previousMatrixBuffer.dispose();\r\n this._thinInstanceDataStorage.previousMatrixBuffer = null;\r\n }\r\n };\r\n}\r\n"]}
package/Misc/index.d.ts CHANGED
@@ -56,6 +56,7 @@ export * from "./depthReducer.js";
56
56
  export * from "./dataStorage.js";
57
57
  export * from "./sceneRecorder.js";
58
58
  export * from "./khronosTextureContainer2.js";
59
+ export * from "./khronosTextureContainer2Encoder.js";
59
60
  export * from "./trajectoryClassifier.js";
60
61
  export * from "./timer.js";
61
62
  export * from "./copyTools.js";
package/Misc/index.js CHANGED
@@ -58,6 +58,7 @@ export * from "./depthReducer.js";
58
58
  export * from "./dataStorage.js";
59
59
  export * from "./sceneRecorder.js";
60
60
  export * from "./khronosTextureContainer2.js";
61
+ export * from "./khronosTextureContainer2Encoder.js";
61
62
  export * from "./trajectoryClassifier.js";
62
63
  export * from "./timer.js";
63
64
  export * from "./copyTools.js";
package/Misc/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/index.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-restricted-imports */\r\nexport * from \"./andOrNotEvaluator\";\r\nexport * from \"./assetsManager\";\r\nexport * from \"./basis\";\r\nexport * from \"./dds\";\r\nexport * from \"./decorators\";\r\nexport * from \"./deferred\";\r\nexport * from \"./environmentTextureTools\";\r\nexport * from \"./meshExploder\";\r\nexport * from \"./filesInput\";\r\nexport * from \"./HighDynamicRange/index\";\r\nexport * from \"./khronosTextureContainer\";\r\nexport * from \"./observable\";\r\nexport * from \"./observable.extensions\";\r\nexport * from \"./performanceMonitor\";\r\nexport * from \"./sceneOptimizer\";\r\nexport * from \"./sceneSerializer\";\r\nexport * from \"./shaderImportLoader\";\r\nexport * from \"./smartArray\";\r\nexport * from \"./stringDictionary\";\r\nexport * from \"./tags\";\r\nexport * from \"./textureTools\";\r\nexport * from \"./arrayTools\";\r\n// loaded from texture tools\r\nexport * from \"../Shaders/lodCube.fragment\";\r\nexport * from \"../Shaders/lod.fragment\";\r\nexport * from \"../ShadersWGSL/lodCube.fragment\";\r\nexport * from \"../ShadersWGSL/lod.fragment\";\r\nexport * from \"./tga\";\r\nexport * from \"./tools\";\r\nexport * from \"./videoRecorder\";\r\nexport * from \"./virtualJoystick\";\r\nexport * from \"./workerPool\";\r\nexport * from \"./logger\";\r\nexport * from \"./typeStore\";\r\nexport * from \"./filesInputStore\";\r\nexport * from \"./deepCopier\";\r\nexport * from \"./deepMerger\";\r\nexport * from \"./pivotTools\";\r\nexport * from \"./precisionDate\";\r\nexport * from \"./screenshotTools\";\r\nexport * from \"./webRequest\";\r\nexport * from \"./iInspectable\";\r\nexport * from \"./brdfTextureTools\";\r\nexport * from \"./rgbdTextureTools\";\r\nexport * from \"./gradients\";\r\nexport * from \"./perfCounter\";\r\nexport * from \"./fileRequest\";\r\nexport * from \"./customAnimationFrameRequester\";\r\nexport * from \"./retryStrategy\";\r\nexport * from \"./interfaces/screenshotSize\";\r\nexport * from \"./interfaces/iPerfViewer\";\r\nexport * from \"./fileTools\";\r\nexport * from \"./stringTools\";\r\nexport * from \"./dataReader\";\r\nexport * from \"./minMaxReducer\";\r\nexport * from \"./depthReducer\";\r\nexport * from \"./dataStorage\";\r\nexport * from \"./sceneRecorder\";\r\nexport * from \"./khronosTextureContainer2\";\r\nexport * from \"./trajectoryClassifier\";\r\nexport * from \"./timer\";\r\nexport * from \"./copyTools\";\r\nexport * from \"./reflector\";\r\nexport * from \"./domManagement\";\r\nexport * from \"./pressureObserverWrapper\";\r\nexport * from \"./PerformanceViewer/index\";\r\nexport * from \"./coroutine\";\r\nexport * from \"./guid\";\r\nexport * from \"./error\";\r\nexport * from \"./snapshotRenderingHelper\";\r\n// eslint-disable-next-line import/export\r\nexport * from \"./observableCoroutine\";\r\nexport * from \"./copyTextureToTexture\";\r\nexport * from \"./areaLightsTextureTools\";\r\nexport { DumpTools, EncodeImageAsync } from \"./dumpTools\";\r\nexport * from \"./greasedLineTools\";\r\nexport * from \"./equirectangularCapture\";\r\nexport * from \"./decorators.serialization\";\r\nexport * from \"./asyncLock\";\r\nexport * from \"./bitArray\";\r\nexport * from \"./urlTools\";\r\nexport * from \"./lazy\";\r\nexport * from \"./uniqueIdGenerator\";\r\nexport { workerFunction as KTX2WorkerFunction, initializeWebWorker as KTX2InitializeWebWorker } from \"./khronosTextureContainer2Worker\";\r\n\r\n// RGBDTextureTools\r\nexport * from \"../Shaders/rgbdDecode.fragment\";\r\nexport * from \"../Shaders/rgbdEncode.fragment\";\r\nexport * from \"../ShadersWGSL/rgbdDecode.fragment\";\r\nexport * from \"../ShadersWGSL/rgbdEncode.fragment\";\r\n\r\n// CopyTextureToTexture\r\nexport * from \"../Shaders/copyTextureToTexture.fragment\";\r\nexport * from \"../ShadersWGSL/copyTextureToTexture.fragment\";\r\n\r\n// Area Light Texture\r\nexport * from \"../Shaders/areaLightTextureProcessing.fragment\";\r\nexport * from \"../ShadersWGSL/areaLightTextureProcessing.fragment\";\r\nexport * from \"./tools.internals\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/index.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-restricted-imports */\r\nexport * from \"./andOrNotEvaluator\";\r\nexport * from \"./assetsManager\";\r\nexport * from \"./basis\";\r\nexport * from \"./dds\";\r\nexport * from \"./decorators\";\r\nexport * from \"./deferred\";\r\nexport * from \"./environmentTextureTools\";\r\nexport * from \"./meshExploder\";\r\nexport * from \"./filesInput\";\r\nexport * from \"./HighDynamicRange/index\";\r\nexport * from \"./khronosTextureContainer\";\r\nexport * from \"./observable\";\r\nexport * from \"./observable.extensions\";\r\nexport * from \"./performanceMonitor\";\r\nexport * from \"./sceneOptimizer\";\r\nexport * from \"./sceneSerializer\";\r\nexport * from \"./shaderImportLoader\";\r\nexport * from \"./smartArray\";\r\nexport * from \"./stringDictionary\";\r\nexport * from \"./tags\";\r\nexport * from \"./textureTools\";\r\nexport * from \"./arrayTools\";\r\n// loaded from texture tools\r\nexport * from \"../Shaders/lodCube.fragment\";\r\nexport * from \"../Shaders/lod.fragment\";\r\nexport * from \"../ShadersWGSL/lodCube.fragment\";\r\nexport * from \"../ShadersWGSL/lod.fragment\";\r\nexport * from \"./tga\";\r\nexport * from \"./tools\";\r\nexport * from \"./videoRecorder\";\r\nexport * from \"./virtualJoystick\";\r\nexport * from \"./workerPool\";\r\nexport * from \"./logger\";\r\nexport * from \"./typeStore\";\r\nexport * from \"./filesInputStore\";\r\nexport * from \"./deepCopier\";\r\nexport * from \"./deepMerger\";\r\nexport * from \"./pivotTools\";\r\nexport * from \"./precisionDate\";\r\nexport * from \"./screenshotTools\";\r\nexport * from \"./webRequest\";\r\nexport * from \"./iInspectable\";\r\nexport * from \"./brdfTextureTools\";\r\nexport * from \"./rgbdTextureTools\";\r\nexport * from \"./gradients\";\r\nexport * from \"./perfCounter\";\r\nexport * from \"./fileRequest\";\r\nexport * from \"./customAnimationFrameRequester\";\r\nexport * from \"./retryStrategy\";\r\nexport * from \"./interfaces/screenshotSize\";\r\nexport * from \"./interfaces/iPerfViewer\";\r\nexport * from \"./fileTools\";\r\nexport * from \"./stringTools\";\r\nexport * from \"./dataReader\";\r\nexport * from \"./minMaxReducer\";\r\nexport * from \"./depthReducer\";\r\nexport * from \"./dataStorage\";\r\nexport * from \"./sceneRecorder\";\r\nexport * from \"./khronosTextureContainer2\";\r\nexport * from \"./khronosTextureContainer2Encoder\";\r\nexport * from \"./trajectoryClassifier\";\r\nexport * from \"./timer\";\r\nexport * from \"./copyTools\";\r\nexport * from \"./reflector\";\r\nexport * from \"./domManagement\";\r\nexport * from \"./pressureObserverWrapper\";\r\nexport * from \"./PerformanceViewer/index\";\r\nexport * from \"./coroutine\";\r\nexport * from \"./guid\";\r\nexport * from \"./error\";\r\nexport * from \"./snapshotRenderingHelper\";\r\n// eslint-disable-next-line import/export\r\nexport * from \"./observableCoroutine\";\r\nexport * from \"./copyTextureToTexture\";\r\nexport * from \"./areaLightsTextureTools\";\r\nexport { DumpTools, EncodeImageAsync } from \"./dumpTools\";\r\nexport * from \"./greasedLineTools\";\r\nexport * from \"./equirectangularCapture\";\r\nexport * from \"./decorators.serialization\";\r\nexport * from \"./asyncLock\";\r\nexport * from \"./bitArray\";\r\nexport * from \"./urlTools\";\r\nexport * from \"./lazy\";\r\nexport * from \"./uniqueIdGenerator\";\r\nexport { workerFunction as KTX2WorkerFunction, initializeWebWorker as KTX2InitializeWebWorker } from \"./khronosTextureContainer2Worker\";\r\n\r\n// RGBDTextureTools\r\nexport * from \"../Shaders/rgbdDecode.fragment\";\r\nexport * from \"../Shaders/rgbdEncode.fragment\";\r\nexport * from \"../ShadersWGSL/rgbdDecode.fragment\";\r\nexport * from \"../ShadersWGSL/rgbdEncode.fragment\";\r\n\r\n// CopyTextureToTexture\r\nexport * from \"../Shaders/copyTextureToTexture.fragment\";\r\nexport * from \"../ShadersWGSL/copyTextureToTexture.fragment\";\r\n\r\n// Area Light Texture\r\nexport * from \"../Shaders/areaLightTextureProcessing.fragment\";\r\nexport * from \"../ShadersWGSL/areaLightTextureProcessing.fragment\";\r\nexport * from \"./tools.internals\";\r\n"]}
@@ -146,17 +146,18 @@ export declare class KhronosTextureContainer2 {
146
146
  /**
147
147
  * @internal
148
148
  */
149
- _uploadAsync(data: ArrayBufferView, internalTexture: InternalTexture, options?: IKTX2DecoderOptions & IDecodedData): Promise<void>;
149
+ _uploadAsync(data: ArrayBufferView, internalTexture: InternalTexture, options?: IKTX2DecoderOptions & IDecodedData, ownsData?: boolean): Promise<void>;
150
150
  /**
151
151
  * Decodes a KTX2 file and returns the decoded data, without uploading it to a texture.
152
152
  * Kept separate from _uploadAsync so consumers that build their own texture (2D array textures, for eg)
153
153
  * can reuse the worker pool, decoder module and url configuration handled here.
154
154
  * @param data defines the KTX2 file content
155
155
  * @param options defines the options to use when decoding
156
+ * @param transferData defines whether nothing else holds data, so a worker can get its buffer instead of a copy
156
157
  * @returns a promise resolved with the decoded data
157
158
  * @internal
158
159
  */
159
- _decodeAsync(data: ArrayBufferView, options?: IKTX2DecoderOptions): Promise<IDecodedData>;
160
+ _decodeAsync(data: ArrayBufferView, options?: IKTX2DecoderOptions, transferData?: boolean): Promise<IDecodedData>;
160
161
  protected _createTexture(data: IDecodedData, internalTexture: InternalTexture, options?: IKTX2DecoderOptions & IDecodedData): void;
161
162
  /**
162
163
  * Checks if the given data starts with a KTX2 file identifier.
@@ -226,9 +226,19 @@ export class KhronosTextureContainer2 {
226
226
  /**
227
227
  * @internal
228
228
  */
229
- async _uploadAsync(data, internalTexture, options) {
230
- const decodedData = await this._decodeAsync(data, options);
229
+ async _uploadAsync(data, internalTexture, options, ownsData = false) {
230
+ const fromWorker = !!KhronosTextureContainer2._WorkerPoolPromise;
231
+ const decodedData = await this._decodeAsync(data, options, ownsData);
231
232
  this._createTexture(decodedData, internalTexture, options);
233
+ if (fromWorker) {
234
+ // nothing else holds the levels a worker sent, and they are uploaded now: their memory is freed at once, not by a later GC
235
+ for (const mipmap of decodedData.mipmaps) {
236
+ const buffer = mipmap.data?.buffer;
237
+ if (buffer?.transfer && !buffer.detached) {
238
+ buffer.transfer(0);
239
+ }
240
+ }
241
+ }
232
242
  }
233
243
  /**
234
244
  * Decodes a KTX2 file and returns the decoded data, without uploading it to a texture.
@@ -236,10 +246,11 @@ export class KhronosTextureContainer2 {
236
246
  * can reuse the worker pool, decoder module and url configuration handled here.
237
247
  * @param data defines the KTX2 file content
238
248
  * @param options defines the options to use when decoding
249
+ * @param transferData defines whether nothing else holds data, so a worker can get its buffer instead of a copy
239
250
  * @returns a promise resolved with the decoded data
240
251
  * @internal
241
252
  */
242
- async _decodeAsync(data, options) {
253
+ async _decodeAsync(data, options, transferData = false) {
243
254
  const caps = this._engine.getCaps();
244
255
  const compressedTexturesCaps = {
245
256
  astc: !!caps.astc,
@@ -277,9 +288,16 @@ export class KhronosTextureContainer2 {
277
288
  worker.addEventListener("error", onError);
278
289
  worker.addEventListener("message", onMessage);
279
290
  worker.postMessage({ action: "setDefaultDecoderOptions", options: KhronosTextureContainer2.DefaultDecoderOptions._getKTX2DecoderOptions() });
280
- const dataCopy = new Uint8Array(data.byteLength);
281
- dataCopy.set(new Uint8Array(data.buffer, data.byteOffset, data.byteLength));
282
- worker.postMessage({ action: "decode", data: dataCopy, caps: compressedTexturesCaps, options }, [dataCopy.buffer]);
291
+ // a buffer that holds only data is transferred; otherwise the worker gets a copy
292
+ let workerData;
293
+ if (transferData && data.buffer instanceof ArrayBuffer && data.byteOffset === 0 && data.byteLength === data.buffer.byteLength) {
294
+ workerData = new Uint8Array(data.buffer);
295
+ }
296
+ else {
297
+ workerData = new Uint8Array(data.byteLength);
298
+ workerData.set(new Uint8Array(data.buffer, data.byteOffset, data.byteLength));
299
+ }
300
+ worker.postMessage({ action: "decode", data: workerData, caps: compressedTexturesCaps, options }, [workerData.buffer]);
283
301
  });
284
302
  });
285
303
  }
@@ -1 +1 @@
1
- {"version":3,"file":"khronosTextureContainer2.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/khronosTextureContainer2.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { type InternalTexture } from \"../Materials/Textures/internalTexture\";\r\nimport { type AbstractEngine } from \"../Engines/abstractEngine\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { AutoReleaseWorkerPool } from \"./workerPool\";\r\nimport { Tools } from \"./tools.pure\";\r\nimport { type Nullable } from \"../types\";\r\nimport { type ICompressedFormatCapabilities, type IDecodedData, type IKTX2DecoderOptions, EngineFormat, TranscodeTarget } from \"core/Materials/Textures/ktx2decoderTypes\";\r\nimport { type AllowedKeys, applyConfig, initializeWebWorker, workerFunction } from \"./khronosTextureContainer2Worker\";\r\n\r\ndeclare let KTX2DECODER: any;\r\n\r\n/**\r\n * Class that defines the default KTX2 decoder options.\r\n *\r\n * This class is useful for providing options to the KTX2 decoder to control how the source data is transcoded.\r\n */\r\nexport class DefaultKTX2DecoderOptions {\r\n private _isDirty = true;\r\n\r\n /**\r\n * Gets the dirty flag\r\n */\r\n public get isDirty() {\r\n return this._isDirty;\r\n }\r\n\r\n private _useRGBAIfASTCBC7NotAvailableWhenUASTC?: boolean;\r\n /**\r\n * force a (uncompressed) RGBA transcoded format if transcoding a UASTC source format and ASTC + BC7 are not available as a compressed transcoded format\r\n */\r\n public get useRGBAIfASTCBC7NotAvailableWhenUASTC() {\r\n return this._useRGBAIfASTCBC7NotAvailableWhenUASTC;\r\n }\r\n\r\n public set useRGBAIfASTCBC7NotAvailableWhenUASTC(value: boolean | undefined) {\r\n if (this._useRGBAIfASTCBC7NotAvailableWhenUASTC === value) {\r\n return;\r\n }\r\n this._useRGBAIfASTCBC7NotAvailableWhenUASTC = value;\r\n this._isDirty = true;\r\n }\r\n\r\n private _useRGBAIfOnlyBC1BC3AvailableWhenUASTC?: boolean = true;\r\n /**\r\n * force a (uncompressed) RGBA transcoded format if transcoding a UASTC source format and only BC1 or BC3 are available as a compressed transcoded format.\r\n * This property is true by default to favor speed over memory, because currently transcoding from UASTC to BC1/3 is slow because the transcoder transcodes\r\n * to uncompressed and then recompresses the texture\r\n */\r\n public get useRGBAIfOnlyBC1BC3AvailableWhenUASTC() {\r\n return this._useRGBAIfOnlyBC1BC3AvailableWhenUASTC;\r\n }\r\n\r\n public set useRGBAIfOnlyBC1BC3AvailableWhenUASTC(value: boolean | undefined) {\r\n if (this._useRGBAIfOnlyBC1BC3AvailableWhenUASTC === value) {\r\n return;\r\n }\r\n this._useRGBAIfOnlyBC1BC3AvailableWhenUASTC = value;\r\n this._isDirty = true;\r\n }\r\n\r\n private _forceRGBA?: boolean;\r\n /**\r\n * force to always use (uncompressed) RGBA for transcoded format\r\n */\r\n public get forceRGBA() {\r\n return this._forceRGBA;\r\n }\r\n\r\n public set forceRGBA(value: boolean | undefined) {\r\n if (this._forceRGBA === value) {\r\n return;\r\n }\r\n this._forceRGBA = value;\r\n this._isDirty = true;\r\n }\r\n\r\n private _forceR8?: boolean;\r\n /**\r\n * force to always use (uncompressed) R8 for transcoded format\r\n */\r\n public get forceR8() {\r\n return this._forceR8;\r\n }\r\n\r\n public set forceR8(value: boolean | undefined) {\r\n if (this._forceR8 === value) {\r\n return;\r\n }\r\n this._forceR8 = value;\r\n this._isDirty = true;\r\n }\r\n\r\n private _forceRG8?: boolean;\r\n /**\r\n * force to always use (uncompressed) RG8 for transcoded format\r\n */\r\n public get forceRG8() {\r\n return this._forceRG8;\r\n }\r\n\r\n public set forceRG8(value: boolean | undefined) {\r\n if (this._forceRG8 === value) {\r\n return;\r\n }\r\n this._forceRG8 = value;\r\n this._isDirty = true;\r\n }\r\n\r\n private _bypassTranscoders?: string[];\r\n /**\r\n * list of transcoders to bypass when looking for a suitable transcoder. The available transcoders are:\r\n * UniversalTranscoder_UASTC_ASTC\r\n * UniversalTranscoder_UASTC_BC7\r\n * UniversalTranscoder_UASTC_RGBA_UNORM\r\n * UniversalTranscoder_UASTC_RGBA_SRGB\r\n * UniversalTranscoder_UASTC_R8_UNORM\r\n * UniversalTranscoder_UASTC_RG8_UNORM\r\n * MSCTranscoder\r\n */\r\n public get bypassTranscoders() {\r\n return this._bypassTranscoders;\r\n }\r\n\r\n public set bypassTranscoders(value: string[] | undefined) {\r\n if (this._bypassTranscoders === value) {\r\n return;\r\n }\r\n this._bypassTranscoders = value;\r\n this._isDirty = true;\r\n }\r\n\r\n private _ktx2DecoderOptions: IKTX2DecoderOptions = {};\r\n\r\n /** @internal */\r\n public _getKTX2DecoderOptions(): IKTX2DecoderOptions {\r\n if (!this._isDirty) {\r\n return this._ktx2DecoderOptions;\r\n }\r\n\r\n this._isDirty = false;\r\n\r\n const options: IKTX2DecoderOptions = {};\r\n\r\n if (this._useRGBAIfASTCBC7NotAvailableWhenUASTC !== undefined) {\r\n options.useRGBAIfASTCBC7NotAvailableWhenUASTC = this._useRGBAIfASTCBC7NotAvailableWhenUASTC;\r\n }\r\n if (this._forceRGBA !== undefined) {\r\n options.forceRGBA = this._forceRGBA;\r\n }\r\n if (this._forceR8 !== undefined) {\r\n options.forceR8 = this._forceR8;\r\n }\r\n if (this._forceRG8 !== undefined) {\r\n options.forceRG8 = this._forceRG8;\r\n }\r\n if (this._bypassTranscoders !== undefined) {\r\n options.bypassTranscoders = this._bypassTranscoders;\r\n }\r\n\r\n if (this.useRGBAIfOnlyBC1BC3AvailableWhenUASTC) {\r\n options.transcodeFormatDecisionTree = {\r\n UASTC: {\r\n transcodeFormat: [TranscodeTarget.BC1_RGB, TranscodeTarget.BC3_RGBA],\r\n yes: {\r\n transcodeFormat: TranscodeTarget.RGBA32,\r\n engineFormat: EngineFormat.RGBA8Format,\r\n roundToMultiple4: false,\r\n },\r\n },\r\n };\r\n }\r\n\r\n this._ktx2DecoderOptions = options;\r\n\r\n return options;\r\n }\r\n}\r\n\r\n/**\r\n * Options for the KTX2 decoder\r\n */\r\nexport interface IKhronosTextureContainer2Options {\r\n /**\r\n * Number of workers to use for async operations. Specify `0` to disable web workers and run synchronously in the current context.\r\n */\r\n numWorkers?: number;\r\n /**\r\n * Worker pool to use for async operations. If set, `numWorkers` will be ignored.\r\n */\r\n workerPool?: AutoReleaseWorkerPool;\r\n /**\r\n * Optional container for the KTX2 decoder module and its dependencies. If set, the module will be used from this container and the URLs will be ignored.\r\n */\r\n // No need for | any here\r\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\r\n binariesAndModulesContainer?: { [key in AllowedKeys]?: ArrayBuffer | any };\r\n}\r\n\r\n/**\r\n * Class for loading KTX2 files\r\n */\r\nexport class KhronosTextureContainer2 {\r\n private static _WorkerPoolPromise?: Promise<AutoReleaseWorkerPool>;\r\n private static _DecoderModulePromise?: Promise<any>;\r\n private static _KTX2DecoderModule?: any;\r\n\r\n /**\r\n * URLs to use when loading the KTX2 decoder module as well as its dependencies\r\n * If a url is null, the default url is used (pointing to https://preview.babylonjs.com)\r\n * Note that jsDecoderModule can't be null and that the other dependencies will only be loaded if necessary\r\n * Urls you can change:\r\n * URLConfig.jsDecoderModule\r\n * URLConfig.wasmUASTCToASTC\r\n * URLConfig.wasmUASTCToBC7\r\n * URLConfig.wasmUASTCToRGBA_UNORM\r\n * URLConfig.wasmUASTCToRGBA_SRGB\r\n * URLConfig.wasmUASTCToR8_UNORM\r\n * URLConfig.wasmUASTCToRG8_UNORM\r\n * URLConfig.jsMSCTranscoder\r\n * URLConfig.wasmMSCTranscoder\r\n * URLConfig.wasmZSTDDecoder\r\n * You can see their default values in this PG: https://playground.babylonjs.com/#EIJH8L#29\r\n */\r\n public static URLConfig: {\r\n jsDecoderModule: string;\r\n wasmUASTCToASTC: Nullable<string>;\r\n wasmUASTCToBC7: Nullable<string>;\r\n wasmUASTCToRGBA_UNORM: Nullable<string>;\r\n wasmUASTCToRGBA_SRGB: Nullable<string>;\r\n wasmUASTCToR8_UNORM: Nullable<string>;\r\n wasmUASTCToRG8_UNORM: Nullable<string>;\r\n jsMSCTranscoder: Nullable<string>;\r\n wasmMSCTranscoder: Nullable<string>;\r\n wasmZSTDDecoder: Nullable<string>;\r\n } = {\r\n jsDecoderModule: \"https://cdn.babylonjs.com/babylon.ktx2Decoder.js\",\r\n wasmUASTCToASTC: null,\r\n wasmUASTCToBC7: null,\r\n wasmUASTCToRGBA_UNORM: null,\r\n wasmUASTCToRGBA_SRGB: null,\r\n wasmUASTCToR8_UNORM: null,\r\n wasmUASTCToRG8_UNORM: null,\r\n jsMSCTranscoder: null,\r\n wasmMSCTranscoder: null,\r\n wasmZSTDDecoder: null,\r\n };\r\n\r\n /**\r\n * If provided, this worker pool will be used instead of creating a new one.\r\n * This is useful when loading the WASM and the js modules on your own and\r\n * you want to use the ktxTextureLoader and not construct this class directly.\r\n */\r\n public static WorkerPool?: AutoReleaseWorkerPool;\r\n\r\n /**\r\n * Default number of workers used to handle data decoding\r\n */\r\n public static DefaultNumWorkers = KhronosTextureContainer2.GetDefaultNumWorkers();\r\n\r\n /**\r\n * Default configuration for the KTX2 decoder.\r\n * The options defined in this way have priority over those passed when creating a KTX2 texture with new Texture(...).\r\n */\r\n public static DefaultDecoderOptions = new DefaultKTX2DecoderOptions();\r\n\r\n private static GetDefaultNumWorkers(): number {\r\n if (typeof navigator !== \"object\" || !navigator.hardwareConcurrency) {\r\n return 1;\r\n }\r\n\r\n // Use 50% of the available logical processors but capped at 4.\r\n return Math.min(Math.floor(navigator.hardwareConcurrency * 0.5), 4);\r\n }\r\n\r\n private _engine: AbstractEngine;\r\n\r\n private static _Initialize(numWorkers: number): void {\r\n if (KhronosTextureContainer2._WorkerPoolPromise || KhronosTextureContainer2._DecoderModulePromise) {\r\n return;\r\n }\r\n\r\n const urls = {\r\n wasmBaseUrl: Tools.ScriptBaseUrl,\r\n jsDecoderModule: Tools.GetBabylonScriptURL(this.URLConfig.jsDecoderModule, true),\r\n wasmUASTCToASTC: Tools.GetBabylonScriptURL(this.URLConfig.wasmUASTCToASTC, true),\r\n wasmUASTCToBC7: Tools.GetBabylonScriptURL(this.URLConfig.wasmUASTCToBC7, true),\r\n wasmUASTCToRGBA_UNORM: Tools.GetBabylonScriptURL(this.URLConfig.wasmUASTCToRGBA_UNORM, true),\r\n wasmUASTCToRGBA_SRGB: Tools.GetBabylonScriptURL(this.URLConfig.wasmUASTCToRGBA_SRGB, true),\r\n wasmUASTCToR8_UNORM: Tools.GetBabylonScriptURL(this.URLConfig.wasmUASTCToR8_UNORM, true),\r\n wasmUASTCToRG8_UNORM: Tools.GetBabylonScriptURL(this.URLConfig.wasmUASTCToRG8_UNORM, true),\r\n jsMSCTranscoder: Tools.GetBabylonScriptURL(this.URLConfig.jsMSCTranscoder, true),\r\n wasmMSCTranscoder: Tools.GetBabylonScriptURL(this.URLConfig.wasmMSCTranscoder, true),\r\n wasmZSTDDecoder: Tools.GetBabylonScriptURL(this.URLConfig.wasmZSTDDecoder, true),\r\n };\r\n\r\n if (numWorkers && typeof Worker === \"function\" && typeof URL !== \"undefined\") {\r\n KhronosTextureContainer2._WorkerPoolPromise = new Promise((resolve) => {\r\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\r\n const workerContent = `${applyConfig}(${workerFunction})()`;\r\n const workerBlobUrl = URL.createObjectURL(new Blob([workerContent], { type: \"application/javascript\" }));\r\n resolve(new AutoReleaseWorkerPool(numWorkers, async () => await initializeWebWorker(new Worker(workerBlobUrl), undefined, urls)));\r\n });\r\n } else {\r\n if (typeof KhronosTextureContainer2._KTX2DecoderModule === \"undefined\") {\r\n // eslint-disable-next-line github/no-then\r\n KhronosTextureContainer2._DecoderModulePromise = Tools.LoadBabylonScriptAsync(urls.jsDecoderModule).then(() => {\r\n KhronosTextureContainer2._KTX2DecoderModule = KTX2DECODER;\r\n KhronosTextureContainer2._KTX2DecoderModule.MSCTranscoder.UseFromWorkerThread = false;\r\n KhronosTextureContainer2._KTX2DecoderModule.WASMMemoryManager.LoadBinariesFromCurrentThread = true;\r\n applyConfig(urls, KhronosTextureContainer2._KTX2DecoderModule);\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\r\n return new KhronosTextureContainer2._KTX2DecoderModule.KTX2Decoder();\r\n });\r\n } else {\r\n KhronosTextureContainer2._KTX2DecoderModule.MSCTranscoder.UseFromWorkerThread = false;\r\n KhronosTextureContainer2._KTX2DecoderModule.WASMMemoryManager.LoadBinariesFromCurrentThread = true;\r\n KhronosTextureContainer2._DecoderModulePromise = Promise.resolve(new KhronosTextureContainer2._KTX2DecoderModule.KTX2Decoder());\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Constructor\r\n * @param engine The engine to use\r\n * @param numWorkersOrOptions The number of workers for async operations. Specify `0` to disable web workers and run synchronously in the current context.\r\n */\r\n public constructor(engine: AbstractEngine, numWorkersOrOptions: number | IKhronosTextureContainer2Options = KhronosTextureContainer2.DefaultNumWorkers) {\r\n this._engine = engine;\r\n const workerPoolOption = (typeof numWorkersOrOptions === \"object\" && numWorkersOrOptions.workerPool) || KhronosTextureContainer2.WorkerPool;\r\n if (workerPoolOption) {\r\n KhronosTextureContainer2._WorkerPoolPromise = Promise.resolve(workerPoolOption);\r\n } else {\r\n // set the KTX2 decoder module\r\n if (typeof numWorkersOrOptions === \"object\") {\r\n KhronosTextureContainer2._KTX2DecoderModule = numWorkersOrOptions?.binariesAndModulesContainer?.jsDecoderModule;\r\n } else if (typeof KTX2DECODER !== \"undefined\") {\r\n KhronosTextureContainer2._KTX2DecoderModule = KTX2DECODER;\r\n }\r\n const numberOfWorkers = typeof numWorkersOrOptions === \"number\" ? numWorkersOrOptions : (numWorkersOrOptions.numWorkers ?? KhronosTextureContainer2.DefaultNumWorkers);\r\n KhronosTextureContainer2._Initialize(numberOfWorkers);\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public async _uploadAsync(data: ArrayBufferView, internalTexture: InternalTexture, options?: IKTX2DecoderOptions & IDecodedData): Promise<void> {\r\n const decodedData = await this._decodeAsync(data, options);\r\n this._createTexture(decodedData, internalTexture, options);\r\n }\r\n\r\n /**\r\n * Decodes a KTX2 file and returns the decoded data, without uploading it to a texture.\r\n * Kept separate from _uploadAsync so consumers that build their own texture (2D array textures, for eg)\r\n * can reuse the worker pool, decoder module and url configuration handled here.\r\n * @param data defines the KTX2 file content\r\n * @param options defines the options to use when decoding\r\n * @returns a promise resolved with the decoded data\r\n * @internal\r\n */\r\n public async _decodeAsync(data: ArrayBufferView, options?: IKTX2DecoderOptions): Promise<IDecodedData> {\r\n const caps = this._engine.getCaps();\r\n\r\n const compressedTexturesCaps: ICompressedFormatCapabilities = {\r\n astc: !!caps.astc,\r\n bptc: !!caps.bptc,\r\n s3tc: !!caps.s3tc,\r\n pvrtc: !!caps.pvrtc,\r\n etc2: !!caps.etc2,\r\n etc1: !!caps.etc1,\r\n };\r\n\r\n if (KhronosTextureContainer2._WorkerPoolPromise) {\r\n const workerPool = await KhronosTextureContainer2._WorkerPoolPromise;\r\n return await new Promise((resolve, reject) => {\r\n workerPool.push((worker, onComplete) => {\r\n const onError = (error: ErrorEvent) => {\r\n worker.removeEventListener(\"error\", onError);\r\n worker.removeEventListener(\"message\", onMessage);\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n reject(error);\r\n onComplete();\r\n };\r\n\r\n const onMessage = (message: MessageEvent) => {\r\n if (message.data.action === \"decoded\") {\r\n worker.removeEventListener(\"error\", onError);\r\n worker.removeEventListener(\"message\", onMessage);\r\n if (!message.data.success) {\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n reject({ message: message.data.msg });\r\n } else {\r\n resolve(message.data.decodedData);\r\n }\r\n onComplete();\r\n }\r\n };\r\n\r\n worker.addEventListener(\"error\", onError);\r\n worker.addEventListener(\"message\", onMessage);\r\n worker.postMessage({ action: \"setDefaultDecoderOptions\", options: KhronosTextureContainer2.DefaultDecoderOptions._getKTX2DecoderOptions() });\r\n\r\n const dataCopy = new Uint8Array(data.byteLength);\r\n dataCopy.set(new Uint8Array(data.buffer, data.byteOffset, data.byteLength));\r\n\r\n worker.postMessage({ action: \"decode\", data: dataCopy, caps: compressedTexturesCaps, options }, [dataCopy.buffer]);\r\n });\r\n });\r\n } else if (KhronosTextureContainer2._DecoderModulePromise) {\r\n const decoder = await KhronosTextureContainer2._DecoderModulePromise;\r\n if (KhronosTextureContainer2.DefaultDecoderOptions.isDirty) {\r\n KhronosTextureContainer2._KTX2DecoderModule.KTX2Decoder.DefaultDecoderOptions = KhronosTextureContainer2.DefaultDecoderOptions._getKTX2DecoderOptions();\r\n }\r\n return await new Promise((resolve, reject) => {\r\n decoder\r\n .decode(data, caps, options)\r\n // eslint-disable-next-line github/no-then\r\n .then((decodedData: IDecodedData) => {\r\n resolve(decodedData);\r\n })\r\n // eslint-disable-next-line github/no-then\r\n .catch((reason: any) => {\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n reject({ message: reason });\r\n });\r\n });\r\n }\r\n\r\n throw new Error(\"KTX2 decoder module is not available\");\r\n }\r\n\r\n protected _createTexture(data: IDecodedData, internalTexture: InternalTexture, options?: IKTX2DecoderOptions & IDecodedData): void {\r\n // The decoder can now return array textures (one mipmap entry per layer per level), but this\r\n // upload path is 2D only: it binds gl.TEXTURE_2D and walks mipmaps as if each entry were a\r\n // distinct level. Fail loudly rather than silently uploading layer data as mip levels.\r\n if ((data.layerCount ?? 1) > 1) {\r\n throw new Error(\"KTX2 container - array textures are not supported by this texture loader.\");\r\n }\r\n\r\n const oglTexture2D = 3553; // gl.TEXTURE_2D\r\n\r\n this._engine._bindTextureDirectly(oglTexture2D, internalTexture);\r\n\r\n if (options) {\r\n // return back some information about the decoded data\r\n options.transcodedFormat = data.transcodedFormat;\r\n options.isInGammaSpace = data.isInGammaSpace;\r\n options.hasAlpha = data.hasAlpha;\r\n options.transcoderName = data.transcoderName;\r\n }\r\n\r\n let isUncompressedFormat = true;\r\n\r\n switch (data.transcodedFormat) {\r\n case 0x8058 /* RGBA8 */:\r\n internalTexture.type = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n internalTexture.format = Constants.TEXTUREFORMAT_RGBA;\r\n break;\r\n case 0x8229 /* R8 */:\r\n internalTexture.type = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n internalTexture.format = Constants.TEXTUREFORMAT_R;\r\n break;\r\n case 0x822b /* RG8 */:\r\n internalTexture.type = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n internalTexture.format = Constants.TEXTUREFORMAT_RG;\r\n break;\r\n default:\r\n internalTexture.format = data.transcodedFormat;\r\n isUncompressedFormat = false;\r\n break;\r\n }\r\n\r\n internalTexture._gammaSpace = data.isInGammaSpace;\r\n internalTexture.generateMipMaps = data.mipmaps.length > 1;\r\n internalTexture.width = data.mipmaps[0].width;\r\n internalTexture.height = data.mipmaps[0].height;\r\n\r\n if (data.errors) {\r\n throw new Error(\"KTX2 container - could not transcode the data. \" + data.errors);\r\n }\r\n\r\n for (let t = 0; t < data.mipmaps.length; ++t) {\r\n const mipmap = data.mipmaps[t];\r\n\r\n if (!mipmap || !mipmap.data) {\r\n throw new Error(\"KTX2 container - could not transcode one of the image\");\r\n }\r\n\r\n if (isUncompressedFormat) {\r\n // uncompressed RGBA / R8 / RG8\r\n internalTexture.width = mipmap.width; // need to set width/height so that the call to _uploadDataToTextureDirectly uses the right dimensions\r\n internalTexture.height = mipmap.height;\r\n\r\n this._engine._uploadDataToTextureDirectly(internalTexture, mipmap.data, 0, t, undefined, true);\r\n } else {\r\n this._engine._uploadCompressedDataToTextureDirectly(internalTexture, data.transcodedFormat, mipmap.width, mipmap.height, mipmap.data, 0, t);\r\n }\r\n }\r\n\r\n internalTexture._extension = \".ktx2\";\r\n internalTexture.isReady = true;\r\n\r\n this._engine._bindTextureDirectly(oglTexture2D, null);\r\n }\r\n\r\n /**\r\n * Checks if the given data starts with a KTX2 file identifier.\r\n * @param data the data to check\r\n * @returns true if the data is a KTX2 file or false otherwise\r\n */\r\n public static IsValid(data: ArrayBufferView): boolean {\r\n if (data.byteLength >= 12) {\r\n // '«', 'K', 'T', 'X', ' ', '2', '0', '»', '\\r', '\\n', '\\x1A', '\\n'\r\n const identifier = new Uint8Array(data.buffer, data.byteOffset, 12);\r\n if (\r\n identifier[0] === 0xab &&\r\n identifier[1] === 0x4b &&\r\n identifier[2] === 0x54 &&\r\n identifier[3] === 0x58 &&\r\n identifier[4] === 0x20 &&\r\n identifier[5] === 0x32 &&\r\n identifier[6] === 0x30 &&\r\n identifier[7] === 0xbb &&\r\n identifier[8] === 0x0d &&\r\n identifier[9] === 0x0a &&\r\n identifier[10] === 0x1a &&\r\n identifier[11] === 0x0a\r\n ) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"khronosTextureContainer2.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/khronosTextureContainer2.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { type InternalTexture } from \"../Materials/Textures/internalTexture\";\r\nimport { type AbstractEngine } from \"../Engines/abstractEngine\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { AutoReleaseWorkerPool } from \"./workerPool\";\r\nimport { Tools } from \"./tools.pure\";\r\nimport { type Nullable } from \"../types\";\r\nimport { type ICompressedFormatCapabilities, type IDecodedData, type IKTX2DecoderOptions, EngineFormat, TranscodeTarget } from \"core/Materials/Textures/ktx2decoderTypes\";\r\nimport { type AllowedKeys, applyConfig, initializeWebWorker, workerFunction } from \"./khronosTextureContainer2Worker\";\r\n\r\ndeclare let KTX2DECODER: any;\r\n\r\n/**\r\n * Class that defines the default KTX2 decoder options.\r\n *\r\n * This class is useful for providing options to the KTX2 decoder to control how the source data is transcoded.\r\n */\r\nexport class DefaultKTX2DecoderOptions {\r\n private _isDirty = true;\r\n\r\n /**\r\n * Gets the dirty flag\r\n */\r\n public get isDirty() {\r\n return this._isDirty;\r\n }\r\n\r\n private _useRGBAIfASTCBC7NotAvailableWhenUASTC?: boolean;\r\n /**\r\n * force a (uncompressed) RGBA transcoded format if transcoding a UASTC source format and ASTC + BC7 are not available as a compressed transcoded format\r\n */\r\n public get useRGBAIfASTCBC7NotAvailableWhenUASTC() {\r\n return this._useRGBAIfASTCBC7NotAvailableWhenUASTC;\r\n }\r\n\r\n public set useRGBAIfASTCBC7NotAvailableWhenUASTC(value: boolean | undefined) {\r\n if (this._useRGBAIfASTCBC7NotAvailableWhenUASTC === value) {\r\n return;\r\n }\r\n this._useRGBAIfASTCBC7NotAvailableWhenUASTC = value;\r\n this._isDirty = true;\r\n }\r\n\r\n private _useRGBAIfOnlyBC1BC3AvailableWhenUASTC?: boolean = true;\r\n /**\r\n * force a (uncompressed) RGBA transcoded format if transcoding a UASTC source format and only BC1 or BC3 are available as a compressed transcoded format.\r\n * This property is true by default to favor speed over memory, because currently transcoding from UASTC to BC1/3 is slow because the transcoder transcodes\r\n * to uncompressed and then recompresses the texture\r\n */\r\n public get useRGBAIfOnlyBC1BC3AvailableWhenUASTC() {\r\n return this._useRGBAIfOnlyBC1BC3AvailableWhenUASTC;\r\n }\r\n\r\n public set useRGBAIfOnlyBC1BC3AvailableWhenUASTC(value: boolean | undefined) {\r\n if (this._useRGBAIfOnlyBC1BC3AvailableWhenUASTC === value) {\r\n return;\r\n }\r\n this._useRGBAIfOnlyBC1BC3AvailableWhenUASTC = value;\r\n this._isDirty = true;\r\n }\r\n\r\n private _forceRGBA?: boolean;\r\n /**\r\n * force to always use (uncompressed) RGBA for transcoded format\r\n */\r\n public get forceRGBA() {\r\n return this._forceRGBA;\r\n }\r\n\r\n public set forceRGBA(value: boolean | undefined) {\r\n if (this._forceRGBA === value) {\r\n return;\r\n }\r\n this._forceRGBA = value;\r\n this._isDirty = true;\r\n }\r\n\r\n private _forceR8?: boolean;\r\n /**\r\n * force to always use (uncompressed) R8 for transcoded format\r\n */\r\n public get forceR8() {\r\n return this._forceR8;\r\n }\r\n\r\n public set forceR8(value: boolean | undefined) {\r\n if (this._forceR8 === value) {\r\n return;\r\n }\r\n this._forceR8 = value;\r\n this._isDirty = true;\r\n }\r\n\r\n private _forceRG8?: boolean;\r\n /**\r\n * force to always use (uncompressed) RG8 for transcoded format\r\n */\r\n public get forceRG8() {\r\n return this._forceRG8;\r\n }\r\n\r\n public set forceRG8(value: boolean | undefined) {\r\n if (this._forceRG8 === value) {\r\n return;\r\n }\r\n this._forceRG8 = value;\r\n this._isDirty = true;\r\n }\r\n\r\n private _bypassTranscoders?: string[];\r\n /**\r\n * list of transcoders to bypass when looking for a suitable transcoder. The available transcoders are:\r\n * UniversalTranscoder_UASTC_ASTC\r\n * UniversalTranscoder_UASTC_BC7\r\n * UniversalTranscoder_UASTC_RGBA_UNORM\r\n * UniversalTranscoder_UASTC_RGBA_SRGB\r\n * UniversalTranscoder_UASTC_R8_UNORM\r\n * UniversalTranscoder_UASTC_RG8_UNORM\r\n * MSCTranscoder\r\n */\r\n public get bypassTranscoders() {\r\n return this._bypassTranscoders;\r\n }\r\n\r\n public set bypassTranscoders(value: string[] | undefined) {\r\n if (this._bypassTranscoders === value) {\r\n return;\r\n }\r\n this._bypassTranscoders = value;\r\n this._isDirty = true;\r\n }\r\n\r\n private _ktx2DecoderOptions: IKTX2DecoderOptions = {};\r\n\r\n /** @internal */\r\n public _getKTX2DecoderOptions(): IKTX2DecoderOptions {\r\n if (!this._isDirty) {\r\n return this._ktx2DecoderOptions;\r\n }\r\n\r\n this._isDirty = false;\r\n\r\n const options: IKTX2DecoderOptions = {};\r\n\r\n if (this._useRGBAIfASTCBC7NotAvailableWhenUASTC !== undefined) {\r\n options.useRGBAIfASTCBC7NotAvailableWhenUASTC = this._useRGBAIfASTCBC7NotAvailableWhenUASTC;\r\n }\r\n if (this._forceRGBA !== undefined) {\r\n options.forceRGBA = this._forceRGBA;\r\n }\r\n if (this._forceR8 !== undefined) {\r\n options.forceR8 = this._forceR8;\r\n }\r\n if (this._forceRG8 !== undefined) {\r\n options.forceRG8 = this._forceRG8;\r\n }\r\n if (this._bypassTranscoders !== undefined) {\r\n options.bypassTranscoders = this._bypassTranscoders;\r\n }\r\n\r\n if (this.useRGBAIfOnlyBC1BC3AvailableWhenUASTC) {\r\n options.transcodeFormatDecisionTree = {\r\n UASTC: {\r\n transcodeFormat: [TranscodeTarget.BC1_RGB, TranscodeTarget.BC3_RGBA],\r\n yes: {\r\n transcodeFormat: TranscodeTarget.RGBA32,\r\n engineFormat: EngineFormat.RGBA8Format,\r\n roundToMultiple4: false,\r\n },\r\n },\r\n };\r\n }\r\n\r\n this._ktx2DecoderOptions = options;\r\n\r\n return options;\r\n }\r\n}\r\n\r\n/**\r\n * Options for the KTX2 decoder\r\n */\r\nexport interface IKhronosTextureContainer2Options {\r\n /**\r\n * Number of workers to use for async operations. Specify `0` to disable web workers and run synchronously in the current context.\r\n */\r\n numWorkers?: number;\r\n /**\r\n * Worker pool to use for async operations. If set, `numWorkers` will be ignored.\r\n */\r\n workerPool?: AutoReleaseWorkerPool;\r\n /**\r\n * Optional container for the KTX2 decoder module and its dependencies. If set, the module will be used from this container and the URLs will be ignored.\r\n */\r\n // No need for | any here\r\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\r\n binariesAndModulesContainer?: { [key in AllowedKeys]?: ArrayBuffer | any };\r\n}\r\n\r\n/**\r\n * Class for loading KTX2 files\r\n */\r\nexport class KhronosTextureContainer2 {\r\n private static _WorkerPoolPromise?: Promise<AutoReleaseWorkerPool>;\r\n private static _DecoderModulePromise?: Promise<any>;\r\n private static _KTX2DecoderModule?: any;\r\n\r\n /**\r\n * URLs to use when loading the KTX2 decoder module as well as its dependencies\r\n * If a url is null, the default url is used (pointing to https://preview.babylonjs.com)\r\n * Note that jsDecoderModule can't be null and that the other dependencies will only be loaded if necessary\r\n * Urls you can change:\r\n * URLConfig.jsDecoderModule\r\n * URLConfig.wasmUASTCToASTC\r\n * URLConfig.wasmUASTCToBC7\r\n * URLConfig.wasmUASTCToRGBA_UNORM\r\n * URLConfig.wasmUASTCToRGBA_SRGB\r\n * URLConfig.wasmUASTCToR8_UNORM\r\n * URLConfig.wasmUASTCToRG8_UNORM\r\n * URLConfig.jsMSCTranscoder\r\n * URLConfig.wasmMSCTranscoder\r\n * URLConfig.wasmZSTDDecoder\r\n * You can see their default values in this PG: https://playground.babylonjs.com/#EIJH8L#29\r\n */\r\n public static URLConfig: {\r\n jsDecoderModule: string;\r\n wasmUASTCToASTC: Nullable<string>;\r\n wasmUASTCToBC7: Nullable<string>;\r\n wasmUASTCToRGBA_UNORM: Nullable<string>;\r\n wasmUASTCToRGBA_SRGB: Nullable<string>;\r\n wasmUASTCToR8_UNORM: Nullable<string>;\r\n wasmUASTCToRG8_UNORM: Nullable<string>;\r\n jsMSCTranscoder: Nullable<string>;\r\n wasmMSCTranscoder: Nullable<string>;\r\n wasmZSTDDecoder: Nullable<string>;\r\n } = {\r\n jsDecoderModule: \"https://cdn.babylonjs.com/babylon.ktx2Decoder.js\",\r\n wasmUASTCToASTC: null,\r\n wasmUASTCToBC7: null,\r\n wasmUASTCToRGBA_UNORM: null,\r\n wasmUASTCToRGBA_SRGB: null,\r\n wasmUASTCToR8_UNORM: null,\r\n wasmUASTCToRG8_UNORM: null,\r\n jsMSCTranscoder: null,\r\n wasmMSCTranscoder: null,\r\n wasmZSTDDecoder: null,\r\n };\r\n\r\n /**\r\n * If provided, this worker pool will be used instead of creating a new one.\r\n * This is useful when loading the WASM and the js modules on your own and\r\n * you want to use the ktxTextureLoader and not construct this class directly.\r\n */\r\n public static WorkerPool?: AutoReleaseWorkerPool;\r\n\r\n /**\r\n * Default number of workers used to handle data decoding\r\n */\r\n public static DefaultNumWorkers = KhronosTextureContainer2.GetDefaultNumWorkers();\r\n\r\n /**\r\n * Default configuration for the KTX2 decoder.\r\n * The options defined in this way have priority over those passed when creating a KTX2 texture with new Texture(...).\r\n */\r\n public static DefaultDecoderOptions = new DefaultKTX2DecoderOptions();\r\n\r\n private static GetDefaultNumWorkers(): number {\r\n if (typeof navigator !== \"object\" || !navigator.hardwareConcurrency) {\r\n return 1;\r\n }\r\n\r\n // Use 50% of the available logical processors but capped at 4.\r\n return Math.min(Math.floor(navigator.hardwareConcurrency * 0.5), 4);\r\n }\r\n\r\n private _engine: AbstractEngine;\r\n\r\n private static _Initialize(numWorkers: number): void {\r\n if (KhronosTextureContainer2._WorkerPoolPromise || KhronosTextureContainer2._DecoderModulePromise) {\r\n return;\r\n }\r\n\r\n const urls = {\r\n wasmBaseUrl: Tools.ScriptBaseUrl,\r\n jsDecoderModule: Tools.GetBabylonScriptURL(this.URLConfig.jsDecoderModule, true),\r\n wasmUASTCToASTC: Tools.GetBabylonScriptURL(this.URLConfig.wasmUASTCToASTC, true),\r\n wasmUASTCToBC7: Tools.GetBabylonScriptURL(this.URLConfig.wasmUASTCToBC7, true),\r\n wasmUASTCToRGBA_UNORM: Tools.GetBabylonScriptURL(this.URLConfig.wasmUASTCToRGBA_UNORM, true),\r\n wasmUASTCToRGBA_SRGB: Tools.GetBabylonScriptURL(this.URLConfig.wasmUASTCToRGBA_SRGB, true),\r\n wasmUASTCToR8_UNORM: Tools.GetBabylonScriptURL(this.URLConfig.wasmUASTCToR8_UNORM, true),\r\n wasmUASTCToRG8_UNORM: Tools.GetBabylonScriptURL(this.URLConfig.wasmUASTCToRG8_UNORM, true),\r\n jsMSCTranscoder: Tools.GetBabylonScriptURL(this.URLConfig.jsMSCTranscoder, true),\r\n wasmMSCTranscoder: Tools.GetBabylonScriptURL(this.URLConfig.wasmMSCTranscoder, true),\r\n wasmZSTDDecoder: Tools.GetBabylonScriptURL(this.URLConfig.wasmZSTDDecoder, true),\r\n };\r\n\r\n if (numWorkers && typeof Worker === \"function\" && typeof URL !== \"undefined\") {\r\n KhronosTextureContainer2._WorkerPoolPromise = new Promise((resolve) => {\r\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\r\n const workerContent = `${applyConfig}(${workerFunction})()`;\r\n const workerBlobUrl = URL.createObjectURL(new Blob([workerContent], { type: \"application/javascript\" }));\r\n resolve(new AutoReleaseWorkerPool(numWorkers, async () => await initializeWebWorker(new Worker(workerBlobUrl), undefined, urls)));\r\n });\r\n } else {\r\n if (typeof KhronosTextureContainer2._KTX2DecoderModule === \"undefined\") {\r\n // eslint-disable-next-line github/no-then\r\n KhronosTextureContainer2._DecoderModulePromise = Tools.LoadBabylonScriptAsync(urls.jsDecoderModule).then(() => {\r\n KhronosTextureContainer2._KTX2DecoderModule = KTX2DECODER;\r\n KhronosTextureContainer2._KTX2DecoderModule.MSCTranscoder.UseFromWorkerThread = false;\r\n KhronosTextureContainer2._KTX2DecoderModule.WASMMemoryManager.LoadBinariesFromCurrentThread = true;\r\n applyConfig(urls, KhronosTextureContainer2._KTX2DecoderModule);\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\r\n return new KhronosTextureContainer2._KTX2DecoderModule.KTX2Decoder();\r\n });\r\n } else {\r\n KhronosTextureContainer2._KTX2DecoderModule.MSCTranscoder.UseFromWorkerThread = false;\r\n KhronosTextureContainer2._KTX2DecoderModule.WASMMemoryManager.LoadBinariesFromCurrentThread = true;\r\n KhronosTextureContainer2._DecoderModulePromise = Promise.resolve(new KhronosTextureContainer2._KTX2DecoderModule.KTX2Decoder());\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Constructor\r\n * @param engine The engine to use\r\n * @param numWorkersOrOptions The number of workers for async operations. Specify `0` to disable web workers and run synchronously in the current context.\r\n */\r\n public constructor(engine: AbstractEngine, numWorkersOrOptions: number | IKhronosTextureContainer2Options = KhronosTextureContainer2.DefaultNumWorkers) {\r\n this._engine = engine;\r\n const workerPoolOption = (typeof numWorkersOrOptions === \"object\" && numWorkersOrOptions.workerPool) || KhronosTextureContainer2.WorkerPool;\r\n if (workerPoolOption) {\r\n KhronosTextureContainer2._WorkerPoolPromise = Promise.resolve(workerPoolOption);\r\n } else {\r\n // set the KTX2 decoder module\r\n if (typeof numWorkersOrOptions === \"object\") {\r\n KhronosTextureContainer2._KTX2DecoderModule = numWorkersOrOptions?.binariesAndModulesContainer?.jsDecoderModule;\r\n } else if (typeof KTX2DECODER !== \"undefined\") {\r\n KhronosTextureContainer2._KTX2DecoderModule = KTX2DECODER;\r\n }\r\n const numberOfWorkers = typeof numWorkersOrOptions === \"number\" ? numWorkersOrOptions : (numWorkersOrOptions.numWorkers ?? KhronosTextureContainer2.DefaultNumWorkers);\r\n KhronosTextureContainer2._Initialize(numberOfWorkers);\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public async _uploadAsync(data: ArrayBufferView, internalTexture: InternalTexture, options?: IKTX2DecoderOptions & IDecodedData, ownsData = false): Promise<void> {\r\n const fromWorker = !!KhronosTextureContainer2._WorkerPoolPromise;\r\n const decodedData = await this._decodeAsync(data, options, ownsData);\r\n this._createTexture(decodedData, internalTexture, options);\r\n if (fromWorker) {\r\n // nothing else holds the levels a worker sent, and they are uploaded now: their memory is freed at once, not by a later GC\r\n for (const mipmap of decodedData.mipmaps) {\r\n const buffer = mipmap.data?.buffer as { detached?: boolean; transfer?: (newLength: number) => ArrayBuffer } | undefined;\r\n if (buffer?.transfer && !buffer.detached) {\r\n buffer.transfer(0);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Decodes a KTX2 file and returns the decoded data, without uploading it to a texture.\r\n * Kept separate from _uploadAsync so consumers that build their own texture (2D array textures, for eg)\r\n * can reuse the worker pool, decoder module and url configuration handled here.\r\n * @param data defines the KTX2 file content\r\n * @param options defines the options to use when decoding\r\n * @param transferData defines whether nothing else holds data, so a worker can get its buffer instead of a copy\r\n * @returns a promise resolved with the decoded data\r\n * @internal\r\n */\r\n public async _decodeAsync(data: ArrayBufferView, options?: IKTX2DecoderOptions, transferData = false): Promise<IDecodedData> {\r\n const caps = this._engine.getCaps();\r\n\r\n const compressedTexturesCaps: ICompressedFormatCapabilities = {\r\n astc: !!caps.astc,\r\n bptc: !!caps.bptc,\r\n s3tc: !!caps.s3tc,\r\n pvrtc: !!caps.pvrtc,\r\n etc2: !!caps.etc2,\r\n etc1: !!caps.etc1,\r\n };\r\n\r\n if (KhronosTextureContainer2._WorkerPoolPromise) {\r\n const workerPool = await KhronosTextureContainer2._WorkerPoolPromise;\r\n return await new Promise((resolve, reject) => {\r\n workerPool.push((worker, onComplete) => {\r\n const onError = (error: ErrorEvent) => {\r\n worker.removeEventListener(\"error\", onError);\r\n worker.removeEventListener(\"message\", onMessage);\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n reject(error);\r\n onComplete();\r\n };\r\n\r\n const onMessage = (message: MessageEvent) => {\r\n if (message.data.action === \"decoded\") {\r\n worker.removeEventListener(\"error\", onError);\r\n worker.removeEventListener(\"message\", onMessage);\r\n if (!message.data.success) {\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n reject({ message: message.data.msg });\r\n } else {\r\n resolve(message.data.decodedData);\r\n }\r\n onComplete();\r\n }\r\n };\r\n\r\n worker.addEventListener(\"error\", onError);\r\n worker.addEventListener(\"message\", onMessage);\r\n worker.postMessage({ action: \"setDefaultDecoderOptions\", options: KhronosTextureContainer2.DefaultDecoderOptions._getKTX2DecoderOptions() });\r\n\r\n // a buffer that holds only data is transferred; otherwise the worker gets a copy\r\n let workerData: Uint8Array;\r\n if (transferData && data.buffer instanceof ArrayBuffer && data.byteOffset === 0 && data.byteLength === data.buffer.byteLength) {\r\n workerData = new Uint8Array(data.buffer);\r\n } else {\r\n workerData = new Uint8Array(data.byteLength);\r\n workerData.set(new Uint8Array(data.buffer, data.byteOffset, data.byteLength));\r\n }\r\n\r\n worker.postMessage({ action: \"decode\", data: workerData, caps: compressedTexturesCaps, options }, [workerData.buffer]);\r\n });\r\n });\r\n } else if (KhronosTextureContainer2._DecoderModulePromise) {\r\n const decoder = await KhronosTextureContainer2._DecoderModulePromise;\r\n if (KhronosTextureContainer2.DefaultDecoderOptions.isDirty) {\r\n KhronosTextureContainer2._KTX2DecoderModule.KTX2Decoder.DefaultDecoderOptions = KhronosTextureContainer2.DefaultDecoderOptions._getKTX2DecoderOptions();\r\n }\r\n return await new Promise((resolve, reject) => {\r\n decoder\r\n .decode(data, caps, options)\r\n // eslint-disable-next-line github/no-then\r\n .then((decodedData: IDecodedData) => {\r\n resolve(decodedData);\r\n })\r\n // eslint-disable-next-line github/no-then\r\n .catch((reason: any) => {\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n reject({ message: reason });\r\n });\r\n });\r\n }\r\n\r\n throw new Error(\"KTX2 decoder module is not available\");\r\n }\r\n\r\n protected _createTexture(data: IDecodedData, internalTexture: InternalTexture, options?: IKTX2DecoderOptions & IDecodedData): void {\r\n // The decoder can now return array textures (one mipmap entry per layer per level), but this\r\n // upload path is 2D only: it binds gl.TEXTURE_2D and walks mipmaps as if each entry were a\r\n // distinct level. Fail loudly rather than silently uploading layer data as mip levels.\r\n if ((data.layerCount ?? 1) > 1) {\r\n throw new Error(\"KTX2 container - array textures are not supported by this texture loader.\");\r\n }\r\n\r\n const oglTexture2D = 3553; // gl.TEXTURE_2D\r\n\r\n this._engine._bindTextureDirectly(oglTexture2D, internalTexture);\r\n\r\n if (options) {\r\n // return back some information about the decoded data\r\n options.transcodedFormat = data.transcodedFormat;\r\n options.isInGammaSpace = data.isInGammaSpace;\r\n options.hasAlpha = data.hasAlpha;\r\n options.transcoderName = data.transcoderName;\r\n }\r\n\r\n let isUncompressedFormat = true;\r\n\r\n switch (data.transcodedFormat) {\r\n case 0x8058 /* RGBA8 */:\r\n internalTexture.type = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n internalTexture.format = Constants.TEXTUREFORMAT_RGBA;\r\n break;\r\n case 0x8229 /* R8 */:\r\n internalTexture.type = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n internalTexture.format = Constants.TEXTUREFORMAT_R;\r\n break;\r\n case 0x822b /* RG8 */:\r\n internalTexture.type = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n internalTexture.format = Constants.TEXTUREFORMAT_RG;\r\n break;\r\n default:\r\n internalTexture.format = data.transcodedFormat;\r\n isUncompressedFormat = false;\r\n break;\r\n }\r\n\r\n internalTexture._gammaSpace = data.isInGammaSpace;\r\n internalTexture.generateMipMaps = data.mipmaps.length > 1;\r\n internalTexture.width = data.mipmaps[0].width;\r\n internalTexture.height = data.mipmaps[0].height;\r\n\r\n if (data.errors) {\r\n throw new Error(\"KTX2 container - could not transcode the data. \" + data.errors);\r\n }\r\n\r\n for (let t = 0; t < data.mipmaps.length; ++t) {\r\n const mipmap = data.mipmaps[t];\r\n\r\n if (!mipmap || !mipmap.data) {\r\n throw new Error(\"KTX2 container - could not transcode one of the image\");\r\n }\r\n\r\n if (isUncompressedFormat) {\r\n // uncompressed RGBA / R8 / RG8\r\n internalTexture.width = mipmap.width; // need to set width/height so that the call to _uploadDataToTextureDirectly uses the right dimensions\r\n internalTexture.height = mipmap.height;\r\n\r\n this._engine._uploadDataToTextureDirectly(internalTexture, mipmap.data, 0, t, undefined, true);\r\n } else {\r\n this._engine._uploadCompressedDataToTextureDirectly(internalTexture, data.transcodedFormat, mipmap.width, mipmap.height, mipmap.data, 0, t);\r\n }\r\n }\r\n\r\n internalTexture._extension = \".ktx2\";\r\n internalTexture.isReady = true;\r\n\r\n this._engine._bindTextureDirectly(oglTexture2D, null);\r\n }\r\n\r\n /**\r\n * Checks if the given data starts with a KTX2 file identifier.\r\n * @param data the data to check\r\n * @returns true if the data is a KTX2 file or false otherwise\r\n */\r\n public static IsValid(data: ArrayBufferView): boolean {\r\n if (data.byteLength >= 12) {\r\n // '«', 'K', 'T', 'X', ' ', '2', '0', '»', '\\r', '\\n', '\\x1A', '\\n'\r\n const identifier = new Uint8Array(data.buffer, data.byteOffset, 12);\r\n if (\r\n identifier[0] === 0xab &&\r\n identifier[1] === 0x4b &&\r\n identifier[2] === 0x54 &&\r\n identifier[3] === 0x58 &&\r\n identifier[4] === 0x20 &&\r\n identifier[5] === 0x32 &&\r\n identifier[6] === 0x30 &&\r\n identifier[7] === 0xbb &&\r\n identifier[8] === 0x0d &&\r\n identifier[9] === 0x0a &&\r\n identifier[10] === 0x1a &&\r\n identifier[11] === 0x0a\r\n ) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n"]}