@babylonjs/core 6.7.0 → 6.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (412) hide show
  1. package/Actions/abstractActionManager.js.map +1 -1
  2. package/Actions/action.js.map +1 -1
  3. package/Animations/animation.js.map +1 -1
  4. package/Animations/animationGroup.d.ts +5 -0
  5. package/Animations/animationGroup.js +12 -0
  6. package/Animations/animationGroup.js.map +1 -1
  7. package/Animations/easing.js.map +1 -1
  8. package/Audio/audioSceneComponent.js.map +1 -1
  9. package/Audio/sound.js.map +1 -1
  10. package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -1
  11. package/Behaviors/Cameras/bouncingBehavior.js.map +1 -1
  12. package/Behaviors/Cameras/framingBehavior.js.map +1 -1
  13. package/Behaviors/Meshes/fadeInOutBehavior.js.map +1 -1
  14. package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
  15. package/Bones/bone.js.map +1 -1
  16. package/Bones/boneIKController.js.map +1 -1
  17. package/Bones/boneLookController.js.map +1 -1
  18. package/Buffers/dataBuffer.js.map +1 -1
  19. package/Cameras/Inputs/BaseCameraMouseWheelInput.js.map +1 -1
  20. package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
  21. package/Cameras/Inputs/arcRotateCameraGamepadInput.js.map +1 -1
  22. package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js.map +1 -1
  23. package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js.map +1 -1
  24. package/Cameras/Inputs/arcRotateCameraPointersInput.js.map +1 -1
  25. package/Cameras/Inputs/flyCameraKeyboardInput.js.map +1 -1
  26. package/Cameras/Inputs/flyCameraMouseInput.js.map +1 -1
  27. package/Cameras/Inputs/followCameraKeyboardMoveInput.js.map +1 -1
  28. package/Cameras/Inputs/followCameraMouseWheelInput.js.map +1 -1
  29. package/Cameras/Inputs/followCameraPointersInput.js.map +1 -1
  30. package/Cameras/Inputs/freeCameraGamepadInput.js.map +1 -1
  31. package/Cameras/Inputs/freeCameraKeyboardMoveInput.js.map +1 -1
  32. package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
  33. package/Cameras/Inputs/freeCameraTouchInput.js.map +1 -1
  34. package/Cameras/VR/vrExperienceHelper.js.map +1 -1
  35. package/Cameras/arcRotateCamera.js.map +1 -1
  36. package/Cameras/camera.js.map +1 -1
  37. package/Cameras/flyCamera.js.map +1 -1
  38. package/Cameras/followCamera.js.map +1 -1
  39. package/Cameras/freeCamera.js.map +1 -1
  40. package/Cameras/targetCamera.js.map +1 -1
  41. package/Collisions/collider.js.map +1 -1
  42. package/Compute/computeEffect.js.map +1 -1
  43. package/Compute/computeShader.js +1 -5
  44. package/Compute/computeShader.js.map +1 -1
  45. package/Culling/Octrees/octree.js.map +1 -1
  46. package/Culling/boundingBox.js.map +1 -1
  47. package/Culling/boundingInfo.js.map +1 -1
  48. package/Culling/boundingSphere.js.map +1 -1
  49. package/Culling/ray.d.ts +7 -2
  50. package/Culling/ray.js +8 -3
  51. package/Culling/ray.js.map +1 -1
  52. package/Debug/debugLayer.js +1 -9
  53. package/Debug/debugLayer.js.map +1 -1
  54. package/Debug/skeletonViewer.js.map +1 -1
  55. package/Engines/Extensions/engine.cubeTexture.js +1 -6
  56. package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
  57. package/Engines/Extensions/engine.multiRender.js.map +1 -1
  58. package/Engines/Extensions/engine.multiview.d.ts +6 -1
  59. package/Engines/Extensions/engine.multiview.js +27 -7
  60. package/Engines/Extensions/engine.multiview.js.map +1 -1
  61. package/Engines/Extensions/engine.renderTarget.js +1 -6
  62. package/Engines/Extensions/engine.renderTarget.js.map +1 -1
  63. package/Engines/Extensions/engine.renderTargetCube.js +1 -9
  64. package/Engines/Extensions/engine.renderTargetCube.js.map +1 -1
  65. package/Engines/Extensions/engine.webVR.js +1 -5
  66. package/Engines/Extensions/engine.webVR.js.map +1 -1
  67. package/Engines/Native/nativeInterfaces.d.ts +1 -0
  68. package/Engines/Native/nativeInterfaces.js.map +1 -1
  69. package/Engines/Processors/Expressions/Operators/shaderDefineArithmeticOperator.js +3 -0
  70. package/Engines/Processors/Expressions/Operators/shaderDefineArithmeticOperator.js.map +1 -1
  71. package/Engines/Processors/Expressions/shaderDefineExpression.d.ts +37 -0
  72. package/Engines/Processors/Expressions/shaderDefineExpression.js +57 -0
  73. package/Engines/Processors/Expressions/shaderDefineExpression.js.map +1 -1
  74. package/Engines/Processors/shaderCodeInliner.js.map +1 -1
  75. package/Engines/Processors/shaderProcessor.js +34 -14
  76. package/Engines/Processors/shaderProcessor.js.map +1 -1
  77. package/Engines/WebGL/webGLRenderTargetWrapper.d.ts +19 -0
  78. package/Engines/WebGL/webGLRenderTargetWrapper.js +20 -1
  79. package/Engines/WebGL/webGLRenderTargetWrapper.js.map +1 -1
  80. package/Engines/WebGPU/Extensions/engine.cubeTexture.js +1 -7
  81. package/Engines/WebGPU/Extensions/engine.cubeTexture.js.map +1 -1
  82. package/Engines/WebGPU/Extensions/engine.renderTarget.js +1 -8
  83. package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
  84. package/Engines/WebGPU/Extensions/engine.renderTargetCube.js +1 -10
  85. package/Engines/WebGPU/Extensions/engine.renderTargetCube.js.map +1 -1
  86. package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
  87. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  88. package/Engines/WebGPU/webgpuCacheSampler.js +1 -6
  89. package/Engines/WebGPU/webgpuCacheSampler.js.map +1 -1
  90. package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
  91. package/Engines/WebGPU/webgpuTintWASM.js +1 -4
  92. package/Engines/WebGPU/webgpuTintWASM.js.map +1 -1
  93. package/Engines/engine.d.ts +8 -1
  94. package/Engines/engine.js.map +1 -1
  95. package/Engines/engineCapabilities.d.ts +2 -0
  96. package/Engines/engineCapabilities.js.map +1 -1
  97. package/Engines/nativeEngine.d.ts +2 -0
  98. package/Engines/nativeEngine.js +16 -0
  99. package/Engines/nativeEngine.js.map +1 -1
  100. package/Engines/nullEngine.js +1 -9
  101. package/Engines/nullEngine.js.map +1 -1
  102. package/Engines/thinEngine.js +7 -9
  103. package/Engines/thinEngine.js.map +1 -1
  104. package/Engines/webgpuEngine.js +3 -14
  105. package/Engines/webgpuEngine.js.map +1 -1
  106. package/Gamepads/Controllers/gearVRController.js.map +1 -1
  107. package/Gamepads/Controllers/oculusTouchController.js.map +1 -1
  108. package/Gamepads/Controllers/poseEnabledController.js.map +1 -1
  109. package/Gamepads/Controllers/windowsMotionController.js.map +1 -1
  110. package/Gamepads/gamepad.js.map +1 -1
  111. package/Gizmos/cameraGizmo.js.map +1 -1
  112. package/Gizmos/gizmo.js.map +1 -1
  113. package/Gizmos/lightGizmo.js.map +1 -1
  114. package/Gizmos/planeRotationGizmo.js.map +1 -1
  115. package/Helpers/environmentHelper.js +2 -8
  116. package/Helpers/environmentHelper.js.map +1 -1
  117. package/Helpers/textureDome.js.map +1 -1
  118. package/Inputs/scene.inputManager.js +4 -1
  119. package/Inputs/scene.inputManager.js.map +1 -1
  120. package/Layers/effectLayer.js +1 -8
  121. package/Layers/effectLayer.js.map +1 -1
  122. package/Layers/glowLayer.js +1 -12
  123. package/Layers/glowLayer.js.map +1 -1
  124. package/Layers/highlightLayer.js +1 -11
  125. package/Layers/highlightLayer.js.map +1 -1
  126. package/Legacy/legacy.js +1 -1
  127. package/Legacy/legacy.js.map +1 -1
  128. package/LensFlares/lensFlareSystem.js.map +1 -1
  129. package/Lights/Shadows/shadowGenerator.js +1 -4
  130. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  131. package/Lights/directionalLight.js.map +1 -1
  132. package/Lights/hemisphericLight.js.map +1 -1
  133. package/Lights/light.js.map +1 -1
  134. package/Lights/spotLight.js.map +1 -1
  135. package/Loading/loadingScreen.js.map +1 -1
  136. package/Loading/sceneLoader.d.ts +8 -8
  137. package/Loading/sceneLoader.js +35 -19
  138. package/Loading/sceneLoader.js.map +1 -1
  139. package/Materials/Background/backgroundMaterial.js.map +1 -1
  140. package/Materials/Node/Blocks/Dual/currentScreenBlock.d.ts +1 -1
  141. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  142. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
  143. package/Materials/Node/Blocks/Dual/sceneDepthBlock.d.ts +1 -1
  144. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
  145. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
  146. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js.map +1 -1
  147. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
  148. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js.map +1 -1
  149. package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
  150. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  151. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  152. package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
  153. package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
  154. package/Materials/Node/Blocks/addBlock.js +2 -0
  155. package/Materials/Node/Blocks/addBlock.js.map +1 -1
  156. package/Materials/Node/Blocks/clampBlock.js.map +1 -1
  157. package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
  158. package/Materials/Node/Blocks/customBlock.d.ts +1 -0
  159. package/Materials/Node/Blocks/customBlock.js +18 -2
  160. package/Materials/Node/Blocks/customBlock.js.map +1 -1
  161. package/Materials/Node/Blocks/divideBlock.js +2 -0
  162. package/Materials/Node/Blocks/divideBlock.js.map +1 -1
  163. package/Materials/Node/Blocks/meshAttributeExistsBlock.js.map +1 -1
  164. package/Materials/Node/Blocks/multiplyBlock.js +2 -0
  165. package/Materials/Node/Blocks/multiplyBlock.js.map +1 -1
  166. package/Materials/Node/Blocks/remapBlock.js.map +1 -1
  167. package/Materials/Node/Blocks/subtractBlock.js +2 -0
  168. package/Materials/Node/Blocks/subtractBlock.js.map +1 -1
  169. package/Materials/Node/Blocks/triPlanarBlock.js.map +1 -1
  170. package/Materials/Node/Blocks/worleyNoise3DBlock.js.map +1 -1
  171. package/Materials/Node/nodeMaterial.d.ts +6 -1
  172. package/Materials/Node/nodeMaterial.js +6 -10
  173. package/Materials/Node/nodeMaterial.js.map +1 -1
  174. package/Materials/PBR/pbrAnisotropicConfiguration.js.map +1 -1
  175. package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
  176. package/Materials/PBR/pbrBaseMaterial.js +1 -5
  177. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  178. package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
  179. package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
  180. package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -1
  181. package/Materials/PBR/pbrMaterial.d.ts +2 -1
  182. package/Materials/PBR/pbrMaterial.js +6 -13
  183. package/Materials/PBR/pbrMaterial.js.map +1 -1
  184. package/Materials/PBR/pbrMetallicRoughnessMaterial.js.map +1 -1
  185. package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
  186. package/Materials/PBR/pbrSpecularGlossinessMaterial.js.map +1 -1
  187. package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
  188. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  189. package/Materials/Textures/baseTexture.js.map +1 -1
  190. package/Materials/Textures/cubeTexture.js.map +1 -1
  191. package/Materials/Textures/equiRectangularCubeTexture.js.map +1 -1
  192. package/Materials/Textures/hdrCubeTexture.js.map +1 -1
  193. package/Materials/Textures/htmlElementTexture.js +1 -4
  194. package/Materials/Textures/htmlElementTexture.js.map +1 -1
  195. package/Materials/Textures/internalTexture.js.map +1 -1
  196. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  197. package/Materials/Textures/texture.js.map +1 -1
  198. package/Materials/Textures/videoTexture.js +9 -22
  199. package/Materials/Textures/videoTexture.js.map +1 -1
  200. package/Materials/colorCurves.js.map +1 -1
  201. package/Materials/effect.js.map +1 -1
  202. package/Materials/greasedLinePluginMaterial.d.ts +307 -0
  203. package/Materials/greasedLinePluginMaterial.js +553 -0
  204. package/Materials/greasedLinePluginMaterial.js.map +1 -0
  205. package/Materials/imageProcessingConfiguration.js.map +1 -1
  206. package/Materials/index.d.ts +1 -0
  207. package/Materials/index.js +1 -0
  208. package/Materials/index.js.map +1 -1
  209. package/Materials/material.d.ts +3 -0
  210. package/Materials/material.decalMapConfiguration.js.map +1 -1
  211. package/Materials/material.detailMapConfiguration.js.map +1 -1
  212. package/Materials/material.js +40 -5
  213. package/Materials/material.js.map +1 -1
  214. package/Materials/materialPluginBase.d.ts +2 -2
  215. package/Materials/materialPluginBase.js +2 -2
  216. package/Materials/materialPluginBase.js.map +1 -1
  217. package/Materials/materialPluginManager.d.ts +3 -2
  218. package/Materials/materialPluginManager.js +3 -1
  219. package/Materials/materialPluginManager.js.map +1 -1
  220. package/Materials/multiMaterial.js +1 -1
  221. package/Materials/multiMaterial.js.map +1 -1
  222. package/Materials/shaderMaterial.d.ts +23 -4
  223. package/Materials/shaderMaterial.js +41 -21
  224. package/Materials/shaderMaterial.js.map +1 -1
  225. package/Materials/standardMaterial.d.ts +2 -1
  226. package/Materials/standardMaterial.js +4 -1
  227. package/Materials/standardMaterial.js.map +1 -1
  228. package/Materials/uniformBuffer.js.map +1 -1
  229. package/Maths/math.vector.d.ts +2 -1
  230. package/Maths/math.vector.js +3 -2
  231. package/Maths/math.vector.js.map +1 -1
  232. package/Meshes/Builders/decalBuilder.js +4 -4
  233. package/Meshes/Builders/decalBuilder.js.map +1 -1
  234. package/Meshes/Builders/greasedLineBuilder.d.ts +105 -0
  235. package/Meshes/Builders/greasedLineBuilder.js +330 -0
  236. package/Meshes/Builders/greasedLineBuilder.js.map +1 -0
  237. package/Meshes/Builders/index.d.ts +1 -0
  238. package/Meshes/Builders/index.js +1 -0
  239. package/Meshes/Builders/index.js.map +1 -1
  240. package/Meshes/abstractMesh.d.ts +3 -2
  241. package/Meshes/abstractMesh.js +5 -3
  242. package/Meshes/abstractMesh.js.map +1 -1
  243. package/Meshes/greasedLineMesh.d.ts +189 -0
  244. package/Meshes/greasedLineMesh.js +437 -0
  245. package/Meshes/greasedLineMesh.js.map +1 -0
  246. package/Meshes/index.d.ts +1 -0
  247. package/Meshes/index.js +1 -0
  248. package/Meshes/index.js.map +1 -1
  249. package/Meshes/mesh.d.ts +4 -0
  250. package/Meshes/mesh.js +20 -10
  251. package/Meshes/mesh.js.map +1 -1
  252. package/Meshes/mesh.vertexData.js.map +1 -1
  253. package/Meshes/meshUVSpaceRenderer.js +1 -8
  254. package/Meshes/meshUVSpaceRenderer.js.map +1 -1
  255. package/Meshes/transformNode.js.map +1 -1
  256. package/Misc/basis.js.map +1 -1
  257. package/Misc/deepCopier.js +8 -2
  258. package/Misc/deepCopier.js.map +1 -1
  259. package/Misc/dumpTools.d.ts +4 -3
  260. package/Misc/dumpTools.js +5 -4
  261. package/Misc/dumpTools.js.map +1 -1
  262. package/Misc/environmentTextureTools.js +1 -1
  263. package/Misc/environmentTextureTools.js.map +1 -1
  264. package/Misc/fileTools.js +10 -10
  265. package/Misc/fileTools.js.map +1 -1
  266. package/Misc/greasedLineTools.d.ts +141 -0
  267. package/Misc/greasedLineTools.js +263 -0
  268. package/Misc/greasedLineTools.js.map +1 -0
  269. package/Misc/index.d.ts +1 -0
  270. package/Misc/index.js +1 -0
  271. package/Misc/index.js.map +1 -1
  272. package/Misc/khronosTextureContainer.js.map +1 -1
  273. package/Misc/observable.d.ts +11 -0
  274. package/Misc/observable.js +26 -1
  275. package/Misc/observable.js.map +1 -1
  276. package/Misc/sceneOptimizer.js.map +1 -1
  277. package/Misc/screenshotTools.d.ts +15 -5
  278. package/Misc/screenshotTools.js +23 -13
  279. package/Misc/screenshotTools.js.map +1 -1
  280. package/Misc/smartArray.js.map +1 -1
  281. package/Misc/tools.d.ts +21 -9
  282. package/Misc/tools.js +21 -9
  283. package/Misc/tools.js.map +1 -1
  284. package/Misc/videoRecorder.js +1 -4
  285. package/Misc/videoRecorder.js.map +1 -1
  286. package/Misc/virtualJoystick.js +1 -4
  287. package/Misc/virtualJoystick.js.map +1 -1
  288. package/Misc/webRequest.js.map +1 -1
  289. package/Morph/morphTarget.js.map +1 -1
  290. package/Morph/morphTargetManager.js.map +1 -1
  291. package/Offline/database.js.map +1 -1
  292. package/Particles/baseParticleSystem.js.map +1 -1
  293. package/Particles/gpuParticleSystem.d.ts +1 -0
  294. package/Particles/gpuParticleSystem.js +5 -8
  295. package/Particles/gpuParticleSystem.js.map +1 -1
  296. package/Particles/particle.js.map +1 -1
  297. package/Particles/particleSystem.js +1 -1
  298. package/Particles/particleSystem.js.map +1 -1
  299. package/Particles/particleSystemSet.js.map +1 -1
  300. package/Physics/physicsHelper.js +4 -4
  301. package/Physics/physicsHelper.js.map +1 -1
  302. package/Physics/physicsRaycastResult.d.ts +3 -1
  303. package/Physics/physicsRaycastResult.js +10 -1
  304. package/Physics/physicsRaycastResult.js.map +1 -1
  305. package/Physics/v1/Plugins/ammoJSPlugin.js.map +1 -1
  306. package/Physics/v1/physicsImpostor.js.map +1 -1
  307. package/Physics/v2/IPhysicsEnginePlugin.d.ts +10 -0
  308. package/Physics/v2/IPhysicsEnginePlugin.js.map +1 -1
  309. package/Physics/v2/Plugins/havokPlugin.d.ts +3 -2
  310. package/Physics/v2/Plugins/havokPlugin.js +9 -6
  311. package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
  312. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js.map +1 -1
  313. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
  314. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
  315. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js.map +1 -1
  316. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
  317. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js.map +1 -1
  318. package/PostProcesses/blackAndWhitePostProcess.js.map +1 -1
  319. package/PostProcesses/bloomMergePostProcess.js.map +1 -1
  320. package/PostProcesses/blurPostProcess.js.map +1 -1
  321. package/PostProcesses/circleOfConfusionPostProcess.js.map +1 -1
  322. package/PostProcesses/colorCorrectionPostProcess.js.map +1 -1
  323. package/PostProcesses/convolutionPostProcess.js.map +1 -1
  324. package/PostProcesses/depthOfFieldBlurPostProcess.js.map +1 -1
  325. package/PostProcesses/extractHighlightsPostProcess.js.map +1 -1
  326. package/PostProcesses/filterPostProcess.js.map +1 -1
  327. package/PostProcesses/grainPostProcess.js.map +1 -1
  328. package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
  329. package/PostProcesses/motionBlurPostProcess.js.map +1 -1
  330. package/PostProcesses/postProcess.js.map +1 -1
  331. package/PostProcesses/refractionPostProcess.js.map +1 -1
  332. package/PostProcesses/screenSpaceCurvaturePostProcess.js.map +1 -1
  333. package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
  334. package/PostProcesses/sharpenPostProcess.js.map +1 -1
  335. package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
  336. package/Probes/reflectionProbe.js.map +1 -1
  337. package/Rendering/boundingBoxRenderer.js +2 -4
  338. package/Rendering/boundingBoxRenderer.js.map +1 -1
  339. package/Rendering/depthPeelingRenderer.js.map +1 -1
  340. package/Rendering/depthRenderer.js.map +1 -1
  341. package/Rendering/geometryBufferRenderer.js.map +1 -1
  342. package/Rendering/outlineRenderer.js.map +1 -1
  343. package/Rendering/prePassRenderer.js.map +1 -1
  344. package/Rendering/renderingGroup.js.map +1 -1
  345. package/Rendering/renderingManager.js.map +1 -1
  346. package/Rendering/subSurfaceConfiguration.js.map +1 -1
  347. package/Rendering/utilityLayerRenderer.js.map +1 -1
  348. package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js +4 -2
  349. package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js.map +1 -1
  350. package/Shaders/ShadersInclude/pbrDebug.js +11 -2
  351. package/Shaders/ShadersInclude/pbrDebug.js.map +1 -1
  352. package/Shaders/velocity.fragment.d.ts +5 -0
  353. package/Shaders/velocity.fragment.js +13 -0
  354. package/Shaders/velocity.fragment.js.map +1 -0
  355. package/Shaders/velocity.vertex.d.ts +7 -0
  356. package/Shaders/velocity.vertex.js +23 -0
  357. package/Shaders/velocity.vertex.js.map +1 -0
  358. package/Sprites/spriteManager.js.map +1 -1
  359. package/XR/features/WebXRAnchorSystem.js.map +1 -1
  360. package/XR/features/WebXRBackgroundRemover.js.map +1 -1
  361. package/XR/features/WebXRControllerMovement.js.map +1 -1
  362. package/XR/features/WebXRControllerPhysics.js +4 -13
  363. package/XR/features/WebXRControllerPhysics.js.map +1 -1
  364. package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
  365. package/XR/features/WebXRControllerTeleportation.js.map +1 -1
  366. package/XR/features/WebXRDOMOverlay.js.map +1 -1
  367. package/XR/features/WebXRDepthSensing.js.map +1 -1
  368. package/XR/features/WebXREyeTracking.js.map +1 -1
  369. package/XR/features/WebXRFeaturePointSystem.js.map +1 -1
  370. package/XR/features/WebXRHandTracking.js +2 -8
  371. package/XR/features/WebXRHandTracking.js.map +1 -1
  372. package/XR/features/WebXRHitTest.js.map +1 -1
  373. package/XR/features/WebXRHitTestLegacy.js.map +1 -1
  374. package/XR/features/WebXRImageTracking.js.map +1 -1
  375. package/XR/features/WebXRLayers.js +18 -8
  376. package/XR/features/WebXRLayers.js.map +1 -1
  377. package/XR/features/WebXRLightEstimation.js.map +1 -1
  378. package/XR/features/WebXRMeshDetector.js.map +1 -1
  379. package/XR/features/WebXRNearInteraction.js.map +1 -1
  380. package/XR/features/WebXRPlaneDetector.js.map +1 -1
  381. package/XR/features/WebXRSpaceWarp.d.ts +138 -0
  382. package/XR/features/WebXRSpaceWarp.js +290 -0
  383. package/XR/features/WebXRSpaceWarp.js.map +1 -0
  384. package/XR/features/index.d.ts +1 -0
  385. package/XR/features/index.js +1 -0
  386. package/XR/features/index.js.map +1 -1
  387. package/XR/motionController/webXRAbstractMotionController.js +1 -4
  388. package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
  389. package/XR/motionController/webXRControllerComponent.js.map +1 -1
  390. package/XR/motionController/webXRGenericMotionController.js.map +1 -1
  391. package/XR/motionController/webXRHTCViveMotionController.js.map +1 -1
  392. package/XR/motionController/webXRMicrosoftMixedRealityController.js.map +1 -1
  393. package/XR/motionController/webXROculusTouchMotionController.js.map +1 -1
  394. package/XR/webXRCamera.js.map +1 -1
  395. package/XR/webXRDefaultExperience.js +6 -28
  396. package/XR/webXRDefaultExperience.js.map +1 -1
  397. package/XR/webXRFeaturesManager.d.ts +4 -0
  398. package/XR/webXRFeaturesManager.js +5 -4
  399. package/XR/webXRFeaturesManager.js.map +1 -1
  400. package/XR/webXRInput.js +1 -6
  401. package/XR/webXRInput.js.map +1 -1
  402. package/XR/webXRSessionManager.d.ts +4 -0
  403. package/XR/webXRSessionManager.js +6 -0
  404. package/XR/webXRSessionManager.js.map +1 -1
  405. package/abstractScene.js.map +1 -1
  406. package/assetContainer.js +1 -4
  407. package/assetContainer.js.map +1 -1
  408. package/node.js.map +1 -1
  409. package/package.json +2 -4
  410. package/scene.d.ts +5 -2
  411. package/scene.js +9 -12
  412. package/scene.js.map +1 -1
package/Misc/basis.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"basis.js","sourceRoot":"","sources":["../../../../lts/core/generated/Misc/basis.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { Nullable } from \"../types\";\r\nimport { Tools } from \"./tools\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { InternalTexture, InternalTextureSource } from \"../Materials/Textures/internalTexture\";\r\nimport { Scalar } from \"../Maths/math.scalar\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { Engine } from \"../Engines/engine\";\r\n\r\n/**\r\n * Info about the .basis files\r\n */\r\nclass BasisFileInfo {\r\n /**\r\n * If the file has alpha\r\n */\r\n public hasAlpha: boolean;\r\n /**\r\n * Info about each image of the basis file\r\n */\r\n public images: Array<{ levels: Array<{ width: number; height: number; transcodedPixels: ArrayBufferView }> }>;\r\n}\r\n\r\n/**\r\n * Result of transcoding a basis file\r\n */\r\nclass TranscodeResult {\r\n /**\r\n * Info about the .basis file\r\n */\r\n public fileInfo: BasisFileInfo;\r\n /**\r\n * Format to use when loading the file\r\n */\r\n public format: number;\r\n}\r\n\r\n/**\r\n * Configuration options for the Basis transcoder\r\n */\r\nexport class BasisTranscodeConfiguration {\r\n /**\r\n * Supported compression formats used to determine the supported output format of the transcoder\r\n */\r\n supportedCompressionFormats?: {\r\n /**\r\n * etc1 compression format\r\n */\r\n etc1?: boolean;\r\n /**\r\n * s3tc compression format\r\n */\r\n s3tc?: boolean;\r\n /**\r\n * pvrtc compression format\r\n */\r\n pvrtc?: boolean;\r\n /**\r\n * etc2 compression format\r\n */\r\n etc2?: boolean;\r\n /**\r\n * astc compression format\r\n */\r\n astc?: boolean;\r\n /**\r\n * bc7 compression format\r\n */\r\n bc7?: boolean;\r\n };\r\n /**\r\n * If mipmap levels should be loaded for transcoded images (Default: true)\r\n */\r\n loadMipmapLevels?: boolean;\r\n /**\r\n * Index of a single image to load (Default: all images)\r\n */\r\n loadSingleImage?: number;\r\n}\r\n\r\n/**\r\n * @internal\r\n * Enum of basis transcoder formats\r\n */\r\nenum BASIS_FORMATS {\r\n cTFETC1 = 0,\r\n cTFETC2 = 1,\r\n cTFBC1 = 2,\r\n cTFBC3 = 3,\r\n cTFBC4 = 4,\r\n cTFBC5 = 5,\r\n cTFBC7 = 6,\r\n cTFPVRTC1_4_RGB = 8,\r\n cTFPVRTC1_4_RGBA = 9,\r\n cTFASTC_4x4 = 10,\r\n cTFATC_RGB = 11,\r\n cTFATC_RGBA_INTERPOLATED_ALPHA = 12,\r\n cTFRGBA32 = 13,\r\n cTFRGB565 = 14,\r\n cTFBGR565 = 15,\r\n cTFRGBA4444 = 16,\r\n cTFFXT1_RGB = 17,\r\n cTFPVRTC2_4_RGB = 18,\r\n cTFPVRTC2_4_RGBA = 19,\r\n cTFETC2_EAC_R11 = 20,\r\n cTFETC2_EAC_RG11 = 21,\r\n}\r\n\r\n/**\r\n * Used to load .Basis files\r\n * See https://github.com/BinomialLLC/basis_universal/tree/master/webgl\r\n */\r\nexport const BasisToolsOptions = {\r\n /**\r\n * URL to use when loading the basis transcoder\r\n */\r\n JSModuleURL: \"https://cdn.babylonjs.com/basisTranscoder/1/basis_transcoder.js\",\r\n /**\r\n * URL to use when loading the wasm module for the transcoder\r\n */\r\n WasmModuleURL: \"https://cdn.babylonjs.com/basisTranscoder/1/basis_transcoder.wasm\",\r\n};\r\n\r\n/**\r\n * Get the internal format to be passed to texImage2D corresponding to the .basis format value\r\n * @param basisFormat format chosen from GetSupportedTranscodeFormat\r\n * @param engine\r\n * @returns internal format corresponding to the Basis format\r\n */\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nexport const GetInternalFormatFromBasisFormat = (basisFormat: number, engine: Engine) => {\r\n let format;\r\n switch (basisFormat) {\r\n case BASIS_FORMATS.cTFETC1:\r\n format = Constants.TEXTUREFORMAT_COMPRESSED_RGB_ETC1_WEBGL;\r\n break;\r\n case BASIS_FORMATS.cTFBC1:\r\n format = Constants.TEXTUREFORMAT_COMPRESSED_RGB_S3TC_DXT1;\r\n break;\r\n case BASIS_FORMATS.cTFBC4:\r\n format = Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT5;\r\n break;\r\n case BASIS_FORMATS.cTFASTC_4x4:\r\n format = Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_4x4;\r\n break;\r\n case BASIS_FORMATS.cTFETC2:\r\n format = Constants.TEXTUREFORMAT_COMPRESSED_RGBA8_ETC2_EAC;\r\n break;\r\n case BASIS_FORMATS.cTFBC7:\r\n format = Constants.TEXTUREFORMAT_COMPRESSED_RGBA_BPTC_UNORM;\r\n break;\r\n }\r\n\r\n if (format === undefined) {\r\n throw \"The chosen Basis transcoder format is not currently supported\";\r\n }\r\n\r\n return format;\r\n};\r\n\r\nlet _WorkerPromise: Nullable<Promise<Worker>> = null;\r\nlet _Worker: Nullable<Worker> = null;\r\nlet _actionId = 0;\r\nconst _IgnoreSupportedFormats = false;\r\nconst _CreateWorkerAsync = () => {\r\n if (!_WorkerPromise) {\r\n _WorkerPromise = new Promise((res, reject) => {\r\n if (_Worker) {\r\n res(_Worker);\r\n } else {\r\n Tools.LoadFileAsync(BasisToolsOptions.WasmModuleURL)\r\n .then((wasmBinary) => {\r\n if (typeof URL !== \"function\") {\r\n return reject(\"Basis transcoder requires an environment with a URL constructor\");\r\n }\r\n const workerBlobUrl = URL.createObjectURL(new Blob([`(${workerFunc})()`], { type: \"application/javascript\" }));\r\n _Worker = new Worker(workerBlobUrl);\r\n\r\n const initHandler = (msg: any) => {\r\n if (msg.data.action === \"init\") {\r\n _Worker!.removeEventListener(\"message\", initHandler);\r\n res(_Worker!);\r\n } else if (msg.data.action === \"error\") {\r\n reject(msg.data.error || \"error initializing worker\");\r\n }\r\n };\r\n _Worker.addEventListener(\"message\", initHandler);\r\n _Worker.postMessage({ action: \"init\", url: BasisToolsOptions.JSModuleURL, wasmBinary: wasmBinary });\r\n })\r\n .catch(reject);\r\n }\r\n });\r\n }\r\n return _WorkerPromise;\r\n};\r\n\r\n/**\r\n * Transcodes a loaded image file to compressed pixel data\r\n * @param data image data to transcode\r\n * @param config configuration options for the transcoding\r\n * @returns a promise resulting in the transcoded image\r\n */\r\nexport const TranscodeAsync = (data: ArrayBuffer | ArrayBufferView, config: BasisTranscodeConfiguration): Promise<TranscodeResult> => {\r\n const dataView = data instanceof ArrayBuffer ? new Uint8Array(data) : data;\r\n\r\n return new Promise((res, rej) => {\r\n _CreateWorkerAsync().then(\r\n () => {\r\n const actionId = _actionId++;\r\n const messageHandler = (msg: any) => {\r\n if (msg.data.action === \"transcode\" && msg.data.id === actionId) {\r\n _Worker!.removeEventListener(\"message\", messageHandler);\r\n if (!msg.data.success) {\r\n rej(\"Transcode is not supported on this device\");\r\n } else {\r\n res(msg.data);\r\n }\r\n }\r\n };\r\n _Worker!.addEventListener(\"message\", messageHandler);\r\n\r\n const dataViewCopy = new Uint8Array(dataView.byteLength);\r\n dataViewCopy.set(new Uint8Array(dataView.buffer, dataView.byteOffset, dataView.byteLength));\r\n _Worker!.postMessage({ action: \"transcode\", id: actionId, imageData: dataViewCopy, config: config, ignoreSupportedFormats: _IgnoreSupportedFormats }, [\r\n dataViewCopy.buffer,\r\n ]);\r\n },\r\n (error) => {\r\n rej(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\n/**\r\n * Binds a texture according to its underlying target.\r\n * @param texture texture to bind\r\n * @param engine the engine to bind the texture in\r\n */\r\nconst BindTexture = (texture: InternalTexture, engine: Engine): void => {\r\n let target = engine._gl?.TEXTURE_2D;\r\n if (texture.isCube) {\r\n target = engine._gl?.TEXTURE_CUBE_MAP;\r\n }\r\n\r\n engine._bindTextureDirectly(target, texture, true);\r\n};\r\n\r\n/**\r\n * Loads a texture from the transcode result\r\n * @param texture texture load to\r\n * @param transcodeResult the result of transcoding the basis file to load from\r\n */\r\nexport const LoadTextureFromTranscodeResult = (texture: InternalTexture, transcodeResult: TranscodeResult) => {\r\n const engine = texture.getEngine() as Engine;\r\n for (let i = 0; i < transcodeResult.fileInfo.images.length; i++) {\r\n const rootImage = transcodeResult.fileInfo.images[i].levels[0];\r\n texture._invertVScale = texture.invertY;\r\n if (transcodeResult.format === -1 || transcodeResult.format === BASIS_FORMATS.cTFRGB565) {\r\n // No compatable compressed format found, fallback to RGB\r\n texture.type = Constants.TEXTURETYPE_UNSIGNED_SHORT_5_6_5;\r\n texture.format = Constants.TEXTUREFORMAT_RGB;\r\n\r\n if (engine._features.basisNeedsPOT && (Scalar.Log2(rootImage.width) % 1 !== 0 || Scalar.Log2(rootImage.height) % 1 !== 0)) {\r\n // Create non power of two texture\r\n const source = new InternalTexture(engine, InternalTextureSource.Temp);\r\n\r\n texture._invertVScale = texture.invertY;\r\n source.type = Constants.TEXTURETYPE_UNSIGNED_SHORT_5_6_5;\r\n source.format = Constants.TEXTUREFORMAT_RGB;\r\n // Fallback requires aligned width/height\r\n source.width = (rootImage.width + 3) & ~3;\r\n source.height = (rootImage.height + 3) & ~3;\r\n BindTexture(source, engine);\r\n engine._uploadDataToTextureDirectly(source, new Uint16Array(rootImage.transcodedPixels.buffer), i, 0, Constants.TEXTUREFORMAT_RGB, true);\r\n\r\n // Resize to power of two\r\n engine._rescaleTexture(source, texture, engine.scenes[0], engine._getInternalFormat(Constants.TEXTUREFORMAT_RGB), () => {\r\n engine._releaseTexture(source);\r\n BindTexture(texture, engine);\r\n });\r\n } else {\r\n // Fallback is already inverted\r\n texture._invertVScale = !texture.invertY;\r\n\r\n // Upload directly\r\n texture.width = (rootImage.width + 3) & ~3;\r\n texture.height = (rootImage.height + 3) & ~3;\r\n texture.samplingMode = Constants.TEXTURE_LINEAR_LINEAR;\r\n BindTexture(texture, engine);\r\n engine._uploadDataToTextureDirectly(texture, new Uint16Array(rootImage.transcodedPixels.buffer), i, 0, Constants.TEXTUREFORMAT_RGB, true);\r\n }\r\n } else {\r\n texture.width = rootImage.width;\r\n texture.height = rootImage.height;\r\n texture.generateMipMaps = transcodeResult.fileInfo.images[i].levels.length > 1;\r\n\r\n const format = BasisTools.GetInternalFormatFromBasisFormat(transcodeResult.format!, engine);\r\n texture.format = format;\r\n\r\n BindTexture(texture, engine);\r\n\r\n // Upload all mip levels in the file\r\n transcodeResult.fileInfo.images[i].levels.forEach((level: any, index: number) => {\r\n engine._uploadCompressedDataToTextureDirectly(texture, format, level.width, level.height, level.transcodedPixels, i, index);\r\n });\r\n\r\n if (engine._features.basisNeedsPOT && (Scalar.Log2(texture.width) % 1 !== 0 || Scalar.Log2(texture.height) % 1 !== 0)) {\r\n Tools.Warn(\r\n \"Loaded .basis texture width and height are not a power of two. Texture wrapping will be set to Texture.CLAMP_ADDRESSMODE as other modes are not supported with non power of two dimensions in webGL 1.\"\r\n );\r\n texture._cachedWrapU = Texture.CLAMP_ADDRESSMODE;\r\n texture._cachedWrapV = Texture.CLAMP_ADDRESSMODE;\r\n }\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Used to load .Basis files\r\n * See https://github.com/BinomialLLC/basis_universal/tree/master/webgl\r\n */\r\nexport const BasisTools = {\r\n /**\r\n * URL to use when loading the basis transcoder\r\n */\r\n JSModuleURL: BasisToolsOptions.JSModuleURL,\r\n /**\r\n * URL to use when loading the wasm module for the transcoder\r\n */\r\n WasmModuleURL: BasisToolsOptions.WasmModuleURL,\r\n\r\n /**\r\n * Get the internal format to be passed to texImage2D corresponding to the .basis format value\r\n * @param basisFormat format chosen from GetSupportedTranscodeFormat\r\n * @returns internal format corresponding to the Basis format\r\n */\r\n GetInternalFormatFromBasisFormat,\r\n\r\n /**\r\n * Transcodes a loaded image file to compressed pixel data\r\n * @param data image data to transcode\r\n * @param config configuration options for the transcoding\r\n * @returns a promise resulting in the transcoded image\r\n */\r\n TranscodeAsync,\r\n\r\n /**\r\n * Loads a texture from the transcode result\r\n * @param texture texture load to\r\n * @param transcodeResult the result of transcoding the basis file to load from\r\n */\r\n LoadTextureFromTranscodeResult,\r\n};\r\n\r\n// WorkerGlobalScope\r\ndeclare function importScripts(...urls: string[]): void;\r\ndeclare function postMessage(message: any, transfer?: any[]): void;\r\ndeclare let BASIS: any;\r\nfunction workerFunc(): void {\r\n const _BASIS_FORMAT = {\r\n cTFETC1: 0,\r\n cTFETC2: 1,\r\n cTFBC1: 2,\r\n cTFBC3: 3,\r\n cTFBC4: 4,\r\n cTFBC5: 5,\r\n cTFBC7: 6,\r\n cTFPVRTC1_4_RGB: 8,\r\n cTFPVRTC1_4_RGBA: 9,\r\n cTFASTC_4x4: 10,\r\n cTFATC_RGB: 11,\r\n cTFATC_RGBA_INTERPOLATED_ALPHA: 12,\r\n cTFRGBA32: 13,\r\n cTFRGB565: 14,\r\n cTFBGR565: 15,\r\n cTFRGBA4444: 16,\r\n cTFFXT1_RGB: 17,\r\n cTFPVRTC2_4_RGB: 18,\r\n cTFPVRTC2_4_RGBA: 19,\r\n cTFETC2_EAC_R11: 20,\r\n cTFETC2_EAC_RG11: 21,\r\n };\r\n let transcoderModulePromise: Nullable<PromiseLike<any>> = null;\r\n onmessage = (event) => {\r\n if (event.data.action === \"init\") {\r\n // Load the transcoder if it hasn't been yet\r\n if (!transcoderModulePromise) {\r\n // make sure we loaded the script correctly\r\n try {\r\n importScripts(event.data.url);\r\n } catch (e) {\r\n postMessage({ action: \"error\", error: e });\r\n }\r\n transcoderModulePromise = BASIS({\r\n // Override wasm binary\r\n wasmBinary: event.data.wasmBinary,\r\n });\r\n }\r\n if (transcoderModulePromise !== null) {\r\n transcoderModulePromise.then((m) => {\r\n BASIS = m;\r\n m.initializeBasis();\r\n postMessage({ action: \"init\" });\r\n });\r\n }\r\n } else if (event.data.action === \"transcode\") {\r\n // Transcode the basis image and return the resulting pixels\r\n const config: BasisTranscodeConfiguration = event.data.config;\r\n const imgData = event.data.imageData;\r\n const loadedFile = new BASIS.BasisFile(imgData);\r\n const fileInfo = GetFileInfo(loadedFile);\r\n let format = event.data.ignoreSupportedFormats ? null : GetSupportedTranscodeFormat(event.data.config, fileInfo);\r\n\r\n let needsConversion = false;\r\n if (format === null) {\r\n needsConversion = true;\r\n format = fileInfo.hasAlpha ? _BASIS_FORMAT.cTFBC3 : _BASIS_FORMAT.cTFBC1;\r\n }\r\n\r\n // Begin transcode\r\n let success = true;\r\n if (!loadedFile.startTranscoding()) {\r\n success = false;\r\n }\r\n\r\n const buffers: Array<any> = [];\r\n for (let imageIndex = 0; imageIndex < fileInfo.images.length; imageIndex++) {\r\n if (!success) {\r\n break;\r\n }\r\n const image = fileInfo.images[imageIndex];\r\n if (config.loadSingleImage === undefined || config.loadSingleImage === imageIndex) {\r\n let mipCount = image.levels.length;\r\n if (config.loadMipmapLevels === false) {\r\n mipCount = 1;\r\n }\r\n for (let levelIndex = 0; levelIndex < mipCount; levelIndex++) {\r\n const levelInfo = image.levels[levelIndex];\r\n\r\n const pixels = TranscodeLevel(loadedFile, imageIndex, levelIndex, format!, needsConversion);\r\n if (!pixels) {\r\n success = false;\r\n break;\r\n }\r\n levelInfo.transcodedPixels = pixels;\r\n buffers.push(levelInfo.transcodedPixels.buffer);\r\n }\r\n }\r\n }\r\n // Close file\r\n loadedFile.close();\r\n loadedFile.delete();\r\n\r\n if (needsConversion) {\r\n format = -1;\r\n }\r\n if (!success) {\r\n postMessage({ action: \"transcode\", success: success, id: event.data.id });\r\n } else {\r\n postMessage({ action: \"transcode\", success: success, id: event.data.id, fileInfo: fileInfo, format: format }, buffers);\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Detects the supported transcode format for the file\r\n * @param config transcode config\r\n * @param fileInfo info about the file\r\n * @returns the chosed format or null if none are supported\r\n */\r\n function GetSupportedTranscodeFormat(config: BasisTranscodeConfiguration, fileInfo: BasisFileInfo): Nullable<number> {\r\n let format = null;\r\n if (config.supportedCompressionFormats) {\r\n if (config.supportedCompressionFormats.astc) {\r\n format = _BASIS_FORMAT.cTFASTC_4x4;\r\n } else if (config.supportedCompressionFormats.bc7) {\r\n format = _BASIS_FORMAT.cTFBC7;\r\n } else if (config.supportedCompressionFormats.s3tc) {\r\n format = fileInfo.hasAlpha ? _BASIS_FORMAT.cTFBC3 : _BASIS_FORMAT.cTFBC1;\r\n } else if (config.supportedCompressionFormats.pvrtc) {\r\n format = fileInfo.hasAlpha ? _BASIS_FORMAT.cTFPVRTC1_4_RGBA : _BASIS_FORMAT.cTFPVRTC1_4_RGB;\r\n } else if (config.supportedCompressionFormats.etc2) {\r\n format = _BASIS_FORMAT.cTFETC2;\r\n } else if (config.supportedCompressionFormats.etc1) {\r\n format = _BASIS_FORMAT.cTFETC1;\r\n } else {\r\n format = _BASIS_FORMAT.cTFRGB565;\r\n }\r\n }\r\n return format;\r\n }\r\n\r\n /**\r\n * Retrieves information about the basis file eg. dimensions\r\n * @param basisFile the basis file to get the info from\r\n * @returns information about the basis file\r\n */\r\n function GetFileInfo(basisFile: any): BasisFileInfo {\r\n const hasAlpha = basisFile.getHasAlpha();\r\n const imageCount = basisFile.getNumImages();\r\n const images = [];\r\n for (let i = 0; i < imageCount; i++) {\r\n const imageInfo = {\r\n levels: [] as Array<any>,\r\n };\r\n const levelCount = basisFile.getNumLevels(i);\r\n for (let level = 0; level < levelCount; level++) {\r\n const levelInfo = {\r\n width: basisFile.getImageWidth(i, level),\r\n height: basisFile.getImageHeight(i, level),\r\n };\r\n imageInfo.levels.push(levelInfo);\r\n }\r\n images.push(imageInfo);\r\n }\r\n const info = { hasAlpha, images };\r\n return info;\r\n }\r\n\r\n function TranscodeLevel(loadedFile: any, imageIndex: number, levelIndex: number, format: number, convertToRgb565: boolean): Nullable<Uint8Array | Uint16Array> {\r\n const dstSize = loadedFile.getImageTranscodedSizeInBytes(imageIndex, levelIndex, format);\r\n let dst: Uint8Array | Uint16Array = new Uint8Array(dstSize);\r\n if (!loadedFile.transcodeImage(dst, imageIndex, levelIndex, format, 1, 0)) {\r\n return null;\r\n }\r\n // If no supported format is found, load as dxt and convert to rgb565\r\n if (convertToRgb565) {\r\n const alignedWidth = (loadedFile.getImageWidth(imageIndex, levelIndex) + 3) & ~3;\r\n const alignedHeight = (loadedFile.getImageHeight(imageIndex, levelIndex) + 3) & ~3;\r\n dst = ConvertDxtToRgb565(dst, 0, alignedWidth, alignedHeight);\r\n }\r\n return dst;\r\n }\r\n\r\n /**\r\n * From https://github.com/BinomialLLC/basis_universal/blob/master/webgl/texture/dxt-to-rgb565.js\r\n * An unoptimized version of dxtToRgb565. Also, the floating\r\n * point math used to compute the colors actually results in\r\n * slightly different colors compared to hardware DXT decoders.\r\n * @param src dxt src pixels\r\n * @param srcByteOffset offset for the start of src\r\n * @param width aligned width of the image\r\n * @param height aligned height of the image\r\n * @returns the converted pixels\r\n */\r\n function ConvertDxtToRgb565(src: Uint8Array, srcByteOffset: number, width: number, height: number): Uint16Array {\r\n const c = new Uint16Array(4);\r\n const dst = new Uint16Array(width * height);\r\n\r\n const blockWidth = width / 4;\r\n const blockHeight = height / 4;\r\n for (let blockY = 0; blockY < blockHeight; blockY++) {\r\n for (let blockX = 0; blockX < blockWidth; blockX++) {\r\n const i = srcByteOffset + 8 * (blockY * blockWidth + blockX);\r\n c[0] = src[i] | (src[i + 1] << 8);\r\n c[1] = src[i + 2] | (src[i + 3] << 8);\r\n c[2] =\r\n ((2 * (c[0] & 0x1f) + 1 * (c[1] & 0x1f)) / 3) |\r\n (((2 * (c[0] & 0x7e0) + 1 * (c[1] & 0x7e0)) / 3) & 0x7e0) |\r\n (((2 * (c[0] & 0xf800) + 1 * (c[1] & 0xf800)) / 3) & 0xf800);\r\n c[3] =\r\n ((2 * (c[1] & 0x1f) + 1 * (c[0] & 0x1f)) / 3) |\r\n (((2 * (c[1] & 0x7e0) + 1 * (c[0] & 0x7e0)) / 3) & 0x7e0) |\r\n (((2 * (c[1] & 0xf800) + 1 * (c[0] & 0xf800)) / 3) & 0xf800);\r\n for (let row = 0; row < 4; row++) {\r\n const m = src[i + 4 + row];\r\n let dstI = (blockY * 4 + row) * width + blockX * 4;\r\n dst[dstI++] = c[m & 0x3];\r\n dst[dstI++] = c[(m >> 2) & 0x3];\r\n dst[dstI++] = c[(m >> 4) & 0x3];\r\n dst[dstI++] = c[(m >> 6) & 0x3];\r\n }\r\n }\r\n }\r\n return dst;\r\n }\r\n}\r\n\r\nObject.defineProperty(BasisTools, \"JSModuleURL\", {\r\n get: function (this: null) {\r\n return BasisToolsOptions.JSModuleURL;\r\n },\r\n set: function (this: null, value: string) {\r\n BasisToolsOptions.JSModuleURL = value;\r\n },\r\n});\r\n\r\nObject.defineProperty(BasisTools, \"WasmModuleURL\", {\r\n get: function (this: null) {\r\n return BasisToolsOptions.WasmModuleURL;\r\n },\r\n set: function (this: null, value: string) {\r\n BasisToolsOptions.WasmModuleURL = value;\r\n },\r\n});\r\n"]}
1
+ {"version":3,"file":"basis.js","sourceRoot":"","sources":["../../../../lts/core/generated/Misc/basis.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { Nullable } from \"../types\";\r\nimport { Tools } from \"./tools\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { InternalTexture, InternalTextureSource } from \"../Materials/Textures/internalTexture\";\r\nimport { Scalar } from \"../Maths/math.scalar\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { Engine } from \"../Engines/engine\";\r\n\r\n/**\r\n * Info about the .basis files\r\n */\r\nclass BasisFileInfo {\r\n /**\r\n * If the file has alpha\r\n */\r\n public hasAlpha: boolean;\r\n /**\r\n * Info about each image of the basis file\r\n */\r\n public images: Array<{ levels: Array<{ width: number; height: number; transcodedPixels: ArrayBufferView }> }>;\r\n}\r\n\r\n/**\r\n * Result of transcoding a basis file\r\n */\r\nclass TranscodeResult {\r\n /**\r\n * Info about the .basis file\r\n */\r\n public fileInfo: BasisFileInfo;\r\n /**\r\n * Format to use when loading the file\r\n */\r\n public format: number;\r\n}\r\n\r\n/**\r\n * Configuration options for the Basis transcoder\r\n */\r\nexport class BasisTranscodeConfiguration {\r\n /**\r\n * Supported compression formats used to determine the supported output format of the transcoder\r\n */\r\n supportedCompressionFormats?: {\r\n /**\r\n * etc1 compression format\r\n */\r\n etc1?: boolean;\r\n /**\r\n * s3tc compression format\r\n */\r\n s3tc?: boolean;\r\n /**\r\n * pvrtc compression format\r\n */\r\n pvrtc?: boolean;\r\n /**\r\n * etc2 compression format\r\n */\r\n etc2?: boolean;\r\n /**\r\n * astc compression format\r\n */\r\n astc?: boolean;\r\n /**\r\n * bc7 compression format\r\n */\r\n bc7?: boolean;\r\n };\r\n /**\r\n * If mipmap levels should be loaded for transcoded images (Default: true)\r\n */\r\n loadMipmapLevels?: boolean;\r\n /**\r\n * Index of a single image to load (Default: all images)\r\n */\r\n loadSingleImage?: number;\r\n}\r\n\r\n/**\r\n * @internal\r\n * Enum of basis transcoder formats\r\n */\r\nenum BASIS_FORMATS {\r\n cTFETC1 = 0,\r\n cTFETC2 = 1,\r\n cTFBC1 = 2,\r\n cTFBC3 = 3,\r\n cTFBC4 = 4,\r\n cTFBC5 = 5,\r\n cTFBC7 = 6,\r\n cTFPVRTC1_4_RGB = 8,\r\n cTFPVRTC1_4_RGBA = 9,\r\n cTFASTC_4x4 = 10,\r\n cTFATC_RGB = 11,\r\n cTFATC_RGBA_INTERPOLATED_ALPHA = 12,\r\n cTFRGBA32 = 13,\r\n cTFRGB565 = 14,\r\n cTFBGR565 = 15,\r\n cTFRGBA4444 = 16,\r\n cTFFXT1_RGB = 17,\r\n cTFPVRTC2_4_RGB = 18,\r\n cTFPVRTC2_4_RGBA = 19,\r\n cTFETC2_EAC_R11 = 20,\r\n cTFETC2_EAC_RG11 = 21,\r\n}\r\n\r\n/**\r\n * Used to load .Basis files\r\n * See https://github.com/BinomialLLC/basis_universal/tree/master/webgl\r\n */\r\nexport const BasisToolsOptions = {\r\n /**\r\n * URL to use when loading the basis transcoder\r\n */\r\n JSModuleURL: \"https://cdn.babylonjs.com/basisTranscoder/1/basis_transcoder.js\",\r\n /**\r\n * URL to use when loading the wasm module for the transcoder\r\n */\r\n WasmModuleURL: \"https://cdn.babylonjs.com/basisTranscoder/1/basis_transcoder.wasm\",\r\n};\r\n\r\n/**\r\n * Get the internal format to be passed to texImage2D corresponding to the .basis format value\r\n * @param basisFormat format chosen from GetSupportedTranscodeFormat\r\n * @param engine\r\n * @returns internal format corresponding to the Basis format\r\n */\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nexport const GetInternalFormatFromBasisFormat = (basisFormat: number, engine: Engine) => {\r\n let format;\r\n switch (basisFormat) {\r\n case BASIS_FORMATS.cTFETC1:\r\n format = Constants.TEXTUREFORMAT_COMPRESSED_RGB_ETC1_WEBGL;\r\n break;\r\n case BASIS_FORMATS.cTFBC1:\r\n format = Constants.TEXTUREFORMAT_COMPRESSED_RGB_S3TC_DXT1;\r\n break;\r\n case BASIS_FORMATS.cTFBC4:\r\n format = Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT5;\r\n break;\r\n case BASIS_FORMATS.cTFASTC_4x4:\r\n format = Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_4x4;\r\n break;\r\n case BASIS_FORMATS.cTFETC2:\r\n format = Constants.TEXTUREFORMAT_COMPRESSED_RGBA8_ETC2_EAC;\r\n break;\r\n case BASIS_FORMATS.cTFBC7:\r\n format = Constants.TEXTUREFORMAT_COMPRESSED_RGBA_BPTC_UNORM;\r\n break;\r\n }\r\n\r\n if (format === undefined) {\r\n throw \"The chosen Basis transcoder format is not currently supported\";\r\n }\r\n\r\n return format;\r\n};\r\n\r\nlet _WorkerPromise: Nullable<Promise<Worker>> = null;\r\nlet _Worker: Nullable<Worker> = null;\r\nlet _actionId = 0;\r\nconst _IgnoreSupportedFormats = false;\r\nconst _CreateWorkerAsync = () => {\r\n if (!_WorkerPromise) {\r\n _WorkerPromise = new Promise((res, reject) => {\r\n if (_Worker) {\r\n res(_Worker);\r\n } else {\r\n Tools.LoadFileAsync(BasisToolsOptions.WasmModuleURL)\r\n .then((wasmBinary) => {\r\n if (typeof URL !== \"function\") {\r\n return reject(\"Basis transcoder requires an environment with a URL constructor\");\r\n }\r\n const workerBlobUrl = URL.createObjectURL(new Blob([`(${workerFunc})()`], { type: \"application/javascript\" }));\r\n _Worker = new Worker(workerBlobUrl);\r\n\r\n const initHandler = (msg: any) => {\r\n if (msg.data.action === \"init\") {\r\n _Worker!.removeEventListener(\"message\", initHandler);\r\n res(_Worker!);\r\n } else if (msg.data.action === \"error\") {\r\n reject(msg.data.error || \"error initializing worker\");\r\n }\r\n };\r\n _Worker.addEventListener(\"message\", initHandler);\r\n _Worker.postMessage({ action: \"init\", url: BasisToolsOptions.JSModuleURL, wasmBinary: wasmBinary });\r\n })\r\n .catch(reject);\r\n }\r\n });\r\n }\r\n return _WorkerPromise;\r\n};\r\n\r\n/**\r\n * Transcodes a loaded image file to compressed pixel data\r\n * @param data image data to transcode\r\n * @param config configuration options for the transcoding\r\n * @returns a promise resulting in the transcoded image\r\n */\r\nexport const TranscodeAsync = (data: ArrayBuffer | ArrayBufferView, config: BasisTranscodeConfiguration): Promise<TranscodeResult> => {\r\n const dataView = data instanceof ArrayBuffer ? new Uint8Array(data) : data;\r\n\r\n return new Promise((res, rej) => {\r\n _CreateWorkerAsync().then(\r\n () => {\r\n const actionId = _actionId++;\r\n const messageHandler = (msg: any) => {\r\n if (msg.data.action === \"transcode\" && msg.data.id === actionId) {\r\n _Worker!.removeEventListener(\"message\", messageHandler);\r\n if (!msg.data.success) {\r\n rej(\"Transcode is not supported on this device\");\r\n } else {\r\n res(msg.data);\r\n }\r\n }\r\n };\r\n _Worker!.addEventListener(\"message\", messageHandler);\r\n\r\n const dataViewCopy = new Uint8Array(dataView.byteLength);\r\n dataViewCopy.set(new Uint8Array(dataView.buffer, dataView.byteOffset, dataView.byteLength));\r\n _Worker!.postMessage({ action: \"transcode\", id: actionId, imageData: dataViewCopy, config: config, ignoreSupportedFormats: _IgnoreSupportedFormats }, [\r\n dataViewCopy.buffer,\r\n ]);\r\n },\r\n (error) => {\r\n rej(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\n/**\r\n * Binds a texture according to its underlying target.\r\n * @param texture texture to bind\r\n * @param engine the engine to bind the texture in\r\n */\r\nconst BindTexture = (texture: InternalTexture, engine: Engine): void => {\r\n let target: GLenum = engine._gl?.TEXTURE_2D;\r\n if (texture.isCube) {\r\n target = engine._gl?.TEXTURE_CUBE_MAP;\r\n }\r\n\r\n engine._bindTextureDirectly(target, texture, true);\r\n};\r\n\r\n/**\r\n * Loads a texture from the transcode result\r\n * @param texture texture load to\r\n * @param transcodeResult the result of transcoding the basis file to load from\r\n */\r\nexport const LoadTextureFromTranscodeResult = (texture: InternalTexture, transcodeResult: TranscodeResult) => {\r\n const engine = texture.getEngine() as Engine;\r\n for (let i = 0; i < transcodeResult.fileInfo.images.length; i++) {\r\n const rootImage = transcodeResult.fileInfo.images[i].levels[0];\r\n texture._invertVScale = texture.invertY;\r\n if (transcodeResult.format === -1 || transcodeResult.format === BASIS_FORMATS.cTFRGB565) {\r\n // No compatable compressed format found, fallback to RGB\r\n texture.type = Constants.TEXTURETYPE_UNSIGNED_SHORT_5_6_5;\r\n texture.format = Constants.TEXTUREFORMAT_RGB;\r\n\r\n if (engine._features.basisNeedsPOT && (Scalar.Log2(rootImage.width) % 1 !== 0 || Scalar.Log2(rootImage.height) % 1 !== 0)) {\r\n // Create non power of two texture\r\n const source = new InternalTexture(engine, InternalTextureSource.Temp);\r\n\r\n texture._invertVScale = texture.invertY;\r\n source.type = Constants.TEXTURETYPE_UNSIGNED_SHORT_5_6_5;\r\n source.format = Constants.TEXTUREFORMAT_RGB;\r\n // Fallback requires aligned width/height\r\n source.width = (rootImage.width + 3) & ~3;\r\n source.height = (rootImage.height + 3) & ~3;\r\n BindTexture(source, engine);\r\n engine._uploadDataToTextureDirectly(source, new Uint16Array(rootImage.transcodedPixels.buffer), i, 0, Constants.TEXTUREFORMAT_RGB, true);\r\n\r\n // Resize to power of two\r\n engine._rescaleTexture(source, texture, engine.scenes[0], engine._getInternalFormat(Constants.TEXTUREFORMAT_RGB), () => {\r\n engine._releaseTexture(source);\r\n BindTexture(texture, engine);\r\n });\r\n } else {\r\n // Fallback is already inverted\r\n texture._invertVScale = !texture.invertY;\r\n\r\n // Upload directly\r\n texture.width = (rootImage.width + 3) & ~3;\r\n texture.height = (rootImage.height + 3) & ~3;\r\n texture.samplingMode = Constants.TEXTURE_LINEAR_LINEAR;\r\n BindTexture(texture, engine);\r\n engine._uploadDataToTextureDirectly(texture, new Uint16Array(rootImage.transcodedPixels.buffer), i, 0, Constants.TEXTUREFORMAT_RGB, true);\r\n }\r\n } else {\r\n texture.width = rootImage.width;\r\n texture.height = rootImage.height;\r\n texture.generateMipMaps = transcodeResult.fileInfo.images[i].levels.length > 1;\r\n\r\n const format = BasisTools.GetInternalFormatFromBasisFormat(transcodeResult.format!, engine);\r\n texture.format = format;\r\n\r\n BindTexture(texture, engine);\r\n\r\n // Upload all mip levels in the file\r\n transcodeResult.fileInfo.images[i].levels.forEach((level: any, index: number) => {\r\n engine._uploadCompressedDataToTextureDirectly(texture, format, level.width, level.height, level.transcodedPixels, i, index);\r\n });\r\n\r\n if (engine._features.basisNeedsPOT && (Scalar.Log2(texture.width) % 1 !== 0 || Scalar.Log2(texture.height) % 1 !== 0)) {\r\n Tools.Warn(\r\n \"Loaded .basis texture width and height are not a power of two. Texture wrapping will be set to Texture.CLAMP_ADDRESSMODE as other modes are not supported with non power of two dimensions in webGL 1.\"\r\n );\r\n texture._cachedWrapU = Texture.CLAMP_ADDRESSMODE;\r\n texture._cachedWrapV = Texture.CLAMP_ADDRESSMODE;\r\n }\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Used to load .Basis files\r\n * See https://github.com/BinomialLLC/basis_universal/tree/master/webgl\r\n */\r\nexport const BasisTools = {\r\n /**\r\n * URL to use when loading the basis transcoder\r\n */\r\n JSModuleURL: BasisToolsOptions.JSModuleURL,\r\n /**\r\n * URL to use when loading the wasm module for the transcoder\r\n */\r\n WasmModuleURL: BasisToolsOptions.WasmModuleURL,\r\n\r\n /**\r\n * Get the internal format to be passed to texImage2D corresponding to the .basis format value\r\n * @param basisFormat format chosen from GetSupportedTranscodeFormat\r\n * @returns internal format corresponding to the Basis format\r\n */\r\n GetInternalFormatFromBasisFormat,\r\n\r\n /**\r\n * Transcodes a loaded image file to compressed pixel data\r\n * @param data image data to transcode\r\n * @param config configuration options for the transcoding\r\n * @returns a promise resulting in the transcoded image\r\n */\r\n TranscodeAsync,\r\n\r\n /**\r\n * Loads a texture from the transcode result\r\n * @param texture texture load to\r\n * @param transcodeResult the result of transcoding the basis file to load from\r\n */\r\n LoadTextureFromTranscodeResult,\r\n};\r\n\r\n// WorkerGlobalScope\r\ndeclare function importScripts(...urls: string[]): void;\r\ndeclare function postMessage(message: any, transfer?: any[]): void;\r\ndeclare let BASIS: any;\r\nfunction workerFunc(): void {\r\n const _BASIS_FORMAT = {\r\n cTFETC1: 0,\r\n cTFETC2: 1,\r\n cTFBC1: 2,\r\n cTFBC3: 3,\r\n cTFBC4: 4,\r\n cTFBC5: 5,\r\n cTFBC7: 6,\r\n cTFPVRTC1_4_RGB: 8,\r\n cTFPVRTC1_4_RGBA: 9,\r\n cTFASTC_4x4: 10,\r\n cTFATC_RGB: 11,\r\n cTFATC_RGBA_INTERPOLATED_ALPHA: 12,\r\n cTFRGBA32: 13,\r\n cTFRGB565: 14,\r\n cTFBGR565: 15,\r\n cTFRGBA4444: 16,\r\n cTFFXT1_RGB: 17,\r\n cTFPVRTC2_4_RGB: 18,\r\n cTFPVRTC2_4_RGBA: 19,\r\n cTFETC2_EAC_R11: 20,\r\n cTFETC2_EAC_RG11: 21,\r\n };\r\n let transcoderModulePromise: Nullable<PromiseLike<any>> = null;\r\n onmessage = (event) => {\r\n if (event.data.action === \"init\") {\r\n // Load the transcoder if it hasn't been yet\r\n if (!transcoderModulePromise) {\r\n // make sure we loaded the script correctly\r\n try {\r\n importScripts(event.data.url);\r\n } catch (e) {\r\n postMessage({ action: \"error\", error: e });\r\n }\r\n transcoderModulePromise = BASIS({\r\n // Override wasm binary\r\n wasmBinary: event.data.wasmBinary,\r\n });\r\n }\r\n if (transcoderModulePromise !== null) {\r\n transcoderModulePromise.then((m) => {\r\n BASIS = m;\r\n m.initializeBasis();\r\n postMessage({ action: \"init\" });\r\n });\r\n }\r\n } else if (event.data.action === \"transcode\") {\r\n // Transcode the basis image and return the resulting pixels\r\n const config: BasisTranscodeConfiguration = event.data.config;\r\n const imgData = event.data.imageData;\r\n const loadedFile = new BASIS.BasisFile(imgData);\r\n const fileInfo = GetFileInfo(loadedFile);\r\n let format = event.data.ignoreSupportedFormats ? null : GetSupportedTranscodeFormat(event.data.config, fileInfo);\r\n\r\n let needsConversion = false;\r\n if (format === null) {\r\n needsConversion = true;\r\n format = fileInfo.hasAlpha ? _BASIS_FORMAT.cTFBC3 : _BASIS_FORMAT.cTFBC1;\r\n }\r\n\r\n // Begin transcode\r\n let success = true;\r\n if (!loadedFile.startTranscoding()) {\r\n success = false;\r\n }\r\n\r\n const buffers: Array<any> = [];\r\n for (let imageIndex = 0; imageIndex < fileInfo.images.length; imageIndex++) {\r\n if (!success) {\r\n break;\r\n }\r\n const image = fileInfo.images[imageIndex];\r\n if (config.loadSingleImage === undefined || config.loadSingleImage === imageIndex) {\r\n let mipCount = image.levels.length;\r\n if (config.loadMipmapLevels === false) {\r\n mipCount = 1;\r\n }\r\n for (let levelIndex = 0; levelIndex < mipCount; levelIndex++) {\r\n const levelInfo = image.levels[levelIndex];\r\n\r\n const pixels = TranscodeLevel(loadedFile, imageIndex, levelIndex, format!, needsConversion);\r\n if (!pixels) {\r\n success = false;\r\n break;\r\n }\r\n levelInfo.transcodedPixels = pixels;\r\n buffers.push(levelInfo.transcodedPixels.buffer);\r\n }\r\n }\r\n }\r\n // Close file\r\n loadedFile.close();\r\n loadedFile.delete();\r\n\r\n if (needsConversion) {\r\n format = -1;\r\n }\r\n if (!success) {\r\n postMessage({ action: \"transcode\", success: success, id: event.data.id });\r\n } else {\r\n postMessage({ action: \"transcode\", success: success, id: event.data.id, fileInfo: fileInfo, format: format }, buffers);\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Detects the supported transcode format for the file\r\n * @param config transcode config\r\n * @param fileInfo info about the file\r\n * @returns the chosed format or null if none are supported\r\n */\r\n function GetSupportedTranscodeFormat(config: BasisTranscodeConfiguration, fileInfo: BasisFileInfo): Nullable<number> {\r\n let format = null;\r\n if (config.supportedCompressionFormats) {\r\n if (config.supportedCompressionFormats.astc) {\r\n format = _BASIS_FORMAT.cTFASTC_4x4;\r\n } else if (config.supportedCompressionFormats.bc7) {\r\n format = _BASIS_FORMAT.cTFBC7;\r\n } else if (config.supportedCompressionFormats.s3tc) {\r\n format = fileInfo.hasAlpha ? _BASIS_FORMAT.cTFBC3 : _BASIS_FORMAT.cTFBC1;\r\n } else if (config.supportedCompressionFormats.pvrtc) {\r\n format = fileInfo.hasAlpha ? _BASIS_FORMAT.cTFPVRTC1_4_RGBA : _BASIS_FORMAT.cTFPVRTC1_4_RGB;\r\n } else if (config.supportedCompressionFormats.etc2) {\r\n format = _BASIS_FORMAT.cTFETC2;\r\n } else if (config.supportedCompressionFormats.etc1) {\r\n format = _BASIS_FORMAT.cTFETC1;\r\n } else {\r\n format = _BASIS_FORMAT.cTFRGB565;\r\n }\r\n }\r\n return format;\r\n }\r\n\r\n /**\r\n * Retrieves information about the basis file eg. dimensions\r\n * @param basisFile the basis file to get the info from\r\n * @returns information about the basis file\r\n */\r\n function GetFileInfo(basisFile: any): BasisFileInfo {\r\n const hasAlpha = basisFile.getHasAlpha();\r\n const imageCount = basisFile.getNumImages();\r\n const images = [];\r\n for (let i = 0; i < imageCount; i++) {\r\n const imageInfo = {\r\n levels: [] as Array<any>,\r\n };\r\n const levelCount = basisFile.getNumLevels(i);\r\n for (let level = 0; level < levelCount; level++) {\r\n const levelInfo = {\r\n width: basisFile.getImageWidth(i, level),\r\n height: basisFile.getImageHeight(i, level),\r\n };\r\n imageInfo.levels.push(levelInfo);\r\n }\r\n images.push(imageInfo);\r\n }\r\n const info = { hasAlpha, images };\r\n return info;\r\n }\r\n\r\n function TranscodeLevel(loadedFile: any, imageIndex: number, levelIndex: number, format: number, convertToRgb565: boolean): Nullable<Uint8Array | Uint16Array> {\r\n const dstSize = loadedFile.getImageTranscodedSizeInBytes(imageIndex, levelIndex, format);\r\n let dst: Uint8Array | Uint16Array = new Uint8Array(dstSize);\r\n if (!loadedFile.transcodeImage(dst, imageIndex, levelIndex, format, 1, 0)) {\r\n return null;\r\n }\r\n // If no supported format is found, load as dxt and convert to rgb565\r\n if (convertToRgb565) {\r\n const alignedWidth = (loadedFile.getImageWidth(imageIndex, levelIndex) + 3) & ~3;\r\n const alignedHeight = (loadedFile.getImageHeight(imageIndex, levelIndex) + 3) & ~3;\r\n dst = ConvertDxtToRgb565(dst, 0, alignedWidth, alignedHeight);\r\n }\r\n return dst;\r\n }\r\n\r\n /**\r\n * From https://github.com/BinomialLLC/basis_universal/blob/master/webgl/texture/dxt-to-rgb565.js\r\n * An unoptimized version of dxtToRgb565. Also, the floating\r\n * point math used to compute the colors actually results in\r\n * slightly different colors compared to hardware DXT decoders.\r\n * @param src dxt src pixels\r\n * @param srcByteOffset offset for the start of src\r\n * @param width aligned width of the image\r\n * @param height aligned height of the image\r\n * @returns the converted pixels\r\n */\r\n function ConvertDxtToRgb565(src: Uint8Array, srcByteOffset: number, width: number, height: number): Uint16Array {\r\n const c = new Uint16Array(4);\r\n const dst = new Uint16Array(width * height);\r\n\r\n const blockWidth = width / 4;\r\n const blockHeight = height / 4;\r\n for (let blockY = 0; blockY < blockHeight; blockY++) {\r\n for (let blockX = 0; blockX < blockWidth; blockX++) {\r\n const i = srcByteOffset + 8 * (blockY * blockWidth + blockX);\r\n c[0] = src[i] | (src[i + 1] << 8);\r\n c[1] = src[i + 2] | (src[i + 3] << 8);\r\n c[2] =\r\n ((2 * (c[0] & 0x1f) + 1 * (c[1] & 0x1f)) / 3) |\r\n (((2 * (c[0] & 0x7e0) + 1 * (c[1] & 0x7e0)) / 3) & 0x7e0) |\r\n (((2 * (c[0] & 0xf800) + 1 * (c[1] & 0xf800)) / 3) & 0xf800);\r\n c[3] =\r\n ((2 * (c[1] & 0x1f) + 1 * (c[0] & 0x1f)) / 3) |\r\n (((2 * (c[1] & 0x7e0) + 1 * (c[0] & 0x7e0)) / 3) & 0x7e0) |\r\n (((2 * (c[1] & 0xf800) + 1 * (c[0] & 0xf800)) / 3) & 0xf800);\r\n for (let row = 0; row < 4; row++) {\r\n const m = src[i + 4 + row];\r\n let dstI = (blockY * 4 + row) * width + blockX * 4;\r\n dst[dstI++] = c[m & 0x3];\r\n dst[dstI++] = c[(m >> 2) & 0x3];\r\n dst[dstI++] = c[(m >> 4) & 0x3];\r\n dst[dstI++] = c[(m >> 6) & 0x3];\r\n }\r\n }\r\n }\r\n return dst;\r\n }\r\n}\r\n\r\nObject.defineProperty(BasisTools, \"JSModuleURL\", {\r\n get: function (this: null) {\r\n return BasisToolsOptions.JSModuleURL;\r\n },\r\n set: function (this: null, value: string) {\r\n BasisToolsOptions.JSModuleURL = value;\r\n },\r\n});\r\n\r\nObject.defineProperty(BasisTools, \"WasmModuleURL\", {\r\n get: function (this: null) {\r\n return BasisToolsOptions.WasmModuleURL;\r\n },\r\n set: function (this: null, value: string) {\r\n BasisToolsOptions.WasmModuleURL = value;\r\n },\r\n});\r\n"]}
@@ -6,12 +6,15 @@ const CloneValue = (source, destinationObject) => {
6
6
  if (source.getClassName && source.getClassName() === "Mesh") {
7
7
  return null;
8
8
  }
9
- if (source.getClassName && source.getClassName() === "SubMesh") {
9
+ if (source.getClassName && (source.getClassName() === "SubMesh" || source.getClassName() === "PhysicsBody")) {
10
10
  return source.clone(destinationObject);
11
11
  }
12
12
  else if (source.clone) {
13
13
  return source.clone();
14
14
  }
15
+ else if (Array.isArray(source)) {
16
+ return source.slice();
17
+ }
15
18
  return null;
16
19
  };
17
20
  function GetAllPropertyNames(obj) {
@@ -55,7 +58,10 @@ export class DeepCopier {
55
58
  }
56
59
  try {
57
60
  if (typeOfSourceValue === "object") {
58
- if (sourceValue instanceof Array) {
61
+ if (sourceValue instanceof Uint8Array) {
62
+ destination[prop] = Uint8Array.from(sourceValue);
63
+ }
64
+ else if (sourceValue instanceof Array) {
59
65
  destination[prop] = [];
60
66
  if (sourceValue.length > 0) {
61
67
  if (typeof sourceValue[0] == "object") {
@@ -1 +1 @@
1
- {"version":3,"file":"deepCopier.js","sourceRoot":"","sources":["../../../../lts/core/generated/Misc/deepCopier.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"./logger\";\r\n\r\nconst CloneValue = (source: any, destinationObject: any) => {\r\n if (!source) {\r\n return null;\r\n }\r\n\r\n if (source.getClassName && source.getClassName() === \"Mesh\") {\r\n return null;\r\n }\r\n\r\n if (source.getClassName && source.getClassName() === \"SubMesh\") {\r\n return source.clone(destinationObject);\r\n } else if (source.clone) {\r\n return source.clone();\r\n }\r\n return null;\r\n};\r\n\r\nfunction GetAllPropertyNames(obj: any): string[] {\r\n const props: string[] = [];\r\n\r\n do {\r\n Object.getOwnPropertyNames(obj).forEach(function (prop) {\r\n if (props.indexOf(prop) === -1) {\r\n props.push(prop);\r\n }\r\n });\r\n } while ((obj = Object.getPrototypeOf(obj)));\r\n\r\n return props;\r\n}\r\n\r\n/**\r\n * Class containing a set of static utilities functions for deep copy.\r\n */\r\nexport class DeepCopier {\r\n /**\r\n * Tries to copy an object by duplicating every property\r\n * @param source defines the source object\r\n * @param destination defines the target object\r\n * @param doNotCopyList defines a list of properties to avoid\r\n * @param mustCopyList defines a list of properties to copy (even if they start with _)\r\n */\r\n public static DeepCopy(source: any, destination: any, doNotCopyList?: string[], mustCopyList?: string[]): void {\r\n const properties = GetAllPropertyNames(source);\r\n for (const prop of properties) {\r\n if (prop[0] === \"_\" && (!mustCopyList || mustCopyList.indexOf(prop) === -1)) {\r\n continue;\r\n }\r\n\r\n if (prop.endsWith(\"Observable\")) {\r\n continue;\r\n }\r\n\r\n if (doNotCopyList && doNotCopyList.indexOf(prop) !== -1) {\r\n continue;\r\n }\r\n\r\n const sourceValue = source[prop];\r\n const typeOfSourceValue = typeof sourceValue;\r\n\r\n if (typeOfSourceValue === \"function\") {\r\n continue;\r\n }\r\n\r\n try {\r\n if (typeOfSourceValue === \"object\") {\r\n if (sourceValue instanceof Array) {\r\n destination[prop] = [];\r\n\r\n if (sourceValue.length > 0) {\r\n if (typeof sourceValue[0] == \"object\") {\r\n for (let index = 0; index < sourceValue.length; index++) {\r\n const clonedValue = CloneValue(sourceValue[index], destination);\r\n\r\n if (destination[prop].indexOf(clonedValue) === -1) {\r\n // Test if auto inject was not done\r\n destination[prop].push(clonedValue);\r\n }\r\n }\r\n } else {\r\n destination[prop] = sourceValue.slice(0);\r\n }\r\n }\r\n } else {\r\n destination[prop] = CloneValue(sourceValue, destination);\r\n }\r\n } else {\r\n destination[prop] = sourceValue;\r\n }\r\n } catch (e) {\r\n // Log a warning (it could be because of a read-only property)\r\n Logger.Warn(e.message);\r\n }\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"deepCopier.js","sourceRoot":"","sources":["../../../../lts/core/generated/Misc/deepCopier.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"./logger\";\r\n\r\nconst CloneValue = (source: any, destinationObject: any) => {\r\n if (!source) {\r\n return null;\r\n }\r\n\r\n if (source.getClassName && source.getClassName() === \"Mesh\") {\r\n return null;\r\n }\r\n\r\n if (source.getClassName && (source.getClassName() === \"SubMesh\" || source.getClassName() === \"PhysicsBody\")) {\r\n return source.clone(destinationObject);\r\n } else if (source.clone) {\r\n return source.clone();\r\n } else if (Array.isArray(source)) {\r\n return source.slice();\r\n }\r\n return null;\r\n};\r\n\r\nfunction GetAllPropertyNames(obj: any): string[] {\r\n const props: string[] = [];\r\n\r\n do {\r\n Object.getOwnPropertyNames(obj).forEach(function (prop) {\r\n if (props.indexOf(prop) === -1) {\r\n props.push(prop);\r\n }\r\n });\r\n } while ((obj = Object.getPrototypeOf(obj)));\r\n\r\n return props;\r\n}\r\n\r\n/**\r\n * Class containing a set of static utilities functions for deep copy.\r\n */\r\nexport class DeepCopier {\r\n /**\r\n * Tries to copy an object by duplicating every property\r\n * @param source defines the source object\r\n * @param destination defines the target object\r\n * @param doNotCopyList defines a list of properties to avoid\r\n * @param mustCopyList defines a list of properties to copy (even if they start with _)\r\n */\r\n public static DeepCopy(source: any, destination: any, doNotCopyList?: string[], mustCopyList?: string[]): void {\r\n const properties = GetAllPropertyNames(source);\r\n for (const prop of properties) {\r\n if (prop[0] === \"_\" && (!mustCopyList || mustCopyList.indexOf(prop) === -1)) {\r\n continue;\r\n }\r\n\r\n if (prop.endsWith(\"Observable\")) {\r\n continue;\r\n }\r\n\r\n if (doNotCopyList && doNotCopyList.indexOf(prop) !== -1) {\r\n continue;\r\n }\r\n\r\n const sourceValue = source[prop];\r\n const typeOfSourceValue = typeof sourceValue;\r\n\r\n if (typeOfSourceValue === \"function\") {\r\n continue;\r\n }\r\n\r\n try {\r\n if (typeOfSourceValue === \"object\") {\r\n if (sourceValue instanceof Uint8Array) {\r\n destination[prop] = Uint8Array.from(sourceValue);\r\n } else if (sourceValue instanceof Array) {\r\n destination[prop] = [];\r\n\r\n if (sourceValue.length > 0) {\r\n if (typeof sourceValue[0] == \"object\") {\r\n for (let index = 0; index < sourceValue.length; index++) {\r\n const clonedValue = CloneValue(sourceValue[index], destination);\r\n\r\n if (destination[prop].indexOf(clonedValue) === -1) {\r\n // Test if auto inject was not done\r\n destination[prop].push(clonedValue);\r\n }\r\n }\r\n } else {\r\n destination[prop] = sourceValue.slice(0);\r\n }\r\n }\r\n } else {\r\n destination[prop] = CloneValue(sourceValue, destination);\r\n }\r\n } else {\r\n destination[prop] = sourceValue;\r\n }\r\n } catch (e) {\r\n // Log a warning (it could be because of a read-only property)\r\n Logger.Warn(e.message);\r\n }\r\n }\r\n }\r\n}\r\n"]}
@@ -13,9 +13,10 @@ export declare class DumpTools {
13
13
  * @param successCallback defines the callback triggered once the data are available
14
14
  * @param mimeType defines the mime type of the result
15
15
  * @param fileName defines the filename to download. If present, the result will automatically be downloaded
16
+ * @param quality The quality of the image if lossy mimeType is used (e.g. image/jpeg, image/webp). See {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob | HTMLCanvasElement.toBlob()}'s `quality` parameter.
16
17
  * @returns a void promise
17
18
  */
18
- static DumpFramebuffer(width: number, height: number, engine: Engine, successCallback?: (data: string) => void, mimeType?: string, fileName?: string): Promise<void>;
19
+ static DumpFramebuffer(width: number, height: number, engine: Engine, successCallback?: (data: string) => void, mimeType?: string, fileName?: string, quality?: number): Promise<void>;
19
20
  /**
20
21
  * Dumps an array buffer
21
22
  * @param width defines the rendering width
@@ -25,7 +26,7 @@ export declare class DumpTools {
25
26
  * @param fileName defines the filename to download. If present, the result will automatically be downloaded
26
27
  * @param invertY true to invert the picture in the Y dimension
27
28
  * @param toArrayBuffer true to convert the data to an ArrayBuffer (encoded as `mimeType`) instead of a base64 string
28
- * @param quality defines the quality of the result
29
+ * @param quality The quality of the image if lossy mimeType is used (e.g. image/jpeg, image/webp). See {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob | HTMLCanvasElement.toBlob()}'s `quality` parameter.
29
30
  * @returns a promise that resolve to the final data
30
31
  */
31
32
  static DumpDataAsync(width: number, height: number, data: ArrayBufferView, mimeType?: string, fileName?: string, invertY?: boolean, toArrayBuffer?: boolean, quality?: number): Promise<string | ArrayBuffer>;
@@ -39,7 +40,7 @@ export declare class DumpTools {
39
40
  * @param fileName defines the filename to download. If present, the result will automatically be downloaded
40
41
  * @param invertY true to invert the picture in the Y dimension
41
42
  * @param toArrayBuffer true to convert the data to an ArrayBuffer (encoded as `mimeType`) instead of a base64 string
42
- * @param quality defines the quality of the result
43
+ * @param quality The quality of the image if lossy mimeType is used (e.g. image/jpeg, image/webp). See {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob | HTMLCanvasElement.toBlob()}'s `quality` parameter.
43
44
  */
44
45
  static DumpData(width: number, height: number, data: ArrayBufferView, successCallback?: (data: string | ArrayBuffer) => void, mimeType?: string, fileName?: string, invertY?: boolean, toArrayBuffer?: boolean, quality?: number): void;
45
46
  /**
package/Misc/dumpTools.js CHANGED
@@ -45,13 +45,14 @@ export class DumpTools {
45
45
  * @param successCallback defines the callback triggered once the data are available
46
46
  * @param mimeType defines the mime type of the result
47
47
  * @param fileName defines the filename to download. If present, the result will automatically be downloaded
48
+ * @param quality The quality of the image if lossy mimeType is used (e.g. image/jpeg, image/webp). See {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob | HTMLCanvasElement.toBlob()}'s `quality` parameter.
48
49
  * @returns a void promise
49
50
  */
50
- static async DumpFramebuffer(width, height, engine, successCallback, mimeType = "image/png", fileName) {
51
+ static async DumpFramebuffer(width, height, engine, successCallback, mimeType = "image/png", fileName, quality) {
51
52
  // Read the contents of the framebuffer
52
53
  const bufferView = await engine.readPixels(0, 0, width, height);
53
54
  const data = new Uint8Array(bufferView.buffer);
54
- DumpTools.DumpData(width, height, data, successCallback, mimeType, fileName, true);
55
+ DumpTools.DumpData(width, height, data, successCallback, mimeType, fileName, true, undefined, quality);
55
56
  }
56
57
  /**
57
58
  * Dumps an array buffer
@@ -62,7 +63,7 @@ export class DumpTools {
62
63
  * @param fileName defines the filename to download. If present, the result will automatically be downloaded
63
64
  * @param invertY true to invert the picture in the Y dimension
64
65
  * @param toArrayBuffer true to convert the data to an ArrayBuffer (encoded as `mimeType`) instead of a base64 string
65
- * @param quality defines the quality of the result
66
+ * @param quality The quality of the image if lossy mimeType is used (e.g. image/jpeg, image/webp). See {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob | HTMLCanvasElement.toBlob()}'s `quality` parameter.
66
67
  * @returns a promise that resolve to the final data
67
68
  */
68
69
  static DumpDataAsync(width, height, data, mimeType = "image/png", fileName, invertY = false, toArrayBuffer = false, quality) {
@@ -80,7 +81,7 @@ export class DumpTools {
80
81
  * @param fileName defines the filename to download. If present, the result will automatically be downloaded
81
82
  * @param invertY true to invert the picture in the Y dimension
82
83
  * @param toArrayBuffer true to convert the data to an ArrayBuffer (encoded as `mimeType`) instead of a base64 string
83
- * @param quality defines the quality of the result
84
+ * @param quality The quality of the image if lossy mimeType is used (e.g. image/jpeg, image/webp). See {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob | HTMLCanvasElement.toBlob()}'s `quality` parameter.
84
85
  */
85
86
  static DumpData(width, height, data, successCallback, mimeType = "image/png", fileName, invertY = false, toArrayBuffer = false, quality) {
86
87
  const renderer = DumpTools._CreateDumpRenderer();
@@ -1 +1 @@
1
- {"version":3,"file":"dumpTools.js","sourceRoot":"","sources":["../../../../lts/core/generated/Misc/dumpTools.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\r\nimport { _WarnImport } from \"./devTools\";\r\nimport type { Engine } from \"../Engines/engine\";\r\n\r\nimport { ThinEngine } from \"../Engines/thinEngine\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { EffectRenderer, EffectWrapper } from \"../Materials/effectRenderer\";\r\nimport { Tools } from \"./tools\";\r\nimport type { Nullable } from \"../types\";\r\n\r\nimport { passPixelShader } from \"../Shaders/pass.fragment\";\r\nimport { Scalar } from \"../Maths/math.scalar\";\r\n\r\ntype DumpToolsEngine = {\r\n canvas: HTMLCanvasElement | OffscreenCanvas;\r\n engine: ThinEngine;\r\n renderer: EffectRenderer;\r\n wrapper: EffectWrapper;\r\n};\r\n\r\n/**\r\n * Class containing a set of static utilities functions to dump data from a canvas\r\n */\r\nexport class DumpTools {\r\n private static _DumpToolsEngine: Nullable<DumpToolsEngine>;\r\n\r\n private static _CreateDumpRenderer(): DumpToolsEngine {\r\n if (!DumpTools._DumpToolsEngine) {\r\n const canvas = new OffscreenCanvas(100, 100); // will be resized later\r\n const engine = new ThinEngine(canvas, false, {\r\n preserveDrawingBuffer: true,\r\n depth: false,\r\n stencil: false,\r\n alpha: true,\r\n premultipliedAlpha: false,\r\n antialias: false,\r\n failIfMajorPerformanceCaveat: false,\r\n });\r\n engine.getCaps().parallelShaderCompile = undefined;\r\n const renderer = new EffectRenderer(engine);\r\n const wrapper = new EffectWrapper({\r\n engine,\r\n name: passPixelShader.name,\r\n fragmentShader: passPixelShader.shader,\r\n samplerNames: [\"textureSampler\"],\r\n });\r\n DumpTools._DumpToolsEngine = {\r\n canvas,\r\n engine,\r\n renderer,\r\n wrapper,\r\n };\r\n }\r\n return DumpTools._DumpToolsEngine!;\r\n }\r\n\r\n /**\r\n * Dumps the current bound framebuffer\r\n * @param width defines the rendering width\r\n * @param height defines the rendering height\r\n * @param engine defines the hosting engine\r\n * @param successCallback defines the callback triggered once the data are available\r\n * @param mimeType defines the mime type of the result\r\n * @param fileName defines the filename to download. If present, the result will automatically be downloaded\r\n * @returns a void promise\r\n */\r\n public static async DumpFramebuffer(\r\n width: number,\r\n height: number,\r\n engine: Engine,\r\n successCallback?: (data: string) => void,\r\n mimeType: string = \"image/png\",\r\n fileName?: string\r\n ) {\r\n // Read the contents of the framebuffer\r\n const bufferView = await engine.readPixels(0, 0, width, height);\r\n\r\n const data = new Uint8Array(bufferView.buffer);\r\n\r\n DumpTools.DumpData(width, height, data, successCallback as (data: string | ArrayBuffer) => void, mimeType, fileName, true);\r\n }\r\n\r\n /**\r\n * Dumps an array buffer\r\n * @param width defines the rendering width\r\n * @param height defines the rendering height\r\n * @param data the data array\r\n * @param mimeType defines the mime type of the result\r\n * @param fileName defines the filename to download. If present, the result will automatically be downloaded\r\n * @param invertY true to invert the picture in the Y dimension\r\n * @param toArrayBuffer true to convert the data to an ArrayBuffer (encoded as `mimeType`) instead of a base64 string\r\n * @param quality defines the quality of the result\r\n * @returns a promise that resolve to the final data\r\n */\r\n public static DumpDataAsync(\r\n width: number,\r\n height: number,\r\n data: ArrayBufferView,\r\n mimeType: string = \"image/png\",\r\n fileName?: string,\r\n invertY = false,\r\n toArrayBuffer = false,\r\n quality?: number\r\n ): Promise<string | ArrayBuffer> {\r\n return new Promise((resolve) => {\r\n DumpTools.DumpData(width, height, data, (result) => resolve(result), mimeType, fileName, invertY, toArrayBuffer, quality);\r\n });\r\n }\r\n\r\n /**\r\n * Dumps an array buffer\r\n * @param width defines the rendering width\r\n * @param height defines the rendering height\r\n * @param data the data array\r\n * @param successCallback defines the callback triggered once the data are available\r\n * @param mimeType defines the mime type of the result\r\n * @param fileName defines the filename to download. If present, the result will automatically be downloaded\r\n * @param invertY true to invert the picture in the Y dimension\r\n * @param toArrayBuffer true to convert the data to an ArrayBuffer (encoded as `mimeType`) instead of a base64 string\r\n * @param quality defines the quality of the result\r\n */\r\n public static DumpData(\r\n width: number,\r\n height: number,\r\n data: ArrayBufferView,\r\n successCallback?: (data: string | ArrayBuffer) => void,\r\n mimeType: string = \"image/png\",\r\n fileName?: string,\r\n invertY = false,\r\n toArrayBuffer = false,\r\n quality?: number\r\n ) {\r\n const renderer = DumpTools._CreateDumpRenderer();\r\n renderer.engine.setSize(width, height, true);\r\n\r\n // Convert if data are float32\r\n if (data instanceof Float32Array) {\r\n const data2 = new Uint8Array(data.length);\r\n let n = data.length;\r\n while (n--) {\r\n const v = data[n];\r\n data2[n] = Math.round(Scalar.Clamp(v) * 255);\r\n }\r\n data = data2;\r\n }\r\n\r\n // Create the image\r\n const texture = renderer.engine.createRawTexture(data, width, height, Constants.TEXTUREFORMAT_RGBA, false, !invertY, Constants.TEXTURE_NEAREST_NEAREST);\r\n\r\n renderer.renderer.setViewport();\r\n renderer.renderer.applyEffectWrapper(renderer.wrapper);\r\n renderer.wrapper.effect._bindTexture(\"textureSampler\", texture);\r\n renderer.renderer.draw();\r\n\r\n if (toArrayBuffer) {\r\n Tools.ToBlob(\r\n renderer.canvas,\r\n (blob) => {\r\n const fileReader = new FileReader();\r\n fileReader.onload = (event: any) => {\r\n const arrayBuffer = event.target!.result as ArrayBuffer;\r\n if (successCallback) {\r\n successCallback(arrayBuffer);\r\n }\r\n };\r\n fileReader.readAsArrayBuffer(blob!);\r\n },\r\n mimeType,\r\n quality\r\n );\r\n } else {\r\n Tools.EncodeScreenshotCanvasData(renderer.canvas, successCallback, mimeType, fileName, quality);\r\n }\r\n\r\n texture.dispose();\r\n }\r\n\r\n /**\r\n * Dispose the dump tools associated resources\r\n */\r\n public static Dispose() {\r\n if (DumpTools._DumpToolsEngine) {\r\n DumpTools._DumpToolsEngine.wrapper.dispose();\r\n DumpTools._DumpToolsEngine.renderer.dispose();\r\n DumpTools._DumpToolsEngine.engine.dispose();\r\n }\r\n DumpTools._DumpToolsEngine = null;\r\n }\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 // References the dependencies.\r\n Tools.DumpData = DumpTools.DumpData;\r\n Tools.DumpDataAsync = DumpTools.DumpDataAsync;\r\n Tools.DumpFramebuffer = DumpTools.DumpFramebuffer;\r\n};\r\n\r\ninitSideEffects();\r\n"]}
1
+ {"version":3,"file":"dumpTools.js","sourceRoot":"","sources":["../../../../lts/core/generated/Misc/dumpTools.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\r\nimport { _WarnImport } from \"./devTools\";\r\nimport type { Engine } from \"../Engines/engine\";\r\n\r\nimport { ThinEngine } from \"../Engines/thinEngine\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { EffectRenderer, EffectWrapper } from \"../Materials/effectRenderer\";\r\nimport { Tools } from \"./tools\";\r\nimport type { Nullable } from \"../types\";\r\n\r\nimport { passPixelShader } from \"../Shaders/pass.fragment\";\r\nimport { Scalar } from \"../Maths/math.scalar\";\r\n\r\ntype DumpToolsEngine = {\r\n canvas: HTMLCanvasElement | OffscreenCanvas;\r\n engine: ThinEngine;\r\n renderer: EffectRenderer;\r\n wrapper: EffectWrapper;\r\n};\r\n\r\n/**\r\n * Class containing a set of static utilities functions to dump data from a canvas\r\n */\r\nexport class DumpTools {\r\n private static _DumpToolsEngine: Nullable<DumpToolsEngine>;\r\n\r\n private static _CreateDumpRenderer(): DumpToolsEngine {\r\n if (!DumpTools._DumpToolsEngine) {\r\n const canvas = new OffscreenCanvas(100, 100); // will be resized later\r\n const engine = new ThinEngine(canvas, false, {\r\n preserveDrawingBuffer: true,\r\n depth: false,\r\n stencil: false,\r\n alpha: true,\r\n premultipliedAlpha: false,\r\n antialias: false,\r\n failIfMajorPerformanceCaveat: false,\r\n });\r\n engine.getCaps().parallelShaderCompile = undefined;\r\n const renderer = new EffectRenderer(engine);\r\n const wrapper = new EffectWrapper({\r\n engine,\r\n name: passPixelShader.name,\r\n fragmentShader: passPixelShader.shader,\r\n samplerNames: [\"textureSampler\"],\r\n });\r\n DumpTools._DumpToolsEngine = {\r\n canvas,\r\n engine,\r\n renderer,\r\n wrapper,\r\n };\r\n }\r\n return DumpTools._DumpToolsEngine!;\r\n }\r\n\r\n /**\r\n * Dumps the current bound framebuffer\r\n * @param width defines the rendering width\r\n * @param height defines the rendering height\r\n * @param engine defines the hosting engine\r\n * @param successCallback defines the callback triggered once the data are available\r\n * @param mimeType defines the mime type of the result\r\n * @param fileName defines the filename to download. If present, the result will automatically be downloaded\r\n * @param quality The quality of the image if lossy mimeType is used (e.g. image/jpeg, image/webp). See {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob | HTMLCanvasElement.toBlob()}'s `quality` parameter.\r\n * @returns a void promise\r\n */\r\n public static async DumpFramebuffer(\r\n width: number,\r\n height: number,\r\n engine: Engine,\r\n successCallback?: (data: string) => void,\r\n mimeType = \"image/png\",\r\n fileName?: string,\r\n quality?: number\r\n ) {\r\n // Read the contents of the framebuffer\r\n const bufferView = await engine.readPixels(0, 0, width, height);\r\n\r\n const data = new Uint8Array(bufferView.buffer);\r\n\r\n DumpTools.DumpData(width, height, data, successCallback as (data: string | ArrayBuffer) => void, mimeType, fileName, true, undefined, quality);\r\n }\r\n\r\n /**\r\n * Dumps an array buffer\r\n * @param width defines the rendering width\r\n * @param height defines the rendering height\r\n * @param data the data array\r\n * @param mimeType defines the mime type of the result\r\n * @param fileName defines the filename to download. If present, the result will automatically be downloaded\r\n * @param invertY true to invert the picture in the Y dimension\r\n * @param toArrayBuffer true to convert the data to an ArrayBuffer (encoded as `mimeType`) instead of a base64 string\r\n * @param quality The quality of the image if lossy mimeType is used (e.g. image/jpeg, image/webp). See {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob | HTMLCanvasElement.toBlob()}'s `quality` parameter.\r\n * @returns a promise that resolve to the final data\r\n */\r\n public static DumpDataAsync(\r\n width: number,\r\n height: number,\r\n data: ArrayBufferView,\r\n mimeType = \"image/png\",\r\n fileName?: string,\r\n invertY = false,\r\n toArrayBuffer = false,\r\n quality?: number\r\n ): Promise<string | ArrayBuffer> {\r\n return new Promise((resolve) => {\r\n DumpTools.DumpData(width, height, data, (result) => resolve(result), mimeType, fileName, invertY, toArrayBuffer, quality);\r\n });\r\n }\r\n\r\n /**\r\n * Dumps an array buffer\r\n * @param width defines the rendering width\r\n * @param height defines the rendering height\r\n * @param data the data array\r\n * @param successCallback defines the callback triggered once the data are available\r\n * @param mimeType defines the mime type of the result\r\n * @param fileName defines the filename to download. If present, the result will automatically be downloaded\r\n * @param invertY true to invert the picture in the Y dimension\r\n * @param toArrayBuffer true to convert the data to an ArrayBuffer (encoded as `mimeType`) instead of a base64 string\r\n * @param quality The quality of the image if lossy mimeType is used (e.g. image/jpeg, image/webp). See {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob | HTMLCanvasElement.toBlob()}'s `quality` parameter.\r\n */\r\n public static DumpData(\r\n width: number,\r\n height: number,\r\n data: ArrayBufferView,\r\n successCallback?: (data: string | ArrayBuffer) => void,\r\n mimeType = \"image/png\",\r\n fileName?: string,\r\n invertY = false,\r\n toArrayBuffer = false,\r\n quality?: number\r\n ) {\r\n const renderer = DumpTools._CreateDumpRenderer();\r\n renderer.engine.setSize(width, height, true);\r\n\r\n // Convert if data are float32\r\n if (data instanceof Float32Array) {\r\n const data2 = new Uint8Array(data.length);\r\n let n = data.length;\r\n while (n--) {\r\n const v = data[n];\r\n data2[n] = Math.round(Scalar.Clamp(v) * 255);\r\n }\r\n data = data2;\r\n }\r\n\r\n // Create the image\r\n const texture = renderer.engine.createRawTexture(data, width, height, Constants.TEXTUREFORMAT_RGBA, false, !invertY, Constants.TEXTURE_NEAREST_NEAREST);\r\n\r\n renderer.renderer.setViewport();\r\n renderer.renderer.applyEffectWrapper(renderer.wrapper);\r\n renderer.wrapper.effect._bindTexture(\"textureSampler\", texture);\r\n renderer.renderer.draw();\r\n\r\n if (toArrayBuffer) {\r\n Tools.ToBlob(\r\n renderer.canvas,\r\n (blob) => {\r\n const fileReader = new FileReader();\r\n fileReader.onload = (event: any) => {\r\n const arrayBuffer = event.target!.result as ArrayBuffer;\r\n if (successCallback) {\r\n successCallback(arrayBuffer);\r\n }\r\n };\r\n fileReader.readAsArrayBuffer(blob!);\r\n },\r\n mimeType,\r\n quality\r\n );\r\n } else {\r\n Tools.EncodeScreenshotCanvasData(renderer.canvas, successCallback, mimeType, fileName, quality);\r\n }\r\n\r\n texture.dispose();\r\n }\r\n\r\n /**\r\n * Dispose the dump tools associated resources\r\n */\r\n public static Dispose() {\r\n if (DumpTools._DumpToolsEngine) {\r\n DumpTools._DumpToolsEngine.wrapper.dispose();\r\n DumpTools._DumpToolsEngine.renderer.dispose();\r\n DumpTools._DumpToolsEngine.engine.dispose();\r\n }\r\n DumpTools._DumpToolsEngine = null;\r\n }\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 // References the dependencies.\r\n Tools.DumpData = DumpTools.DumpData;\r\n Tools.DumpDataAsync = DumpTools.DumpDataAsync;\r\n Tools.DumpFramebuffer = DumpTools.DumpFramebuffer;\r\n};\r\n\r\ninitSideEffects();\r\n"]}
@@ -65,7 +65,7 @@ export function normalizeEnvInfo(info) {
65
65
  return info;
66
66
  }
67
67
  // Migrate a v1 info to v2
68
- info = { ...info, version: 2, imageType: DefaultEnvironmentTextureImageType };
68
+ info = Object.assign(Object.assign({}, info), { version: 2, imageType: DefaultEnvironmentTextureImageType });
69
69
  return info;
70
70
  }
71
71
  /**