@babylonjs/core 7.2.2 → 7.2.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 (376) hide show
  1. package/Animations/runtimeAnimation.d.ts +1 -0
  2. package/Animations/runtimeAnimation.js +12 -3
  3. package/Animations/runtimeAnimation.js.map +1 -1
  4. package/Audio/audioEngine.js +2 -2
  5. package/Audio/audioEngine.js.map +1 -1
  6. package/Bones/boneLookController.js +3 -0
  7. package/Bones/boneLookController.js.map +1 -1
  8. package/Buffers/buffer.d.ts +5 -5
  9. package/Buffers/buffer.js.map +1 -1
  10. package/Buffers/storageBuffer.d.ts +2 -2
  11. package/Buffers/storageBuffer.js.map +1 -1
  12. package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js.map +1 -1
  13. package/Cameras/Inputs/flyCameraKeyboardInput.js.map +1 -1
  14. package/Cameras/Inputs/followCameraKeyboardMoveInput.js.map +1 -1
  15. package/Cameras/Inputs/freeCameraKeyboardMoveInput.js.map +1 -1
  16. package/Compute/computeEffect.d.ts +3 -3
  17. package/Compute/computeEffect.js.map +1 -1
  18. package/Compute/computeShader.d.ts +10 -2
  19. package/Compute/computeShader.js +53 -35
  20. package/Compute/computeShader.js.map +1 -1
  21. package/DeviceInput/InputDevices/deviceSourceManager.d.ts +2 -2
  22. package/DeviceInput/InputDevices/deviceSourceManager.js.map +1 -1
  23. package/DeviceInput/internalDeviceSourceManager.d.ts +4 -4
  24. package/DeviceInput/internalDeviceSourceManager.js.map +1 -1
  25. package/DeviceInput/webDeviceInputSystem.d.ts +2 -2
  26. package/DeviceInput/webDeviceInputSystem.js.map +1 -1
  27. package/Engines/AbstractEngine/abstractEngine.alpha.d.ts +10 -0
  28. package/Engines/AbstractEngine/abstractEngine.alpha.js +29 -0
  29. package/Engines/AbstractEngine/abstractEngine.alpha.js.map +1 -0
  30. package/Engines/AbstractEngine/abstractEngine.cubeTexture.d.ts +17 -0
  31. package/Engines/AbstractEngine/abstractEngine.cubeTexture.js +138 -0
  32. package/Engines/AbstractEngine/abstractEngine.cubeTexture.js.map +1 -0
  33. package/Engines/AbstractEngine/abstractEngine.dom.d.ts +61 -0
  34. package/Engines/AbstractEngine/abstractEngine.dom.js +27 -0
  35. package/Engines/AbstractEngine/abstractEngine.dom.js.map +1 -0
  36. package/Engines/AbstractEngine/abstractEngine.loadingScreen.d.ts +30 -0
  37. package/Engines/AbstractEngine/abstractEngine.loadingScreen.js +48 -0
  38. package/Engines/AbstractEngine/abstractEngine.loadingScreen.js.map +1 -0
  39. package/Engines/AbstractEngine/abstractEngine.query.d.ts +122 -0
  40. package/Engines/AbstractEngine/abstractEngine.query.js +175 -0
  41. package/Engines/AbstractEngine/abstractEngine.query.js.map +1 -0
  42. package/Engines/AbstractEngine/abstractEngine.renderPass.d.ts +26 -0
  43. package/Engines/AbstractEngine/abstractEngine.renderPass.js +29 -0
  44. package/Engines/AbstractEngine/abstractEngine.renderPass.js.map +1 -0
  45. package/Engines/AbstractEngine/abstractEngine.states.d.ts +162 -0
  46. package/Engines/AbstractEngine/abstractEngine.states.js +105 -0
  47. package/Engines/AbstractEngine/abstractEngine.states.js.map +1 -0
  48. package/Engines/AbstractEngine/abstractEngine.texture.d.ts +16 -0
  49. package/Engines/AbstractEngine/abstractEngine.texture.js +11 -0
  50. package/Engines/AbstractEngine/abstractEngine.texture.js.map +1 -0
  51. package/Engines/AbstractEngine/index.d.ts +8 -0
  52. package/Engines/AbstractEngine/index.js +10 -0
  53. package/Engines/AbstractEngine/index.js.map +1 -0
  54. package/Engines/Extensions/engine.alpha.d.ts +0 -24
  55. package/Engines/Extensions/engine.alpha.js +0 -35
  56. package/Engines/Extensions/engine.alpha.js.map +1 -1
  57. package/Engines/Extensions/engine.computeShader.d.ts +15 -2
  58. package/Engines/Extensions/engine.computeShader.js +5 -1
  59. package/Engines/Extensions/engine.computeShader.js.map +1 -1
  60. package/Engines/Extensions/engine.cubeTexture.d.ts +0 -8
  61. package/Engines/Extensions/engine.cubeTexture.js +2 -135
  62. package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
  63. package/Engines/Extensions/engine.debugging.d.ts +2 -2
  64. package/Engines/Extensions/engine.debugging.js +5 -5
  65. package/Engines/Extensions/engine.debugging.js.map +1 -1
  66. package/Engines/Extensions/engine.dynamicTexture.js +3 -2
  67. package/Engines/Extensions/engine.dynamicTexture.js.map +1 -1
  68. package/Engines/Extensions/engine.multiview.js.map +1 -1
  69. package/Engines/Extensions/engine.query.d.ts +5 -120
  70. package/Engines/Extensions/engine.query.js +14 -150
  71. package/Engines/Extensions/engine.query.js.map +1 -1
  72. package/Engines/Extensions/engine.renderTarget.js +0 -9
  73. package/Engines/Extensions/engine.renderTarget.js.map +1 -1
  74. package/Engines/Extensions/engine.views.d.ts +3 -2
  75. package/Engines/Extensions/engine.views.js.map +1 -1
  76. package/Engines/Processors/iShaderProcessor.d.ts +2 -2
  77. package/Engines/Processors/iShaderProcessor.js.map +1 -1
  78. package/Engines/Processors/shaderProcessor.d.ts +3 -3
  79. package/Engines/Processors/shaderProcessor.js.map +1 -1
  80. package/Engines/WebGL/webGLRenderTargetWrapper.js +12 -9
  81. package/Engines/WebGL/webGLRenderTargetWrapper.js.map +1 -1
  82. package/Engines/WebGL/webGLShaderProcessors.d.ts +2 -2
  83. package/Engines/WebGL/webGLShaderProcessors.js.map +1 -1
  84. package/Engines/WebGPU/Extensions/engine.alpha.d.ts +35 -0
  85. package/Engines/WebGPU/Extensions/engine.alpha.js +4 -4
  86. package/Engines/WebGPU/Extensions/engine.alpha.js.map +1 -1
  87. package/Engines/WebGPU/Extensions/engine.computeShader.d.ts +9 -0
  88. package/Engines/WebGPU/Extensions/engine.computeShader.js +13 -2
  89. package/Engines/WebGPU/Extensions/engine.computeShader.js.map +1 -1
  90. package/Engines/WebGPU/Extensions/engine.cubeTexture.d.ts +78 -1
  91. package/Engines/WebGPU/Extensions/engine.cubeTexture.js.map +1 -1
  92. package/Engines/WebGPU/Extensions/engine.dynamicTexture.d.ts +27 -1
  93. package/Engines/WebGPU/Extensions/engine.dynamicTexture.js +3 -3
  94. package/Engines/WebGPU/Extensions/engine.dynamicTexture.js.map +1 -1
  95. package/Engines/WebGPU/Extensions/engine.externalTexture.d.ts +16 -0
  96. package/Engines/WebGPU/Extensions/engine.externalTexture.js.map +1 -1
  97. package/Engines/WebGPU/Extensions/engine.multiRender.d.ts +55 -1
  98. package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
  99. package/Engines/WebGPU/Extensions/engine.query.d.ts +1 -1
  100. package/Engines/WebGPU/Extensions/engine.query.js +1 -0
  101. package/Engines/WebGPU/Extensions/engine.query.js.map +1 -1
  102. package/Engines/WebGPU/Extensions/engine.rawTexture.d.ts +185 -1
  103. package/Engines/WebGPU/Extensions/engine.rawTexture.js.map +1 -1
  104. package/Engines/WebGPU/Extensions/engine.readTexture.d.ts +10 -1
  105. package/Engines/WebGPU/Extensions/engine.readTexture.js.map +1 -1
  106. package/Engines/WebGPU/Extensions/engine.renderTarget.d.ts +38 -1
  107. package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
  108. package/Engines/WebGPU/Extensions/engine.renderTargetCube.d.ts +13 -1
  109. package/Engines/WebGPU/Extensions/engine.renderTargetCube.js.map +1 -1
  110. package/Engines/WebGPU/Extensions/engine.storageBuffer.d.ts +38 -1
  111. package/Engines/WebGPU/Extensions/engine.storageBuffer.js.map +1 -1
  112. package/Engines/WebGPU/Extensions/engine.textureSampler.d.ts +10 -0
  113. package/Engines/WebGPU/Extensions/engine.textureSampler.js.map +1 -1
  114. package/Engines/WebGPU/Extensions/engine.videoTexture.d.ts +14 -1
  115. package/Engines/WebGPU/Extensions/engine.videoTexture.js.map +1 -1
  116. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.d.ts +2 -2
  117. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
  118. package/Engines/abstractEngine.d.ts +1688 -0
  119. package/Engines/abstractEngine.js +1354 -0
  120. package/Engines/abstractEngine.js.map +1 -0
  121. package/Engines/engine.common.d.ts +39 -0
  122. package/Engines/engine.common.js +226 -0
  123. package/Engines/engine.common.js.map +1 -0
  124. package/Engines/engine.d.ts +40 -447
  125. package/Engines/engine.js +64 -810
  126. package/Engines/engine.js.map +1 -1
  127. package/Engines/engineFactory.d.ts +2 -2
  128. package/Engines/engineFactory.js.map +1 -1
  129. package/Engines/engineStore.d.ts +4 -4
  130. package/Engines/engineStore.js.map +1 -1
  131. package/Engines/index.d.ts +3 -0
  132. package/Engines/index.js +3 -0
  133. package/Engines/index.js.map +1 -1
  134. package/Engines/nativeEngine.d.ts +1 -1
  135. package/Engines/nativeEngine.js +2 -1
  136. package/Engines/nativeEngine.js.map +1 -1
  137. package/Engines/nullEngine.d.ts +2 -2
  138. package/Engines/nullEngine.js +2 -3
  139. package/Engines/nullEngine.js.map +1 -1
  140. package/Engines/renderTargetWrapper.d.ts +3 -3
  141. package/Engines/renderTargetWrapper.js.map +1 -1
  142. package/Engines/thinEngine.d.ts +35 -591
  143. package/Engines/thinEngine.js +84 -1134
  144. package/Engines/thinEngine.js.map +1 -1
  145. package/Engines/webgpuEngine.d.ts +149 -109
  146. package/Engines/webgpuEngine.js +249 -161
  147. package/Engines/webgpuEngine.js.map +1 -1
  148. package/Instrumentation/engineInstrumentation.d.ts +5 -4
  149. package/Instrumentation/engineInstrumentation.js.map +1 -1
  150. package/Layers/effectLayer.d.ts +2 -2
  151. package/Layers/effectLayer.js +3 -3
  152. package/Layers/effectLayer.js.map +1 -1
  153. package/Layers/effectLayerSceneComponent.js.map +1 -1
  154. package/Layers/glowLayer.js +3 -3
  155. package/Layers/glowLayer.js.map +1 -1
  156. package/Layers/highlightLayer.js +3 -3
  157. package/Layers/highlightLayer.js.map +1 -1
  158. package/Layers/layerSceneComponent.js.map +1 -1
  159. package/Loading/loadingScreen.js +2 -2
  160. package/Loading/loadingScreen.js.map +1 -1
  161. package/Loading/sceneLoader.d.ts +3 -3
  162. package/Loading/sceneLoader.js +1 -1
  163. package/Loading/sceneLoader.js.map +1 -1
  164. package/Materials/GreasedLine/greasedLinePluginMaterial.js.map +1 -1
  165. package/Materials/Textures/Filtering/hdrFiltering.d.ts +2 -2
  166. package/Materials/Textures/Filtering/hdrFiltering.js.map +1 -1
  167. package/Materials/Textures/Loaders/basisTextureLoader.js +2 -2
  168. package/Materials/Textures/Loaders/basisTextureLoader.js.map +1 -1
  169. package/Materials/Textures/MultiviewRenderTarget.d.ts +1 -0
  170. package/Materials/Textures/MultiviewRenderTarget.js +1 -0
  171. package/Materials/Textures/MultiviewRenderTarget.js.map +1 -1
  172. package/Materials/Textures/Procedurals/proceduralTexture.js +1 -1
  173. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  174. package/Materials/Textures/baseTexture.d.ts +3 -3
  175. package/Materials/Textures/baseTexture.js.map +1 -1
  176. package/Materials/Textures/colorGradingTexture.d.ts +2 -2
  177. package/Materials/Textures/colorGradingTexture.js.map +1 -1
  178. package/Materials/Textures/cubeTexture.d.ts +3 -2
  179. package/Materials/Textures/cubeTexture.js +1 -0
  180. package/Materials/Textures/cubeTexture.js.map +1 -1
  181. package/Materials/Textures/hdrCubeTexture.d.ts +2 -2
  182. package/Materials/Textures/hdrCubeTexture.js.map +1 -1
  183. package/Materials/Textures/htmlElementTexture.d.ts +2 -2
  184. package/Materials/Textures/htmlElementTexture.js.map +1 -1
  185. package/Materials/Textures/internalTexture.d.ts +3 -3
  186. package/Materials/Textures/internalTexture.js.map +1 -1
  187. package/Materials/Textures/rawTexture.d.ts +10 -10
  188. package/Materials/Textures/rawTexture.js.map +1 -1
  189. package/Materials/Textures/renderTargetTexture.d.ts +4 -4
  190. package/Materials/Textures/renderTargetTexture.js +4 -4
  191. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  192. package/Materials/Textures/texture.d.ts +2 -2
  193. package/Materials/Textures/texture.js.map +1 -1
  194. package/Materials/Textures/thinTexture.d.ts +3 -3
  195. package/Materials/Textures/thinTexture.js +1 -1
  196. package/Materials/Textures/thinTexture.js.map +1 -1
  197. package/Materials/drawWrapper.d.ts +2 -3
  198. package/Materials/drawWrapper.functions.d.ts +8 -0
  199. package/Materials/drawWrapper.functions.js +9 -0
  200. package/Materials/drawWrapper.functions.js.map +1 -0
  201. package/Materials/drawWrapper.js +0 -3
  202. package/Materials/drawWrapper.js.map +1 -1
  203. package/Materials/effect.d.ts +4 -5
  204. package/Materials/effect.js.map +1 -1
  205. package/Materials/effectRenderer.d.ts +4 -4
  206. package/Materials/effectRenderer.js.map +1 -1
  207. package/Materials/index.d.ts +1 -0
  208. package/Materials/index.js +1 -0
  209. package/Materials/index.js.map +1 -1
  210. package/Materials/materialHelper.functions.d.ts +2 -2
  211. package/Materials/materialHelper.functions.js.map +1 -1
  212. package/Materials/materialPluginBase.d.ts +4 -4
  213. package/Materials/materialPluginBase.js.map +1 -1
  214. package/Materials/materialPluginManager.d.ts +2 -2
  215. package/Materials/materialPluginManager.js.map +1 -1
  216. package/Materials/meshDebugPluginMaterial.js +1 -1
  217. package/Materials/meshDebugPluginMaterial.js.map +1 -1
  218. package/Materials/uniformBuffer.d.ts +2 -2
  219. package/Materials/uniformBuffer.js.map +1 -1
  220. package/Meshes/Builders/greasedLineBuilder.d.ts +6 -0
  221. package/Meshes/Builders/greasedLineBuilder.js +15 -8
  222. package/Meshes/Builders/greasedLineBuilder.js.map +1 -1
  223. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +1 -1
  224. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  225. package/Meshes/GreasedLine/greasedLineBaseMesh.d.ts +2 -2
  226. package/Meshes/GreasedLine/greasedLineBaseMesh.js.map +1 -1
  227. package/Meshes/GreasedLine/greasedLineMesh.js +1 -1
  228. package/Meshes/GreasedLine/greasedLineMesh.js.map +1 -1
  229. package/Meshes/geometry.d.ts +2 -2
  230. package/Meshes/geometry.js +3 -2
  231. package/Meshes/geometry.js.map +1 -1
  232. package/Meshes/instancedMesh.js.map +1 -1
  233. package/Meshes/mesh.d.ts +3 -3
  234. package/Meshes/mesh.js.map +1 -1
  235. package/Meshes/subMesh.d.ts +2 -2
  236. package/Meshes/subMesh.js.map +1 -1
  237. package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js.map +1 -1
  238. package/Misc/copyTextureToTexture.d.ts +2 -2
  239. package/Misc/copyTextureToTexture.js.map +1 -1
  240. package/Misc/dds.d.ts +3 -2
  241. package/Misc/dds.js +2 -1
  242. package/Misc/dds.js.map +1 -1
  243. package/Misc/dumpTools.d.ts +2 -2
  244. package/Misc/dumpTools.js.map +1 -1
  245. package/Misc/fileTools.js +3 -3
  246. package/Misc/fileTools.js.map +1 -1
  247. package/Misc/khronosTextureContainer2.d.ts +8 -2
  248. package/Misc/khronosTextureContainer2.js +3 -2
  249. package/Misc/khronosTextureContainer2.js.map +1 -1
  250. package/Misc/minMaxReducer.d.ts +2 -2
  251. package/Misc/minMaxReducer.js.map +1 -1
  252. package/Misc/textureTools.js.map +1 -1
  253. package/Misc/tools.d.ts +7 -7
  254. package/Misc/tools.functions.d.ts +26 -0
  255. package/Misc/tools.functions.js +62 -0
  256. package/Misc/tools.functions.js.map +1 -1
  257. package/Misc/tools.js.map +1 -1
  258. package/Misc/videoRecorder.d.ts +3 -3
  259. package/Misc/videoRecorder.js.map +1 -1
  260. package/Particles/baseParticleSystem.d.ts +2 -2
  261. package/Particles/baseParticleSystem.js.map +1 -1
  262. package/Particles/computeShaderParticleSystem.d.ts +2 -2
  263. package/Particles/computeShaderParticleSystem.js.map +1 -1
  264. package/Particles/gpuParticleSystem.d.ts +3 -3
  265. package/Particles/gpuParticleSystem.js +2 -2
  266. package/Particles/gpuParticleSystem.js.map +1 -1
  267. package/Particles/particle.js +1 -1
  268. package/Particles/particle.js.map +1 -1
  269. package/Particles/particleSystem.d.ts +3 -3
  270. package/Particles/particleSystem.js +3 -3
  271. package/Particles/particleSystem.js.map +1 -1
  272. package/Particles/particleSystemComponent.d.ts +2 -2
  273. package/Particles/particleSystemComponent.js +2 -2
  274. package/Particles/particleSystemComponent.js.map +1 -1
  275. package/Particles/subEmitter.d.ts +3 -3
  276. package/Particles/subEmitter.js.map +1 -1
  277. package/Particles/thinParticleSystem.d.ts +2 -2
  278. package/Particles/thinParticleSystem.js.map +1 -1
  279. package/Physics/v2/physicsBody.js +3 -3
  280. package/Physics/v2/physicsBody.js.map +1 -1
  281. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js.map +1 -1
  282. package/PostProcesses/RenderPipeline/postProcessRenderEffect.d.ts +2 -2
  283. package/PostProcesses/RenderPipeline/postProcessRenderEffect.js.map +1 -1
  284. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.d.ts +2 -2
  285. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js.map +1 -1
  286. package/PostProcesses/blackAndWhitePostProcess.d.ts +2 -2
  287. package/PostProcesses/blackAndWhitePostProcess.js.map +1 -1
  288. package/PostProcesses/bloomMergePostProcess.d.ts +2 -2
  289. package/PostProcesses/bloomMergePostProcess.js.map +1 -1
  290. package/PostProcesses/blurPostProcess.d.ts +2 -2
  291. package/PostProcesses/blurPostProcess.js.map +1 -1
  292. package/PostProcesses/chromaticAberrationPostProcess.d.ts +2 -2
  293. package/PostProcesses/chromaticAberrationPostProcess.js.map +1 -1
  294. package/PostProcesses/circleOfConfusionPostProcess.d.ts +2 -2
  295. package/PostProcesses/circleOfConfusionPostProcess.js.map +1 -1
  296. package/PostProcesses/colorCorrectionPostProcess.d.ts +2 -2
  297. package/PostProcesses/colorCorrectionPostProcess.js.map +1 -1
  298. package/PostProcesses/convolutionPostProcess.d.ts +2 -2
  299. package/PostProcesses/convolutionPostProcess.js.map +1 -1
  300. package/PostProcesses/depthOfFieldBlurPostProcess.d.ts +2 -2
  301. package/PostProcesses/depthOfFieldBlurPostProcess.js.map +1 -1
  302. package/PostProcesses/depthOfFieldEffect.js +1 -1
  303. package/PostProcesses/depthOfFieldEffect.js.map +1 -1
  304. package/PostProcesses/depthOfFieldMergePostProcess.d.ts +2 -2
  305. package/PostProcesses/depthOfFieldMergePostProcess.js.map +1 -1
  306. package/PostProcesses/displayPassPostProcess.d.ts +2 -2
  307. package/PostProcesses/displayPassPostProcess.js.map +1 -1
  308. package/PostProcesses/extractHighlightsPostProcess.d.ts +2 -2
  309. package/PostProcesses/extractHighlightsPostProcess.js.map +1 -1
  310. package/PostProcesses/filterPostProcess.d.ts +2 -2
  311. package/PostProcesses/filterPostProcess.js.map +1 -1
  312. package/PostProcesses/fxaaPostProcess.d.ts +2 -2
  313. package/PostProcesses/fxaaPostProcess.js +2 -2
  314. package/PostProcesses/fxaaPostProcess.js.map +1 -1
  315. package/PostProcesses/grainPostProcess.d.ts +2 -2
  316. package/PostProcesses/grainPostProcess.js.map +1 -1
  317. package/PostProcesses/imageProcessingPostProcess.d.ts +2 -2
  318. package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
  319. package/PostProcesses/motionBlurPostProcess.d.ts +2 -2
  320. package/PostProcesses/motionBlurPostProcess.js.map +1 -1
  321. package/PostProcesses/passPostProcess.d.ts +3 -3
  322. package/PostProcesses/passPostProcess.js +2 -2
  323. package/PostProcesses/passPostProcess.js.map +1 -1
  324. package/PostProcesses/postProcess.d.ts +4 -4
  325. package/PostProcesses/postProcess.js +3 -3
  326. package/PostProcesses/postProcess.js.map +1 -1
  327. package/PostProcesses/refractionPostProcess.d.ts +2 -2
  328. package/PostProcesses/refractionPostProcess.js.map +1 -1
  329. package/PostProcesses/screenSpaceCurvaturePostProcess.d.ts +2 -2
  330. package/PostProcesses/screenSpaceCurvaturePostProcess.js.map +1 -1
  331. package/PostProcesses/screenSpaceReflectionPostProcess.d.ts +2 -2
  332. package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
  333. package/PostProcesses/sharpenPostProcess.d.ts +2 -2
  334. package/PostProcesses/sharpenPostProcess.js.map +1 -1
  335. package/PostProcesses/subSurfaceScatteringPostProcess.d.ts +2 -2
  336. package/PostProcesses/subSurfaceScatteringPostProcess.js.map +1 -1
  337. package/PostProcesses/volumetricLightScatteringPostProcess.d.ts +2 -2
  338. package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
  339. package/Rendering/GlobalIllumination/giRSMManager.js.map +1 -1
  340. package/Rendering/depthPeelingRenderer.js.map +1 -1
  341. package/Rendering/fluidRenderer/fluidRenderer.js.map +1 -1
  342. package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.d.ts +2 -2
  343. package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.js.map +1 -1
  344. package/Rendering/fluidRenderer/fluidRenderingObject.d.ts +2 -2
  345. package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
  346. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.d.ts +2 -2
  347. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
  348. package/Rendering/fluidRenderer/fluidRenderingTextures.d.ts +2 -2
  349. package/Rendering/fluidRenderer/fluidRenderingTextures.js.map +1 -1
  350. package/Rendering/geometryBufferRenderer.js +24 -18
  351. package/Rendering/geometryBufferRenderer.js.map +1 -1
  352. package/Rendering/outlineRenderer.js.map +1 -1
  353. package/Rendering/prePassRenderer.js.map +1 -1
  354. package/Sprites/spriteRenderer.d.ts +2 -2
  355. package/Sprites/spriteRenderer.js.map +1 -1
  356. package/XR/features/WebXRDepthSensing.js.map +1 -1
  357. package/XR/features/WebXRImageTracking.js.map +1 -1
  358. package/XR/features/WebXRLayers.d.ts +2 -2
  359. package/XR/features/WebXRLayers.js.map +1 -1
  360. package/XR/features/WebXRLightEstimation.js.map +1 -1
  361. package/XR/features/WebXRRawCameraAccess.d.ts +1 -1
  362. package/XR/features/WebXRRawCameraAccess.js.map +1 -1
  363. package/XR/features/WebXRSpaceWarp.js +1 -3
  364. package/XR/features/WebXRSpaceWarp.js.map +1 -1
  365. package/XR/features/WebXRWalkingLocomotion.js.map +1 -1
  366. package/XR/webXRExperienceHelper.js.map +1 -1
  367. package/XR/webXRManagedOutputCanvas.d.ts +2 -2
  368. package/XR/webXRManagedOutputCanvas.js.map +1 -1
  369. package/XR/webXRRenderTargetTextureProvider.js.map +1 -1
  370. package/XR/webXRSessionManager.js.map +1 -1
  371. package/assetContainer.js.map +1 -1
  372. package/node.d.ts +2 -2
  373. package/node.js.map +1 -1
  374. package/package.json +1 -1
  375. package/scene.d.ts +3 -3
  376. package/scene.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"fileTools.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/fileTools.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { WebRequest } from \"./webRequest\";\r\nimport { IsWindowObjectExist } from \"./domManagement\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { IOfflineProvider } from \"../Offline/IOfflineProvider\";\r\nimport type { IFileRequest } from \"./fileRequest\";\r\nimport { Observable } from \"./observable\";\r\nimport { FilesInputStore } from \"./filesInputStore\";\r\nimport { RetryStrategy } from \"./retryStrategy\";\r\nimport { BaseError, ErrorCodes, RuntimeError } from \"./error\";\r\nimport { DecodeBase64ToBinary, DecodeBase64ToString, EncodeArrayBufferToBase64 } from \"./stringTools\";\r\nimport { ShaderProcessor } from \"../Engines/Processors/shaderProcessor\";\r\nimport { ThinEngine } from \"../Engines/thinEngine\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport { Logger } from \"./logger\";\r\nimport { TimingTools } from \"./timingTools\";\r\nimport type { INative } from \"../Engines/Native/nativeInterfaces\";\r\n\r\nconst Base64DataUrlRegEx = new RegExp(/^data:([^,]+\\/[^,]+)?;base64,/i);\r\ndeclare const _native: INative;\r\n\r\n/** @ignore */\r\nexport class LoadFileError extends RuntimeError {\r\n public request?: WebRequest;\r\n public file?: File;\r\n\r\n /**\r\n * Creates a new LoadFileError\r\n * @param message defines the message of the error\r\n * @param object defines the optional web request\r\n */\r\n constructor(message: string, object?: WebRequest | File) {\r\n super(message, ErrorCodes.LoadFileError);\r\n\r\n this.name = \"LoadFileError\";\r\n BaseError._setPrototypeOf(this, LoadFileError.prototype);\r\n\r\n if (object instanceof WebRequest) {\r\n this.request = object;\r\n } else {\r\n this.file = object;\r\n }\r\n }\r\n}\r\n\r\n/** @ignore */\r\nexport class RequestFileError extends RuntimeError {\r\n /**\r\n * Creates a new LoadFileError\r\n * @param message defines the message of the error\r\n * @param request defines the optional web request\r\n */\r\n constructor(\r\n message: string,\r\n public request: WebRequest\r\n ) {\r\n super(message, ErrorCodes.RequestFileError);\r\n this.name = \"RequestFileError\";\r\n BaseError._setPrototypeOf(this, RequestFileError.prototype);\r\n }\r\n}\r\n\r\n/** @ignore */\r\nexport class ReadFileError extends RuntimeError {\r\n /**\r\n * Creates a new ReadFileError\r\n * @param message defines the message of the error\r\n * @param file defines the optional file\r\n */\r\n constructor(\r\n message: string,\r\n public file: File\r\n ) {\r\n super(message, ErrorCodes.ReadFileError);\r\n this.name = \"ReadFileError\";\r\n BaseError._setPrototypeOf(this, ReadFileError.prototype);\r\n }\r\n}\r\n/**\r\n * @internal\r\n */\r\nexport const FileToolsOptions: {\r\n DefaultRetryStrategy: (url: string, request: WebRequest, retryIndex: number) => number;\r\n BaseUrl: string;\r\n CorsBehavior: string | ((url: string | string[]) => string);\r\n PreprocessUrl: (url: string) => string;\r\n ScriptBaseUrl: string;\r\n ScriptPreprocessUrl: (url: string) => string;\r\n} = {\r\n /**\r\n * Gets or sets the retry strategy to apply when an error happens while loading an asset.\r\n * When defining this function, return the wait time before trying again or return -1 to\r\n * stop retrying and error out.\r\n */\r\n DefaultRetryStrategy: RetryStrategy.ExponentialBackoff(),\r\n\r\n /**\r\n * Gets or sets the base URL to use to load assets\r\n */\r\n BaseUrl: \"\",\r\n\r\n /**\r\n * Default behaviour for cors in the application.\r\n * It can be a string if the expected behavior is identical in the entire app.\r\n * Or a callback to be able to set it per url or on a group of them (in case of Video source for instance)\r\n */\r\n CorsBehavior: \"anonymous\",\r\n\r\n /**\r\n * Gets or sets a function used to pre-process url before using them to load assets\r\n * @param url\r\n * @returns the processed url\r\n */\r\n PreprocessUrl: (url: string) => url,\r\n\r\n /**\r\n * Gets or sets the base URL to use to load scripts\r\n * Used for both JS and WASM\r\n */\r\n ScriptBaseUrl: \"\",\r\n /**\r\n * Gets or sets a function used to pre-process script url before using them to load.\r\n * Used for both JS and WASM\r\n * @param url defines the url to process\r\n * @returns the processed url\r\n */\r\n ScriptPreprocessUrl: (url: string) => url,\r\n};\r\n\r\n/**\r\n * Removes unwanted characters from an url\r\n * @param url defines the url to clean\r\n * @returns the cleaned url\r\n */\r\nconst _CleanUrl = (url: string): string => {\r\n url = url.replace(/#/gm, \"%23\");\r\n return url;\r\n};\r\n\r\n/**\r\n * Sets the cors behavior on a dom element. This will add the required Tools.CorsBehavior to the element.\r\n * @param url define the url we are trying\r\n * @param element define the dom element where to configure the cors policy\r\n * @internal\r\n */\r\nexport const SetCorsBehavior = (url: string | string[], element: { crossOrigin: string | null }): void => {\r\n if (url && url.indexOf(\"data:\") === 0) {\r\n return;\r\n }\r\n\r\n if (FileToolsOptions.CorsBehavior) {\r\n if (typeof FileToolsOptions.CorsBehavior === \"string\" || FileToolsOptions.CorsBehavior instanceof String) {\r\n element.crossOrigin = <string>FileToolsOptions.CorsBehavior;\r\n } else {\r\n const result = FileToolsOptions.CorsBehavior(url);\r\n if (result) {\r\n element.crossOrigin = result;\r\n }\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Loads an image as an HTMLImageElement.\r\n * @param input url string, ArrayBuffer, or Blob to load\r\n * @param onLoad callback called when the image successfully loads\r\n * @param onError callback called when the image fails to load\r\n * @param offlineProvider offline provider for caching\r\n * @param mimeType optional mime type\r\n * @param imageBitmapOptions\r\n * @returns the HTMLImageElement of the loaded image\r\n * @internal\r\n */\r\nexport const LoadImage = (\r\n input: string | ArrayBuffer | ArrayBufferView | Blob,\r\n onLoad: (img: HTMLImageElement | ImageBitmap) => void,\r\n onError: (message?: string, exception?: any) => void,\r\n offlineProvider: Nullable<IOfflineProvider>,\r\n mimeType: string = \"\",\r\n imageBitmapOptions?: ImageBitmapOptions\r\n): Nullable<HTMLImageElement> => {\r\n const engine = EngineStore.LastCreatedEngine;\r\n if (typeof HTMLImageElement === \"undefined\" && !engine?._features.forceBitmapOverHTMLImageElement) {\r\n onError(\"LoadImage is only supported in web or BabylonNative environments.\");\r\n return null;\r\n }\r\n\r\n let url: string;\r\n let usingObjectURL = false;\r\n\r\n if (input instanceof ArrayBuffer || ArrayBuffer.isView(input)) {\r\n if (typeof Blob !== \"undefined\" && typeof URL !== \"undefined\") {\r\n url = URL.createObjectURL(new Blob([input], { type: mimeType }));\r\n usingObjectURL = true;\r\n } else {\r\n url = `data:${mimeType};base64,` + EncodeArrayBufferToBase64(input);\r\n }\r\n } else if (input instanceof Blob) {\r\n url = URL.createObjectURL(input);\r\n usingObjectURL = true;\r\n } else {\r\n url = _CleanUrl(input);\r\n url = FileToolsOptions.PreprocessUrl(input);\r\n }\r\n\r\n const onErrorHandler = (exception: any) => {\r\n if (onError) {\r\n const inputText = url || input.toString();\r\n onError(`Error while trying to load image: ${inputText.indexOf(\"http\") === 0 || inputText.length <= 128 ? inputText : inputText.slice(0, 128) + \"...\"}`, exception);\r\n }\r\n };\r\n\r\n if (engine?._features.forceBitmapOverHTMLImageElement) {\r\n LoadFile(\r\n url,\r\n (data) => {\r\n engine!\r\n .createImageBitmap(new Blob([data], { type: mimeType }), { premultiplyAlpha: \"none\", ...imageBitmapOptions })\r\n .then((imgBmp) => {\r\n onLoad(imgBmp);\r\n if (usingObjectURL) {\r\n URL.revokeObjectURL(url);\r\n }\r\n })\r\n .catch((reason) => {\r\n if (onError) {\r\n onError(\"Error while trying to load image: \" + input, reason);\r\n }\r\n });\r\n },\r\n undefined,\r\n offlineProvider || undefined,\r\n true,\r\n (request, exception) => {\r\n onErrorHandler(exception);\r\n }\r\n );\r\n\r\n return null;\r\n }\r\n\r\n const img = new Image();\r\n SetCorsBehavior(url, img);\r\n\r\n const handlersList: { target: any; name: string; handler: any }[] = [];\r\n\r\n const loadHandlersList = () => {\r\n handlersList.forEach((handler) => {\r\n handler.target.addEventListener(handler.name, handler.handler);\r\n });\r\n };\r\n\r\n const unloadHandlersList = () => {\r\n handlersList.forEach((handler) => {\r\n handler.target.removeEventListener(handler.name, handler.handler);\r\n });\r\n handlersList.length = 0;\r\n };\r\n\r\n const loadHandler = () => {\r\n unloadHandlersList();\r\n\r\n onLoad(img);\r\n\r\n // Must revoke the URL after calling onLoad to avoid security exceptions in\r\n // certain scenarios (e.g. when hosted in vscode).\r\n if (usingObjectURL && img.src) {\r\n URL.revokeObjectURL(img.src);\r\n }\r\n };\r\n\r\n const errorHandler = (err: any) => {\r\n unloadHandlersList();\r\n\r\n onErrorHandler(err);\r\n\r\n if (usingObjectURL && img.src) {\r\n URL.revokeObjectURL(img.src);\r\n }\r\n };\r\n\r\n const cspHandler = (err: any) => {\r\n if (err.blockedURI !== img.src) {\r\n return;\r\n }\r\n\r\n unloadHandlersList();\r\n const cspException = new Error(`CSP violation of policy ${err.effectiveDirective} ${err.blockedURI}. Current policy is ${err.originalPolicy}`);\r\n\r\n EngineStore.UseFallbackTexture = false;\r\n onErrorHandler(cspException);\r\n if (usingObjectURL && img.src) {\r\n URL.revokeObjectURL(img.src);\r\n }\r\n img.src = \"\";\r\n };\r\n\r\n handlersList.push({ target: img, name: \"load\", handler: loadHandler });\r\n handlersList.push({ target: img, name: \"error\", handler: errorHandler });\r\n handlersList.push({ target: document, name: \"securitypolicyviolation\", handler: cspHandler });\r\n\r\n loadHandlersList();\r\n\r\n const fromBlob = url.substring(0, 5) === \"blob:\";\r\n const fromData = url.substring(0, 5) === \"data:\";\r\n const noOfflineSupport = () => {\r\n if (fromBlob || fromData || !WebRequest.IsCustomRequestAvailable) {\r\n img.src = url;\r\n } else {\r\n LoadFile(\r\n url,\r\n (data, _, contentType) => {\r\n const type = !mimeType && contentType ? contentType : mimeType;\r\n const blob = new Blob([data], { type });\r\n const url = URL.createObjectURL(blob);\r\n usingObjectURL = true;\r\n img.src = url;\r\n },\r\n undefined,\r\n offlineProvider || undefined,\r\n true,\r\n (_request, exception) => {\r\n onErrorHandler(exception);\r\n }\r\n );\r\n }\r\n };\r\n\r\n const loadFromOfflineSupport = () => {\r\n if (offlineProvider) {\r\n offlineProvider.loadImage(url, img);\r\n }\r\n };\r\n\r\n if (!fromBlob && !fromData && offlineProvider && offlineProvider.enableTexturesOffline) {\r\n offlineProvider.open(loadFromOfflineSupport, noOfflineSupport);\r\n } else {\r\n if (url.indexOf(\"file:\") !== -1) {\r\n const textureName = decodeURIComponent(url.substring(5).toLowerCase());\r\n if (FilesInputStore.FilesToLoad[textureName] && typeof URL !== \"undefined\") {\r\n try {\r\n let blobURL;\r\n try {\r\n blobURL = URL.createObjectURL(FilesInputStore.FilesToLoad[textureName]);\r\n } catch (ex) {\r\n // Chrome doesn't support oneTimeOnly parameter\r\n blobURL = URL.createObjectURL(FilesInputStore.FilesToLoad[textureName]);\r\n }\r\n img.src = blobURL;\r\n usingObjectURL = true;\r\n } catch (e) {\r\n img.src = \"\";\r\n }\r\n return img;\r\n }\r\n }\r\n\r\n noOfflineSupport();\r\n }\r\n\r\n return img;\r\n};\r\n\r\n/**\r\n * Reads a file from a File object\r\n * @param file defines the file to load\r\n * @param onSuccess defines the callback to call when data is loaded\r\n * @param onProgress defines the callback to call during loading process\r\n * @param useArrayBuffer defines a boolean indicating that data must be returned as an ArrayBuffer\r\n * @param onError defines the callback to call when an error occurs\r\n * @returns a file request object\r\n * @internal\r\n */\r\nexport const ReadFile = (\r\n file: File,\r\n onSuccess: (data: any) => void,\r\n onProgress?: (ev: ProgressEvent) => any,\r\n useArrayBuffer?: boolean,\r\n onError?: (error: ReadFileError) => void\r\n): IFileRequest => {\r\n const reader = new FileReader();\r\n const fileRequest: IFileRequest = {\r\n onCompleteObservable: new Observable<IFileRequest>(),\r\n abort: () => reader.abort(),\r\n };\r\n\r\n reader.onloadend = () => fileRequest.onCompleteObservable.notifyObservers(fileRequest);\r\n if (onError) {\r\n reader.onerror = () => {\r\n onError(new ReadFileError(`Unable to read ${file.name}`, file));\r\n };\r\n }\r\n reader.onload = (e) => {\r\n //target doesn't have result from ts 1.3\r\n onSuccess((<any>e.target)[\"result\"]);\r\n };\r\n if (onProgress) {\r\n reader.onprogress = onProgress;\r\n }\r\n if (!useArrayBuffer) {\r\n // Asynchronous read\r\n reader.readAsText(file);\r\n } else {\r\n reader.readAsArrayBuffer(file);\r\n }\r\n\r\n return fileRequest;\r\n};\r\n\r\n/**\r\n * Loads a file from a url, a data url, or a file url\r\n * @param fileOrUrl file, url, data url, or file url to load\r\n * @param onSuccess callback called when the file successfully loads\r\n * @param onProgress callback called while file is loading (if the server supports this mode)\r\n * @param offlineProvider defines the offline provider for caching\r\n * @param useArrayBuffer defines a boolean indicating that date must be returned as ArrayBuffer\r\n * @param onError callback called when the file fails to load\r\n * @param onOpened\r\n * @returns a file request object\r\n * @internal\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport const LoadFile = (\r\n fileOrUrl: File | string,\r\n onSuccess: (data: string | ArrayBuffer, responseURL?: string, contentType?: Nullable<string>) => void,\r\n onProgress?: (ev: ProgressEvent) => void,\r\n offlineProvider?: IOfflineProvider,\r\n useArrayBuffer?: boolean,\r\n onError?: (request?: WebRequest, exception?: LoadFileError) => void,\r\n onOpened?: (request: WebRequest) => void\r\n): IFileRequest => {\r\n if ((fileOrUrl as File).name) {\r\n return ReadFile(\r\n fileOrUrl as File,\r\n onSuccess,\r\n onProgress,\r\n useArrayBuffer,\r\n onError\r\n ? (error: ReadFileError) => {\r\n onError(undefined, error);\r\n }\r\n : undefined\r\n );\r\n }\r\n\r\n const url = fileOrUrl as string;\r\n\r\n // If file and file input are set\r\n if (url.indexOf(\"file:\") !== -1) {\r\n let fileName = decodeURIComponent(url.substring(5).toLowerCase());\r\n if (fileName.indexOf(\"./\") === 0) {\r\n fileName = fileName.substring(2);\r\n }\r\n const file = FilesInputStore.FilesToLoad[fileName];\r\n if (file) {\r\n return ReadFile(file, onSuccess, onProgress, useArrayBuffer, onError ? (error) => onError(undefined, new LoadFileError(error.message, error.file)) : undefined);\r\n }\r\n }\r\n\r\n // For a Base64 Data URL\r\n const { match, type } = TestBase64DataUrl(url);\r\n if (match) {\r\n const fileRequest: IFileRequest = {\r\n onCompleteObservable: new Observable<IFileRequest>(),\r\n abort: () => () => {},\r\n };\r\n\r\n try {\r\n const data = useArrayBuffer ? DecodeBase64UrlToBinary(url) : DecodeBase64UrlToString(url);\r\n onSuccess(data, undefined, type);\r\n } catch (error) {\r\n if (onError) {\r\n onError(undefined, error);\r\n } else {\r\n Logger.Error(error.message || \"Failed to parse the Data URL\");\r\n }\r\n }\r\n\r\n TimingTools.SetImmediate(() => {\r\n fileRequest.onCompleteObservable.notifyObservers(fileRequest);\r\n });\r\n\r\n return fileRequest;\r\n }\r\n\r\n return RequestFile(\r\n url,\r\n (data, request) => {\r\n onSuccess(data, request?.responseURL, request?.getResponseHeader(\"content-type\"));\r\n },\r\n onProgress,\r\n offlineProvider,\r\n useArrayBuffer,\r\n onError\r\n ? (error) => {\r\n onError(error.request, new LoadFileError(error.message, error.request));\r\n }\r\n : undefined,\r\n onOpened\r\n );\r\n};\r\n\r\n/**\r\n * Loads a file from a url\r\n * @param url url to load\r\n * @param onSuccess callback called when the file successfully loads\r\n * @param onProgress callback called while file is loading (if the server supports this mode)\r\n * @param offlineProvider defines the offline provider for caching\r\n * @param useArrayBuffer defines a boolean indicating that date must be returned as ArrayBuffer\r\n * @param onError callback called when the file fails to load\r\n * @param onOpened callback called when the web request is opened\r\n * @returns a file request object\r\n * @internal\r\n */\r\nexport const RequestFile = (\r\n url: string,\r\n onSuccess?: (data: string | ArrayBuffer, request?: WebRequest) => void,\r\n onProgress?: (event: ProgressEvent) => void,\r\n offlineProvider?: IOfflineProvider,\r\n useArrayBuffer?: boolean,\r\n onError?: (error: RequestFileError) => void,\r\n onOpened?: (request: WebRequest) => void\r\n): IFileRequest => {\r\n url = _CleanUrl(url);\r\n url = FileToolsOptions.PreprocessUrl(url);\r\n\r\n const loadUrl = FileToolsOptions.BaseUrl + url;\r\n\r\n let aborted = false;\r\n const fileRequest: IFileRequest = {\r\n onCompleteObservable: new Observable<IFileRequest>(),\r\n abort: () => (aborted = true),\r\n };\r\n\r\n const requestFile = () => {\r\n let request: Nullable<WebRequest> = new WebRequest();\r\n let retryHandle: Nullable<ReturnType<typeof setTimeout>> = null;\r\n let onReadyStateChange: Nullable<() => void>;\r\n\r\n const unbindEvents = () => {\r\n if (!request) {\r\n return;\r\n }\r\n\r\n if (onProgress) {\r\n request.removeEventListener(\"progress\", onProgress);\r\n }\r\n if (onReadyStateChange) {\r\n request.removeEventListener(\"readystatechange\", onReadyStateChange);\r\n }\r\n request.removeEventListener(\"loadend\", onLoadEnd!);\r\n };\r\n\r\n let onLoadEnd: Nullable<() => void> = () => {\r\n unbindEvents();\r\n\r\n fileRequest.onCompleteObservable.notifyObservers(fileRequest);\r\n fileRequest.onCompleteObservable.clear();\r\n\r\n onProgress = undefined;\r\n onReadyStateChange = null;\r\n onLoadEnd = null;\r\n onError = undefined;\r\n onOpened = undefined;\r\n onSuccess = undefined;\r\n };\r\n\r\n fileRequest.abort = () => {\r\n aborted = true;\r\n\r\n if (onLoadEnd) {\r\n onLoadEnd();\r\n }\r\n\r\n if (request && request.readyState !== (XMLHttpRequest.DONE || 4)) {\r\n request.abort();\r\n }\r\n\r\n if (retryHandle !== null) {\r\n clearTimeout(retryHandle);\r\n retryHandle = null;\r\n }\r\n\r\n request = null;\r\n };\r\n\r\n const handleError = (error: any) => {\r\n const message = error.message || \"Unknown error\";\r\n if (onError && request) {\r\n onError(new RequestFileError(message, request));\r\n } else {\r\n Logger.Error(message);\r\n }\r\n };\r\n\r\n const retryLoop = (retryIndex: number) => {\r\n if (!request) {\r\n return;\r\n }\r\n request.open(\"GET\", loadUrl);\r\n\r\n if (onOpened) {\r\n try {\r\n onOpened(request);\r\n } catch (e) {\r\n handleError(e);\r\n return;\r\n }\r\n }\r\n\r\n if (useArrayBuffer) {\r\n request.responseType = \"arraybuffer\";\r\n }\r\n\r\n if (onProgress) {\r\n request.addEventListener(\"progress\", onProgress);\r\n }\r\n\r\n if (onLoadEnd) {\r\n request.addEventListener(\"loadend\", onLoadEnd);\r\n }\r\n\r\n onReadyStateChange = () => {\r\n if (aborted || !request) {\r\n return;\r\n }\r\n\r\n // In case of undefined state in some browsers.\r\n if (request.readyState === (XMLHttpRequest.DONE || 4)) {\r\n // Some browsers have issues where onreadystatechange can be called multiple times with the same value.\r\n if (onReadyStateChange) {\r\n request.removeEventListener(\"readystatechange\", onReadyStateChange);\r\n }\r\n\r\n if ((request.status >= 200 && request.status < 300) || (request.status === 0 && (!IsWindowObjectExist() || IsFileURL()))) {\r\n try {\r\n if (onSuccess) {\r\n onSuccess(useArrayBuffer ? request.response : request.responseText, request);\r\n }\r\n } catch (e) {\r\n handleError(e);\r\n }\r\n return;\r\n }\r\n\r\n const retryStrategy = FileToolsOptions.DefaultRetryStrategy;\r\n if (retryStrategy) {\r\n const waitTime = retryStrategy(loadUrl, request, retryIndex);\r\n if (waitTime !== -1) {\r\n // Prevent the request from completing for retry.\r\n unbindEvents();\r\n\r\n request = new WebRequest();\r\n retryHandle = setTimeout(() => retryLoop(retryIndex + 1), waitTime);\r\n return;\r\n }\r\n }\r\n\r\n const error = new RequestFileError(\"Error status: \" + request.status + \" \" + request.statusText + \" - Unable to load \" + loadUrl, request);\r\n if (onError) {\r\n onError(error);\r\n }\r\n }\r\n };\r\n\r\n request.addEventListener(\"readystatechange\", onReadyStateChange);\r\n\r\n request.send();\r\n };\r\n\r\n retryLoop(0);\r\n };\r\n\r\n // Caching all files\r\n if (offlineProvider && offlineProvider.enableSceneOffline) {\r\n const noOfflineSupport = (request?: any) => {\r\n if (request && request.status > 400) {\r\n if (onError) {\r\n onError(request);\r\n }\r\n } else {\r\n requestFile();\r\n }\r\n };\r\n\r\n const loadFromOfflineSupport = () => {\r\n // TODO: database needs to support aborting and should return a IFileRequest\r\n\r\n if (offlineProvider) {\r\n offlineProvider.loadFile(\r\n FileToolsOptions.BaseUrl + url,\r\n (data) => {\r\n if (!aborted && onSuccess) {\r\n onSuccess(data);\r\n }\r\n\r\n fileRequest.onCompleteObservable.notifyObservers(fileRequest);\r\n },\r\n onProgress\r\n ? (event) => {\r\n if (!aborted && onProgress) {\r\n onProgress(event);\r\n }\r\n }\r\n : undefined,\r\n noOfflineSupport,\r\n useArrayBuffer\r\n );\r\n }\r\n };\r\n\r\n offlineProvider.open(loadFromOfflineSupport, noOfflineSupport);\r\n } else {\r\n requestFile();\r\n }\r\n\r\n return fileRequest;\r\n};\r\n\r\n/**\r\n * Checks if the loaded document was accessed via `file:`-Protocol.\r\n * @returns boolean\r\n * @internal\r\n */\r\nexport const IsFileURL = (): boolean => {\r\n return typeof location !== \"undefined\" && location.protocol === \"file:\";\r\n};\r\n\r\n/**\r\n * Test if the given uri is a valid base64 data url\r\n * @param uri The uri to test\r\n * @returns True if the uri is a base64 data url or false otherwise\r\n * @internal\r\n */\r\nexport const IsBase64DataUrl = (uri: string): boolean => {\r\n return Base64DataUrlRegEx.test(uri);\r\n};\r\n\r\nexport const TestBase64DataUrl = (uri: string): { match: boolean; type: string } => {\r\n const results = Base64DataUrlRegEx.exec(uri);\r\n if (results === null || results.length === 0) {\r\n return { match: false, type: \"\" };\r\n } else {\r\n const type = results[0].replace(\"data:\", \"\").replace(\"base64,\", \"\");\r\n return { match: true, type };\r\n }\r\n};\r\n\r\n/**\r\n * Decode the given base64 uri.\r\n * @param uri The uri to decode\r\n * @returns The decoded base64 data.\r\n * @internal\r\n */\r\nexport function DecodeBase64UrlToBinary(uri: string): ArrayBuffer {\r\n return DecodeBase64ToBinary(uri.split(\",\")[1]);\r\n}\r\n\r\n/**\r\n * Decode the given base64 uri into a UTF-8 encoded string.\r\n * @param uri The uri to decode\r\n * @returns The decoded base64 data.\r\n * @internal\r\n */\r\nexport const DecodeBase64UrlToString = (uri: string): string => {\r\n return DecodeBase64ToString(uri.split(\",\")[1]);\r\n};\r\n\r\n/**\r\n * This will be executed automatically for UMD and es5.\r\n * If esm dev wants the side effects to execute they will have to run it manually\r\n * Once we build native modules those need to be exported.\r\n * @internal\r\n */\r\nconst initSideEffects = () => {\r\n ThinEngine._FileToolsLoadImage = LoadImage;\r\n ThinEngine._FileToolsLoadFile = LoadFile;\r\n ShaderProcessor._FileToolsLoadFile = LoadFile;\r\n};\r\n\r\ninitSideEffects();\r\n\r\n// deprecated\r\n\r\n/**\r\n * FileTools defined as any.\r\n * This should not be imported or used in future releases or in any module in the framework\r\n * @internal\r\n * @deprecated import the needed function from fileTools.ts\r\n */\r\nexport let FileTools: {\r\n DecodeBase64UrlToBinary: (uri: string) => ArrayBuffer;\r\n DecodeBase64UrlToString: (uri: string) => string;\r\n DefaultRetryStrategy: any;\r\n BaseUrl: any;\r\n CorsBehavior: any;\r\n PreprocessUrl: any;\r\n IsBase64DataUrl: (uri: string) => boolean;\r\n IsFileURL: () => boolean;\r\n LoadFile: (\r\n fileOrUrl: string | File,\r\n onSuccess: (data: string | ArrayBuffer, responseURL?: string | undefined) => void,\r\n onProgress?: ((ev: ProgressEvent<EventTarget>) => void) | undefined,\r\n offlineProvider?: IOfflineProvider | undefined,\r\n useArrayBuffer?: boolean | undefined,\r\n onError?: ((request?: WebRequest | undefined, exception?: LoadFileError | undefined) => void) | undefined,\r\n onOpened?: ((request: WebRequest) => void) | undefined\r\n ) => IFileRequest;\r\n LoadImage: (\r\n input: string | ArrayBuffer | Blob | ArrayBufferView,\r\n onLoad: (img: HTMLImageElement | ImageBitmap) => void,\r\n onError: (message?: string | undefined, exception?: any) => void,\r\n offlineProvider: Nullable<IOfflineProvider>,\r\n mimeType?: string | undefined,\r\n imageBitmapOptions?: ImageBitmapOptions | undefined\r\n ) => Nullable<HTMLImageElement>;\r\n ReadFile: (\r\n file: File,\r\n onSuccess: (data: any) => void,\r\n onProgress?: ((ev: ProgressEvent<EventTarget>) => any) | undefined,\r\n useArrayBuffer?: boolean | undefined,\r\n onError?: ((error: ReadFileError) => void) | undefined\r\n ) => IFileRequest;\r\n RequestFile: (\r\n url: string,\r\n onSuccess: (data: string | ArrayBuffer, request?: WebRequest | undefined) => void,\r\n onProgress?: ((event: ProgressEvent<EventTarget>) => void) | undefined,\r\n offlineProvider?: IOfflineProvider | undefined,\r\n useArrayBuffer?: boolean | undefined,\r\n onError?: ((error: RequestFileError) => void) | undefined,\r\n onOpened?: ((request: WebRequest) => void) | undefined\r\n ) => IFileRequest;\r\n SetCorsBehavior: (url: string | string[], element: { crossOrigin: string | null }) => void;\r\n};\r\n/**\r\n * @param DecodeBase64UrlToBinary\r\n * @param DecodeBase64UrlToString\r\n * @param FileToolsOptions\r\n * @internal\r\n */\r\nexport const _injectLTSFileTools = (\r\n DecodeBase64UrlToBinary: (uri: string) => ArrayBuffer,\r\n DecodeBase64UrlToString: (uri: string) => string,\r\n FileToolsOptions: { DefaultRetryStrategy: any; BaseUrl: any; CorsBehavior: any; PreprocessUrl: any },\r\n IsBase64DataUrl: (uri: string) => boolean,\r\n IsFileURL: () => boolean,\r\n LoadFile: (\r\n fileOrUrl: string | File,\r\n onSuccess: (data: string | ArrayBuffer, responseURL?: string | undefined) => void,\r\n onProgress?: ((ev: ProgressEvent<EventTarget>) => void) | undefined,\r\n offlineProvider?: IOfflineProvider | undefined,\r\n useArrayBuffer?: boolean | undefined,\r\n onError?: ((request?: WebRequest | undefined, exception?: LoadFileError | undefined) => void) | undefined,\r\n onOpened?: ((request: WebRequest) => void) | undefined\r\n ) => IFileRequest,\r\n LoadImage: (\r\n input: string | ArrayBuffer | ArrayBufferView | Blob,\r\n onLoad: (img: HTMLImageElement | ImageBitmap) => void,\r\n onError: (message?: string | undefined, exception?: any) => void,\r\n offlineProvider: Nullable<IOfflineProvider>,\r\n mimeType?: string,\r\n imageBitmapOptions?: ImageBitmapOptions | undefined\r\n ) => Nullable<HTMLImageElement>,\r\n ReadFile: (\r\n file: File,\r\n onSuccess: (data: any) => void,\r\n onProgress?: ((ev: ProgressEvent<EventTarget>) => any) | undefined,\r\n useArrayBuffer?: boolean | undefined,\r\n onError?: ((error: ReadFileError) => void) | undefined\r\n ) => IFileRequest,\r\n RequestFile: (\r\n url: string,\r\n onSuccess: (data: string | ArrayBuffer, request?: WebRequest | undefined) => void,\r\n onProgress?: ((event: ProgressEvent<EventTarget>) => void) | undefined,\r\n offlineProvider?: IOfflineProvider | undefined,\r\n useArrayBuffer?: boolean | undefined,\r\n onError?: ((error: RequestFileError) => void) | undefined,\r\n onOpened?: ((request: WebRequest) => void) | undefined\r\n ) => IFileRequest,\r\n SetCorsBehavior: (url: string | string[], element: { crossOrigin: string | null }) => void\r\n) => {\r\n /**\r\n * Backwards compatibility.\r\n * @internal\r\n * @deprecated\r\n */\r\n FileTools = {\r\n DecodeBase64UrlToBinary,\r\n DecodeBase64UrlToString,\r\n DefaultRetryStrategy: FileToolsOptions.DefaultRetryStrategy,\r\n BaseUrl: FileToolsOptions.BaseUrl,\r\n CorsBehavior: FileToolsOptions.CorsBehavior,\r\n PreprocessUrl: FileToolsOptions.PreprocessUrl,\r\n IsBase64DataUrl,\r\n IsFileURL,\r\n LoadFile,\r\n LoadImage,\r\n ReadFile,\r\n RequestFile,\r\n SetCorsBehavior,\r\n };\r\n\r\n Object.defineProperty(FileTools, \"DefaultRetryStrategy\", {\r\n get: function (this: null) {\r\n return FileToolsOptions.DefaultRetryStrategy;\r\n },\r\n set: function (this: null, value: (url: string, request: WebRequest, retryIndex: number) => number) {\r\n FileToolsOptions.DefaultRetryStrategy = value;\r\n },\r\n });\r\n\r\n Object.defineProperty(FileTools, \"BaseUrl\", {\r\n get: function (this: null) {\r\n return FileToolsOptions.BaseUrl;\r\n },\r\n set: function (this: null, value: string) {\r\n FileToolsOptions.BaseUrl = value;\r\n },\r\n });\r\n\r\n Object.defineProperty(FileTools, \"PreprocessUrl\", {\r\n get: function (this: null) {\r\n return FileToolsOptions.PreprocessUrl;\r\n },\r\n set: function (this: null, value: (url: string) => string) {\r\n FileToolsOptions.PreprocessUrl = value;\r\n },\r\n });\r\n\r\n Object.defineProperty(FileTools, \"CorsBehavior\", {\r\n get: function (this: null) {\r\n return FileToolsOptions.CorsBehavior;\r\n },\r\n set: function (this: null, value: string | ((url: string | string[]) => string)) {\r\n FileToolsOptions.CorsBehavior = value;\r\n },\r\n });\r\n};\r\n\r\n_injectLTSFileTools(DecodeBase64UrlToBinary, DecodeBase64UrlToString, FileToolsOptions, IsBase64DataUrl, IsFileURL, LoadFile, LoadImage, ReadFile, RequestFile, SetCorsBehavior);\r\n"]}
1
+ {"version":3,"file":"fileTools.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/fileTools.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { WebRequest } from \"./webRequest\";\r\nimport { IsWindowObjectExist } from \"./domManagement\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { IOfflineProvider } from \"../Offline/IOfflineProvider\";\r\nimport type { IFileRequest } from \"./fileRequest\";\r\nimport { Observable } from \"./observable\";\r\nimport { FilesInputStore } from \"./filesInputStore\";\r\nimport { RetryStrategy } from \"./retryStrategy\";\r\nimport { BaseError, ErrorCodes, RuntimeError } from \"./error\";\r\nimport { DecodeBase64ToBinary, DecodeBase64ToString, EncodeArrayBufferToBase64 } from \"./stringTools\";\r\nimport { ShaderProcessor } from \"../Engines/Processors/shaderProcessor\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport { Logger } from \"./logger\";\r\nimport { TimingTools } from \"./timingTools\";\r\nimport type { INative } from \"../Engines/Native/nativeInterfaces\";\r\nimport { AbstractEngine } from \"../Engines/abstractEngine\";\r\n\r\nconst Base64DataUrlRegEx = new RegExp(/^data:([^,]+\\/[^,]+)?;base64,/i);\r\ndeclare const _native: INative;\r\n\r\n/** @ignore */\r\nexport class LoadFileError extends RuntimeError {\r\n public request?: WebRequest;\r\n public file?: File;\r\n\r\n /**\r\n * Creates a new LoadFileError\r\n * @param message defines the message of the error\r\n * @param object defines the optional web request\r\n */\r\n constructor(message: string, object?: WebRequest | File) {\r\n super(message, ErrorCodes.LoadFileError);\r\n\r\n this.name = \"LoadFileError\";\r\n BaseError._setPrototypeOf(this, LoadFileError.prototype);\r\n\r\n if (object instanceof WebRequest) {\r\n this.request = object;\r\n } else {\r\n this.file = object;\r\n }\r\n }\r\n}\r\n\r\n/** @ignore */\r\nexport class RequestFileError extends RuntimeError {\r\n /**\r\n * Creates a new LoadFileError\r\n * @param message defines the message of the error\r\n * @param request defines the optional web request\r\n */\r\n constructor(\r\n message: string,\r\n public request: WebRequest\r\n ) {\r\n super(message, ErrorCodes.RequestFileError);\r\n this.name = \"RequestFileError\";\r\n BaseError._setPrototypeOf(this, RequestFileError.prototype);\r\n }\r\n}\r\n\r\n/** @ignore */\r\nexport class ReadFileError extends RuntimeError {\r\n /**\r\n * Creates a new ReadFileError\r\n * @param message defines the message of the error\r\n * @param file defines the optional file\r\n */\r\n constructor(\r\n message: string,\r\n public file: File\r\n ) {\r\n super(message, ErrorCodes.ReadFileError);\r\n this.name = \"ReadFileError\";\r\n BaseError._setPrototypeOf(this, ReadFileError.prototype);\r\n }\r\n}\r\n/**\r\n * @internal\r\n */\r\nexport const FileToolsOptions: {\r\n DefaultRetryStrategy: (url: string, request: WebRequest, retryIndex: number) => number;\r\n BaseUrl: string;\r\n CorsBehavior: string | ((url: string | string[]) => string);\r\n PreprocessUrl: (url: string) => string;\r\n ScriptBaseUrl: string;\r\n ScriptPreprocessUrl: (url: string) => string;\r\n} = {\r\n /**\r\n * Gets or sets the retry strategy to apply when an error happens while loading an asset.\r\n * When defining this function, return the wait time before trying again or return -1 to\r\n * stop retrying and error out.\r\n */\r\n DefaultRetryStrategy: RetryStrategy.ExponentialBackoff(),\r\n\r\n /**\r\n * Gets or sets the base URL to use to load assets\r\n */\r\n BaseUrl: \"\",\r\n\r\n /**\r\n * Default behaviour for cors in the application.\r\n * It can be a string if the expected behavior is identical in the entire app.\r\n * Or a callback to be able to set it per url or on a group of them (in case of Video source for instance)\r\n */\r\n CorsBehavior: \"anonymous\",\r\n\r\n /**\r\n * Gets or sets a function used to pre-process url before using them to load assets\r\n * @param url\r\n * @returns the processed url\r\n */\r\n PreprocessUrl: (url: string) => url,\r\n\r\n /**\r\n * Gets or sets the base URL to use to load scripts\r\n * Used for both JS and WASM\r\n */\r\n ScriptBaseUrl: \"\",\r\n /**\r\n * Gets or sets a function used to pre-process script url before using them to load.\r\n * Used for both JS and WASM\r\n * @param url defines the url to process\r\n * @returns the processed url\r\n */\r\n ScriptPreprocessUrl: (url: string) => url,\r\n};\r\n\r\n/**\r\n * Removes unwanted characters from an url\r\n * @param url defines the url to clean\r\n * @returns the cleaned url\r\n */\r\nconst _CleanUrl = (url: string): string => {\r\n url = url.replace(/#/gm, \"%23\");\r\n return url;\r\n};\r\n\r\n/**\r\n * Sets the cors behavior on a dom element. This will add the required Tools.CorsBehavior to the element.\r\n * @param url define the url we are trying\r\n * @param element define the dom element where to configure the cors policy\r\n * @internal\r\n */\r\nexport const SetCorsBehavior = (url: string | string[], element: { crossOrigin: string | null }): void => {\r\n if (url && url.indexOf(\"data:\") === 0) {\r\n return;\r\n }\r\n\r\n if (FileToolsOptions.CorsBehavior) {\r\n if (typeof FileToolsOptions.CorsBehavior === \"string\" || FileToolsOptions.CorsBehavior instanceof String) {\r\n element.crossOrigin = <string>FileToolsOptions.CorsBehavior;\r\n } else {\r\n const result = FileToolsOptions.CorsBehavior(url);\r\n if (result) {\r\n element.crossOrigin = result;\r\n }\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Loads an image as an HTMLImageElement.\r\n * @param input url string, ArrayBuffer, or Blob to load\r\n * @param onLoad callback called when the image successfully loads\r\n * @param onError callback called when the image fails to load\r\n * @param offlineProvider offline provider for caching\r\n * @param mimeType optional mime type\r\n * @param imageBitmapOptions\r\n * @returns the HTMLImageElement of the loaded image\r\n * @internal\r\n */\r\nexport const LoadImage = (\r\n input: string | ArrayBuffer | ArrayBufferView | Blob,\r\n onLoad: (img: HTMLImageElement | ImageBitmap) => void,\r\n onError: (message?: string, exception?: any) => void,\r\n offlineProvider: Nullable<IOfflineProvider>,\r\n mimeType: string = \"\",\r\n imageBitmapOptions?: ImageBitmapOptions\r\n): Nullable<HTMLImageElement> => {\r\n const engine = EngineStore.LastCreatedEngine;\r\n if (typeof HTMLImageElement === \"undefined\" && !engine?._features.forceBitmapOverHTMLImageElement) {\r\n onError(\"LoadImage is only supported in web or BabylonNative environments.\");\r\n return null;\r\n }\r\n\r\n let url: string;\r\n let usingObjectURL = false;\r\n\r\n if (input instanceof ArrayBuffer || ArrayBuffer.isView(input)) {\r\n if (typeof Blob !== \"undefined\" && typeof URL !== \"undefined\") {\r\n url = URL.createObjectURL(new Blob([input], { type: mimeType }));\r\n usingObjectURL = true;\r\n } else {\r\n url = `data:${mimeType};base64,` + EncodeArrayBufferToBase64(input);\r\n }\r\n } else if (input instanceof Blob) {\r\n url = URL.createObjectURL(input);\r\n usingObjectURL = true;\r\n } else {\r\n url = _CleanUrl(input);\r\n url = FileToolsOptions.PreprocessUrl(input);\r\n }\r\n\r\n const onErrorHandler = (exception: any) => {\r\n if (onError) {\r\n const inputText = url || input.toString();\r\n onError(`Error while trying to load image: ${inputText.indexOf(\"http\") === 0 || inputText.length <= 128 ? inputText : inputText.slice(0, 128) + \"...\"}`, exception);\r\n }\r\n };\r\n\r\n if (engine?._features.forceBitmapOverHTMLImageElement) {\r\n LoadFile(\r\n url,\r\n (data) => {\r\n engine!\r\n .createImageBitmap(new Blob([data], { type: mimeType }), { premultiplyAlpha: \"none\", ...imageBitmapOptions })\r\n .then((imgBmp) => {\r\n onLoad(imgBmp);\r\n if (usingObjectURL) {\r\n URL.revokeObjectURL(url);\r\n }\r\n })\r\n .catch((reason) => {\r\n if (onError) {\r\n onError(\"Error while trying to load image: \" + input, reason);\r\n }\r\n });\r\n },\r\n undefined,\r\n offlineProvider || undefined,\r\n true,\r\n (request, exception) => {\r\n onErrorHandler(exception);\r\n }\r\n );\r\n\r\n return null;\r\n }\r\n\r\n const img = new Image();\r\n SetCorsBehavior(url, img);\r\n\r\n const handlersList: { target: any; name: string; handler: any }[] = [];\r\n\r\n const loadHandlersList = () => {\r\n handlersList.forEach((handler) => {\r\n handler.target.addEventListener(handler.name, handler.handler);\r\n });\r\n };\r\n\r\n const unloadHandlersList = () => {\r\n handlersList.forEach((handler) => {\r\n handler.target.removeEventListener(handler.name, handler.handler);\r\n });\r\n handlersList.length = 0;\r\n };\r\n\r\n const loadHandler = () => {\r\n unloadHandlersList();\r\n\r\n onLoad(img);\r\n\r\n // Must revoke the URL after calling onLoad to avoid security exceptions in\r\n // certain scenarios (e.g. when hosted in vscode).\r\n if (usingObjectURL && img.src) {\r\n URL.revokeObjectURL(img.src);\r\n }\r\n };\r\n\r\n const errorHandler = (err: any) => {\r\n unloadHandlersList();\r\n\r\n onErrorHandler(err);\r\n\r\n if (usingObjectURL && img.src) {\r\n URL.revokeObjectURL(img.src);\r\n }\r\n };\r\n\r\n const cspHandler = (err: any) => {\r\n if (err.blockedURI !== img.src) {\r\n return;\r\n }\r\n\r\n unloadHandlersList();\r\n const cspException = new Error(`CSP violation of policy ${err.effectiveDirective} ${err.blockedURI}. Current policy is ${err.originalPolicy}`);\r\n\r\n EngineStore.UseFallbackTexture = false;\r\n onErrorHandler(cspException);\r\n if (usingObjectURL && img.src) {\r\n URL.revokeObjectURL(img.src);\r\n }\r\n img.src = \"\";\r\n };\r\n\r\n handlersList.push({ target: img, name: \"load\", handler: loadHandler });\r\n handlersList.push({ target: img, name: \"error\", handler: errorHandler });\r\n handlersList.push({ target: document, name: \"securitypolicyviolation\", handler: cspHandler });\r\n\r\n loadHandlersList();\r\n\r\n const fromBlob = url.substring(0, 5) === \"blob:\";\r\n const fromData = url.substring(0, 5) === \"data:\";\r\n const noOfflineSupport = () => {\r\n if (fromBlob || fromData || !WebRequest.IsCustomRequestAvailable) {\r\n img.src = url;\r\n } else {\r\n LoadFile(\r\n url,\r\n (data, _, contentType) => {\r\n const type = !mimeType && contentType ? contentType : mimeType;\r\n const blob = new Blob([data], { type });\r\n const url = URL.createObjectURL(blob);\r\n usingObjectURL = true;\r\n img.src = url;\r\n },\r\n undefined,\r\n offlineProvider || undefined,\r\n true,\r\n (_request, exception) => {\r\n onErrorHandler(exception);\r\n }\r\n );\r\n }\r\n };\r\n\r\n const loadFromOfflineSupport = () => {\r\n if (offlineProvider) {\r\n offlineProvider.loadImage(url, img);\r\n }\r\n };\r\n\r\n if (!fromBlob && !fromData && offlineProvider && offlineProvider.enableTexturesOffline) {\r\n offlineProvider.open(loadFromOfflineSupport, noOfflineSupport);\r\n } else {\r\n if (url.indexOf(\"file:\") !== -1) {\r\n const textureName = decodeURIComponent(url.substring(5).toLowerCase());\r\n if (FilesInputStore.FilesToLoad[textureName] && typeof URL !== \"undefined\") {\r\n try {\r\n let blobURL;\r\n try {\r\n blobURL = URL.createObjectURL(FilesInputStore.FilesToLoad[textureName]);\r\n } catch (ex) {\r\n // Chrome doesn't support oneTimeOnly parameter\r\n blobURL = URL.createObjectURL(FilesInputStore.FilesToLoad[textureName]);\r\n }\r\n img.src = blobURL;\r\n usingObjectURL = true;\r\n } catch (e) {\r\n img.src = \"\";\r\n }\r\n return img;\r\n }\r\n }\r\n\r\n noOfflineSupport();\r\n }\r\n\r\n return img;\r\n};\r\n\r\n/**\r\n * Reads a file from a File object\r\n * @param file defines the file to load\r\n * @param onSuccess defines the callback to call when data is loaded\r\n * @param onProgress defines the callback to call during loading process\r\n * @param useArrayBuffer defines a boolean indicating that data must be returned as an ArrayBuffer\r\n * @param onError defines the callback to call when an error occurs\r\n * @returns a file request object\r\n * @internal\r\n */\r\nexport const ReadFile = (\r\n file: File,\r\n onSuccess: (data: any) => void,\r\n onProgress?: (ev: ProgressEvent) => any,\r\n useArrayBuffer?: boolean,\r\n onError?: (error: ReadFileError) => void\r\n): IFileRequest => {\r\n const reader = new FileReader();\r\n const fileRequest: IFileRequest = {\r\n onCompleteObservable: new Observable<IFileRequest>(),\r\n abort: () => reader.abort(),\r\n };\r\n\r\n reader.onloadend = () => fileRequest.onCompleteObservable.notifyObservers(fileRequest);\r\n if (onError) {\r\n reader.onerror = () => {\r\n onError(new ReadFileError(`Unable to read ${file.name}`, file));\r\n };\r\n }\r\n reader.onload = (e) => {\r\n //target doesn't have result from ts 1.3\r\n onSuccess((<any>e.target)[\"result\"]);\r\n };\r\n if (onProgress) {\r\n reader.onprogress = onProgress;\r\n }\r\n if (!useArrayBuffer) {\r\n // Asynchronous read\r\n reader.readAsText(file);\r\n } else {\r\n reader.readAsArrayBuffer(file);\r\n }\r\n\r\n return fileRequest;\r\n};\r\n\r\n/**\r\n * Loads a file from a url, a data url, or a file url\r\n * @param fileOrUrl file, url, data url, or file url to load\r\n * @param onSuccess callback called when the file successfully loads\r\n * @param onProgress callback called while file is loading (if the server supports this mode)\r\n * @param offlineProvider defines the offline provider for caching\r\n * @param useArrayBuffer defines a boolean indicating that date must be returned as ArrayBuffer\r\n * @param onError callback called when the file fails to load\r\n * @param onOpened\r\n * @returns a file request object\r\n * @internal\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport const LoadFile = (\r\n fileOrUrl: File | string,\r\n onSuccess: (data: string | ArrayBuffer, responseURL?: string, contentType?: Nullable<string>) => void,\r\n onProgress?: (ev: ProgressEvent) => void,\r\n offlineProvider?: IOfflineProvider,\r\n useArrayBuffer?: boolean,\r\n onError?: (request?: WebRequest, exception?: LoadFileError) => void,\r\n onOpened?: (request: WebRequest) => void\r\n): IFileRequest => {\r\n if ((fileOrUrl as File).name) {\r\n return ReadFile(\r\n fileOrUrl as File,\r\n onSuccess,\r\n onProgress,\r\n useArrayBuffer,\r\n onError\r\n ? (error: ReadFileError) => {\r\n onError(undefined, error);\r\n }\r\n : undefined\r\n );\r\n }\r\n\r\n const url = fileOrUrl as string;\r\n\r\n // If file and file input are set\r\n if (url.indexOf(\"file:\") !== -1) {\r\n let fileName = decodeURIComponent(url.substring(5).toLowerCase());\r\n if (fileName.indexOf(\"./\") === 0) {\r\n fileName = fileName.substring(2);\r\n }\r\n const file = FilesInputStore.FilesToLoad[fileName];\r\n if (file) {\r\n return ReadFile(file, onSuccess, onProgress, useArrayBuffer, onError ? (error) => onError(undefined, new LoadFileError(error.message, error.file)) : undefined);\r\n }\r\n }\r\n\r\n // For a Base64 Data URL\r\n const { match, type } = TestBase64DataUrl(url);\r\n if (match) {\r\n const fileRequest: IFileRequest = {\r\n onCompleteObservable: new Observable<IFileRequest>(),\r\n abort: () => () => {},\r\n };\r\n\r\n try {\r\n const data = useArrayBuffer ? DecodeBase64UrlToBinary(url) : DecodeBase64UrlToString(url);\r\n onSuccess(data, undefined, type);\r\n } catch (error) {\r\n if (onError) {\r\n onError(undefined, error);\r\n } else {\r\n Logger.Error(error.message || \"Failed to parse the Data URL\");\r\n }\r\n }\r\n\r\n TimingTools.SetImmediate(() => {\r\n fileRequest.onCompleteObservable.notifyObservers(fileRequest);\r\n });\r\n\r\n return fileRequest;\r\n }\r\n\r\n return RequestFile(\r\n url,\r\n (data, request) => {\r\n onSuccess(data, request?.responseURL, request?.getResponseHeader(\"content-type\"));\r\n },\r\n onProgress,\r\n offlineProvider,\r\n useArrayBuffer,\r\n onError\r\n ? (error) => {\r\n onError(error.request, new LoadFileError(error.message, error.request));\r\n }\r\n : undefined,\r\n onOpened\r\n );\r\n};\r\n\r\n/**\r\n * Loads a file from a url\r\n * @param url url to load\r\n * @param onSuccess callback called when the file successfully loads\r\n * @param onProgress callback called while file is loading (if the server supports this mode)\r\n * @param offlineProvider defines the offline provider for caching\r\n * @param useArrayBuffer defines a boolean indicating that date must be returned as ArrayBuffer\r\n * @param onError callback called when the file fails to load\r\n * @param onOpened callback called when the web request is opened\r\n * @returns a file request object\r\n * @internal\r\n */\r\nexport const RequestFile = (\r\n url: string,\r\n onSuccess?: (data: string | ArrayBuffer, request?: WebRequest) => void,\r\n onProgress?: (event: ProgressEvent) => void,\r\n offlineProvider?: IOfflineProvider,\r\n useArrayBuffer?: boolean,\r\n onError?: (error: RequestFileError) => void,\r\n onOpened?: (request: WebRequest) => void\r\n): IFileRequest => {\r\n url = _CleanUrl(url);\r\n url = FileToolsOptions.PreprocessUrl(url);\r\n\r\n const loadUrl = FileToolsOptions.BaseUrl + url;\r\n\r\n let aborted = false;\r\n const fileRequest: IFileRequest = {\r\n onCompleteObservable: new Observable<IFileRequest>(),\r\n abort: () => (aborted = true),\r\n };\r\n\r\n const requestFile = () => {\r\n let request: Nullable<WebRequest> = new WebRequest();\r\n let retryHandle: Nullable<ReturnType<typeof setTimeout>> = null;\r\n let onReadyStateChange: Nullable<() => void>;\r\n\r\n const unbindEvents = () => {\r\n if (!request) {\r\n return;\r\n }\r\n\r\n if (onProgress) {\r\n request.removeEventListener(\"progress\", onProgress);\r\n }\r\n if (onReadyStateChange) {\r\n request.removeEventListener(\"readystatechange\", onReadyStateChange);\r\n }\r\n request.removeEventListener(\"loadend\", onLoadEnd!);\r\n };\r\n\r\n let onLoadEnd: Nullable<() => void> = () => {\r\n unbindEvents();\r\n\r\n fileRequest.onCompleteObservable.notifyObservers(fileRequest);\r\n fileRequest.onCompleteObservable.clear();\r\n\r\n onProgress = undefined;\r\n onReadyStateChange = null;\r\n onLoadEnd = null;\r\n onError = undefined;\r\n onOpened = undefined;\r\n onSuccess = undefined;\r\n };\r\n\r\n fileRequest.abort = () => {\r\n aborted = true;\r\n\r\n if (onLoadEnd) {\r\n onLoadEnd();\r\n }\r\n\r\n if (request && request.readyState !== (XMLHttpRequest.DONE || 4)) {\r\n request.abort();\r\n }\r\n\r\n if (retryHandle !== null) {\r\n clearTimeout(retryHandle);\r\n retryHandle = null;\r\n }\r\n\r\n request = null;\r\n };\r\n\r\n const handleError = (error: any) => {\r\n const message = error.message || \"Unknown error\";\r\n if (onError && request) {\r\n onError(new RequestFileError(message, request));\r\n } else {\r\n Logger.Error(message);\r\n }\r\n };\r\n\r\n const retryLoop = (retryIndex: number) => {\r\n if (!request) {\r\n return;\r\n }\r\n request.open(\"GET\", loadUrl);\r\n\r\n if (onOpened) {\r\n try {\r\n onOpened(request);\r\n } catch (e) {\r\n handleError(e);\r\n return;\r\n }\r\n }\r\n\r\n if (useArrayBuffer) {\r\n request.responseType = \"arraybuffer\";\r\n }\r\n\r\n if (onProgress) {\r\n request.addEventListener(\"progress\", onProgress);\r\n }\r\n\r\n if (onLoadEnd) {\r\n request.addEventListener(\"loadend\", onLoadEnd);\r\n }\r\n\r\n onReadyStateChange = () => {\r\n if (aborted || !request) {\r\n return;\r\n }\r\n\r\n // In case of undefined state in some browsers.\r\n if (request.readyState === (XMLHttpRequest.DONE || 4)) {\r\n // Some browsers have issues where onreadystatechange can be called multiple times with the same value.\r\n if (onReadyStateChange) {\r\n request.removeEventListener(\"readystatechange\", onReadyStateChange);\r\n }\r\n\r\n if ((request.status >= 200 && request.status < 300) || (request.status === 0 && (!IsWindowObjectExist() || IsFileURL()))) {\r\n try {\r\n if (onSuccess) {\r\n onSuccess(useArrayBuffer ? request.response : request.responseText, request);\r\n }\r\n } catch (e) {\r\n handleError(e);\r\n }\r\n return;\r\n }\r\n\r\n const retryStrategy = FileToolsOptions.DefaultRetryStrategy;\r\n if (retryStrategy) {\r\n const waitTime = retryStrategy(loadUrl, request, retryIndex);\r\n if (waitTime !== -1) {\r\n // Prevent the request from completing for retry.\r\n unbindEvents();\r\n\r\n request = new WebRequest();\r\n retryHandle = setTimeout(() => retryLoop(retryIndex + 1), waitTime);\r\n return;\r\n }\r\n }\r\n\r\n const error = new RequestFileError(\"Error status: \" + request.status + \" \" + request.statusText + \" - Unable to load \" + loadUrl, request);\r\n if (onError) {\r\n onError(error);\r\n }\r\n }\r\n };\r\n\r\n request.addEventListener(\"readystatechange\", onReadyStateChange);\r\n\r\n request.send();\r\n };\r\n\r\n retryLoop(0);\r\n };\r\n\r\n // Caching all files\r\n if (offlineProvider && offlineProvider.enableSceneOffline) {\r\n const noOfflineSupport = (request?: any) => {\r\n if (request && request.status > 400) {\r\n if (onError) {\r\n onError(request);\r\n }\r\n } else {\r\n requestFile();\r\n }\r\n };\r\n\r\n const loadFromOfflineSupport = () => {\r\n // TODO: database needs to support aborting and should return a IFileRequest\r\n\r\n if (offlineProvider) {\r\n offlineProvider.loadFile(\r\n FileToolsOptions.BaseUrl + url,\r\n (data) => {\r\n if (!aborted && onSuccess) {\r\n onSuccess(data);\r\n }\r\n\r\n fileRequest.onCompleteObservable.notifyObservers(fileRequest);\r\n },\r\n onProgress\r\n ? (event) => {\r\n if (!aborted && onProgress) {\r\n onProgress(event);\r\n }\r\n }\r\n : undefined,\r\n noOfflineSupport,\r\n useArrayBuffer\r\n );\r\n }\r\n };\r\n\r\n offlineProvider.open(loadFromOfflineSupport, noOfflineSupport);\r\n } else {\r\n requestFile();\r\n }\r\n\r\n return fileRequest;\r\n};\r\n\r\n/**\r\n * Checks if the loaded document was accessed via `file:`-Protocol.\r\n * @returns boolean\r\n * @internal\r\n */\r\nexport const IsFileURL = (): boolean => {\r\n return typeof location !== \"undefined\" && location.protocol === \"file:\";\r\n};\r\n\r\n/**\r\n * Test if the given uri is a valid base64 data url\r\n * @param uri The uri to test\r\n * @returns True if the uri is a base64 data url or false otherwise\r\n * @internal\r\n */\r\nexport const IsBase64DataUrl = (uri: string): boolean => {\r\n return Base64DataUrlRegEx.test(uri);\r\n};\r\n\r\nexport const TestBase64DataUrl = (uri: string): { match: boolean; type: string } => {\r\n const results = Base64DataUrlRegEx.exec(uri);\r\n if (results === null || results.length === 0) {\r\n return { match: false, type: \"\" };\r\n } else {\r\n const type = results[0].replace(\"data:\", \"\").replace(\"base64,\", \"\");\r\n return { match: true, type };\r\n }\r\n};\r\n\r\n/**\r\n * Decode the given base64 uri.\r\n * @param uri The uri to decode\r\n * @returns The decoded base64 data.\r\n * @internal\r\n */\r\nexport function DecodeBase64UrlToBinary(uri: string): ArrayBuffer {\r\n return DecodeBase64ToBinary(uri.split(\",\")[1]);\r\n}\r\n\r\n/**\r\n * Decode the given base64 uri into a UTF-8 encoded string.\r\n * @param uri The uri to decode\r\n * @returns The decoded base64 data.\r\n * @internal\r\n */\r\nexport const DecodeBase64UrlToString = (uri: string): string => {\r\n return DecodeBase64ToString(uri.split(\",\")[1]);\r\n};\r\n\r\n/**\r\n * This will be executed automatically for UMD and es5.\r\n * If esm dev wants the side effects to execute they will have to run it manually\r\n * Once we build native modules those need to be exported.\r\n * @internal\r\n */\r\nconst initSideEffects = () => {\r\n AbstractEngine._FileToolsLoadImage = LoadImage;\r\n AbstractEngine._FileToolsLoadFile = LoadFile;\r\n ShaderProcessor._FileToolsLoadFile = LoadFile;\r\n};\r\n\r\ninitSideEffects();\r\n\r\n// deprecated\r\n\r\n/**\r\n * FileTools defined as any.\r\n * This should not be imported or used in future releases or in any module in the framework\r\n * @internal\r\n * @deprecated import the needed function from fileTools.ts\r\n */\r\nexport let FileTools: {\r\n DecodeBase64UrlToBinary: (uri: string) => ArrayBuffer;\r\n DecodeBase64UrlToString: (uri: string) => string;\r\n DefaultRetryStrategy: any;\r\n BaseUrl: any;\r\n CorsBehavior: any;\r\n PreprocessUrl: any;\r\n IsBase64DataUrl: (uri: string) => boolean;\r\n IsFileURL: () => boolean;\r\n LoadFile: (\r\n fileOrUrl: string | File,\r\n onSuccess: (data: string | ArrayBuffer, responseURL?: string | undefined) => void,\r\n onProgress?: ((ev: ProgressEvent<EventTarget>) => void) | undefined,\r\n offlineProvider?: IOfflineProvider | undefined,\r\n useArrayBuffer?: boolean | undefined,\r\n onError?: ((request?: WebRequest | undefined, exception?: LoadFileError | undefined) => void) | undefined,\r\n onOpened?: ((request: WebRequest) => void) | undefined\r\n ) => IFileRequest;\r\n LoadImage: (\r\n input: string | ArrayBuffer | Blob | ArrayBufferView,\r\n onLoad: (img: HTMLImageElement | ImageBitmap) => void,\r\n onError: (message?: string | undefined, exception?: any) => void,\r\n offlineProvider: Nullable<IOfflineProvider>,\r\n mimeType?: string | undefined,\r\n imageBitmapOptions?: ImageBitmapOptions | undefined\r\n ) => Nullable<HTMLImageElement>;\r\n ReadFile: (\r\n file: File,\r\n onSuccess: (data: any) => void,\r\n onProgress?: ((ev: ProgressEvent<EventTarget>) => any) | undefined,\r\n useArrayBuffer?: boolean | undefined,\r\n onError?: ((error: ReadFileError) => void) | undefined\r\n ) => IFileRequest;\r\n RequestFile: (\r\n url: string,\r\n onSuccess: (data: string | ArrayBuffer, request?: WebRequest | undefined) => void,\r\n onProgress?: ((event: ProgressEvent<EventTarget>) => void) | undefined,\r\n offlineProvider?: IOfflineProvider | undefined,\r\n useArrayBuffer?: boolean | undefined,\r\n onError?: ((error: RequestFileError) => void) | undefined,\r\n onOpened?: ((request: WebRequest) => void) | undefined\r\n ) => IFileRequest;\r\n SetCorsBehavior: (url: string | string[], element: { crossOrigin: string | null }) => void;\r\n};\r\n/**\r\n * @param DecodeBase64UrlToBinary\r\n * @param DecodeBase64UrlToString\r\n * @param FileToolsOptions\r\n * @internal\r\n */\r\nexport const _injectLTSFileTools = (\r\n DecodeBase64UrlToBinary: (uri: string) => ArrayBuffer,\r\n DecodeBase64UrlToString: (uri: string) => string,\r\n FileToolsOptions: { DefaultRetryStrategy: any; BaseUrl: any; CorsBehavior: any; PreprocessUrl: any },\r\n IsBase64DataUrl: (uri: string) => boolean,\r\n IsFileURL: () => boolean,\r\n LoadFile: (\r\n fileOrUrl: string | File,\r\n onSuccess: (data: string | ArrayBuffer, responseURL?: string | undefined) => void,\r\n onProgress?: ((ev: ProgressEvent<EventTarget>) => void) | undefined,\r\n offlineProvider?: IOfflineProvider | undefined,\r\n useArrayBuffer?: boolean | undefined,\r\n onError?: ((request?: WebRequest | undefined, exception?: LoadFileError | undefined) => void) | undefined,\r\n onOpened?: ((request: WebRequest) => void) | undefined\r\n ) => IFileRequest,\r\n LoadImage: (\r\n input: string | ArrayBuffer | ArrayBufferView | Blob,\r\n onLoad: (img: HTMLImageElement | ImageBitmap) => void,\r\n onError: (message?: string | undefined, exception?: any) => void,\r\n offlineProvider: Nullable<IOfflineProvider>,\r\n mimeType?: string,\r\n imageBitmapOptions?: ImageBitmapOptions | undefined\r\n ) => Nullable<HTMLImageElement>,\r\n ReadFile: (\r\n file: File,\r\n onSuccess: (data: any) => void,\r\n onProgress?: ((ev: ProgressEvent<EventTarget>) => any) | undefined,\r\n useArrayBuffer?: boolean | undefined,\r\n onError?: ((error: ReadFileError) => void) | undefined\r\n ) => IFileRequest,\r\n RequestFile: (\r\n url: string,\r\n onSuccess: (data: string | ArrayBuffer, request?: WebRequest | undefined) => void,\r\n onProgress?: ((event: ProgressEvent<EventTarget>) => void) | undefined,\r\n offlineProvider?: IOfflineProvider | undefined,\r\n useArrayBuffer?: boolean | undefined,\r\n onError?: ((error: RequestFileError) => void) | undefined,\r\n onOpened?: ((request: WebRequest) => void) | undefined\r\n ) => IFileRequest,\r\n SetCorsBehavior: (url: string | string[], element: { crossOrigin: string | null }) => void\r\n) => {\r\n /**\r\n * Backwards compatibility.\r\n * @internal\r\n * @deprecated\r\n */\r\n FileTools = {\r\n DecodeBase64UrlToBinary,\r\n DecodeBase64UrlToString,\r\n DefaultRetryStrategy: FileToolsOptions.DefaultRetryStrategy,\r\n BaseUrl: FileToolsOptions.BaseUrl,\r\n CorsBehavior: FileToolsOptions.CorsBehavior,\r\n PreprocessUrl: FileToolsOptions.PreprocessUrl,\r\n IsBase64DataUrl,\r\n IsFileURL,\r\n LoadFile,\r\n LoadImage,\r\n ReadFile,\r\n RequestFile,\r\n SetCorsBehavior,\r\n };\r\n\r\n Object.defineProperty(FileTools, \"DefaultRetryStrategy\", {\r\n get: function (this: null) {\r\n return FileToolsOptions.DefaultRetryStrategy;\r\n },\r\n set: function (this: null, value: (url: string, request: WebRequest, retryIndex: number) => number) {\r\n FileToolsOptions.DefaultRetryStrategy = value;\r\n },\r\n });\r\n\r\n Object.defineProperty(FileTools, \"BaseUrl\", {\r\n get: function (this: null) {\r\n return FileToolsOptions.BaseUrl;\r\n },\r\n set: function (this: null, value: string) {\r\n FileToolsOptions.BaseUrl = value;\r\n },\r\n });\r\n\r\n Object.defineProperty(FileTools, \"PreprocessUrl\", {\r\n get: function (this: null) {\r\n return FileToolsOptions.PreprocessUrl;\r\n },\r\n set: function (this: null, value: (url: string) => string) {\r\n FileToolsOptions.PreprocessUrl = value;\r\n },\r\n });\r\n\r\n Object.defineProperty(FileTools, \"CorsBehavior\", {\r\n get: function (this: null) {\r\n return FileToolsOptions.CorsBehavior;\r\n },\r\n set: function (this: null, value: string | ((url: string | string[]) => string)) {\r\n FileToolsOptions.CorsBehavior = value;\r\n },\r\n });\r\n};\r\n\r\n_injectLTSFileTools(DecodeBase64UrlToBinary, DecodeBase64UrlToString, FileToolsOptions, IsBase64DataUrl, IsFileURL, LoadFile, LoadImage, ReadFile, RequestFile, SetCorsBehavior);\r\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { InternalTexture } from "../Materials/Textures/internalTexture";
2
- import type { ThinEngine } from "../Engines/thinEngine";
2
+ import type { AbstractEngine } from "../Engines/abstractEngine";
3
3
  import { AutoReleaseWorkerPool } from "./workerPool";
4
4
  import type { Nullable } from "../types";
5
5
  import type { IDecodedData, IKTX2DecoderOptions } from "../Materials/Textures/ktx2decoderTypes.js";
@@ -119,6 +119,12 @@ export declare class KhronosTextureContainer2 {
119
119
  wasmMSCTranscoder: Nullable<string>;
120
120
  wasmZSTDDecoder: Nullable<string>;
121
121
  };
122
+ /**
123
+ * If provided, this worker pool will be used instead of creating a new one.
124
+ * This is useful when loading the WASM and the js modules on your own and
125
+ * you want to use the ktxTextureLoader and not construct this class directly.
126
+ */
127
+ static WorkerPool?: AutoReleaseWorkerPool;
122
128
  /**
123
129
  * Default number of workers used to handle data decoding
124
130
  */
@@ -136,7 +142,7 @@ export declare class KhronosTextureContainer2 {
136
142
  * @param engine The engine to use
137
143
  * @param numWorkersOrOptions The number of workers for async operations. Specify `0` to disable web workers and run synchronously in the current context.
138
144
  */
139
- constructor(engine: ThinEngine, numWorkersOrOptions?: number | IKhronosTextureContainer2Options);
145
+ constructor(engine: AbstractEngine, numWorkersOrOptions?: number | IKhronosTextureContainer2Options);
140
146
  /**
141
147
  * @internal
142
148
  */
@@ -194,8 +194,9 @@ export class KhronosTextureContainer2 {
194
194
  */
195
195
  constructor(engine, numWorkersOrOptions = KhronosTextureContainer2.DefaultNumWorkers) {
196
196
  this._engine = engine;
197
- if (typeof numWorkersOrOptions === "object" && numWorkersOrOptions.workerPool) {
198
- KhronosTextureContainer2._WorkerPoolPromise = Promise.resolve(numWorkersOrOptions.workerPool);
197
+ const workerPoolOption = (typeof numWorkersOrOptions === "object" && numWorkersOrOptions.workerPool) || KhronosTextureContainer2.WorkerPool;
198
+ if (workerPoolOption) {
199
+ KhronosTextureContainer2._WorkerPoolPromise = Promise.resolve(workerPoolOption);
199
200
  }
200
201
  else {
201
202
  // set the KTX2 decoder module
@@ -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 { ThinEngine } from \"../Engines/thinEngine\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { AutoReleaseWorkerPool } from \"./workerPool\";\r\nimport { Tools } from \"./tools\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { ICompressedFormatCapabilities, IDecodedData, IKTX2DecoderOptions } from \"core/Materials/Textures/ktx2decoderTypes\";\r\nimport { EngineFormat, TranscodeTarget } from \"core/Materials/Textures/ktx2decoderTypes\";\r\nimport type { AllowedKeys } from \"./khronosTextureContainer2Worker\";\r\nimport { 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 useRGBAIfASTCBC7NotAvailableWhenUASTC: this._useRGBAIfASTCBC7NotAvailableWhenUASTC,\r\n forceRGBA: this._forceRGBA,\r\n forceR8: this._forceR8,\r\n forceRG8: this._forceRG8,\r\n 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 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 * 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: ThinEngine;\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 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 const workerContent = `${applyConfig}(${workerFunction})()`;\r\n const workerBlobUrl = URL.createObjectURL(new Blob([workerContent], { type: \"application/javascript\" }));\r\n resolve(new AutoReleaseWorkerPool(numWorkers, () => initializeWebWorker(new Worker(workerBlobUrl), undefined, urls)));\r\n });\r\n } else {\r\n if (typeof KhronosTextureContainer2._KTX2DecoderModule === \"undefined\") {\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 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: ThinEngine, numWorkersOrOptions: number | IKhronosTextureContainer2Options = KhronosTextureContainer2.DefaultNumWorkers) {\r\n this._engine = engine;\r\n if (typeof numWorkersOrOptions === \"object\" && numWorkersOrOptions.workerPool) {\r\n KhronosTextureContainer2._WorkerPoolPromise = Promise.resolve(numWorkersOrOptions.workerPool);\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 _uploadAsync(data: ArrayBufferView, internalTexture: InternalTexture, options?: IKTX2DecoderOptions & IDecodedData): Promise<void> {\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 return KhronosTextureContainer2._WorkerPoolPromise.then((workerPool) => {\r\n return 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 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 reject({ message: message.data.msg });\r\n } else {\r\n try {\r\n this._createTexture(message.data.decodedData, internalTexture, options);\r\n resolve();\r\n } catch (err) {\r\n reject({ message: err });\r\n }\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 });\r\n } else if (KhronosTextureContainer2._DecoderModulePromise) {\r\n return KhronosTextureContainer2._DecoderModulePromise.then((decoder) => {\r\n if (KhronosTextureContainer2.DefaultDecoderOptions.isDirty) {\r\n KhronosTextureContainer2._KTX2DecoderModule.KTX2Decoder.DefaultDecoderOptions = KhronosTextureContainer2.DefaultDecoderOptions._getKTX2DecoderOptions();\r\n }\r\n return new Promise((resolve, reject) => {\r\n decoder\r\n .decode(data, caps)\r\n .then((data: IDecodedData) => {\r\n this._createTexture(data, internalTexture);\r\n resolve();\r\n })\r\n .catch((reason: any) => {\r\n reject({ message: reason });\r\n });\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 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\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.width = data.mipmaps[0].width;\r\n internalTexture.height = data.mipmaps[0].height;\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\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { ICompressedFormatCapabilities, IDecodedData, IKTX2DecoderOptions } from \"core/Materials/Textures/ktx2decoderTypes\";\r\nimport { EngineFormat, TranscodeTarget } from \"core/Materials/Textures/ktx2decoderTypes\";\r\nimport type { AllowedKeys } from \"./khronosTextureContainer2Worker\";\r\nimport { 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 useRGBAIfASTCBC7NotAvailableWhenUASTC: this._useRGBAIfASTCBC7NotAvailableWhenUASTC,\r\n forceRGBA: this._forceRGBA,\r\n forceR8: this._forceR8,\r\n forceRG8: this._forceRG8,\r\n 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 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 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 const workerContent = `${applyConfig}(${workerFunction})()`;\r\n const workerBlobUrl = URL.createObjectURL(new Blob([workerContent], { type: \"application/javascript\" }));\r\n resolve(new AutoReleaseWorkerPool(numWorkers, () => initializeWebWorker(new Worker(workerBlobUrl), undefined, urls)));\r\n });\r\n } else {\r\n if (typeof KhronosTextureContainer2._KTX2DecoderModule === \"undefined\") {\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 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 _uploadAsync(data: ArrayBufferView, internalTexture: InternalTexture, options?: IKTX2DecoderOptions & IDecodedData): Promise<void> {\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 return KhronosTextureContainer2._WorkerPoolPromise.then((workerPool) => {\r\n return 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 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 reject({ message: message.data.msg });\r\n } else {\r\n try {\r\n this._createTexture(message.data.decodedData, internalTexture, options);\r\n resolve();\r\n } catch (err) {\r\n reject({ message: err });\r\n }\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 });\r\n } else if (KhronosTextureContainer2._DecoderModulePromise) {\r\n return KhronosTextureContainer2._DecoderModulePromise.then((decoder) => {\r\n if (KhronosTextureContainer2.DefaultDecoderOptions.isDirty) {\r\n KhronosTextureContainer2._KTX2DecoderModule.KTX2Decoder.DefaultDecoderOptions = KhronosTextureContainer2.DefaultDecoderOptions._getKTX2DecoderOptions();\r\n }\r\n return new Promise((resolve, reject) => {\r\n decoder\r\n .decode(data, caps)\r\n .then((data: IDecodedData) => {\r\n this._createTexture(data, internalTexture);\r\n resolve();\r\n })\r\n .catch((reason: any) => {\r\n reject({ message: reason });\r\n });\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 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\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.width = data.mipmaps[0].width;\r\n internalTexture.height = data.mipmaps[0].height;\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"]}
@@ -5,7 +5,7 @@ import type { Observer } from "./observable";
5
5
  import { Observable } from "./observable";
6
6
  import { PostProcess } from "../PostProcesses/postProcess";
7
7
  import { PostProcessManager } from "../PostProcesses/postProcessManager";
8
- import type { ThinEngine } from "../Engines/thinEngine";
8
+ import type { AbstractEngine } from "../Engines/abstractEngine";
9
9
  import "../Shaders/minmaxRedux.fragment";
10
10
  /**
11
11
  * This class computes a min/max reduction from a texture: it means it computes the minimum
@@ -27,7 +27,7 @@ export declare class MinMaxReducer {
27
27
  protected _postProcessManager: PostProcessManager;
28
28
  protected _onAfterUnbindObserver: Nullable<Observer<RenderTargetTexture>>;
29
29
  protected _forceFullscreenViewport: boolean;
30
- protected _onContextRestoredObserver: Nullable<Observer<ThinEngine>>;
30
+ protected _onContextRestoredObserver: Nullable<Observer<AbstractEngine>>;
31
31
  /**
32
32
  * Creates a min/max reducer
33
33
  * @param camera The camera to use for the post processes
@@ -1 +1 @@
1
- {"version":3,"file":"minMaxReducer.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/minMaxReducer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport type { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport type { Camera } from \"../Cameras/camera\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { Observer } from \"./observable\";\r\nimport { Observable } from \"./observable\";\r\nimport type { Effect } from \"../Materials/effect\";\r\nimport { PostProcess } from \"../PostProcesses/postProcess\";\r\nimport { PostProcessManager } from \"../PostProcesses/postProcessManager\";\r\n\r\nimport type { ThinEngine } from \"../Engines/thinEngine\";\r\n\r\nimport \"../Shaders/minmaxRedux.fragment\";\r\n\r\n/**\r\n * This class computes a min/max reduction from a texture: it means it computes the minimum\r\n * and maximum values from all values of the texture.\r\n * It is performed on the GPU for better performances, thanks to a succession of post processes.\r\n * The source values are read from the red channel of the texture.\r\n */\r\nexport class MinMaxReducer {\r\n /**\r\n * Observable triggered when the computation has been performed\r\n */\r\n public onAfterReductionPerformed = new Observable<{ min: number; max: number }>();\r\n\r\n protected _camera: Camera;\r\n protected _sourceTexture: Nullable<RenderTargetTexture>;\r\n protected _reductionSteps: Nullable<Array<PostProcess>>;\r\n protected _postProcessManager: PostProcessManager;\r\n protected _onAfterUnbindObserver: Nullable<Observer<RenderTargetTexture>>;\r\n protected _forceFullscreenViewport = true;\r\n protected _onContextRestoredObserver: Nullable<Observer<ThinEngine>>;\r\n\r\n /**\r\n * Creates a min/max reducer\r\n * @param camera The camera to use for the post processes\r\n */\r\n constructor(camera: Camera) {\r\n this._camera = camera;\r\n this._postProcessManager = new PostProcessManager(camera.getScene());\r\n\r\n this._onContextRestoredObserver = camera.getEngine().onContextRestoredObservable.add(() => {\r\n this._postProcessManager._rebuild();\r\n });\r\n }\r\n\r\n /**\r\n * Gets the texture used to read the values from.\r\n */\r\n public get sourceTexture(): Nullable<RenderTargetTexture> {\r\n return this._sourceTexture;\r\n }\r\n\r\n /**\r\n * Sets the source texture to read the values from.\r\n * One must indicate if the texture is a depth texture or not through the depthRedux parameter\r\n * because in such textures '1' value must not be taken into account to compute the maximum\r\n * as this value is used to clear the texture.\r\n * Note that the computation is not activated by calling this function, you must call activate() for that!\r\n * @param sourceTexture The texture to read the values from. The values should be in the red channel.\r\n * @param depthRedux Indicates if the texture is a depth texture or not\r\n * @param type The type of the textures created for the reduction (defaults to TEXTURETYPE_HALF_FLOAT)\r\n * @param forceFullscreenViewport Forces the post processes used for the reduction to be applied without taking into account viewport (defaults to true)\r\n */\r\n public setSourceTexture(sourceTexture: RenderTargetTexture, depthRedux: boolean, type: number = Constants.TEXTURETYPE_HALF_FLOAT, forceFullscreenViewport = true): void {\r\n if (sourceTexture === this._sourceTexture) {\r\n return;\r\n }\r\n\r\n this.dispose(false);\r\n\r\n this._sourceTexture = sourceTexture;\r\n this._reductionSteps = [];\r\n this._forceFullscreenViewport = forceFullscreenViewport;\r\n\r\n const scene = this._camera.getScene();\r\n\r\n // create the first step\r\n const reductionInitial = new PostProcess(\r\n \"Initial reduction phase\",\r\n \"minmaxRedux\", // shader\r\n [\"texSize\"],\r\n [\"sourceTexture\"], // textures\r\n 1.0, // options\r\n null, // camera\r\n Constants.TEXTURE_NEAREST_NEAREST, // sampling\r\n scene.getEngine(), // engine\r\n false, // reusable\r\n \"#define INITIAL\" + (depthRedux ? \"\\n#define DEPTH_REDUX\" : \"\"), // defines\r\n type,\r\n undefined,\r\n undefined,\r\n undefined,\r\n Constants.TEXTUREFORMAT_RG\r\n );\r\n\r\n reductionInitial.autoClear = false;\r\n reductionInitial.forceFullscreenViewport = forceFullscreenViewport;\r\n\r\n let w = this._sourceTexture.getRenderWidth(),\r\n h = this._sourceTexture.getRenderHeight();\r\n\r\n reductionInitial.onApply = ((w: number, h: number) => {\r\n return (effect: Effect) => {\r\n effect.setTexture(\"sourceTexture\", this._sourceTexture);\r\n effect.setFloat2(\"texSize\", w, h);\r\n };\r\n })(w, h);\r\n\r\n this._reductionSteps.push(reductionInitial);\r\n\r\n let index = 1;\r\n\r\n // create the additional steps\r\n while (w > 1 || h > 1) {\r\n w = Math.max(Math.round(w / 2), 1);\r\n h = Math.max(Math.round(h / 2), 1);\r\n\r\n const reduction = new PostProcess(\r\n \"Reduction phase \" + index,\r\n \"minmaxRedux\", // shader\r\n [\"texSize\"],\r\n null,\r\n { width: w, height: h }, // options\r\n null, // camera\r\n Constants.TEXTURE_NEAREST_NEAREST, // sampling\r\n scene.getEngine(), // engine\r\n false, // reusable\r\n \"#define \" + (w == 1 && h == 1 ? \"LAST\" : w == 1 || h == 1 ? \"ONEBEFORELAST\" : \"MAIN\"), // defines\r\n type,\r\n undefined,\r\n undefined,\r\n undefined,\r\n Constants.TEXTUREFORMAT_RG\r\n );\r\n\r\n reduction.autoClear = false;\r\n reduction.forceFullscreenViewport = forceFullscreenViewport;\r\n\r\n reduction.onApply = ((w: number, h: number) => {\r\n return (effect: Effect) => {\r\n if (w == 1 || h == 1) {\r\n effect.setInt2(\"texSize\", w, h);\r\n } else {\r\n effect.setFloat2(\"texSize\", w, h);\r\n }\r\n };\r\n })(w, h);\r\n\r\n this._reductionSteps.push(reduction);\r\n\r\n index++;\r\n\r\n if (w == 1 && h == 1) {\r\n const func = (w: number, h: number, reduction: PostProcess) => {\r\n const buffer = new Float32Array(4 * w * h),\r\n minmax = { min: 0, max: 0 };\r\n return () => {\r\n scene.getEngine()._readTexturePixels(reduction.inputTexture.texture!, w, h, -1, 0, buffer, false);\r\n minmax.min = buffer[0];\r\n minmax.max = buffer[1];\r\n this.onAfterReductionPerformed.notifyObservers(minmax);\r\n };\r\n };\r\n reduction.onAfterRenderObservable.add(func(w, h, reduction));\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Defines the refresh rate of the computation.\r\n * Use 0 to compute just once, 1 to compute on every frame, 2 to compute every two frames and so on...\r\n */\r\n public get refreshRate(): number {\r\n return this._sourceTexture ? this._sourceTexture.refreshRate : -1;\r\n }\r\n\r\n public set refreshRate(value: number) {\r\n if (this._sourceTexture) {\r\n this._sourceTexture.refreshRate = value;\r\n }\r\n }\r\n\r\n protected _activated = false;\r\n\r\n /**\r\n * Gets the activation status of the reducer\r\n */\r\n public get activated(): boolean {\r\n return this._activated;\r\n }\r\n\r\n /**\r\n * Activates the reduction computation.\r\n * When activated, the observers registered in onAfterReductionPerformed are\r\n * called after the computation is performed\r\n */\r\n public activate(): void {\r\n if (this._onAfterUnbindObserver || !this._sourceTexture) {\r\n return;\r\n }\r\n\r\n this._onAfterUnbindObserver = this._sourceTexture.onAfterUnbindObservable.add(() => {\r\n const engine = this._camera.getScene().getEngine();\r\n engine._debugPushGroup?.(`min max reduction`, 1);\r\n this._reductionSteps![0].activate(this._camera);\r\n this._postProcessManager.directRender(this._reductionSteps!, this._reductionSteps![0].inputTexture, this._forceFullscreenViewport);\r\n engine.unBindFramebuffer(this._reductionSteps![0].inputTexture, false);\r\n engine._debugPopGroup?.(1);\r\n });\r\n\r\n this._activated = true;\r\n }\r\n\r\n /**\r\n * Deactivates the reduction computation.\r\n */\r\n public deactivate(): void {\r\n if (!this._onAfterUnbindObserver || !this._sourceTexture) {\r\n return;\r\n }\r\n\r\n this._sourceTexture.onAfterUnbindObservable.remove(this._onAfterUnbindObserver);\r\n this._onAfterUnbindObserver = null;\r\n this._activated = false;\r\n }\r\n\r\n /**\r\n * Disposes the min/max reducer\r\n * @param disposeAll true to dispose all the resources. You should always call this function with true as the parameter (or without any parameter as it is the default one). This flag is meant to be used internally.\r\n */\r\n public dispose(disposeAll = true): void {\r\n if (disposeAll) {\r\n this.onAfterReductionPerformed.clear();\r\n\r\n if (this._onContextRestoredObserver) {\r\n this._camera.getEngine().onContextRestoredObservable.remove(this._onContextRestoredObserver);\r\n this._onContextRestoredObserver = null;\r\n }\r\n }\r\n\r\n this.deactivate();\r\n\r\n if (this._reductionSteps) {\r\n for (let i = 0; i < this._reductionSteps.length; ++i) {\r\n this._reductionSteps[i].dispose();\r\n }\r\n this._reductionSteps = null;\r\n }\r\n\r\n if (this._postProcessManager && disposeAll) {\r\n this._postProcessManager.dispose();\r\n }\r\n\r\n this._sourceTexture = null;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"minMaxReducer.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/minMaxReducer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAIzE,OAAO,iCAAiC,CAAC;AAEzC;;;;;GAKG;AACH,MAAM,OAAO,aAAa;IActB;;;OAGG;IACH,YAAY,MAAc;QAjB1B;;WAEG;QACI,8BAAyB,GAAG,IAAI,UAAU,EAAgC,CAAC;QAOxE,6BAAwB,GAAG,IAAI,CAAC;QAyJhC,eAAU,GAAG,KAAK,CAAC;QAjJzB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,mBAAmB,GAAG,IAAI,kBAAkB,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAErE,IAAI,CAAC,0BAA0B,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC,2BAA2B,CAAC,GAAG,CAAC,GAAG,EAAE;YACtF,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC;QACxC,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACH,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED;;;;;;;;;;OAUG;IACI,gBAAgB,CAAC,aAAkC,EAAE,UAAmB,EAAE,OAAe,SAAS,CAAC,sBAAsB,EAAE,uBAAuB,GAAG,IAAI;QAC5J,IAAI,aAAa,KAAK,IAAI,CAAC,cAAc,EAAE;YACvC,OAAO;SACV;QAED,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAEpB,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,wBAAwB,GAAG,uBAAuB,CAAC;QAExD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QAEtC,wBAAwB;QACxB,MAAM,gBAAgB,GAAG,IAAI,WAAW,CACpC,yBAAyB,EACzB,aAAa,EAAE,SAAS;QACxB,CAAC,SAAS,CAAC,EACX,CAAC,eAAe,CAAC,EAAE,WAAW;QAC9B,GAAG,EAAE,UAAU;QACf,IAAI,EAAE,SAAS;QACf,SAAS,CAAC,uBAAuB,EAAE,WAAW;QAC9C,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS;QAC5B,KAAK,EAAE,WAAW;QAClB,iBAAiB,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU;QAC3E,IAAI,EACJ,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,CAAC,gBAAgB,CAC7B,CAAC;QAEF,gBAAgB,CAAC,SAAS,GAAG,KAAK,CAAC;QACnC,gBAAgB,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;QAEnE,IAAI,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,EACxC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC;QAE9C,gBAAgB,CAAC,OAAO,GAAG,CAAC,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE;YACjD,OAAO,CAAC,MAAc,EAAE,EAAE;gBACtB,MAAM,CAAC,UAAU,CAAC,eAAe,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;gBACxD,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACtC,CAAC,CAAC;QACN,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAET,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAE5C,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,8BAA8B;QAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACnB,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACnC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAEnC,MAAM,SAAS,GAAG,IAAI,WAAW,CAC7B,kBAAkB,GAAG,KAAK,EAC1B,aAAa,EAAE,SAAS;YACxB,CAAC,SAAS,CAAC,EACX,IAAI,EACJ,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,UAAU;YACnC,IAAI,EAAE,SAAS;YACf,SAAS,CAAC,uBAAuB,EAAE,WAAW;YAC9C,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS;YAC5B,KAAK,EAAE,WAAW;YAClB,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,UAAU;YAClG,IAAI,EACJ,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,CAAC,gBAAgB,CAC7B,CAAC;YAEF,SAAS,CAAC,SAAS,GAAG,KAAK,CAAC;YAC5B,SAAS,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;YAE5D,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE;gBAC1C,OAAO,CAAC,MAAc,EAAE,EAAE;oBACtB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;wBAClB,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;qBACnC;yBAAM;wBACH,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;qBACrC;gBACL,CAAC,CAAC;YACN,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAET,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAErC,KAAK,EAAE,CAAC;YAER,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAClB,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,SAAsB,EAAE,EAAE;oBAC1D,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EACtC,MAAM,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;oBAChC,OAAO,GAAG,EAAE;wBACR,KAAK,CAAC,SAAS,EAAE,CAAC,kBAAkB,CAAC,SAAS,CAAC,YAAY,CAAC,OAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;wBAClG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;wBACvB,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;wBACvB,IAAI,CAAC,yBAAyB,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;oBAC3D,CAAC,CAAC;gBACN,CAAC,CAAC;gBACF,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;aAChE;SACJ;IACL,CAAC;IAED;;;OAGG;IACH,IAAW,WAAW;QAClB,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,IAAW,WAAW,CAAC,KAAa;QAChC,IAAI,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,CAAC,cAAc,CAAC,WAAW,GAAG,KAAK,CAAC;SAC3C;IACL,CAAC;IAID;;OAEG;IACH,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACI,QAAQ;QACX,IAAI,IAAI,CAAC,sBAAsB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACrD,OAAO;SACV;QAED,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,cAAc,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,EAAE;YAC/E,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,CAAC;YACnD,MAAM,CAAC,eAAe,EAAE,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;YACjD,IAAI,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAChD,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,IAAI,CAAC,eAAgB,EAAE,IAAI,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;YACnI,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;YACvE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED;;OAEG;IACI,UAAU;QACb,IAAI,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACtD,OAAO;SACV;QAED,IAAI,CAAC,cAAc,CAAC,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAChF,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACI,OAAO,CAAC,UAAU,GAAG,IAAI;QAC5B,IAAI,UAAU,EAAE;YACZ,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,CAAC;YAEvC,IAAI,IAAI,CAAC,0BAA0B,EAAE;gBACjC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,2BAA2B,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;gBAC7F,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC;aAC1C;SACJ;QAED,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,IAAI,IAAI,CAAC,eAAe,EAAE;YACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;gBAClD,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;aACrC;YACD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;SAC/B;QAED,IAAI,IAAI,CAAC,mBAAmB,IAAI,UAAU,EAAE;YACxC,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC;SACtC;QAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC/B,CAAC;CACJ","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport type { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport type { Camera } from \"../Cameras/camera\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { Observer } from \"./observable\";\r\nimport { Observable } from \"./observable\";\r\nimport type { Effect } from \"../Materials/effect\";\r\nimport { PostProcess } from \"../PostProcesses/postProcess\";\r\nimport { PostProcessManager } from \"../PostProcesses/postProcessManager\";\r\n\r\nimport type { AbstractEngine } from \"../Engines/abstractEngine\";\r\n\r\nimport \"../Shaders/minmaxRedux.fragment\";\r\n\r\n/**\r\n * This class computes a min/max reduction from a texture: it means it computes the minimum\r\n * and maximum values from all values of the texture.\r\n * It is performed on the GPU for better performances, thanks to a succession of post processes.\r\n * The source values are read from the red channel of the texture.\r\n */\r\nexport class MinMaxReducer {\r\n /**\r\n * Observable triggered when the computation has been performed\r\n */\r\n public onAfterReductionPerformed = new Observable<{ min: number; max: number }>();\r\n\r\n protected _camera: Camera;\r\n protected _sourceTexture: Nullable<RenderTargetTexture>;\r\n protected _reductionSteps: Nullable<Array<PostProcess>>;\r\n protected _postProcessManager: PostProcessManager;\r\n protected _onAfterUnbindObserver: Nullable<Observer<RenderTargetTexture>>;\r\n protected _forceFullscreenViewport = true;\r\n protected _onContextRestoredObserver: Nullable<Observer<AbstractEngine>>;\r\n\r\n /**\r\n * Creates a min/max reducer\r\n * @param camera The camera to use for the post processes\r\n */\r\n constructor(camera: Camera) {\r\n this._camera = camera;\r\n this._postProcessManager = new PostProcessManager(camera.getScene());\r\n\r\n this._onContextRestoredObserver = camera.getEngine().onContextRestoredObservable.add(() => {\r\n this._postProcessManager._rebuild();\r\n });\r\n }\r\n\r\n /**\r\n * Gets the texture used to read the values from.\r\n */\r\n public get sourceTexture(): Nullable<RenderTargetTexture> {\r\n return this._sourceTexture;\r\n }\r\n\r\n /**\r\n * Sets the source texture to read the values from.\r\n * One must indicate if the texture is a depth texture or not through the depthRedux parameter\r\n * because in such textures '1' value must not be taken into account to compute the maximum\r\n * as this value is used to clear the texture.\r\n * Note that the computation is not activated by calling this function, you must call activate() for that!\r\n * @param sourceTexture The texture to read the values from. The values should be in the red channel.\r\n * @param depthRedux Indicates if the texture is a depth texture or not\r\n * @param type The type of the textures created for the reduction (defaults to TEXTURETYPE_HALF_FLOAT)\r\n * @param forceFullscreenViewport Forces the post processes used for the reduction to be applied without taking into account viewport (defaults to true)\r\n */\r\n public setSourceTexture(sourceTexture: RenderTargetTexture, depthRedux: boolean, type: number = Constants.TEXTURETYPE_HALF_FLOAT, forceFullscreenViewport = true): void {\r\n if (sourceTexture === this._sourceTexture) {\r\n return;\r\n }\r\n\r\n this.dispose(false);\r\n\r\n this._sourceTexture = sourceTexture;\r\n this._reductionSteps = [];\r\n this._forceFullscreenViewport = forceFullscreenViewport;\r\n\r\n const scene = this._camera.getScene();\r\n\r\n // create the first step\r\n const reductionInitial = new PostProcess(\r\n \"Initial reduction phase\",\r\n \"minmaxRedux\", // shader\r\n [\"texSize\"],\r\n [\"sourceTexture\"], // textures\r\n 1.0, // options\r\n null, // camera\r\n Constants.TEXTURE_NEAREST_NEAREST, // sampling\r\n scene.getEngine(), // engine\r\n false, // reusable\r\n \"#define INITIAL\" + (depthRedux ? \"\\n#define DEPTH_REDUX\" : \"\"), // defines\r\n type,\r\n undefined,\r\n undefined,\r\n undefined,\r\n Constants.TEXTUREFORMAT_RG\r\n );\r\n\r\n reductionInitial.autoClear = false;\r\n reductionInitial.forceFullscreenViewport = forceFullscreenViewport;\r\n\r\n let w = this._sourceTexture.getRenderWidth(),\r\n h = this._sourceTexture.getRenderHeight();\r\n\r\n reductionInitial.onApply = ((w: number, h: number) => {\r\n return (effect: Effect) => {\r\n effect.setTexture(\"sourceTexture\", this._sourceTexture);\r\n effect.setFloat2(\"texSize\", w, h);\r\n };\r\n })(w, h);\r\n\r\n this._reductionSteps.push(reductionInitial);\r\n\r\n let index = 1;\r\n\r\n // create the additional steps\r\n while (w > 1 || h > 1) {\r\n w = Math.max(Math.round(w / 2), 1);\r\n h = Math.max(Math.round(h / 2), 1);\r\n\r\n const reduction = new PostProcess(\r\n \"Reduction phase \" + index,\r\n \"minmaxRedux\", // shader\r\n [\"texSize\"],\r\n null,\r\n { width: w, height: h }, // options\r\n null, // camera\r\n Constants.TEXTURE_NEAREST_NEAREST, // sampling\r\n scene.getEngine(), // engine\r\n false, // reusable\r\n \"#define \" + (w == 1 && h == 1 ? \"LAST\" : w == 1 || h == 1 ? \"ONEBEFORELAST\" : \"MAIN\"), // defines\r\n type,\r\n undefined,\r\n undefined,\r\n undefined,\r\n Constants.TEXTUREFORMAT_RG\r\n );\r\n\r\n reduction.autoClear = false;\r\n reduction.forceFullscreenViewport = forceFullscreenViewport;\r\n\r\n reduction.onApply = ((w: number, h: number) => {\r\n return (effect: Effect) => {\r\n if (w == 1 || h == 1) {\r\n effect.setInt2(\"texSize\", w, h);\r\n } else {\r\n effect.setFloat2(\"texSize\", w, h);\r\n }\r\n };\r\n })(w, h);\r\n\r\n this._reductionSteps.push(reduction);\r\n\r\n index++;\r\n\r\n if (w == 1 && h == 1) {\r\n const func = (w: number, h: number, reduction: PostProcess) => {\r\n const buffer = new Float32Array(4 * w * h),\r\n minmax = { min: 0, max: 0 };\r\n return () => {\r\n scene.getEngine()._readTexturePixels(reduction.inputTexture.texture!, w, h, -1, 0, buffer, false);\r\n minmax.min = buffer[0];\r\n minmax.max = buffer[1];\r\n this.onAfterReductionPerformed.notifyObservers(minmax);\r\n };\r\n };\r\n reduction.onAfterRenderObservable.add(func(w, h, reduction));\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Defines the refresh rate of the computation.\r\n * Use 0 to compute just once, 1 to compute on every frame, 2 to compute every two frames and so on...\r\n */\r\n public get refreshRate(): number {\r\n return this._sourceTexture ? this._sourceTexture.refreshRate : -1;\r\n }\r\n\r\n public set refreshRate(value: number) {\r\n if (this._sourceTexture) {\r\n this._sourceTexture.refreshRate = value;\r\n }\r\n }\r\n\r\n protected _activated = false;\r\n\r\n /**\r\n * Gets the activation status of the reducer\r\n */\r\n public get activated(): boolean {\r\n return this._activated;\r\n }\r\n\r\n /**\r\n * Activates the reduction computation.\r\n * When activated, the observers registered in onAfterReductionPerformed are\r\n * called after the computation is performed\r\n */\r\n public activate(): void {\r\n if (this._onAfterUnbindObserver || !this._sourceTexture) {\r\n return;\r\n }\r\n\r\n this._onAfterUnbindObserver = this._sourceTexture.onAfterUnbindObservable.add(() => {\r\n const engine = this._camera.getScene().getEngine();\r\n engine._debugPushGroup?.(`min max reduction`, 1);\r\n this._reductionSteps![0].activate(this._camera);\r\n this._postProcessManager.directRender(this._reductionSteps!, this._reductionSteps![0].inputTexture, this._forceFullscreenViewport);\r\n engine.unBindFramebuffer(this._reductionSteps![0].inputTexture, false);\r\n engine._debugPopGroup?.(1);\r\n });\r\n\r\n this._activated = true;\r\n }\r\n\r\n /**\r\n * Deactivates the reduction computation.\r\n */\r\n public deactivate(): void {\r\n if (!this._onAfterUnbindObserver || !this._sourceTexture) {\r\n return;\r\n }\r\n\r\n this._sourceTexture.onAfterUnbindObservable.remove(this._onAfterUnbindObserver);\r\n this._onAfterUnbindObserver = null;\r\n this._activated = false;\r\n }\r\n\r\n /**\r\n * Disposes the min/max reducer\r\n * @param disposeAll true to dispose all the resources. You should always call this function with true as the parameter (or without any parameter as it is the default one). This flag is meant to be used internally.\r\n */\r\n public dispose(disposeAll = true): void {\r\n if (disposeAll) {\r\n this.onAfterReductionPerformed.clear();\r\n\r\n if (this._onContextRestoredObserver) {\r\n this._camera.getEngine().onContextRestoredObservable.remove(this._onContextRestoredObserver);\r\n this._onContextRestoredObserver = null;\r\n }\r\n }\r\n\r\n this.deactivate();\r\n\r\n if (this._reductionSteps) {\r\n for (let i = 0; i < this._reductionSteps.length; ++i) {\r\n this._reductionSteps[i].dispose();\r\n }\r\n this._reductionSteps = null;\r\n }\r\n\r\n if (this._postProcessManager && disposeAll) {\r\n this._postProcessManager.dispose();\r\n }\r\n\r\n this._sourceTexture = null;\r\n }\r\n}\r\n"]}