@babylonjs/core 9.11.0 → 9.12.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 (1078) hide show
  1. package/Actions/actionManager.d.ts +1 -1
  2. package/Actions/actionManager.js +8 -5
  3. package/Actions/actionManager.js.map +1 -1
  4. package/Animations/animatable.core.d.ts +1 -1
  5. package/Animations/animatable.core.js +2 -2
  6. package/Animations/animatable.core.js.map +1 -1
  7. package/Animations/animationPropertiesOverride.js +1 -1
  8. package/Animations/animationPropertiesOverride.js.map +1 -1
  9. package/Animations/animatorAvatar.d.ts +2 -2
  10. package/Animations/animatorAvatar.js +3 -3
  11. package/Animations/animatorAvatar.js.map +1 -1
  12. package/Animations/pathCursor.d.ts +1 -1
  13. package/Animations/pathCursor.js +1 -1
  14. package/Animations/pathCursor.js.map +1 -1
  15. package/Animations/runtimeAnimation.d.ts +1 -1
  16. package/Animations/runtimeAnimation.js +2 -2
  17. package/Animations/runtimeAnimation.js.map +1 -1
  18. package/Audio/analyser.js +1 -1
  19. package/Audio/analyser.js.map +1 -1
  20. package/AudioV2/abstractAudio/components/spatialAudioAttacherComponent.js +1 -1
  21. package/AudioV2/abstractAudio/components/spatialAudioAttacherComponent.js.map +1 -1
  22. package/AudioV2/abstractAudio/subProperties/abstractSpatialAudio.d.ts +1 -1
  23. package/AudioV2/abstractAudio/subProperties/abstractSpatialAudio.js +1 -1
  24. package/AudioV2/abstractAudio/subProperties/abstractSpatialAudio.js.map +1 -1
  25. package/AudioV2/abstractAudio/subProperties/abstractSpatialAudioListener.d.ts +1 -1
  26. package/AudioV2/abstractAudio/subProperties/abstractSpatialAudioListener.js +1 -1
  27. package/AudioV2/abstractAudio/subProperties/abstractSpatialAudioListener.js.map +1 -1
  28. package/AudioV2/webAudio/subNodes/spatialWebAudioSubNode.d.ts +1 -1
  29. package/AudioV2/webAudio/subNodes/spatialWebAudioSubNode.js +1 -1
  30. package/AudioV2/webAudio/subNodes/spatialWebAudioSubNode.js.map +1 -1
  31. package/AudioV2/webAudio/subProperties/spatialWebAudioListener.js +1 -1
  32. package/AudioV2/webAudio/subProperties/spatialWebAudioListener.js.map +1 -1
  33. package/AudioV2/webAudio/webAudioStreamingSound.js +1 -1
  34. package/AudioV2/webAudio/webAudioStreamingSound.js.map +1 -1
  35. package/BakedVertexAnimation/bakedVertexAnimationManager.d.ts +1 -1
  36. package/BakedVertexAnimation/bakedVertexAnimationManager.js +1 -1
  37. package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -1
  38. package/BakedVertexAnimation/vertexAnimationBaker.js +1 -1
  39. package/BakedVertexAnimation/vertexAnimationBaker.js.map +1 -1
  40. package/Behaviors/Cameras/bouncingBehavior.js +1 -1
  41. package/Behaviors/Cameras/bouncingBehavior.js.map +1 -1
  42. package/Behaviors/Cameras/framingBehavior.d.ts +1 -1
  43. package/Behaviors/Cameras/framingBehavior.js +2 -2
  44. package/Behaviors/Cameras/framingBehavior.js.map +1 -1
  45. package/Behaviors/Cameras/interpolatingBehavior.d.ts +28 -1
  46. package/Behaviors/Cameras/interpolatingBehavior.js +64 -22
  47. package/Behaviors/Cameras/interpolatingBehavior.js.map +1 -1
  48. package/Behaviors/Meshes/attachToBoxBehavior.js +1 -1
  49. package/Behaviors/Meshes/attachToBoxBehavior.js.map +1 -1
  50. package/Behaviors/Meshes/baseSixDofDragBehavior.d.ts +3 -3
  51. package/Behaviors/Meshes/baseSixDofDragBehavior.js +4 -4
  52. package/Behaviors/Meshes/baseSixDofDragBehavior.js.map +1 -1
  53. package/Behaviors/Meshes/followBehavior.js +1 -1
  54. package/Behaviors/Meshes/followBehavior.js.map +1 -1
  55. package/Behaviors/Meshes/handConstraintBehavior.js +2 -2
  56. package/Behaviors/Meshes/handConstraintBehavior.js.map +1 -1
  57. package/Behaviors/Meshes/multiPointerScaleBehavior.js +1 -1
  58. package/Behaviors/Meshes/multiPointerScaleBehavior.js.map +1 -1
  59. package/Behaviors/Meshes/pointerDragBehavior.d.ts +3 -3
  60. package/Behaviors/Meshes/pointerDragBehavior.js +5 -5
  61. package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
  62. package/Behaviors/Meshes/sixDofDragBehavior.d.ts +1 -1
  63. package/Behaviors/Meshes/sixDofDragBehavior.js +2 -2
  64. package/Behaviors/Meshes/sixDofDragBehavior.js.map +1 -1
  65. package/Behaviors/Meshes/surfaceMagnetismBehavior.js +1 -1
  66. package/Behaviors/Meshes/surfaceMagnetismBehavior.js.map +1 -1
  67. package/Bones/boneIKController.d.ts +1 -1
  68. package/Bones/boneIKController.js +1 -1
  69. package/Bones/boneIKController.js.map +1 -1
  70. package/Bones/boneLookController.d.ts +1 -1
  71. package/Bones/boneLookController.js +1 -1
  72. package/Bones/boneLookController.js.map +1 -1
  73. package/Bones/skeleton.d.ts +2 -2
  74. package/Bones/skeleton.functions.d.ts +1 -1
  75. package/Bones/skeleton.functions.js +3 -3
  76. package/Bones/skeleton.functions.js.map +1 -1
  77. package/Bones/skeleton.js +3 -4
  78. package/Bones/skeleton.js.map +1 -1
  79. package/Buffers/buffer.align.pure.js +6 -0
  80. package/Buffers/buffer.align.pure.js.map +1 -1
  81. package/Buffers/buffer.nonFloatVertexBuffers.js +2 -1
  82. package/Buffers/buffer.nonFloatVertexBuffers.js.map +1 -1
  83. package/Buffers/buffer.pure.d.ts +8 -0
  84. package/Buffers/buffer.pure.js +31 -2
  85. package/Buffers/buffer.pure.js.map +1 -1
  86. package/Buffers/bufferUtils.js +17 -5
  87. package/Buffers/bufferUtils.js.map +1 -1
  88. package/Cameras/Inputs/BaseCameraMouseWheelInput.js +1 -1
  89. package/Cameras/Inputs/BaseCameraMouseWheelInput.js.map +1 -1
  90. package/Cameras/Inputs/BaseCameraPointersInput.js +1 -1
  91. package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
  92. package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js +1 -1
  93. package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js.map +1 -1
  94. package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js +2 -2
  95. package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js.map +1 -1
  96. package/Cameras/Inputs/flyCameraKeyboardInput.js +11 -3
  97. package/Cameras/Inputs/flyCameraKeyboardInput.js.map +1 -1
  98. package/Cameras/Inputs/flyCameraMouseInput.d.ts +2 -0
  99. package/Cameras/Inputs/flyCameraMouseInput.js +16 -4
  100. package/Cameras/Inputs/flyCameraMouseInput.js.map +1 -1
  101. package/Cameras/Inputs/followCameraKeyboardMoveInput.js +1 -1
  102. package/Cameras/Inputs/followCameraKeyboardMoveInput.js.map +1 -1
  103. package/Cameras/Inputs/followCameraMouseWheelInput.js +1 -1
  104. package/Cameras/Inputs/followCameraMouseWheelInput.js.map +1 -1
  105. package/Cameras/Inputs/freeCameraGamepadInput.js +1 -1
  106. package/Cameras/Inputs/freeCameraGamepadInput.js.map +1 -1
  107. package/Cameras/Inputs/freeCameraKeyboardMoveInput.js +27 -7
  108. package/Cameras/Inputs/freeCameraKeyboardMoveInput.js.map +1 -1
  109. package/Cameras/Inputs/freeCameraMouseInput.d.ts +14 -0
  110. package/Cameras/Inputs/freeCameraMouseInput.js +27 -5
  111. package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
  112. package/Cameras/Inputs/freeCameraMouseWheelInput.js +1 -1
  113. package/Cameras/Inputs/freeCameraMouseWheelInput.js.map +1 -1
  114. package/Cameras/Inputs/freeCameraTouchInput.js +18 -7
  115. package/Cameras/Inputs/freeCameraTouchInput.js.map +1 -1
  116. package/Cameras/Inputs/geospatialCameraKeyboardInput.js +9 -2
  117. package/Cameras/Inputs/geospatialCameraKeyboardInput.js.map +1 -1
  118. package/Cameras/Limits/geospatialLimits.d.ts +1 -1
  119. package/Cameras/Limits/geospatialLimits.js +1 -1
  120. package/Cameras/Limits/geospatialLimits.js.map +1 -1
  121. package/Cameras/RigModes/stereoscopicAnaglyphRigMode.js +2 -2
  122. package/Cameras/RigModes/stereoscopicAnaglyphRigMode.js.map +1 -1
  123. package/Cameras/RigModes/stereoscopicRigMode.d.ts +1 -1
  124. package/Cameras/RigModes/stereoscopicRigMode.js +3 -3
  125. package/Cameras/RigModes/stereoscopicRigMode.js.map +1 -1
  126. package/Cameras/RigModes/vrRigMode.js +2 -2
  127. package/Cameras/RigModes/vrRigMode.js.map +1 -1
  128. package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.d.ts +3 -3
  129. package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js +5 -5
  130. package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js.map +1 -1
  131. package/Cameras/VR/vrCameraMetrics.d.ts +1 -1
  132. package/Cameras/VR/vrCameraMetrics.js +1 -1
  133. package/Cameras/VR/vrCameraMetrics.js.map +1 -1
  134. package/Cameras/arcRotateCamera.pure.js.map +1 -1
  135. package/Cameras/cameraInputsManager.d.ts +1 -1
  136. package/Cameras/cameraInputsManager.js +1 -1
  137. package/Cameras/cameraInputsManager.js.map +1 -1
  138. package/Cameras/flyCamera.pure.d.ts +8 -0
  139. package/Cameras/flyCamera.pure.js.map +1 -1
  140. package/Cameras/freeCamera.pure.d.ts +8 -0
  141. package/Cameras/freeCamera.pure.js.map +1 -1
  142. package/Cameras/geospatialCamera.pure.d.ts +30 -7
  143. package/Cameras/geospatialCamera.pure.js +39 -14
  144. package/Cameras/geospatialCamera.pure.js.map +1 -1
  145. package/Cameras/geospatialCameraMovement.js +2 -2
  146. package/Cameras/geospatialCameraMovement.js.map +1 -1
  147. package/Cameras/index.d.ts +1 -0
  148. package/Cameras/index.js +1 -0
  149. package/Cameras/index.js.map +1 -1
  150. package/Cameras/pure.d.ts +1 -0
  151. package/Cameras/pure.js +1 -0
  152. package/Cameras/pure.js.map +1 -1
  153. package/Cameras/targetCamera.pure.d.ts +25 -0
  154. package/Cameras/targetCamera.pure.js +83 -25
  155. package/Cameras/targetCamera.pure.js.map +1 -1
  156. package/Cameras/targetCameraMovement.d.ts +56 -0
  157. package/Cameras/targetCameraMovement.js +63 -0
  158. package/Cameras/targetCameraMovement.js.map +1 -0
  159. package/Collisions/collider.d.ts +1 -1
  160. package/Collisions/collider.js +1 -1
  161. package/Collisions/collider.js.map +1 -1
  162. package/Collisions/gpuPicker.d.ts +1 -1
  163. package/Collisions/gpuPicker.js +5 -5
  164. package/Collisions/gpuPicker.js.map +1 -1
  165. package/Collisions/meshCollisionData.d.ts +1 -1
  166. package/Collisions/meshCollisionData.js +1 -1
  167. package/Collisions/meshCollisionData.js.map +1 -1
  168. package/Collisions/pickingInfo.d.ts +1 -1
  169. package/Collisions/pickingInfo.js +2 -2
  170. package/Collisions/pickingInfo.js.map +1 -1
  171. package/Culling/Octrees/octreeBlock.d.ts +1 -1
  172. package/Culling/Octrees/octreeBlock.js +1 -1
  173. package/Culling/Octrees/octreeBlock.js.map +1 -1
  174. package/Culling/boundingBox.d.ts +1 -1
  175. package/Culling/boundingBox.js +1 -1
  176. package/Culling/boundingBox.js.map +1 -1
  177. package/Culling/boundingInfo.d.ts +1 -1
  178. package/Culling/boundingInfo.js +1 -1
  179. package/Culling/boundingInfo.js.map +1 -1
  180. package/Culling/boundingSphere.d.ts +1 -1
  181. package/Culling/boundingSphere.js +1 -1
  182. package/Culling/boundingSphere.js.map +1 -1
  183. package/Culling/ray.core.d.ts +1 -1
  184. package/Culling/ray.core.js +1 -1
  185. package/Culling/ray.core.js.map +1 -1
  186. package/Debug/axesViewer.d.ts +1 -1
  187. package/Debug/axesViewer.js +3 -3
  188. package/Debug/axesViewer.js.map +1 -1
  189. package/Debug/boneAxesViewer.d.ts +1 -1
  190. package/Debug/boneAxesViewer.js +1 -1
  191. package/Debug/boneAxesViewer.js.map +1 -1
  192. package/Debug/directionalLightFrustumViewer.d.ts +1 -1
  193. package/Debug/directionalLightFrustumViewer.js +6 -6
  194. package/Debug/directionalLightFrustumViewer.js.map +1 -1
  195. package/Debug/rayHelper.d.ts +1 -1
  196. package/Debug/rayHelper.js +2 -2
  197. package/Debug/rayHelper.js.map +1 -1
  198. package/Debug/skeletonViewer.d.ts +2 -2
  199. package/Debug/skeletonViewer.js +10 -10
  200. package/Debug/skeletonViewer.js.map +1 -1
  201. package/DeviceInput/internalDeviceSourceManager.d.ts +1 -1
  202. package/DeviceInput/internalDeviceSourceManager.js +0 -1
  203. package/DeviceInput/internalDeviceSourceManager.js.map +1 -1
  204. package/DeviceInput/webDeviceInputSystem.js +1 -1
  205. package/DeviceInput/webDeviceInputSystem.js.map +1 -1
  206. package/Engines/AbstractEngine/abstractEngine.scissor.d.ts +18 -0
  207. package/Engines/AbstractEngine/abstractEngine.scissor.js +2 -0
  208. package/Engines/AbstractEngine/abstractEngine.scissor.js.map +1 -0
  209. package/Engines/Extensions/engine.views.d.ts +1 -1
  210. package/Engines/Extensions/engine.views.js +1 -1
  211. package/Engines/Extensions/engine.views.js.map +1 -1
  212. package/Engines/Native/nativeHelpers.js +4 -1
  213. package/Engines/Native/nativeHelpers.js.map +1 -1
  214. package/Engines/WebGPU/webgpuCacheRenderPipeline.d.ts +1 -1
  215. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +11 -1
  216. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  217. package/Engines/WebGPU/webgpuComputeContext.d.ts +1 -1
  218. package/Engines/WebGPU/webgpuComputeContext.js.map +1 -1
  219. package/Engines/WebGPU/webgpuTintWASM.js +1 -1
  220. package/Engines/WebGPU/webgpuTintWASM.js.map +1 -1
  221. package/Engines/abstractEngine.pure.js +2 -2
  222. package/Engines/abstractEngine.pure.js.map +1 -1
  223. package/Engines/constants.d.ts +4 -0
  224. package/Engines/constants.js +4 -0
  225. package/Engines/constants.js.map +1 -1
  226. package/Engines/engine.d.ts +1 -0
  227. package/Engines/engine.js +1 -0
  228. package/Engines/engine.js.map +1 -1
  229. package/Engines/engine.pure.d.ts +0 -12
  230. package/Engines/engine.pure.js +0 -20
  231. package/Engines/engine.pure.js.map +1 -1
  232. package/Engines/engineFactory.d.ts +2 -2
  233. package/Engines/engineFactory.js +3 -3
  234. package/Engines/engineFactory.js.map +1 -1
  235. package/Engines/nullEngine.pure.d.ts +66 -0
  236. package/Engines/nullEngine.pure.js +93 -0
  237. package/Engines/nullEngine.pure.js.map +1 -1
  238. package/Engines/pure.d.ts +1 -0
  239. package/Engines/pure.js +1 -0
  240. package/Engines/pure.js.map +1 -1
  241. package/Engines/thinEngine.scissor.d.ts +6 -0
  242. package/Engines/thinEngine.scissor.js +9 -0
  243. package/Engines/thinEngine.scissor.js.map +1 -0
  244. package/Engines/thinEngine.scissor.pure.d.ts +6 -0
  245. package/Engines/thinEngine.scissor.pure.js +24 -0
  246. package/Engines/thinEngine.scissor.pure.js.map +1 -0
  247. package/Engines/thinNativeEngine.d.ts +0 -1
  248. package/Engines/thinNativeEngine.js +0 -1
  249. package/Engines/thinNativeEngine.js.map +1 -1
  250. package/Engines/thinNativeEngine.pure.js +7 -0
  251. package/Engines/thinNativeEngine.pure.js.map +1 -1
  252. package/Engines/webgpuEngine.pure.js.map +1 -1
  253. package/Events/pointerEvents.d.ts +1 -1
  254. package/Events/pointerEvents.js +1 -1
  255. package/Events/pointerEvents.js.map +1 -1
  256. package/FlowGraph/Blocks/Data/Utils/flowGraphCodeExecutionBlock.js +1 -1
  257. package/FlowGraph/Blocks/Data/Utils/flowGraphCodeExecutionBlock.js.map +1 -1
  258. package/FlowGraph/Blocks/Data/flowGraphCachedOperationBlock.d.ts +1 -1
  259. package/FlowGraph/Blocks/Data/flowGraphCachedOperationBlock.js +1 -1
  260. package/FlowGraph/Blocks/Data/flowGraphCachedOperationBlock.js.map +1 -1
  261. package/FlowGraph/Blocks/Event/flowGraphKeyboardEventBlock.js +1 -1
  262. package/FlowGraph/Blocks/Event/flowGraphKeyboardEventBlock.js.map +1 -1
  263. package/FlowGraph/Blocks/Execution/Animation/flowGraphInterpolationBlock.pure.d.ts +1 -1
  264. package/FlowGraph/Blocks/Execution/Animation/flowGraphInterpolationBlock.pure.js +3 -3
  265. package/FlowGraph/Blocks/Execution/Animation/flowGraphInterpolationBlock.pure.js.map +1 -1
  266. package/FlowGraph/CustomTypes/flowGraphMatrix.d.ts +1 -1
  267. package/FlowGraph/CustomTypes/flowGraphMatrix.js +1 -1
  268. package/FlowGraph/CustomTypes/flowGraphMatrix.js.map +1 -1
  269. package/FlowGraph/flowGraphBlock.d.ts +1 -1
  270. package/FlowGraph/flowGraphBlock.js +1 -1
  271. package/FlowGraph/flowGraphBlock.js.map +1 -1
  272. package/FlowGraph/flowGraphExecutionBlock.d.ts +1 -1
  273. package/FlowGraph/flowGraphExecutionBlock.js +1 -1
  274. package/FlowGraph/flowGraphExecutionBlock.js.map +1 -1
  275. package/FlowGraph/flowGraphMath.d.ts +1 -1
  276. package/FlowGraph/flowGraphMath.js +1 -1
  277. package/FlowGraph/flowGraphMath.js.map +1 -1
  278. package/FlowGraph/flowGraphParser.js +1 -1
  279. package/FlowGraph/flowGraphParser.js.map +1 -1
  280. package/FlowGraph/flowGraphPathConverterComponent.d.ts +1 -1
  281. package/FlowGraph/flowGraphPathConverterComponent.js +2 -2
  282. package/FlowGraph/flowGraphPathConverterComponent.js.map +1 -1
  283. package/FlowGraph/flowGraphValidator.js.map +1 -1
  284. package/FlowGraph/serialization.js +4 -4
  285. package/FlowGraph/serialization.js.map +1 -1
  286. package/FlowGraph/utils.js.map +1 -1
  287. package/FrameGraph/Node/nodeRenderGraph.d.ts +2 -2
  288. package/FrameGraph/Node/nodeRenderGraph.js +7 -7
  289. package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
  290. package/FrameGraph/Tasks/Layers/baseLayerTask.d.ts +30 -0
  291. package/FrameGraph/Tasks/Layers/baseLayerTask.js +28 -1
  292. package/FrameGraph/Tasks/Layers/baseLayerTask.js.map +1 -1
  293. package/FrameGraph/Tasks/Misc/computeShaderTask.d.ts +2 -2
  294. package/FrameGraph/Tasks/Misc/computeShaderTask.js +2 -2
  295. package/FrameGraph/Tasks/Misc/computeShaderTask.js.map +1 -1
  296. package/FrameGraph/Tasks/Misc/lightingVolumeTask.d.ts +1 -1
  297. package/FrameGraph/Tasks/Misc/lightingVolumeTask.js +2 -2
  298. package/FrameGraph/Tasks/Misc/lightingVolumeTask.js.map +1 -1
  299. package/FrameGraph/Tasks/PostProcesses/blurTask.d.ts +7 -0
  300. package/FrameGraph/Tasks/PostProcesses/blurTask.js +8 -1
  301. package/FrameGraph/Tasks/PostProcesses/blurTask.js.map +1 -1
  302. package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.js +1 -1
  303. package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.js.map +1 -1
  304. package/FrameGraph/Tasks/PostProcesses/ssrBlurTask.js +1 -1
  305. package/FrameGraph/Tasks/PostProcesses/ssrBlurTask.js.map +1 -1
  306. package/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.d.ts +1 -1
  307. package/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.js +1 -1
  308. package/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.js.map +1 -1
  309. package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.d.ts +2 -2
  310. package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.js +3 -3
  311. package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.js.map +1 -1
  312. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.d.ts +1 -1
  313. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js +2 -2
  314. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js.map +1 -1
  315. package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +6 -0
  316. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +14 -5
  317. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
  318. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.d.ts +1 -1
  319. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.js +1 -1
  320. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.js.map +1 -1
  321. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsSpatialBlurTask.d.ts +1 -1
  322. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsSpatialBlurTask.js +1 -1
  323. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsSpatialBlurTask.js.map +1 -1
  324. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsTracingTask.d.ts +1 -1
  325. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsTracingTask.js +2 -2
  326. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsTracingTask.js.map +1 -1
  327. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsVoxelizationTask.d.ts +1 -1
  328. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsVoxelizationTask.js +2 -2
  329. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsVoxelizationTask.js.map +1 -1
  330. package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +7 -1
  331. package/FrameGraph/Tasks/Rendering/objectRendererTask.js +7 -1
  332. package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
  333. package/FrameGraph/Tasks/Texture/clearTextureTask.d.ts +1 -1
  334. package/FrameGraph/Tasks/Texture/clearTextureTask.js +1 -1
  335. package/FrameGraph/Tasks/Texture/clearTextureTask.js.map +1 -1
  336. package/FrameGraph/frameGraphRenderContext.js +1 -1
  337. package/FrameGraph/frameGraphRenderContext.js.map +1 -1
  338. package/FrameGraph/frameGraphTextureManager.d.ts +1 -1
  339. package/FrameGraph/frameGraphTextureManager.js +1 -1
  340. package/FrameGraph/frameGraphTextureManager.js.map +1 -1
  341. package/Gamepads/gamepadManager.js +1 -1
  342. package/Gamepads/gamepadManager.js.map +1 -1
  343. package/Gizmos/axisDragGizmo.d.ts +5 -5
  344. package/Gizmos/axisDragGizmo.js +6 -6
  345. package/Gizmos/axisDragGizmo.js.map +1 -1
  346. package/Gizmos/axisScaleGizmo.d.ts +4 -4
  347. package/Gizmos/axisScaleGizmo.js +6 -6
  348. package/Gizmos/axisScaleGizmo.js.map +1 -1
  349. package/Gizmos/boundingBoxGizmo.d.ts +5 -5
  350. package/Gizmos/boundingBoxGizmo.js +7 -7
  351. package/Gizmos/boundingBoxGizmo.js.map +1 -1
  352. package/Gizmos/cameraGizmo.d.ts +3 -3
  353. package/Gizmos/cameraGizmo.js +7 -7
  354. package/Gizmos/cameraGizmo.js.map +1 -1
  355. package/Gizmos/gizmo.d.ts +2 -2
  356. package/Gizmos/gizmo.js +3 -3
  357. package/Gizmos/gizmo.js.map +1 -1
  358. package/Gizmos/gizmoManager.d.ts +2 -2
  359. package/Gizmos/gizmoManager.js +2 -2
  360. package/Gizmos/gizmoManager.js.map +1 -1
  361. package/Gizmos/lightGizmo.d.ts +4 -4
  362. package/Gizmos/lightGizmo.js +11 -11
  363. package/Gizmos/lightGizmo.js.map +1 -1
  364. package/Gizmos/planeDragGizmo.d.ts +4 -4
  365. package/Gizmos/planeDragGizmo.js +5 -5
  366. package/Gizmos/planeDragGizmo.js.map +1 -1
  367. package/Gizmos/positionGizmo.d.ts +1 -1
  368. package/Gizmos/positionGizmo.js +2 -2
  369. package/Gizmos/positionGizmo.js.map +1 -1
  370. package/Gizmos/rotationGizmo.d.ts +3 -3
  371. package/Gizmos/rotationGizmo.js +3 -3
  372. package/Gizmos/rotationGizmo.js.map +1 -1
  373. package/Gizmos/scaleGizmo.d.ts +2 -2
  374. package/Gizmos/scaleGizmo.js +4 -4
  375. package/Gizmos/scaleGizmo.js.map +1 -1
  376. package/Gizmos/spatialAudioGizmo.d.ts +2 -2
  377. package/Gizmos/spatialAudioGizmo.js +6 -6
  378. package/Gizmos/spatialAudioGizmo.js.map +1 -1
  379. package/Helpers/environmentHelper.d.ts +6 -6
  380. package/Helpers/environmentHelper.js +12 -12
  381. package/Helpers/environmentHelper.js.map +1 -1
  382. package/Helpers/materialConversionHelper.d.ts +1 -1
  383. package/Helpers/materialConversionHelper.js +1 -1
  384. package/Helpers/materialConversionHelper.js.map +1 -1
  385. package/Helpers/photoDome.d.ts +1 -1
  386. package/Helpers/photoDome.js +1 -1
  387. package/Helpers/photoDome.js.map +1 -1
  388. package/Helpers/textureDome.d.ts +4 -4
  389. package/Helpers/textureDome.js +6 -6
  390. package/Helpers/textureDome.js.map +1 -1
  391. package/Helpers/videoDome.d.ts +1 -1
  392. package/Helpers/videoDome.js +2 -2
  393. package/Helpers/videoDome.js.map +1 -1
  394. package/Inputs/scene.inputManager.d.ts +1 -1
  395. package/Inputs/scene.inputManager.js +1 -1
  396. package/Inputs/scene.inputManager.js.map +1 -1
  397. package/Instrumentation/sceneInstrumentation.js +1 -1
  398. package/Instrumentation/sceneInstrumentation.js.map +1 -1
  399. package/Layers/effectLayer.d.ts +1 -1
  400. package/Layers/effectLayer.js +3 -3
  401. package/Layers/effectLayer.js.map +1 -1
  402. package/Layers/layer.d.ts +2 -2
  403. package/Layers/layer.js +4 -4
  404. package/Layers/layer.js.map +1 -1
  405. package/Layers/thinEffectLayer.d.ts +2 -2
  406. package/Layers/thinEffectLayer.js +3 -3
  407. package/Layers/thinEffectLayer.js.map +1 -1
  408. package/Layers/thinGlowLayer.d.ts +1 -1
  409. package/Layers/thinGlowLayer.js +3 -3
  410. package/Layers/thinGlowLayer.js.map +1 -1
  411. package/Layers/thinHighlightLayer.d.ts +1 -1
  412. package/Layers/thinHighlightLayer.js +3 -3
  413. package/Layers/thinHighlightLayer.js.map +1 -1
  414. package/Layers/thinSelectionOutlineLayer.d.ts +1 -1
  415. package/Layers/thinSelectionOutlineLayer.js +3 -3
  416. package/Layers/thinSelectionOutlineLayer.js.map +1 -1
  417. package/Legacy/legacy.js +12 -1
  418. package/Legacy/legacy.js.map +1 -1
  419. package/LensFlares/lensFlare.d.ts +2 -2
  420. package/LensFlares/lensFlare.js +3 -3
  421. package/LensFlares/lensFlare.js.map +1 -1
  422. package/LensFlares/lensFlareSystem.d.ts +1 -1
  423. package/LensFlares/lensFlareSystem.js +6 -6
  424. package/LensFlares/lensFlareSystem.js.map +1 -1
  425. package/Lights/LTC/ltcTextureTool.js +1 -1
  426. package/Lights/LTC/ltcTextureTool.js.map +1 -1
  427. package/Lights/Shadows/cascadedShadowGenerator.d.ts +1 -285
  428. package/Lights/Shadows/cascadedShadowGenerator.js +3 -857
  429. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  430. package/Lights/Shadows/cascadedShadowGenerator.pure.d.ts +290 -0
  431. package/Lights/Shadows/cascadedShadowGenerator.pure.js +868 -0
  432. package/Lights/Shadows/cascadedShadowGenerator.pure.js.map +1 -0
  433. package/Lights/Shadows/pure.d.ts +1 -0
  434. package/Lights/Shadows/pure.js +1 -0
  435. package/Lights/Shadows/pure.js.map +1 -1
  436. package/Lights/Shadows/shadowGenerator.d.ts +3 -3
  437. package/Lights/Shadows/shadowGenerator.js +7 -7
  438. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  439. package/Lights/areaLight.d.ts +1 -1
  440. package/Lights/areaLight.js +0 -1
  441. package/Lights/areaLight.js.map +1 -1
  442. package/Lights/light.d.ts +2 -2
  443. package/Lights/light.js +2 -2
  444. package/Lights/light.js.map +1 -1
  445. package/Lights/shadowLight.d.ts +1 -1
  446. package/Lights/shadowLight.js +1 -1
  447. package/Lights/shadowLight.js.map +1 -1
  448. package/Loading/sceneLoader.d.ts +2 -2
  449. package/Loading/sceneLoader.js +3 -3
  450. package/Loading/sceneLoader.js.map +1 -1
  451. package/Materials/GreasedLine/greasedLineMaterialDefaults.d.ts +1 -1
  452. package/Materials/GreasedLine/greasedLineMaterialDefaults.js +1 -1
  453. package/Materials/GreasedLine/greasedLineMaterialDefaults.js.map +1 -1
  454. package/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.js +10 -3
  455. package/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.js.map +1 -1
  456. package/Materials/GreasedLine/greasedLineSimpleMaterial.d.ts +3 -3
  457. package/Materials/GreasedLine/greasedLineSimpleMaterial.js +3 -3
  458. package/Materials/GreasedLine/greasedLineSimpleMaterial.js.map +1 -1
  459. package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js +6 -6
  460. package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js.map +1 -1
  461. package/Materials/Node/nodeMaterial.pure.d.ts +12 -0
  462. package/Materials/Node/nodeMaterial.pure.js +68 -13
  463. package/Materials/Node/nodeMaterial.pure.js.map +1 -1
  464. package/Materials/Node/nodeMaterialDefault.js +14 -14
  465. package/Materials/Node/nodeMaterialDefault.js.map +1 -1
  466. package/Materials/PBR/openpbrMaterial.pure.js +19 -4
  467. package/Materials/PBR/openpbrMaterial.pure.js.map +1 -1
  468. package/Materials/PBR/pbrAnisotropicConfiguration.d.ts +40 -2
  469. package/Materials/PBR/pbrAnisotropicConfiguration.js +41 -3
  470. package/Materials/PBR/pbrAnisotropicConfiguration.js.map +1 -1
  471. package/Materials/PBR/pbrBRDFConfiguration.d.ts +5 -1
  472. package/Materials/PBR/pbrBRDFConfiguration.js +5 -1
  473. package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
  474. package/Materials/PBR/pbrBaseSimpleMaterial.d.ts +2 -2
  475. package/Materials/PBR/pbrBaseSimpleMaterial.js +2 -2
  476. package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
  477. package/Materials/PBR/pbrClearCoatConfiguration.d.ts +42 -2
  478. package/Materials/PBR/pbrClearCoatConfiguration.js +42 -2
  479. package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
  480. package/Materials/PBR/pbrIridescenceConfiguration.d.ts +38 -1
  481. package/Materials/PBR/pbrIridescenceConfiguration.js +38 -1
  482. package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -1
  483. package/Materials/PBR/pbrSheenConfiguration.d.ts +41 -2
  484. package/Materials/PBR/pbrSheenConfiguration.js +41 -2
  485. package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
  486. package/Materials/PBR/pbrSubSurfaceConfiguration.d.ts +41 -2
  487. package/Materials/PBR/pbrSubSurfaceConfiguration.js +42 -3
  488. package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
  489. package/Materials/Textures/Filtering/hdrFiltering.js +1 -1
  490. package/Materials/Textures/Filtering/hdrFiltering.js.map +1 -1
  491. package/Materials/Textures/Filtering/hdrIrradianceFiltering.d.ts +1 -1
  492. package/Materials/Textures/Filtering/hdrIrradianceFiltering.js +2 -2
  493. package/Materials/Textures/Filtering/hdrIrradianceFiltering.js.map +1 -1
  494. package/Materials/Textures/Loaders/EXR/exrLoader.core.d.ts +1 -1
  495. package/Materials/Textures/Loaders/EXR/exrLoader.core.js +5 -109
  496. package/Materials/Textures/Loaders/EXR/exrLoader.core.js.map +1 -1
  497. package/Materials/Textures/Loaders/EXR/exrLoader.decoder.js +1 -1
  498. package/Materials/Textures/Loaders/EXR/exrLoader.decoder.js.map +1 -1
  499. package/Materials/Textures/Loaders/basisTextureLoader.js +2 -2
  500. package/Materials/Textures/Loaders/basisTextureLoader.js.map +1 -1
  501. package/Materials/Textures/Loaders/ddsTextureLoader.js +1 -1
  502. package/Materials/Textures/Loaders/ddsTextureLoader.js.map +1 -1
  503. package/Materials/Textures/Loaders/envTextureLoader.js +3 -1
  504. package/Materials/Textures/Loaders/envTextureLoader.js.map +1 -1
  505. package/Materials/Textures/Loaders/ktxTextureLoader.js +11 -2
  506. package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
  507. package/Materials/Textures/MultiviewRenderTarget.d.ts +1 -1
  508. package/Materials/Textures/MultiviewRenderTarget.js +1 -1
  509. package/Materials/Textures/MultiviewRenderTarget.js.map +1 -1
  510. package/Materials/Textures/Packer/packer.d.ts +1 -1
  511. package/Materials/Textures/Packer/packer.js +6 -6
  512. package/Materials/Textures/Packer/packer.js.map +1 -1
  513. package/Materials/Textures/Procedurals/customProceduralTexture.d.ts +2 -2
  514. package/Materials/Textures/Procedurals/customProceduralTexture.js +4 -4
  515. package/Materials/Textures/Procedurals/customProceduralTexture.js.map +1 -1
  516. package/Materials/Textures/Procedurals/proceduralTexture.pure.js +4 -1
  517. package/Materials/Textures/Procedurals/proceduralTexture.pure.js.map +1 -1
  518. package/Materials/Textures/Procedurals/proceduralTextureSceneComponent.js +1 -1
  519. package/Materials/Textures/Procedurals/proceduralTextureSceneComponent.js.map +1 -1
  520. package/Materials/Textures/prePassRenderTarget.d.ts +1 -1
  521. package/Materials/Textures/prePassRenderTarget.js +1 -1
  522. package/Materials/Textures/prePassRenderTarget.js.map +1 -1
  523. package/Materials/Textures/rawCubeTexture.d.ts +1 -1
  524. package/Materials/Textures/rawCubeTexture.js +2 -2
  525. package/Materials/Textures/rawCubeTexture.js.map +1 -1
  526. package/Materials/Textures/rawTexture.d.ts +1 -1
  527. package/Materials/Textures/rawTexture.js +1 -1
  528. package/Materials/Textures/rawTexture.js.map +1 -1
  529. package/Materials/Textures/rawTexture2DArray.d.ts +1 -1
  530. package/Materials/Textures/rawTexture2DArray.js +1 -1
  531. package/Materials/Textures/rawTexture2DArray.js.map +1 -1
  532. package/Materials/Textures/rawTexture3D.d.ts +1 -1
  533. package/Materials/Textures/rawTexture3D.js +1 -1
  534. package/Materials/Textures/rawTexture3D.js.map +1 -1
  535. package/Materials/Textures/refractionTexture.d.ts +1 -1
  536. package/Materials/Textures/refractionTexture.js +1 -1
  537. package/Materials/Textures/refractionTexture.js.map +1 -1
  538. package/Materials/Textures/textureMerger.d.ts +1 -1
  539. package/Materials/Textures/textureMerger.js +1 -1
  540. package/Materials/Textures/textureMerger.js.map +1 -1
  541. package/Materials/Textures/textureProcessor.d.ts +1 -1
  542. package/Materials/Textures/textureProcessor.js +2 -2
  543. package/Materials/Textures/textureProcessor.js.map +1 -1
  544. package/Materials/Textures/thinRenderTargetTexture.d.ts +4 -4
  545. package/Materials/Textures/thinRenderTargetTexture.js +2 -2
  546. package/Materials/Textures/thinRenderTargetTexture.js.map +1 -1
  547. package/Materials/clipPlaneMaterialHelper.js +1 -1
  548. package/Materials/clipPlaneMaterialHelper.js.map +1 -1
  549. package/Materials/effectRenderer.pure.js +4 -2
  550. package/Materials/effectRenderer.pure.js.map +1 -1
  551. package/Materials/floatingOriginMatrixOverrides.d.ts +1 -1
  552. package/Materials/floatingOriginMatrixOverrides.js +1 -1
  553. package/Materials/floatingOriginMatrixOverrides.js.map +1 -1
  554. package/Materials/material.detailMapConfiguration.d.ts +39 -1
  555. package/Materials/material.detailMapConfiguration.js +39 -1
  556. package/Materials/material.detailMapConfiguration.js.map +1 -1
  557. package/Materials/materialHelper.functions.js +45 -1
  558. package/Materials/materialHelper.functions.js.map +1 -1
  559. package/Materials/materialHelper.geometryrendering.d.ts +1 -1
  560. package/Materials/materialHelper.geometryrendering.js +1 -1
  561. package/Materials/materialHelper.geometryrendering.js.map +1 -1
  562. package/Materials/materialPluginFactoryExport.js +2 -2
  563. package/Materials/materialPluginFactoryExport.js.map +1 -1
  564. package/Materials/pushMaterial.d.ts +7 -1
  565. package/Materials/pushMaterial.js +7 -1
  566. package/Materials/pushMaterial.js.map +1 -1
  567. package/Materials/uniformBuffer.js +1 -1
  568. package/Materials/uniformBuffer.js.map +1 -1
  569. package/Maths/math.axis.d.ts +1 -1
  570. package/Maths/math.axis.js +1 -1
  571. package/Maths/math.axis.js.map +1 -1
  572. package/Maths/math.d.ts +2 -2
  573. package/Maths/math.functions.d.ts +1 -1
  574. package/Maths/math.functions.js +1 -1
  575. package/Maths/math.functions.js.map +1 -1
  576. package/Maths/math.isovector.d.ts +1 -1
  577. package/Maths/math.isovector.js +1 -1
  578. package/Maths/math.isovector.js.map +1 -1
  579. package/Maths/math.js +2 -2
  580. package/Maths/math.js.map +1 -1
  581. package/Maths/math.path.d.ts +1 -1
  582. package/Maths/math.path.js +1 -1
  583. package/Maths/math.path.js.map +1 -1
  584. package/Maths/math.plane.d.ts +1 -1
  585. package/Maths/math.plane.js +1 -1
  586. package/Maths/math.plane.js.map +1 -1
  587. package/Maths/math.polar.d.ts +1 -1
  588. package/Maths/math.polar.js +1 -1
  589. package/Maths/math.polar.js.map +1 -1
  590. package/Maths/math.vertexFormat.d.ts +1 -1
  591. package/Maths/math.vertexFormat.js +1 -1
  592. package/Maths/math.vertexFormat.js.map +1 -1
  593. package/Maths/pure.d.ts +1 -0
  594. package/Maths/pure.js +1 -0
  595. package/Maths/pure.js.map +1 -1
  596. package/Meshes/Builders/geodesicBuilder.js +1 -1
  597. package/Meshes/Builders/geodesicBuilder.js.map +1 -1
  598. package/Meshes/Builders/goldbergBuilder.d.ts +1 -1
  599. package/Meshes/Builders/goldbergBuilder.js +4 -4
  600. package/Meshes/Builders/goldbergBuilder.js.map +1 -1
  601. package/Meshes/Builders/greasedLineBuilder.d.ts +4 -4
  602. package/Meshes/Builders/greasedLineBuilder.js +5 -5
  603. package/Meshes/Builders/greasedLineBuilder.js.map +1 -1
  604. package/Meshes/Builders/textBuilder.d.ts +2 -2
  605. package/Meshes/Builders/textBuilder.js +4 -4
  606. package/Meshes/Builders/textBuilder.js.map +1 -1
  607. package/Meshes/Builders/tiledBoxBuilder.d.ts +3 -3
  608. package/Meshes/Builders/tiledBoxBuilder.js +3 -3
  609. package/Meshes/Builders/tiledBoxBuilder.js.map +1 -1
  610. package/Meshes/Builders/tiledPlaneBuilder.d.ts +1 -1
  611. package/Meshes/Builders/tiledPlaneBuilder.js +1 -1
  612. package/Meshes/Builders/tiledPlaneBuilder.js.map +1 -1
  613. package/Meshes/Compression/dracoCodec.js +1 -1
  614. package/Meshes/Compression/dracoCodec.js.map +1 -1
  615. package/Meshes/Compression/dracoDecoder.js +1 -1
  616. package/Meshes/Compression/dracoDecoder.js.map +1 -1
  617. package/Meshes/Compression/dracoEncoder.d.ts +1 -1
  618. package/Meshes/Compression/dracoEncoder.js +2 -2
  619. package/Meshes/Compression/dracoEncoder.js.map +1 -1
  620. package/Meshes/Compression/meshoptCompression.js +1 -1
  621. package/Meshes/Compression/meshoptCompression.js.map +1 -1
  622. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js +18 -8
  623. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js.map +1 -1
  624. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.d.ts +50 -1
  625. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +263 -107
  626. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
  627. package/Meshes/GaussianSplatting/gaussianSplattingSortWorker.d.ts +37 -0
  628. package/Meshes/GaussianSplatting/gaussianSplattingSortWorker.js +160 -0
  629. package/Meshes/GaussianSplatting/gaussianSplattingSortWorker.js.map +1 -0
  630. package/Meshes/GreasedLine/greasedLineBaseMesh.d.ts +2 -2
  631. package/Meshes/GreasedLine/greasedLineBaseMesh.js +3 -3
  632. package/Meshes/GreasedLine/greasedLineBaseMesh.js.map +1 -1
  633. package/Meshes/Node/nodeGeometry.d.ts +2 -2
  634. package/Meshes/Node/nodeGeometry.js +4 -4
  635. package/Meshes/Node/nodeGeometry.js.map +1 -1
  636. package/Meshes/Node/nodeGeometryBuildState.d.ts +1 -1
  637. package/Meshes/Node/nodeGeometryBuildState.js +1 -1
  638. package/Meshes/Node/nodeGeometryBuildState.js.map +1 -1
  639. package/Meshes/abstractMesh.hotSpot.d.ts +1 -1
  640. package/Meshes/abstractMesh.hotSpot.js +2 -2
  641. package/Meshes/abstractMesh.hotSpot.js.map +1 -1
  642. package/Meshes/abstractMesh.pure.js +2 -13
  643. package/Meshes/abstractMesh.pure.js.map +1 -1
  644. package/Meshes/buffer.d.ts +1 -1
  645. package/Meshes/buffer.js +1 -1
  646. package/Meshes/buffer.js.map +1 -1
  647. package/Meshes/csg.d.ts +3 -3
  648. package/Meshes/csg.js +4 -4
  649. package/Meshes/csg.js.map +1 -1
  650. package/Meshes/csg2.d.ts +1 -1
  651. package/Meshes/csg2.js +38 -11
  652. package/Meshes/csg2.js.map +1 -1
  653. package/Meshes/geodesicMesh.d.ts +1 -1
  654. package/Meshes/geodesicMesh.js +1 -1
  655. package/Meshes/geodesicMesh.js.map +1 -1
  656. package/Meshes/geometry.d.ts +2 -2
  657. package/Meshes/geometry.js +34 -19
  658. package/Meshes/geometry.js.map +1 -1
  659. package/Meshes/lattice.d.ts +1 -1
  660. package/Meshes/lattice.js +1 -1
  661. package/Meshes/lattice.js.map +1 -1
  662. package/Meshes/lattice.material.d.ts +1 -1
  663. package/Meshes/lattice.material.js +1 -1
  664. package/Meshes/lattice.material.js.map +1 -1
  665. package/Meshes/mesh.pure.js +26 -14
  666. package/Meshes/mesh.pure.js.map +1 -1
  667. package/Meshes/mesh.vertexData.d.ts +2 -2
  668. package/Meshes/mesh.vertexData.js +3 -4
  669. package/Meshes/mesh.vertexData.js.map +1 -1
  670. package/Meshes/mesh.vertexData.subdivide.js +1 -1
  671. package/Meshes/mesh.vertexData.subdivide.js.map +1 -1
  672. package/Meshes/meshBuilder.d.ts +18 -18
  673. package/Meshes/meshBuilder.js +18 -18
  674. package/Meshes/meshBuilder.js.map +1 -1
  675. package/Meshes/meshSimplification.d.ts +1 -1
  676. package/Meshes/meshSimplification.js +4 -4
  677. package/Meshes/meshSimplification.js.map +1 -1
  678. package/Meshes/meshUVSpaceRenderer.d.ts +1 -1
  679. package/Meshes/meshUVSpaceRenderer.js +0 -1
  680. package/Meshes/meshUVSpaceRenderer.js.map +1 -1
  681. package/Meshes/meshUtils.d.ts +1 -1
  682. package/Meshes/meshUtils.js +2 -2
  683. package/Meshes/meshUtils.js.map +1 -1
  684. package/Meshes/polygonMesh.d.ts +2 -2
  685. package/Meshes/polygonMesh.js +3 -3
  686. package/Meshes/polygonMesh.js.map +1 -1
  687. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js +2 -2
  688. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js.map +1 -1
  689. package/Misc/HighDynamicRange/panoramaToCubemap.js +1 -1
  690. package/Misc/HighDynamicRange/panoramaToCubemap.js.map +1 -1
  691. package/Misc/PerformanceViewer/performanceViewerCollector.js +1 -1
  692. package/Misc/PerformanceViewer/performanceViewerCollector.js.map +1 -1
  693. package/Misc/areaLightsTextureTools.d.ts +1 -1
  694. package/Misc/areaLightsTextureTools.js +3 -3
  695. package/Misc/areaLightsTextureTools.js.map +1 -1
  696. package/Misc/assetsManager.d.ts +4 -4
  697. package/Misc/assetsManager.js +5 -5
  698. package/Misc/assetsManager.js.map +1 -1
  699. package/Misc/basisWorker.js +1 -1
  700. package/Misc/basisWorker.js.map +1 -1
  701. package/Misc/brdfTextureTools.js +1 -1
  702. package/Misc/brdfTextureTools.js.map +1 -1
  703. package/Misc/copyTextureToTexture.d.ts +1 -1
  704. package/Misc/copyTextureToTexture.js +1 -1
  705. package/Misc/copyTextureToTexture.js.map +1 -1
  706. package/Misc/decorators.serialization.js +2 -2
  707. package/Misc/decorators.serialization.js.map +1 -1
  708. package/Misc/depthReducer.d.ts +2 -2
  709. package/Misc/depthReducer.js +2 -2
  710. package/Misc/depthReducer.js.map +1 -1
  711. package/Misc/gradients.d.ts +1 -1
  712. package/Misc/gradients.js +1 -1
  713. package/Misc/gradients.js.map +1 -1
  714. package/Misc/greasedLineTools.d.ts +1 -1
  715. package/Misc/greasedLineTools.js +3 -3
  716. package/Misc/greasedLineTools.js.map +1 -1
  717. package/Misc/halfFloat.d.ts +17 -0
  718. package/Misc/halfFloat.js +131 -0
  719. package/Misc/halfFloat.js.map +1 -0
  720. package/Misc/khronosTextureContainer2.js +1 -1
  721. package/Misc/khronosTextureContainer2.js.map +1 -1
  722. package/Misc/meshExploder.js +1 -1
  723. package/Misc/meshExploder.js.map +1 -1
  724. package/Misc/pivotTools.js +1 -1
  725. package/Misc/pivotTools.js.map +1 -1
  726. package/Misc/rgbdTextureTools.js +1 -1
  727. package/Misc/rgbdTextureTools.js.map +1 -1
  728. package/Misc/sceneOptimizer.js +1 -1
  729. package/Misc/sceneOptimizer.js.map +1 -1
  730. package/Misc/sceneRecorder.js +7 -7
  731. package/Misc/sceneRecorder.js.map +1 -1
  732. package/Misc/sceneSerializer.js +3 -3
  733. package/Misc/sceneSerializer.js.map +1 -1
  734. package/Misc/snapshotRenderingHelper.js +1 -1
  735. package/Misc/snapshotRenderingHelper.js.map +1 -1
  736. package/Misc/textureTools.d.ts +3 -13
  737. package/Misc/textureTools.js +6 -64
  738. package/Misc/textureTools.js.map +1 -1
  739. package/Misc/thinMinMaxReducer.d.ts +1 -1
  740. package/Misc/thinMinMaxReducer.js +1 -1
  741. package/Misc/thinMinMaxReducer.js.map +1 -1
  742. package/Misc/tools.internals.js +1 -1
  743. package/Misc/tools.internals.js.map +1 -1
  744. package/Misc/tools.pure.js +1 -1
  745. package/Misc/tools.pure.js.map +1 -1
  746. package/Misc/trajectoryClassifier.d.ts +1 -1
  747. package/Misc/trajectoryClassifier.js +1 -1
  748. package/Misc/trajectoryClassifier.js.map +1 -1
  749. package/Misc/videoRecorder.js +1 -1
  750. package/Misc/videoRecorder.js.map +1 -1
  751. package/Misc/virtualJoystick.d.ts +1 -1
  752. package/Misc/virtualJoystick.js +1 -1
  753. package/Misc/virtualJoystick.js.map +1 -1
  754. package/Morph/morphTarget.js +1 -1
  755. package/Morph/morphTarget.js.map +1 -1
  756. package/Navigation/Plugins/recastJSPlugin.d.ts +1 -1
  757. package/Navigation/Plugins/recastJSPlugin.js +2 -2
  758. package/Navigation/Plugins/recastJSPlugin.js.map +1 -1
  759. package/Particles/EmitterTypes/boxParticleEmitter.d.ts +1 -1
  760. package/Particles/EmitterTypes/boxParticleEmitter.js +1 -1
  761. package/Particles/EmitterTypes/boxParticleEmitter.js.map +1 -1
  762. package/Particles/EmitterTypes/coneParticleEmitter.d.ts +1 -1
  763. package/Particles/EmitterTypes/coneParticleEmitter.js +1 -1
  764. package/Particles/EmitterTypes/coneParticleEmitter.js.map +1 -1
  765. package/Particles/EmitterTypes/customParticleEmitter.d.ts +1 -1
  766. package/Particles/EmitterTypes/customParticleEmitter.js +1 -1
  767. package/Particles/EmitterTypes/customParticleEmitter.js.map +1 -1
  768. package/Particles/EmitterTypes/cylinderParticleEmitter.d.ts +1 -1
  769. package/Particles/EmitterTypes/cylinderParticleEmitter.js +1 -1
  770. package/Particles/EmitterTypes/cylinderParticleEmitter.js.map +1 -1
  771. package/Particles/EmitterTypes/hemisphericParticleEmitter.d.ts +1 -1
  772. package/Particles/EmitterTypes/hemisphericParticleEmitter.js +1 -1
  773. package/Particles/EmitterTypes/hemisphericParticleEmitter.js.map +1 -1
  774. package/Particles/EmitterTypes/meshParticleEmitter.d.ts +1 -1
  775. package/Particles/EmitterTypes/meshParticleEmitter.js +2 -2
  776. package/Particles/EmitterTypes/meshParticleEmitter.js.map +1 -1
  777. package/Particles/EmitterTypes/pointParticleEmitter.d.ts +1 -1
  778. package/Particles/EmitterTypes/pointParticleEmitter.js +1 -1
  779. package/Particles/EmitterTypes/pointParticleEmitter.js.map +1 -1
  780. package/Particles/EmitterTypes/sphereParticleEmitter.d.ts +1 -1
  781. package/Particles/EmitterTypes/sphereParticleEmitter.js +1 -1
  782. package/Particles/EmitterTypes/sphereParticleEmitter.js.map +1 -1
  783. package/Particles/Node/nodeParticleBuildState.d.ts +4 -4
  784. package/Particles/Node/nodeParticleBuildState.js +2 -2
  785. package/Particles/Node/nodeParticleBuildState.js.map +1 -1
  786. package/Particles/Node/nodeParticleSystemSet.d.ts +2 -2
  787. package/Particles/Node/nodeParticleSystemSet.helper.js +31 -31
  788. package/Particles/Node/nodeParticleSystemSet.helper.js.map +1 -1
  789. package/Particles/Node/nodeParticleSystemSet.js +8 -8
  790. package/Particles/Node/nodeParticleSystemSet.js.map +1 -1
  791. package/Particles/attractor.d.ts +1 -1
  792. package/Particles/attractor.js +1 -1
  793. package/Particles/attractor.js.map +1 -1
  794. package/Particles/flowMap.d.ts +7 -1
  795. package/Particles/flowMap.js +7 -1
  796. package/Particles/flowMap.js.map +1 -1
  797. package/Particles/particle.d.ts +2 -2
  798. package/Particles/particle.js +2 -2
  799. package/Particles/particle.js.map +1 -1
  800. package/Particles/particleHelper.js +5 -5
  801. package/Particles/particleHelper.js.map +1 -1
  802. package/Particles/particleSystem.functions.d.ts +1 -1
  803. package/Particles/particleSystem.functions.js +1 -1
  804. package/Particles/particleSystem.functions.js.map +1 -1
  805. package/Particles/particleSystemSet.d.ts +1 -1
  806. package/Particles/particleSystemSet.js +5 -5
  807. package/Particles/particleSystemSet.js.map +1 -1
  808. package/Particles/pointsCloudSystem.d.ts +1 -1
  809. package/Particles/pointsCloudSystem.js +6 -6
  810. package/Particles/pointsCloudSystem.js.map +1 -1
  811. package/Particles/solidParticle.d.ts +2 -2
  812. package/Particles/solidParticle.js +3 -3
  813. package/Particles/solidParticle.js.map +1 -1
  814. package/Particles/solidParticleSystem.d.ts +4 -4
  815. package/Particles/solidParticleSystem.js +7 -7
  816. package/Particles/solidParticleSystem.js.map +1 -1
  817. package/Particles/subEmitter.js +1 -1
  818. package/Particles/subEmitter.js.map +1 -1
  819. package/Particles/thinParticleSystem.function.js +2 -2
  820. package/Particles/thinParticleSystem.function.js.map +1 -1
  821. package/Physics/Plugins/cannonJSPlugin.d.ts +1 -1
  822. package/Physics/Plugins/cannonJSPlugin.js +1 -1
  823. package/Physics/Plugins/cannonJSPlugin.js.map +1 -1
  824. package/Physics/castingResult.d.ts +1 -1
  825. package/Physics/castingResult.js +1 -1
  826. package/Physics/castingResult.js.map +1 -1
  827. package/Physics/physicsHelper.d.ts +1 -1
  828. package/Physics/physicsHelper.js +4 -4
  829. package/Physics/physicsHelper.js.map +1 -1
  830. package/Physics/physicsImpostor.d.ts +1 -1
  831. package/Physics/physicsImpostor.js +1 -1
  832. package/Physics/physicsImpostor.js.map +1 -1
  833. package/Physics/physicsRaycastResult.d.ts +1 -1
  834. package/Physics/physicsRaycastResult.js +1 -1
  835. package/Physics/physicsRaycastResult.js.map +1 -1
  836. package/Physics/v1/Plugins/ammoJSPlugin.d.ts +2 -2
  837. package/Physics/v1/Plugins/ammoJSPlugin.js +5 -5
  838. package/Physics/v1/Plugins/ammoJSPlugin.js.map +1 -1
  839. package/Physics/v1/Plugins/oimoJSPlugin.d.ts +2 -2
  840. package/Physics/v1/Plugins/oimoJSPlugin.js +2 -2
  841. package/Physics/v1/Plugins/oimoJSPlugin.js.map +1 -1
  842. package/Physics/v1/physicsEngine.d.ts +1 -1
  843. package/Physics/v1/physicsEngine.js +1 -1
  844. package/Physics/v1/physicsEngine.js.map +1 -1
  845. package/Physics/v2/Plugins/havokPlugin.d.ts +14 -2
  846. package/Physics/v2/Plugins/havokPlugin.js +45 -7
  847. package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
  848. package/Physics/v2/characterController.d.ts +1 -1
  849. package/Physics/v2/characterController.js +2 -2
  850. package/Physics/v2/characterController.js.map +1 -1
  851. package/Physics/v2/physicsAggregate.d.ts +3 -3
  852. package/Physics/v2/physicsAggregate.js +10 -6
  853. package/Physics/v2/physicsAggregate.js.map +1 -1
  854. package/Physics/v2/physicsBody.d.ts +1 -1
  855. package/Physics/v2/physicsBody.js +1 -1
  856. package/Physics/v2/physicsBody.js.map +1 -1
  857. package/Physics/v2/physicsEngine.d.ts +1 -1
  858. package/Physics/v2/physicsEngine.js +1 -1
  859. package/Physics/v2/physicsEngine.js.map +1 -1
  860. package/Physics/v2/physicsShape.d.ts +1 -1
  861. package/Physics/v2/physicsShape.js +1 -1
  862. package/Physics/v2/physicsShape.js.map +1 -1
  863. package/Physics/v2/ragdoll.d.ts +2 -2
  864. package/Physics/v2/ragdoll.js +2 -2
  865. package/Physics/v2/ragdoll.js.map +1 -1
  866. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.pure.d.ts +1 -0
  867. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.pure.js +8 -6
  868. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.pure.js.map +1 -1
  869. package/PostProcesses/RenderPipeline/Pipelines/thinSSRRenderingPipeline.js +1 -1
  870. package/PostProcesses/RenderPipeline/Pipelines/thinSSRRenderingPipeline.js.map +1 -1
  871. package/PostProcesses/RenderPipeline/postProcessRenderEffect.js +1 -1
  872. package/PostProcesses/RenderPipeline/postProcessRenderEffect.js.map +1 -1
  873. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js +3 -2
  874. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js.map +1 -1
  875. package/PostProcesses/bloomEffect.d.ts +1 -1
  876. package/PostProcesses/bloomEffect.js +4 -4
  877. package/PostProcesses/bloomEffect.js.map +1 -1
  878. package/PostProcesses/depthOfFieldEffect.d.ts +1 -1
  879. package/PostProcesses/depthOfFieldEffect.js +3 -3
  880. package/PostProcesses/depthOfFieldEffect.js.map +1 -1
  881. package/PostProcesses/depthOfFieldMergePostProcess.d.ts +1 -1
  882. package/PostProcesses/depthOfFieldMergePostProcess.js +1 -1
  883. package/PostProcesses/depthOfFieldMergePostProcess.js.map +1 -1
  884. package/PostProcesses/highlightsPostProcess.d.ts +1 -1
  885. package/PostProcesses/highlightsPostProcess.js +1 -1
  886. package/PostProcesses/highlightsPostProcess.js.map +1 -1
  887. package/PostProcesses/imageProcessingPostProcess.d.ts +1 -1
  888. package/PostProcesses/imageProcessingPostProcess.js +1 -1
  889. package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
  890. package/PostProcesses/postProcessManager.d.ts +3 -0
  891. package/PostProcesses/postProcessManager.js +4 -1
  892. package/PostProcesses/postProcessManager.js.map +1 -1
  893. package/PostProcesses/subSurfaceScatteringPostProcess.pure.d.ts +1 -0
  894. package/PostProcesses/subSurfaceScatteringPostProcess.pure.js +10 -0
  895. package/PostProcesses/subSurfaceScatteringPostProcess.pure.js.map +1 -1
  896. package/PostProcesses/thinAnaglyphPostProcess.d.ts +1 -1
  897. package/PostProcesses/thinAnaglyphPostProcess.js +1 -1
  898. package/PostProcesses/thinAnaglyphPostProcess.js.map +1 -1
  899. package/PostProcesses/thinBlackAndWhitePostProcess.d.ts +1 -1
  900. package/PostProcesses/thinBlackAndWhitePostProcess.js +1 -1
  901. package/PostProcesses/thinBlackAndWhitePostProcess.js.map +1 -1
  902. package/PostProcesses/thinBloomEffect.js +1 -1
  903. package/PostProcesses/thinBloomEffect.js.map +1 -1
  904. package/PostProcesses/thinBloomMergePostProcess.d.ts +1 -1
  905. package/PostProcesses/thinBloomMergePostProcess.js +1 -1
  906. package/PostProcesses/thinBloomMergePostProcess.js.map +1 -1
  907. package/PostProcesses/thinBlurPostProcess.d.ts +1 -1
  908. package/PostProcesses/thinBlurPostProcess.js +1 -1
  909. package/PostProcesses/thinBlurPostProcess.js.map +1 -1
  910. package/PostProcesses/thinChromaticAberrationPostProcess.d.ts +2 -2
  911. package/PostProcesses/thinChromaticAberrationPostProcess.js +2 -2
  912. package/PostProcesses/thinChromaticAberrationPostProcess.js.map +1 -1
  913. package/PostProcesses/thinCircleOfConfusionPostProcess.d.ts +1 -1
  914. package/PostProcesses/thinCircleOfConfusionPostProcess.js +1 -1
  915. package/PostProcesses/thinCircleOfConfusionPostProcess.js.map +1 -1
  916. package/PostProcesses/thinColorCorrectionPostProcess.d.ts +1 -1
  917. package/PostProcesses/thinColorCorrectionPostProcess.js +2 -2
  918. package/PostProcesses/thinColorCorrectionPostProcess.js.map +1 -1
  919. package/PostProcesses/thinConvolutionPostProcess.d.ts +1 -1
  920. package/PostProcesses/thinConvolutionPostProcess.js +1 -1
  921. package/PostProcesses/thinConvolutionPostProcess.js.map +1 -1
  922. package/PostProcesses/thinCustomPostProcess.d.ts +1 -1
  923. package/PostProcesses/thinCustomPostProcess.js +1 -1
  924. package/PostProcesses/thinCustomPostProcess.js.map +1 -1
  925. package/PostProcesses/thinDepthOfFieldEffect.d.ts +3 -0
  926. package/PostProcesses/thinDepthOfFieldEffect.js +4 -1
  927. package/PostProcesses/thinDepthOfFieldEffect.js.map +1 -1
  928. package/PostProcesses/thinDepthOfFieldMergePostProcess.d.ts +1 -1
  929. package/PostProcesses/thinDepthOfFieldMergePostProcess.js +1 -1
  930. package/PostProcesses/thinDepthOfFieldMergePostProcess.js.map +1 -1
  931. package/PostProcesses/thinExtractHighlightsPostProcess.d.ts +1 -1
  932. package/PostProcesses/thinExtractHighlightsPostProcess.js +1 -1
  933. package/PostProcesses/thinExtractHighlightsPostProcess.js.map +1 -1
  934. package/PostProcesses/thinFXAAPostProcess.d.ts +2 -2
  935. package/PostProcesses/thinFXAAPostProcess.js +2 -2
  936. package/PostProcesses/thinFXAAPostProcess.js.map +1 -1
  937. package/PostProcesses/thinFilterPostProcess.d.ts +2 -2
  938. package/PostProcesses/thinFilterPostProcess.js +2 -2
  939. package/PostProcesses/thinFilterPostProcess.js.map +1 -1
  940. package/PostProcesses/thinGrainPostProcess.d.ts +1 -1
  941. package/PostProcesses/thinGrainPostProcess.js +1 -1
  942. package/PostProcesses/thinGrainPostProcess.js.map +1 -1
  943. package/PostProcesses/thinImageProcessingPostProcess.d.ts +2 -2
  944. package/PostProcesses/thinImageProcessingPostProcess.js +2 -2
  945. package/PostProcesses/thinImageProcessingPostProcess.js.map +1 -1
  946. package/PostProcesses/thinMotionBlurPostProcess.d.ts +1 -1
  947. package/PostProcesses/thinMotionBlurPostProcess.js +2 -2
  948. package/PostProcesses/thinMotionBlurPostProcess.js.map +1 -1
  949. package/PostProcesses/thinPassPostProcess.d.ts +1 -1
  950. package/PostProcesses/thinPassPostProcess.js +1 -1
  951. package/PostProcesses/thinPassPostProcess.js.map +1 -1
  952. package/PostProcesses/thinSSAO2BlurPostProcess.d.ts +1 -1
  953. package/PostProcesses/thinSSAO2BlurPostProcess.js +1 -1
  954. package/PostProcesses/thinSSAO2BlurPostProcess.js.map +1 -1
  955. package/PostProcesses/thinSSAO2CombinePostProcess.d.ts +1 -1
  956. package/PostProcesses/thinSSAO2CombinePostProcess.js +2 -2
  957. package/PostProcesses/thinSSAO2CombinePostProcess.js.map +1 -1
  958. package/PostProcesses/thinSSAO2PostProcess.d.ts +7 -2
  959. package/PostProcesses/thinSSAO2PostProcess.js +36 -4
  960. package/PostProcesses/thinSSAO2PostProcess.js.map +1 -1
  961. package/PostProcesses/thinSSRBlurCombinerPostProcess.d.ts +1 -1
  962. package/PostProcesses/thinSSRBlurCombinerPostProcess.js +2 -2
  963. package/PostProcesses/thinSSRBlurCombinerPostProcess.js.map +1 -1
  964. package/PostProcesses/thinSSRBlurPostProcess.d.ts +2 -2
  965. package/PostProcesses/thinSSRBlurPostProcess.js +2 -2
  966. package/PostProcesses/thinSSRBlurPostProcess.js.map +1 -1
  967. package/PostProcesses/thinSSRPostProcess.d.ts +1 -1
  968. package/PostProcesses/thinSSRPostProcess.js +2 -2
  969. package/PostProcesses/thinSSRPostProcess.js.map +1 -1
  970. package/PostProcesses/thinScreenSpaceCurvaturePostProcess.d.ts +1 -1
  971. package/PostProcesses/thinScreenSpaceCurvaturePostProcess.js +1 -1
  972. package/PostProcesses/thinScreenSpaceCurvaturePostProcess.js.map +1 -1
  973. package/PostProcesses/thinSharpenPostProcess.d.ts +1 -1
  974. package/PostProcesses/thinSharpenPostProcess.js +1 -1
  975. package/PostProcesses/thinSharpenPostProcess.js.map +1 -1
  976. package/PostProcesses/thinTAAPostProcess.d.ts +3 -3
  977. package/PostProcesses/thinTAAPostProcess.js +4 -4
  978. package/PostProcesses/thinTAAPostProcess.js.map +1 -1
  979. package/PostProcesses/thinTonemapPostProcess.d.ts +1 -1
  980. package/PostProcesses/thinTonemapPostProcess.js +1 -1
  981. package/PostProcesses/thinTonemapPostProcess.js.map +1 -1
  982. package/PostProcesses/vrDistortionCorrectionPostProcess.d.ts +1 -1
  983. package/PostProcesses/vrDistortionCorrectionPostProcess.js +3 -3
  984. package/PostProcesses/vrDistortionCorrectionPostProcess.js.map +1 -1
  985. package/Rendering/IBLShadows/iblShadowsAccumulationPass.d.ts +2 -2
  986. package/Rendering/IBLShadows/iblShadowsAccumulationPass.js +4 -4
  987. package/Rendering/IBLShadows/iblShadowsAccumulationPass.js.map +1 -1
  988. package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.d.ts +2 -2
  989. package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.js +4 -4
  990. package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.js.map +1 -1
  991. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.d.ts +3 -3
  992. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js +4 -4
  993. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js.map +1 -1
  994. package/Rendering/depthPeelingRenderer.d.ts +1 -1
  995. package/Rendering/depthPeelingRenderer.js +2 -2
  996. package/Rendering/depthPeelingRenderer.js.map +1 -1
  997. package/Rendering/fluidRenderer/fluidRenderingObject.d.ts +1 -1
  998. package/Rendering/fluidRenderer/fluidRenderingObject.js +1 -1
  999. package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
  1000. package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.d.ts +1 -1
  1001. package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js +2 -2
  1002. package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js.map +1 -1
  1003. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.d.ts +3 -3
  1004. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +3 -3
  1005. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
  1006. package/Rendering/fluidRenderer/fluidRenderingTextures.d.ts +2 -2
  1007. package/Rendering/fluidRenderer/fluidRenderingTextures.js +3 -3
  1008. package/Rendering/fluidRenderer/fluidRenderingTextures.js.map +1 -1
  1009. package/Rendering/iblCdfGenerator.d.ts +3 -3
  1010. package/Rendering/iblCdfGenerator.js +5 -5
  1011. package/Rendering/iblCdfGenerator.js.map +1 -1
  1012. package/Rendering/renderingGroup.js +1 -1
  1013. package/Rendering/renderingGroup.js.map +1 -1
  1014. package/Rendering/subSurfaceConfiguration.d.ts +2 -2
  1015. package/Rendering/subSurfaceConfiguration.js +2 -2
  1016. package/Rendering/subSurfaceConfiguration.js.map +1 -1
  1017. package/Rendering/utilityLayerRenderer.d.ts +2 -2
  1018. package/Rendering/utilityLayerRenderer.js +4 -4
  1019. package/Rendering/utilityLayerRenderer.js.map +1 -1
  1020. package/Shaders/greasedLine.vertex.js +19 -3
  1021. package/Shaders/greasedLine.vertex.js.map +1 -1
  1022. package/Shaders/ssao2.fragment.js +10 -2
  1023. package/Shaders/ssao2.fragment.js.map +1 -1
  1024. package/ShadersWGSL/ssao2.fragment.js +10 -2
  1025. package/ShadersWGSL/ssao2.fragment.js.map +1 -1
  1026. package/SmartAssets/smartAssetSerializer.js +1 -1
  1027. package/SmartAssets/smartAssetSerializer.js.map +1 -1
  1028. package/Sprites/sprite.d.ts +2 -2
  1029. package/Sprites/sprite.js +2 -2
  1030. package/Sprites/sprite.js.map +1 -1
  1031. package/Sprites/spriteManager.d.ts +2 -2
  1032. package/Sprites/spriteManager.js +4 -5
  1033. package/Sprites/spriteManager.js.map +1 -1
  1034. package/Sprites/spritePackedManager.js +1 -1
  1035. package/Sprites/spritePackedManager.js.map +1 -1
  1036. package/Sprites/spriteRenderer.js +2 -2
  1037. package/Sprites/spriteRenderer.js.map +1 -1
  1038. package/XR/features/WebXRHitTestLegacy.d.ts +1 -1
  1039. package/XR/features/WebXRHitTestLegacy.js +2 -2
  1040. package/XR/features/WebXRHitTestLegacy.js.map +1 -1
  1041. package/XR/motionController/webXRAbstractMotionController.js +2 -2
  1042. package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
  1043. package/XR/motionController/webXRGenericMotionController.js +2 -2
  1044. package/XR/motionController/webXRGenericMotionController.js.map +1 -1
  1045. package/XR/motionController/webXRProfiledMotionController.js +4 -4
  1046. package/XR/motionController/webXRProfiledMotionController.js.map +1 -1
  1047. package/XR/webXRCamera.d.ts +3 -3
  1048. package/XR/webXRCamera.js +4 -4
  1049. package/XR/webXRCamera.js.map +1 -1
  1050. package/XR/webXRDefaultExperience.d.ts +4 -4
  1051. package/XR/webXRDefaultExperience.js +4 -4
  1052. package/XR/webXRDefaultExperience.js.map +1 -1
  1053. package/XR/webXREnterExitUI.js +1 -1
  1054. package/XR/webXREnterExitUI.js.map +1 -1
  1055. package/XR/webXRExperienceHelper.js +2 -2
  1056. package/XR/webXRExperienceHelper.js.map +1 -1
  1057. package/XR/webXRFeaturesManager.d.ts +47 -0
  1058. package/XR/webXRFeaturesManager.js +1 -1
  1059. package/XR/webXRFeaturesManager.js.map +1 -1
  1060. package/XR/webXRInput.js +1 -1
  1061. package/XR/webXRInput.js.map +1 -1
  1062. package/XR/webXRInputSource.js +4 -4
  1063. package/XR/webXRInputSource.js.map +1 -1
  1064. package/XR/webXRManagedOutputCanvas.js +1 -1
  1065. package/XR/webXRManagedOutputCanvas.js.map +1 -1
  1066. package/XR/webXRRenderTargetTextureProvider.d.ts +1 -1
  1067. package/XR/webXRRenderTargetTextureProvider.js +1 -1
  1068. package/XR/webXRRenderTargetTextureProvider.js.map +1 -1
  1069. package/assetContainer.d.ts +4 -4
  1070. package/assetContainer.js +6 -6
  1071. package/assetContainer.js.map +1 -1
  1072. package/node.d.ts +1 -1
  1073. package/node.js +6 -2
  1074. package/node.js.map +1 -1
  1075. package/package.json +46 -175
  1076. package/scene.pure.d.ts +12 -0
  1077. package/scene.pure.js +36 -0
  1078. package/scene.pure.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"snapshotRenderingHelper.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/snapshotRenderingHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n type AbstractEngine,\r\n type AbstractMesh,\r\n type EffectLayer,\r\n type Mesh,\r\n type Nullable,\r\n type Observer,\r\n type Scene,\r\n type WebGPUDrawContext,\r\n type WebGPUShaderProcessor,\r\n type WebGPUPipelineContext,\r\n type GaussianSplattingMesh,\r\n type DrawWrapper,\r\n type Camera,\r\n type SpriteManager,\r\n type IParticleSystem,\r\n type ParticleSystem,\r\n type Matrix,\r\n} from \"core/index\";\r\n\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { BindMorphTargetParameters } from \"core/Materials/materialHelper.functions\";\r\nimport { ScenePerformancePriority } from \"core/scene\";\r\nimport { TmpVectors } from \"core/Maths/math.vector\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport { FrameGraphBaseLayerTask } from \"../FrameGraph/Tasks/Layers/baseLayerTask\";\r\nimport { FrameGraphUtils } from \"../FrameGraph/frameGraphUtils\";\r\n\r\n/**\r\n * Options for the snapshot rendering helper\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport interface SnapshotRenderingHelpersOptions {\r\n /**\r\n * Maximum number of influences for morph target managers\r\n * In FAST snapshot mode, the number of influences must be fixed and cannot change from one frame to the next.\r\n * morphTargetsNumMaxInfluences is the maximum number of non-zero influences allowed in a morph target manager.\r\n * The final value defined for a morph target manager is: Math.min(morphTargetManager.numTargets, morphTargetsNumMaxInfluences)\r\n * Default: 20\r\n */\r\n morphTargetsNumMaxInfluences?: number;\r\n}\r\n\r\n/**\r\n * A helper class to simplify work with FAST snapshot mode (WebGPU only - can be used in WebGL too, but won't do anything).\r\n */\r\nexport class SnapshotRenderingHelper {\r\n private readonly _engine: AbstractEngine;\r\n private readonly _scene: Scene;\r\n private readonly _options: SnapshotRenderingHelpersOptions;\r\n private readonly _onBeforeRenderObserver: Nullable<Observer<Scene>>;\r\n private _onBeforeRenderObserverUpdateLayer: Nullable<Observer<Scene>>;\r\n private readonly _onResizeObserver: Nullable<Observer<AbstractEngine>>;\r\n private _disableRenderingRefCount = 0;\r\n private _currentPerformancePriorityMode = ScenePerformancePriority.BackwardCompatible;\r\n private _pendingCurrentPerformancePriorityMode?: ScenePerformancePriority;\r\n private _isEnabling = false;\r\n private _enableCancelFunctions: Map<() => void, () => void> = new Map(); // first function is the callback, second function is the cancel function\r\n private _disableCancelFunctions: Map<() => void, () => void> = new Map(); // same as above\r\n\r\n /**\r\n * Indicates if debug logs should be displayed\r\n */\r\n public showDebugLogs = false;\r\n\r\n /**\r\n * Creates a new snapshot rendering helper\r\n * Note that creating an instance of the helper will set the snapshot rendering mode to SNAPSHOTRENDERING_FAST but will not enable snapshot rendering (engine.snapshotRendering is not updated).\r\n * Note also that fixMeshes() is called as part of the construction\r\n * @param scene The scene to use the helper in\r\n * @param options The options for the helper\r\n */\r\n constructor(scene: Scene, options?: SnapshotRenderingHelpersOptions) {\r\n this._scene = scene;\r\n this._engine = scene.getEngine();\r\n\r\n if (!this._engine.isWebGPU) {\r\n return;\r\n }\r\n\r\n this._options = {\r\n morphTargetsNumMaxInfluences: 20,\r\n ...options,\r\n };\r\n\r\n this._engine.snapshotRenderingMode = Constants.SNAPSHOTRENDERING_FAST;\r\n\r\n this.fixMeshes();\r\n\r\n this._onResizeObserver = this._engine.onResizeObservable.add(() => {\r\n this._log(\"onResize\", \"start\");\r\n\r\n // enableSnapshotRendering() will delay the actual enabling of snapshot rendering by at least a frame, so these two lines are not redundant!\r\n if (this._fastSnapshotRenderingEnabled) {\r\n this.disableSnapshotRendering();\r\n this.enableSnapshotRendering();\r\n } else if (this._isEnabling) {\r\n // We are in the process of enabling snapshot rendering, but the engine got resized before we could actually enable it:\r\n // * cancel all \"enable\" pending callbacks\r\n // * increase the ref count to balance the decrease that enableSnapshotRendering() will do\r\n // * call enableSnapshotRendering() again to restart the enabling process\r\n this._enableCancelFunctions.forEach((cancel) => cancel());\r\n this._enableCancelFunctions.clear();\r\n this._disableRenderingRefCount++;\r\n this.enableSnapshotRendering();\r\n }\r\n\r\n this._log(\"onResize\", \"end\");\r\n });\r\n\r\n this._onBeforeRenderObserver = this._scene.onBeforeRenderObservable.add(() => {\r\n if (!this._fastSnapshotRenderingEnabled) {\r\n return;\r\n }\r\n\r\n // Animates skeletons\r\n for (const skeleton of scene.skeletons) {\r\n skeleton.prepare(true);\r\n }\r\n\r\n // Handles meshes\r\n for (const mesh of scene.meshes) {\r\n if (mesh.infiniteDistance) {\r\n mesh.transferToEffect(mesh.computeWorldMatrix(true));\r\n }\r\n\r\n if (mesh.skeleton) {\r\n mesh.transferToEffect(mesh.computeWorldMatrix(true));\r\n }\r\n\r\n if (mesh.getClassName() === \"GaussianSplattingMesh\") {\r\n (mesh as GaussianSplattingMesh)._postToWorker();\r\n }\r\n\r\n if (mesh.morphTargetManager && mesh.subMeshes) {\r\n // Make sure morph target animations work\r\n for (const subMesh of mesh.subMeshes) {\r\n const dw = subMesh._drawWrapper;\r\n const effect = dw.effect;\r\n if (effect) {\r\n const dataBuffer = (dw.drawContext as WebGPUDrawContext).buffers[\"LeftOver\" satisfies (typeof WebGPUShaderProcessor)[\"LeftOvertUBOName\"]];\r\n const ubLeftOver = (effect._pipelineContext as WebGPUPipelineContext)?.uniformBuffer;\r\n if (dataBuffer && ubLeftOver && ubLeftOver.setDataBuffer(dataBuffer)) {\r\n mesh.morphTargetManager._bind(effect);\r\n BindMorphTargetParameters(mesh, effect);\r\n ubLeftOver.update();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Handles sprite renderers\r\n let camera = scene.activeCamera;\r\n if (scene.frameGraph) {\r\n camera = FrameGraphUtils.FindMainCamera(scene.frameGraph) || camera;\r\n }\r\n if (scene.spriteManagers && camera) {\r\n for (const imanager of scene.spriteManagers) {\r\n const manager = imanager as SpriteManager;\r\n const renderer = manager.spriteRenderer;\r\n\r\n this._spriteRendererUpdateEffects(renderer._drawWrapperBase, renderer._drawWrapperDepth, camera);\r\n }\r\n }\r\n\r\n // Handles fixed-capacity particle systems\r\n if (scene.particleSystems && camera) {\r\n for (const ps of scene.particleSystems) {\r\n const particleSystem = ps as ParticleSystem;\r\n if (particleSystem._useFixedCapacityForSnapshot) {\r\n this._updateFixedCapacityParticleSystem(particleSystem, camera);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Gets a value indicating if the helper is in a steady state (not in the process of enabling snapshot rendering).\r\n */\r\n public get isReady() {\r\n return !this._isEnabling;\r\n }\r\n\r\n /**\r\n * Enable snapshot rendering\r\n * Use this method instead of engine.snapshotRendering=true, to make sure everything is ready before enabling snapshot rendering.\r\n * Note that this method is ref-counted and works in pair with disableSnapshotRendering(): you should call enableSnapshotRendering() as many times as you call disableSnapshotRendering().\r\n * @param debugMessage An optional message to display in debug logs to help identify the context of the call to enableSnapshotRendering\r\n */\r\n public enableSnapshotRendering(debugMessage?: string) {\r\n if (!this._engine.isWebGPU) {\r\n return;\r\n }\r\n\r\n this._log(\"enableSnapshotRendering\", `called (refCount: ${this._disableRenderingRefCount - 1})${debugMessage ? ` - ${debugMessage}` : \"\"}`);\r\n\r\n if (--this._disableRenderingRefCount > 0) {\r\n return;\r\n }\r\n\r\n this._log(\"enableSnapshotRendering\", `execute`);\r\n\r\n if (this._disableCancelFunctions.size > 0) {\r\n this._log(\"enableSnapshotRendering\", `cancelling ${this._disableCancelFunctions.size} \"disable\" callbacks`);\r\n }\r\n\r\n this._disableCancelFunctions.forEach((cancel) => cancel());\r\n this._disableCancelFunctions.clear();\r\n\r\n this._isEnabling = true;\r\n this._disableRenderingRefCount = 0;\r\n\r\n this._currentPerformancePriorityMode = this._pendingCurrentPerformancePriorityMode ?? this._scene.performancePriority;\r\n this._pendingCurrentPerformancePriorityMode = undefined;\r\n this._scene.performancePriority = ScenePerformancePriority.BackwardCompatible;\r\n\r\n const callbackWhenSceneReady = () => {\r\n this._enableCancelFunctions.delete(callbackWhenSceneReady);\r\n\r\n // Make sure a full frame is rendered before enabling snapshot rendering, so use \"+2\" instead of \"+1\"\r\n const targetFrameId = this._engine.frameId + 2;\r\n\r\n this._log(\"enableSnapshotRendering\", `scene ready, add callbacks for frames ${targetFrameId} and ${targetFrameId + 1}`);\r\n\r\n this._executeAtFrame(targetFrameId, () => {\r\n this._log(\"enableSnapshotRendering\", `callback #1, enable snapshot rendering at the engine level`);\r\n this._engine.snapshotRendering = true;\r\n });\r\n\r\n // Render one frame with snapshot rendering enabled to make sure everything is ready\r\n this._executeAtFrame(targetFrameId + 1, () => {\r\n this._log(\"enableSnapshotRendering\", `callback #2, signals that snapshot rendering helper is ready`);\r\n this._isEnabling = false;\r\n });\r\n };\r\n\r\n this._enableCancelFunctions.set(callbackWhenSceneReady, () => this._scene.onReadyObservable.removeCallback(callbackWhenSceneReady));\r\n\r\n this._scene.executeWhenReady(callbackWhenSceneReady);\r\n }\r\n\r\n /**\r\n * Disable snapshot rendering\r\n * Note that this method is ref-counted and works in pair with enableSnapshotRendering(): you should call enableSnapshotRendering() as many times as you call disableSnapshotRendering().\r\n * @param debugMessage An optional message to display in debug logs to help identify the context of the call to disableSnapshotRendering\r\n */\r\n public disableSnapshotRendering(debugMessage?: string) {\r\n if (!this._engine.isWebGPU) {\r\n return;\r\n }\r\n\r\n this._log(\r\n \"disableSnapshotRendering\",\r\n `called (refCount: ${this._disableRenderingRefCount === 0 ? 0 : this._disableRenderingRefCount + 1})${debugMessage ? ` - ${debugMessage}` : \"\"}`\r\n );\r\n\r\n if (this._disableRenderingRefCount === 0) {\r\n this._log(\"disableSnapshotRendering\", `execute (refCount set to 1 after execution)`);\r\n\r\n if (this._enableCancelFunctions.size > 0) {\r\n this._log(\"disableSnapshotRendering\", `cancelling ${this._enableCancelFunctions.size} \"enable\" callbacks`);\r\n }\r\n\r\n this._enableCancelFunctions.forEach((cancel) => cancel());\r\n this._enableCancelFunctions.clear();\r\n\r\n this._isEnabling = false;\r\n\r\n // Snapshot rendering switches from enabled to disabled\r\n // We reset the performance priority mode to that which it was before enabling snapshot rendering, but first set it to “BackwardCompatible” to allow the system to regenerate resources that may have been optimized for snapshot rendering.\r\n // We'll then restore the original mode at the next frame.\r\n this._scene.performancePriority = ScenePerformancePriority.BackwardCompatible;\r\n if (this._currentPerformancePriorityMode !== ScenePerformancePriority.BackwardCompatible) {\r\n this._log(\r\n \"disableSnapshotRendering\",\r\n `makes sure that the scene is rendered once in BackwardCompatible mode (code: ${ScenePerformancePriority.BackwardCompatible}) before switching to mode ${this._currentPerformancePriorityMode}`\r\n );\r\n\r\n this._pendingCurrentPerformancePriorityMode = this._currentPerformancePriorityMode;\r\n\r\n const callbackWhenSceneReady = () => {\r\n this._log(\"disableSnapshotRendering\", `scene ready, add callback for frame ${this._engine.frameId + 2}`);\r\n\r\n this._executeAtFrame(\r\n this._engine.frameId + 2,\r\n () => {\r\n this._log(\"disableSnapshotRendering\", `switching to performance priority mode ${this._pendingCurrentPerformancePriorityMode}`);\r\n this._scene.performancePriority = this._pendingCurrentPerformancePriorityMode!;\r\n this._pendingCurrentPerformancePriorityMode = undefined;\r\n },\r\n \"whenDisabled\"\r\n );\r\n };\r\n\r\n this._disableCancelFunctions.set(callbackWhenSceneReady, () => this._scene.onReadyObservable.removeCallback(callbackWhenSceneReady));\r\n\r\n this._scene.executeWhenReady(callbackWhenSceneReady);\r\n }\r\n }\r\n\r\n this._engine.snapshotRendering = false;\r\n this._disableRenderingRefCount++;\r\n }\r\n\r\n /**\r\n * Fix meshes for snapshot rendering.\r\n * This method will make sure that some features are disabled or fixed to make sure snapshot rendering works correctly.\r\n * @param meshes List of meshes to fix. If not provided, all meshes in the scene will be fixed.\r\n */\r\n public fixMeshes(meshes?: AbstractMesh[]) {\r\n if (!this._engine.isWebGPU) {\r\n return;\r\n }\r\n\r\n meshes = meshes || this._scene.meshes;\r\n\r\n for (const mesh of meshes) {\r\n (mesh as Mesh).ignoreCameraMaxZ = false;\r\n if (mesh.morphTargetManager) {\r\n mesh.morphTargetManager.numMaxInfluencers = Math.min(mesh.morphTargetManager.numTargets, this._options.morphTargetsNumMaxInfluences!);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Call this method to update a mesh on the GPU after some properties have changed (position, rotation, scaling).\r\n * Note: in FAST snapshot mode the GPU bundle is recorded once and replayed every frame, so draw calls\r\n * (including instance counts) are baked in. This method updates per-mesh GPU data such as transforms and\r\n * `mesh.visibility`, but it cannot change whether a recorded draw call is emitted. To apply changes such as\r\n * `mesh.isVisible`, `setEnabled(false)`, or per-instance visibility/state changes that affect instance counts,\r\n * wrap the change in a disableSnapshotRendering() / enableSnapshotRendering() pair so the snapshot is\r\n * re-recorded.\r\n * @param mesh The mesh to update. Can be a single mesh or an array of meshes to update.\r\n * @param updateInstancedMeshes If true, the method will also update instanced meshes. Default is true. If you know instanced meshes won't move (or you don't have instanced meshes), you can set this to false to save some CPU time.\r\n */\r\n public updateMesh(mesh: AbstractMesh | AbstractMesh[], updateInstancedMeshes = true) {\r\n if (!this._fastSnapshotRenderingEnabled) {\r\n return;\r\n }\r\n\r\n if (Array.isArray(mesh)) {\r\n for (const m of mesh) {\r\n if (!updateInstancedMeshes || !this._updateInstancedMesh(m)) {\r\n m.transferToEffect(m.computeWorldMatrix());\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if (!updateInstancedMeshes || !this._updateInstancedMesh(mesh)) {\r\n mesh.transferToEffect(mesh.computeWorldMatrix());\r\n }\r\n }\r\n\r\n private _updateInstancedMesh(mesh: AbstractMesh) {\r\n if (mesh.hasInstances) {\r\n if (mesh.subMeshes) {\r\n const sourceMesh = mesh as Mesh;\r\n for (const subMesh of sourceMesh.subMeshes) {\r\n const batch = sourceMesh._getInstancesRenderList(subMesh._id);\r\n sourceMesh._updateInstancedBuffers(subMesh, batch, batch.parent.instancesBufferSize, this._engine);\r\n }\r\n }\r\n return true;\r\n } else if (mesh.isAnInstance) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Update the meshes used in an effect layer to ensure that snapshot rendering works correctly for these meshes in this layer.\r\n * @param layer The effect layer or frame graph layer\r\n * @param autoUpdate If true, the helper will automatically update the meshes of the layer with each frame. If false, you'll need to call this method manually when the camera or layer meshes move or rotate.\r\n */\r\n public updateMeshesForEffectLayer(layer: EffectLayer | FrameGraphBaseLayerTask, autoUpdate = true) {\r\n if (!this._engine.isWebGPU) {\r\n return;\r\n }\r\n\r\n const renderPassId = layer instanceof FrameGraphBaseLayerTask ? layer.objectRendererForLayer.objectRenderer.renderPassId : layer.mainTexture.renderPassId;\r\n\r\n if (autoUpdate) {\r\n this._onBeforeRenderObserverUpdateLayer = this._scene.onBeforeRenderObservable.add(() => {\r\n this._updateMeshMatricesForRenderPassId(renderPassId);\r\n });\r\n } else {\r\n this._updateMeshMatricesForRenderPassId(renderPassId);\r\n }\r\n }\r\n\r\n /**\r\n * Dispose the helper\r\n */\r\n public dispose() {\r\n if (!this._engine.isWebGPU) {\r\n return;\r\n }\r\n\r\n this._scene.onBeforeRenderObservable.remove(this._onBeforeRenderObserver);\r\n this._scene.onBeforeRenderObservable.remove(this._onBeforeRenderObserverUpdateLayer);\r\n this._engine.onResizeObservable.remove(this._onResizeObserver);\r\n }\r\n\r\n private get _fastSnapshotRenderingEnabled() {\r\n return this._engine.snapshotRendering && this._engine.snapshotRenderingMode === Constants.SNAPSHOTRENDERING_FAST;\r\n }\r\n\r\n private _updateMeshMatricesForRenderPassId(renderPassId: number) {\r\n if (!this._fastSnapshotRenderingEnabled) {\r\n return;\r\n }\r\n\r\n const sceneTransformationMatrix =\r\n this._scene.objectRenderers.find((renderer) => renderer.renderPassId === renderPassId)?.activeCamera?.getTransformationMatrix() ?? this._scene.getTransformMatrix();\r\n\r\n for (let i = 0; i < this._scene.meshes.length; ++i) {\r\n const mesh = this._scene.meshes[i];\r\n if (!mesh.subMeshes) {\r\n continue;\r\n }\r\n\r\n for (let j = 0; j < mesh.subMeshes.length; ++j) {\r\n const dw = mesh.subMeshes[j]._getDrawWrapper(renderPassId);\r\n const effect = dw?.effect;\r\n if (effect) {\r\n const dataBuffer = (dw.drawContext as WebGPUDrawContext).buffers[\"LeftOver\" satisfies (typeof WebGPUShaderProcessor)[\"LeftOvertUBOName\"]];\r\n const ubLeftOver = (effect._pipelineContext as WebGPUPipelineContext)?.uniformBuffer;\r\n if (dataBuffer && ubLeftOver && ubLeftOver.setDataBuffer(dataBuffer)) {\r\n effect.setMatrix(\"viewProjection\", sceneTransformationMatrix);\r\n effect.setMatrix(\"world\", mesh.computeWorldMatrix());\r\n ubLeftOver.update();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private _spriteRendererDirectMatrixUpdate(dw: DrawWrapper, camera: Camera) {\r\n const effect = dw?.effect;\r\n if (effect) {\r\n const dataBuffer = (dw.drawContext as WebGPUDrawContext).buffers[\"LeftOver\" satisfies (typeof WebGPUShaderProcessor)[\"LeftOvertUBOName\"]];\r\n const ubLeftOver = (effect._pipelineContext as WebGPUPipelineContext)?.uniformBuffer;\r\n if (dataBuffer && ubLeftOver && ubLeftOver.setDataBuffer(dataBuffer)) {\r\n effect.setMatrix(\"view\", camera.getViewMatrix());\r\n effect.setMatrix(\"projection\", camera.getProjectionMatrix());\r\n ubLeftOver.update();\r\n }\r\n }\r\n }\r\n\r\n private _spriteRendererUpdateEffects(drawWrapperBase: DrawWrapper, drawWrapperDepth: DrawWrapper, camera: Camera) {\r\n this._spriteRendererDirectMatrixUpdate(drawWrapperBase, camera);\r\n this._spriteRendererDirectMatrixUpdate(drawWrapperDepth, camera);\r\n }\r\n\r\n /**\r\n * Make a CPU particle system compatible with FAST snapshot rendering.\r\n * The particle system will always render at full capacity (`getCapacity()` quads), with inactive slots collapsed\r\n * to degenerate triangles via zero-fill. This keeps the recorded GPU bundle's draw call valid every frame, while\r\n * the live particle data is uploaded to the bundle-referenced vertex buffer through the normal `animate()` path.\r\n *\r\n * The helper additionally advances the particle simulation and updates view/projection (and `eyePosition`/`invView`\r\n * for billboard modes) into the particle system's draw wrappers each frame, because FAST snapshot replay skips the\r\n * normal scene particle evaluation path after the bundle is recorded.\r\n *\r\n * Notes:\r\n * - Call this BEFORE `enableSnapshotRendering()` so the recording sees the correct draw count.\r\n * - GPU particle systems (`GPUParticleSystem`) are not supported by this method.\r\n * - Vertex shader cost scales with `getCapacity()` rather than the live particle count, so size capacity realistically.\r\n * - Per-frame uniforms other than camera matrices (e.g. `textureMask`, `translationPivot`, clip planes, fog) are\r\n * baked at recording time and will not update during snapshot replay.\r\n * @param particleSystem The particle system to fix\r\n */\r\n public fixParticleSystem(particleSystem: IParticleSystem): void {\r\n if (!this._engine.isWebGPU) {\r\n return;\r\n }\r\n\r\n if (particleSystem.getClassName() !== \"ParticleSystem\") {\r\n this._log(\"fixParticleSystem\", `skipping ${particleSystem.name}: only CPU ParticleSystem is supported (got ${particleSystem.getClassName()})`);\r\n return;\r\n }\r\n\r\n const ps = particleSystem as ParticleSystem;\r\n const fixedCapacityInitialized = ps._initFixedCapacitySnapshotData();\r\n\r\n // The recorded bundle bakes in the draw-call vertex/instance count. If snapshot rendering is already active\r\n // (or in the process of being enabled) when we flip the flag, the bundle was recorded with the live particle\r\n // count and is now stale. Cycle disable/enable so the next recording picks up the fixed-capacity draw count.\r\n if (fixedCapacityInitialized && (this._fastSnapshotRenderingEnabled || this._isEnabling)) {\r\n Logger.Warn(\r\n `SnapshotRenderingHelper.fixParticleSystem(\"${particleSystem.name}\") was called after snapshot rendering was enabled. ` +\r\n `Forcing a re-record so the bundle uses the fixed-capacity draw count. Call fixParticleSystem before enableSnapshotRendering to avoid this.`\r\n );\r\n this.disableSnapshotRendering(\"fixParticleSystem auto-recover\");\r\n this.enableSnapshotRendering(\"fixParticleSystem auto-recover\");\r\n }\r\n }\r\n\r\n private _updateFixedCapacityParticleSystem(ps: ParticleSystem, camera: Camera): void {\r\n if (!this._scene.particlesEnabled || !ps.isStarted() || !ps.emitter) {\r\n ps._clearFixedCapacitySnapshotData();\r\n return;\r\n }\r\n\r\n const emitter = ps.emitter as { position?: unknown; isEnabled?: () => boolean };\r\n if (!emitter.position || emitter.isEnabled?.()) {\r\n ps.animate();\r\n this._particleSystemUpdateEffects(ps, camera);\r\n } else {\r\n ps._clearFixedCapacitySnapshotData();\r\n }\r\n }\r\n\r\n private _particleSystemUpdateEffects(ps: ParticleSystem, camera: Camera) {\r\n const drawWrappers = (ps as unknown as { _drawWrappers: DrawWrapper[][] })._drawWrappers;\r\n if (!drawWrappers) {\r\n return;\r\n }\r\n\r\n const viewMatrix = ps.defaultViewMatrix ?? camera.getViewMatrix();\r\n const projectionMatrix = ps.defaultProjectionMatrix ?? camera.getProjectionMatrix();\r\n // Compute invView lazily once per system per frame, only if any draw wrapper actually needs it.\r\n let invViewMatrix: Nullable<Matrix> = null;\r\n\r\n for (const perPass of drawWrappers) {\r\n if (!perPass) {\r\n continue;\r\n }\r\n for (const dw of perPass) {\r\n invViewMatrix = this._particleSystemDirectMatrixUpdate(dw, viewMatrix, projectionMatrix, camera, invViewMatrix);\r\n }\r\n }\r\n }\r\n\r\n private _particleSystemBillboardFlags = new WeakMap<object, { billboard: boolean; billboardAll: boolean }>();\r\n\r\n private _particleSystemDirectMatrixUpdate(\r\n dw: Nullable<DrawWrapper>,\r\n viewMatrix: Matrix,\r\n projectionMatrix: Matrix,\r\n camera: Camera,\r\n invViewMatrix: Nullable<Matrix>\r\n ): Nullable<Matrix> {\r\n const effect = dw?.effect;\r\n if (!effect) {\r\n return invViewMatrix;\r\n }\r\n const dataBuffer = (dw!.drawContext as WebGPUDrawContext).buffers[\"LeftOver\" satisfies (typeof WebGPUShaderProcessor)[\"LeftOvertUBOName\"]];\r\n const ubLeftOver = (effect._pipelineContext as WebGPUPipelineContext)?.uniformBuffer;\r\n if (!dataBuffer || !ubLeftOver || !ubLeftOver.setDataBuffer(dataBuffer)) {\r\n return invViewMatrix;\r\n }\r\n effect.setMatrix(\"view\", viewMatrix);\r\n effect.setMatrix(\"projection\", projectionMatrix);\r\n let flags = this._particleSystemBillboardFlags.get(effect);\r\n if (!flags) {\r\n const defines = effect.defines ?? \"\";\r\n flags = { billboard: defines.indexOf(\"#define BILLBOARD\") >= 0, billboardAll: defines.indexOf(\"#define BILLBOARDMODE_ALL\") >= 0 };\r\n this._particleSystemBillboardFlags.set(effect, flags);\r\n }\r\n if (flags.billboard) {\r\n effect.setVector3(\"eyePosition\", camera.globalPosition);\r\n }\r\n if (flags.billboardAll) {\r\n if (!invViewMatrix) {\r\n invViewMatrix = TmpVectors.Matrix[0];\r\n viewMatrix.invertToRef(invViewMatrix);\r\n }\r\n effect.setMatrix(\"invView\", invViewMatrix);\r\n }\r\n ubLeftOver.update();\r\n\r\n return invViewMatrix;\r\n }\r\n\r\n private _executeAtFrame(frameId: number, func: () => void, mode: \"whenEnabled\" | \"whenDisabled\" = \"whenEnabled\") {\r\n const callback = () => {\r\n if (this._engine.frameId >= frameId) {\r\n this._engine.onEndFrameObservable.remove(obs);\r\n if (mode === \"whenEnabled\") {\r\n this._enableCancelFunctions.delete(callback);\r\n } else {\r\n this._disableCancelFunctions.delete(callback);\r\n }\r\n func();\r\n }\r\n };\r\n\r\n const obs = this._engine.onEndFrameObservable.add(callback);\r\n if (mode === \"whenEnabled\") {\r\n this._enableCancelFunctions.set(callback, () => this._engine.onEndFrameObservable.remove(obs));\r\n } else {\r\n this._disableCancelFunctions.set(callback, () => this._engine.onEndFrameObservable.remove(obs));\r\n }\r\n }\r\n\r\n private _log(funcName: string, message: string) {\r\n if (this.showDebugLogs) {\r\n Logger.Log(`[Frame: ${this._engine.frameId}] SnapshotRenderingHelper:${funcName} - ${message}`);\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"snapshotRenderingHelper.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/snapshotRenderingHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n type AbstractEngine,\r\n type AbstractMesh,\r\n type EffectLayer,\r\n type Mesh,\r\n type Nullable,\r\n type Observer,\r\n type Scene,\r\n type WebGPUDrawContext,\r\n type WebGPUShaderProcessor,\r\n type WebGPUPipelineContext,\r\n type GaussianSplattingMesh,\r\n type DrawWrapper,\r\n type Camera,\r\n type SpriteManager,\r\n type IParticleSystem,\r\n type ParticleSystem,\r\n type Matrix,\r\n} from \"core/index\";\r\n\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { BindMorphTargetParameters } from \"core/Materials/materialHelper.functions\";\r\nimport { ScenePerformancePriority } from \"core/scene.pure\";\r\nimport { TmpVectors } from \"core/Maths/math.vector.pure\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport { FrameGraphBaseLayerTask } from \"../FrameGraph/Tasks/Layers/baseLayerTask\";\r\nimport { FrameGraphUtils } from \"../FrameGraph/frameGraphUtils\";\r\n\r\n/**\r\n * Options for the snapshot rendering helper\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport interface SnapshotRenderingHelpersOptions {\r\n /**\r\n * Maximum number of influences for morph target managers\r\n * In FAST snapshot mode, the number of influences must be fixed and cannot change from one frame to the next.\r\n * morphTargetsNumMaxInfluences is the maximum number of non-zero influences allowed in a morph target manager.\r\n * The final value defined for a morph target manager is: Math.min(morphTargetManager.numTargets, morphTargetsNumMaxInfluences)\r\n * Default: 20\r\n */\r\n morphTargetsNumMaxInfluences?: number;\r\n}\r\n\r\n/**\r\n * A helper class to simplify work with FAST snapshot mode (WebGPU only - can be used in WebGL too, but won't do anything).\r\n */\r\nexport class SnapshotRenderingHelper {\r\n private readonly _engine: AbstractEngine;\r\n private readonly _scene: Scene;\r\n private readonly _options: SnapshotRenderingHelpersOptions;\r\n private readonly _onBeforeRenderObserver: Nullable<Observer<Scene>>;\r\n private _onBeforeRenderObserverUpdateLayer: Nullable<Observer<Scene>>;\r\n private readonly _onResizeObserver: Nullable<Observer<AbstractEngine>>;\r\n private _disableRenderingRefCount = 0;\r\n private _currentPerformancePriorityMode = ScenePerformancePriority.BackwardCompatible;\r\n private _pendingCurrentPerformancePriorityMode?: ScenePerformancePriority;\r\n private _isEnabling = false;\r\n private _enableCancelFunctions: Map<() => void, () => void> = new Map(); // first function is the callback, second function is the cancel function\r\n private _disableCancelFunctions: Map<() => void, () => void> = new Map(); // same as above\r\n\r\n /**\r\n * Indicates if debug logs should be displayed\r\n */\r\n public showDebugLogs = false;\r\n\r\n /**\r\n * Creates a new snapshot rendering helper\r\n * Note that creating an instance of the helper will set the snapshot rendering mode to SNAPSHOTRENDERING_FAST but will not enable snapshot rendering (engine.snapshotRendering is not updated).\r\n * Note also that fixMeshes() is called as part of the construction\r\n * @param scene The scene to use the helper in\r\n * @param options The options for the helper\r\n */\r\n constructor(scene: Scene, options?: SnapshotRenderingHelpersOptions) {\r\n this._scene = scene;\r\n this._engine = scene.getEngine();\r\n\r\n if (!this._engine.isWebGPU) {\r\n return;\r\n }\r\n\r\n this._options = {\r\n morphTargetsNumMaxInfluences: 20,\r\n ...options,\r\n };\r\n\r\n this._engine.snapshotRenderingMode = Constants.SNAPSHOTRENDERING_FAST;\r\n\r\n this.fixMeshes();\r\n\r\n this._onResizeObserver = this._engine.onResizeObservable.add(() => {\r\n this._log(\"onResize\", \"start\");\r\n\r\n // enableSnapshotRendering() will delay the actual enabling of snapshot rendering by at least a frame, so these two lines are not redundant!\r\n if (this._fastSnapshotRenderingEnabled) {\r\n this.disableSnapshotRendering();\r\n this.enableSnapshotRendering();\r\n } else if (this._isEnabling) {\r\n // We are in the process of enabling snapshot rendering, but the engine got resized before we could actually enable it:\r\n // * cancel all \"enable\" pending callbacks\r\n // * increase the ref count to balance the decrease that enableSnapshotRendering() will do\r\n // * call enableSnapshotRendering() again to restart the enabling process\r\n this._enableCancelFunctions.forEach((cancel) => cancel());\r\n this._enableCancelFunctions.clear();\r\n this._disableRenderingRefCount++;\r\n this.enableSnapshotRendering();\r\n }\r\n\r\n this._log(\"onResize\", \"end\");\r\n });\r\n\r\n this._onBeforeRenderObserver = this._scene.onBeforeRenderObservable.add(() => {\r\n if (!this._fastSnapshotRenderingEnabled) {\r\n return;\r\n }\r\n\r\n // Animates skeletons\r\n for (const skeleton of scene.skeletons) {\r\n skeleton.prepare(true);\r\n }\r\n\r\n // Handles meshes\r\n for (const mesh of scene.meshes) {\r\n if (mesh.infiniteDistance) {\r\n mesh.transferToEffect(mesh.computeWorldMatrix(true));\r\n }\r\n\r\n if (mesh.skeleton) {\r\n mesh.transferToEffect(mesh.computeWorldMatrix(true));\r\n }\r\n\r\n if (mesh.getClassName() === \"GaussianSplattingMesh\") {\r\n (mesh as GaussianSplattingMesh)._postToWorker();\r\n }\r\n\r\n if (mesh.morphTargetManager && mesh.subMeshes) {\r\n // Make sure morph target animations work\r\n for (const subMesh of mesh.subMeshes) {\r\n const dw = subMesh._drawWrapper;\r\n const effect = dw.effect;\r\n if (effect) {\r\n const dataBuffer = (dw.drawContext as WebGPUDrawContext).buffers[\"LeftOver\" satisfies (typeof WebGPUShaderProcessor)[\"LeftOvertUBOName\"]];\r\n const ubLeftOver = (effect._pipelineContext as WebGPUPipelineContext)?.uniformBuffer;\r\n if (dataBuffer && ubLeftOver && ubLeftOver.setDataBuffer(dataBuffer)) {\r\n mesh.morphTargetManager._bind(effect);\r\n BindMorphTargetParameters(mesh, effect);\r\n ubLeftOver.update();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Handles sprite renderers\r\n let camera = scene.activeCamera;\r\n if (scene.frameGraph) {\r\n camera = FrameGraphUtils.FindMainCamera(scene.frameGraph) || camera;\r\n }\r\n if (scene.spriteManagers && camera) {\r\n for (const imanager of scene.spriteManagers) {\r\n const manager = imanager as SpriteManager;\r\n const renderer = manager.spriteRenderer;\r\n\r\n this._spriteRendererUpdateEffects(renderer._drawWrapperBase, renderer._drawWrapperDepth, camera);\r\n }\r\n }\r\n\r\n // Handles fixed-capacity particle systems\r\n if (scene.particleSystems && camera) {\r\n for (const ps of scene.particleSystems) {\r\n const particleSystem = ps as ParticleSystem;\r\n if (particleSystem._useFixedCapacityForSnapshot) {\r\n this._updateFixedCapacityParticleSystem(particleSystem, camera);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Gets a value indicating if the helper is in a steady state (not in the process of enabling snapshot rendering).\r\n */\r\n public get isReady() {\r\n return !this._isEnabling;\r\n }\r\n\r\n /**\r\n * Enable snapshot rendering\r\n * Use this method instead of engine.snapshotRendering=true, to make sure everything is ready before enabling snapshot rendering.\r\n * Note that this method is ref-counted and works in pair with disableSnapshotRendering(): you should call enableSnapshotRendering() as many times as you call disableSnapshotRendering().\r\n * @param debugMessage An optional message to display in debug logs to help identify the context of the call to enableSnapshotRendering\r\n */\r\n public enableSnapshotRendering(debugMessage?: string) {\r\n if (!this._engine.isWebGPU) {\r\n return;\r\n }\r\n\r\n this._log(\"enableSnapshotRendering\", `called (refCount: ${this._disableRenderingRefCount - 1})${debugMessage ? ` - ${debugMessage}` : \"\"}`);\r\n\r\n if (--this._disableRenderingRefCount > 0) {\r\n return;\r\n }\r\n\r\n this._log(\"enableSnapshotRendering\", `execute`);\r\n\r\n if (this._disableCancelFunctions.size > 0) {\r\n this._log(\"enableSnapshotRendering\", `cancelling ${this._disableCancelFunctions.size} \"disable\" callbacks`);\r\n }\r\n\r\n this._disableCancelFunctions.forEach((cancel) => cancel());\r\n this._disableCancelFunctions.clear();\r\n\r\n this._isEnabling = true;\r\n this._disableRenderingRefCount = 0;\r\n\r\n this._currentPerformancePriorityMode = this._pendingCurrentPerformancePriorityMode ?? this._scene.performancePriority;\r\n this._pendingCurrentPerformancePriorityMode = undefined;\r\n this._scene.performancePriority = ScenePerformancePriority.BackwardCompatible;\r\n\r\n const callbackWhenSceneReady = () => {\r\n this._enableCancelFunctions.delete(callbackWhenSceneReady);\r\n\r\n // Make sure a full frame is rendered before enabling snapshot rendering, so use \"+2\" instead of \"+1\"\r\n const targetFrameId = this._engine.frameId + 2;\r\n\r\n this._log(\"enableSnapshotRendering\", `scene ready, add callbacks for frames ${targetFrameId} and ${targetFrameId + 1}`);\r\n\r\n this._executeAtFrame(targetFrameId, () => {\r\n this._log(\"enableSnapshotRendering\", `callback #1, enable snapshot rendering at the engine level`);\r\n this._engine.snapshotRendering = true;\r\n });\r\n\r\n // Render one frame with snapshot rendering enabled to make sure everything is ready\r\n this._executeAtFrame(targetFrameId + 1, () => {\r\n this._log(\"enableSnapshotRendering\", `callback #2, signals that snapshot rendering helper is ready`);\r\n this._isEnabling = false;\r\n });\r\n };\r\n\r\n this._enableCancelFunctions.set(callbackWhenSceneReady, () => this._scene.onReadyObservable.removeCallback(callbackWhenSceneReady));\r\n\r\n this._scene.executeWhenReady(callbackWhenSceneReady);\r\n }\r\n\r\n /**\r\n * Disable snapshot rendering\r\n * Note that this method is ref-counted and works in pair with enableSnapshotRendering(): you should call enableSnapshotRendering() as many times as you call disableSnapshotRendering().\r\n * @param debugMessage An optional message to display in debug logs to help identify the context of the call to disableSnapshotRendering\r\n */\r\n public disableSnapshotRendering(debugMessage?: string) {\r\n if (!this._engine.isWebGPU) {\r\n return;\r\n }\r\n\r\n this._log(\r\n \"disableSnapshotRendering\",\r\n `called (refCount: ${this._disableRenderingRefCount === 0 ? 0 : this._disableRenderingRefCount + 1})${debugMessage ? ` - ${debugMessage}` : \"\"}`\r\n );\r\n\r\n if (this._disableRenderingRefCount === 0) {\r\n this._log(\"disableSnapshotRendering\", `execute (refCount set to 1 after execution)`);\r\n\r\n if (this._enableCancelFunctions.size > 0) {\r\n this._log(\"disableSnapshotRendering\", `cancelling ${this._enableCancelFunctions.size} \"enable\" callbacks`);\r\n }\r\n\r\n this._enableCancelFunctions.forEach((cancel) => cancel());\r\n this._enableCancelFunctions.clear();\r\n\r\n this._isEnabling = false;\r\n\r\n // Snapshot rendering switches from enabled to disabled\r\n // We reset the performance priority mode to that which it was before enabling snapshot rendering, but first set it to “BackwardCompatible” to allow the system to regenerate resources that may have been optimized for snapshot rendering.\r\n // We'll then restore the original mode at the next frame.\r\n this._scene.performancePriority = ScenePerformancePriority.BackwardCompatible;\r\n if (this._currentPerformancePriorityMode !== ScenePerformancePriority.BackwardCompatible) {\r\n this._log(\r\n \"disableSnapshotRendering\",\r\n `makes sure that the scene is rendered once in BackwardCompatible mode (code: ${ScenePerformancePriority.BackwardCompatible}) before switching to mode ${this._currentPerformancePriorityMode}`\r\n );\r\n\r\n this._pendingCurrentPerformancePriorityMode = this._currentPerformancePriorityMode;\r\n\r\n const callbackWhenSceneReady = () => {\r\n this._log(\"disableSnapshotRendering\", `scene ready, add callback for frame ${this._engine.frameId + 2}`);\r\n\r\n this._executeAtFrame(\r\n this._engine.frameId + 2,\r\n () => {\r\n this._log(\"disableSnapshotRendering\", `switching to performance priority mode ${this._pendingCurrentPerformancePriorityMode}`);\r\n this._scene.performancePriority = this._pendingCurrentPerformancePriorityMode!;\r\n this._pendingCurrentPerformancePriorityMode = undefined;\r\n },\r\n \"whenDisabled\"\r\n );\r\n };\r\n\r\n this._disableCancelFunctions.set(callbackWhenSceneReady, () => this._scene.onReadyObservable.removeCallback(callbackWhenSceneReady));\r\n\r\n this._scene.executeWhenReady(callbackWhenSceneReady);\r\n }\r\n }\r\n\r\n this._engine.snapshotRendering = false;\r\n this._disableRenderingRefCount++;\r\n }\r\n\r\n /**\r\n * Fix meshes for snapshot rendering.\r\n * This method will make sure that some features are disabled or fixed to make sure snapshot rendering works correctly.\r\n * @param meshes List of meshes to fix. If not provided, all meshes in the scene will be fixed.\r\n */\r\n public fixMeshes(meshes?: AbstractMesh[]) {\r\n if (!this._engine.isWebGPU) {\r\n return;\r\n }\r\n\r\n meshes = meshes || this._scene.meshes;\r\n\r\n for (const mesh of meshes) {\r\n (mesh as Mesh).ignoreCameraMaxZ = false;\r\n if (mesh.morphTargetManager) {\r\n mesh.morphTargetManager.numMaxInfluencers = Math.min(mesh.morphTargetManager.numTargets, this._options.morphTargetsNumMaxInfluences!);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Call this method to update a mesh on the GPU after some properties have changed (position, rotation, scaling).\r\n * Note: in FAST snapshot mode the GPU bundle is recorded once and replayed every frame, so draw calls\r\n * (including instance counts) are baked in. This method updates per-mesh GPU data such as transforms and\r\n * `mesh.visibility`, but it cannot change whether a recorded draw call is emitted. To apply changes such as\r\n * `mesh.isVisible`, `setEnabled(false)`, or per-instance visibility/state changes that affect instance counts,\r\n * wrap the change in a disableSnapshotRendering() / enableSnapshotRendering() pair so the snapshot is\r\n * re-recorded.\r\n * @param mesh The mesh to update. Can be a single mesh or an array of meshes to update.\r\n * @param updateInstancedMeshes If true, the method will also update instanced meshes. Default is true. If you know instanced meshes won't move (or you don't have instanced meshes), you can set this to false to save some CPU time.\r\n */\r\n public updateMesh(mesh: AbstractMesh | AbstractMesh[], updateInstancedMeshes = true) {\r\n if (!this._fastSnapshotRenderingEnabled) {\r\n return;\r\n }\r\n\r\n if (Array.isArray(mesh)) {\r\n for (const m of mesh) {\r\n if (!updateInstancedMeshes || !this._updateInstancedMesh(m)) {\r\n m.transferToEffect(m.computeWorldMatrix());\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if (!updateInstancedMeshes || !this._updateInstancedMesh(mesh)) {\r\n mesh.transferToEffect(mesh.computeWorldMatrix());\r\n }\r\n }\r\n\r\n private _updateInstancedMesh(mesh: AbstractMesh) {\r\n if (mesh.hasInstances) {\r\n if (mesh.subMeshes) {\r\n const sourceMesh = mesh as Mesh;\r\n for (const subMesh of sourceMesh.subMeshes) {\r\n const batch = sourceMesh._getInstancesRenderList(subMesh._id);\r\n sourceMesh._updateInstancedBuffers(subMesh, batch, batch.parent.instancesBufferSize, this._engine);\r\n }\r\n }\r\n return true;\r\n } else if (mesh.isAnInstance) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Update the meshes used in an effect layer to ensure that snapshot rendering works correctly for these meshes in this layer.\r\n * @param layer The effect layer or frame graph layer\r\n * @param autoUpdate If true, the helper will automatically update the meshes of the layer with each frame. If false, you'll need to call this method manually when the camera or layer meshes move or rotate.\r\n */\r\n public updateMeshesForEffectLayer(layer: EffectLayer | FrameGraphBaseLayerTask, autoUpdate = true) {\r\n if (!this._engine.isWebGPU) {\r\n return;\r\n }\r\n\r\n const renderPassId = layer instanceof FrameGraphBaseLayerTask ? layer.objectRendererForLayer.objectRenderer.renderPassId : layer.mainTexture.renderPassId;\r\n\r\n if (autoUpdate) {\r\n this._onBeforeRenderObserverUpdateLayer = this._scene.onBeforeRenderObservable.add(() => {\r\n this._updateMeshMatricesForRenderPassId(renderPassId);\r\n });\r\n } else {\r\n this._updateMeshMatricesForRenderPassId(renderPassId);\r\n }\r\n }\r\n\r\n /**\r\n * Dispose the helper\r\n */\r\n public dispose() {\r\n if (!this._engine.isWebGPU) {\r\n return;\r\n }\r\n\r\n this._scene.onBeforeRenderObservable.remove(this._onBeforeRenderObserver);\r\n this._scene.onBeforeRenderObservable.remove(this._onBeforeRenderObserverUpdateLayer);\r\n this._engine.onResizeObservable.remove(this._onResizeObserver);\r\n }\r\n\r\n private get _fastSnapshotRenderingEnabled() {\r\n return this._engine.snapshotRendering && this._engine.snapshotRenderingMode === Constants.SNAPSHOTRENDERING_FAST;\r\n }\r\n\r\n private _updateMeshMatricesForRenderPassId(renderPassId: number) {\r\n if (!this._fastSnapshotRenderingEnabled) {\r\n return;\r\n }\r\n\r\n const sceneTransformationMatrix =\r\n this._scene.objectRenderers.find((renderer) => renderer.renderPassId === renderPassId)?.activeCamera?.getTransformationMatrix() ?? this._scene.getTransformMatrix();\r\n\r\n for (let i = 0; i < this._scene.meshes.length; ++i) {\r\n const mesh = this._scene.meshes[i];\r\n if (!mesh.subMeshes) {\r\n continue;\r\n }\r\n\r\n for (let j = 0; j < mesh.subMeshes.length; ++j) {\r\n const dw = mesh.subMeshes[j]._getDrawWrapper(renderPassId);\r\n const effect = dw?.effect;\r\n if (effect) {\r\n const dataBuffer = (dw.drawContext as WebGPUDrawContext).buffers[\"LeftOver\" satisfies (typeof WebGPUShaderProcessor)[\"LeftOvertUBOName\"]];\r\n const ubLeftOver = (effect._pipelineContext as WebGPUPipelineContext)?.uniformBuffer;\r\n if (dataBuffer && ubLeftOver && ubLeftOver.setDataBuffer(dataBuffer)) {\r\n effect.setMatrix(\"viewProjection\", sceneTransformationMatrix);\r\n effect.setMatrix(\"world\", mesh.computeWorldMatrix());\r\n ubLeftOver.update();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private _spriteRendererDirectMatrixUpdate(dw: DrawWrapper, camera: Camera) {\r\n const effect = dw?.effect;\r\n if (effect) {\r\n const dataBuffer = (dw.drawContext as WebGPUDrawContext).buffers[\"LeftOver\" satisfies (typeof WebGPUShaderProcessor)[\"LeftOvertUBOName\"]];\r\n const ubLeftOver = (effect._pipelineContext as WebGPUPipelineContext)?.uniformBuffer;\r\n if (dataBuffer && ubLeftOver && ubLeftOver.setDataBuffer(dataBuffer)) {\r\n effect.setMatrix(\"view\", camera.getViewMatrix());\r\n effect.setMatrix(\"projection\", camera.getProjectionMatrix());\r\n ubLeftOver.update();\r\n }\r\n }\r\n }\r\n\r\n private _spriteRendererUpdateEffects(drawWrapperBase: DrawWrapper, drawWrapperDepth: DrawWrapper, camera: Camera) {\r\n this._spriteRendererDirectMatrixUpdate(drawWrapperBase, camera);\r\n this._spriteRendererDirectMatrixUpdate(drawWrapperDepth, camera);\r\n }\r\n\r\n /**\r\n * Make a CPU particle system compatible with FAST snapshot rendering.\r\n * The particle system will always render at full capacity (`getCapacity()` quads), with inactive slots collapsed\r\n * to degenerate triangles via zero-fill. This keeps the recorded GPU bundle's draw call valid every frame, while\r\n * the live particle data is uploaded to the bundle-referenced vertex buffer through the normal `animate()` path.\r\n *\r\n * The helper additionally advances the particle simulation and updates view/projection (and `eyePosition`/`invView`\r\n * for billboard modes) into the particle system's draw wrappers each frame, because FAST snapshot replay skips the\r\n * normal scene particle evaluation path after the bundle is recorded.\r\n *\r\n * Notes:\r\n * - Call this BEFORE `enableSnapshotRendering()` so the recording sees the correct draw count.\r\n * - GPU particle systems (`GPUParticleSystem`) are not supported by this method.\r\n * - Vertex shader cost scales with `getCapacity()` rather than the live particle count, so size capacity realistically.\r\n * - Per-frame uniforms other than camera matrices (e.g. `textureMask`, `translationPivot`, clip planes, fog) are\r\n * baked at recording time and will not update during snapshot replay.\r\n * @param particleSystem The particle system to fix\r\n */\r\n public fixParticleSystem(particleSystem: IParticleSystem): void {\r\n if (!this._engine.isWebGPU) {\r\n return;\r\n }\r\n\r\n if (particleSystem.getClassName() !== \"ParticleSystem\") {\r\n this._log(\"fixParticleSystem\", `skipping ${particleSystem.name}: only CPU ParticleSystem is supported (got ${particleSystem.getClassName()})`);\r\n return;\r\n }\r\n\r\n const ps = particleSystem as ParticleSystem;\r\n const fixedCapacityInitialized = ps._initFixedCapacitySnapshotData();\r\n\r\n // The recorded bundle bakes in the draw-call vertex/instance count. If snapshot rendering is already active\r\n // (or in the process of being enabled) when we flip the flag, the bundle was recorded with the live particle\r\n // count and is now stale. Cycle disable/enable so the next recording picks up the fixed-capacity draw count.\r\n if (fixedCapacityInitialized && (this._fastSnapshotRenderingEnabled || this._isEnabling)) {\r\n Logger.Warn(\r\n `SnapshotRenderingHelper.fixParticleSystem(\"${particleSystem.name}\") was called after snapshot rendering was enabled. ` +\r\n `Forcing a re-record so the bundle uses the fixed-capacity draw count. Call fixParticleSystem before enableSnapshotRendering to avoid this.`\r\n );\r\n this.disableSnapshotRendering(\"fixParticleSystem auto-recover\");\r\n this.enableSnapshotRendering(\"fixParticleSystem auto-recover\");\r\n }\r\n }\r\n\r\n private _updateFixedCapacityParticleSystem(ps: ParticleSystem, camera: Camera): void {\r\n if (!this._scene.particlesEnabled || !ps.isStarted() || !ps.emitter) {\r\n ps._clearFixedCapacitySnapshotData();\r\n return;\r\n }\r\n\r\n const emitter = ps.emitter as { position?: unknown; isEnabled?: () => boolean };\r\n if (!emitter.position || emitter.isEnabled?.()) {\r\n ps.animate();\r\n this._particleSystemUpdateEffects(ps, camera);\r\n } else {\r\n ps._clearFixedCapacitySnapshotData();\r\n }\r\n }\r\n\r\n private _particleSystemUpdateEffects(ps: ParticleSystem, camera: Camera) {\r\n const drawWrappers = (ps as unknown as { _drawWrappers: DrawWrapper[][] })._drawWrappers;\r\n if (!drawWrappers) {\r\n return;\r\n }\r\n\r\n const viewMatrix = ps.defaultViewMatrix ?? camera.getViewMatrix();\r\n const projectionMatrix = ps.defaultProjectionMatrix ?? camera.getProjectionMatrix();\r\n // Compute invView lazily once per system per frame, only if any draw wrapper actually needs it.\r\n let invViewMatrix: Nullable<Matrix> = null;\r\n\r\n for (const perPass of drawWrappers) {\r\n if (!perPass) {\r\n continue;\r\n }\r\n for (const dw of perPass) {\r\n invViewMatrix = this._particleSystemDirectMatrixUpdate(dw, viewMatrix, projectionMatrix, camera, invViewMatrix);\r\n }\r\n }\r\n }\r\n\r\n private _particleSystemBillboardFlags = new WeakMap<object, { billboard: boolean; billboardAll: boolean }>();\r\n\r\n private _particleSystemDirectMatrixUpdate(\r\n dw: Nullable<DrawWrapper>,\r\n viewMatrix: Matrix,\r\n projectionMatrix: Matrix,\r\n camera: Camera,\r\n invViewMatrix: Nullable<Matrix>\r\n ): Nullable<Matrix> {\r\n const effect = dw?.effect;\r\n if (!effect) {\r\n return invViewMatrix;\r\n }\r\n const dataBuffer = (dw!.drawContext as WebGPUDrawContext).buffers[\"LeftOver\" satisfies (typeof WebGPUShaderProcessor)[\"LeftOvertUBOName\"]];\r\n const ubLeftOver = (effect._pipelineContext as WebGPUPipelineContext)?.uniformBuffer;\r\n if (!dataBuffer || !ubLeftOver || !ubLeftOver.setDataBuffer(dataBuffer)) {\r\n return invViewMatrix;\r\n }\r\n effect.setMatrix(\"view\", viewMatrix);\r\n effect.setMatrix(\"projection\", projectionMatrix);\r\n let flags = this._particleSystemBillboardFlags.get(effect);\r\n if (!flags) {\r\n const defines = effect.defines ?? \"\";\r\n flags = { billboard: defines.indexOf(\"#define BILLBOARD\") >= 0, billboardAll: defines.indexOf(\"#define BILLBOARDMODE_ALL\") >= 0 };\r\n this._particleSystemBillboardFlags.set(effect, flags);\r\n }\r\n if (flags.billboard) {\r\n effect.setVector3(\"eyePosition\", camera.globalPosition);\r\n }\r\n if (flags.billboardAll) {\r\n if (!invViewMatrix) {\r\n invViewMatrix = TmpVectors.Matrix[0];\r\n viewMatrix.invertToRef(invViewMatrix);\r\n }\r\n effect.setMatrix(\"invView\", invViewMatrix);\r\n }\r\n ubLeftOver.update();\r\n\r\n return invViewMatrix;\r\n }\r\n\r\n private _executeAtFrame(frameId: number, func: () => void, mode: \"whenEnabled\" | \"whenDisabled\" = \"whenEnabled\") {\r\n const callback = () => {\r\n if (this._engine.frameId >= frameId) {\r\n this._engine.onEndFrameObservable.remove(obs);\r\n if (mode === \"whenEnabled\") {\r\n this._enableCancelFunctions.delete(callback);\r\n } else {\r\n this._disableCancelFunctions.delete(callback);\r\n }\r\n func();\r\n }\r\n };\r\n\r\n const obs = this._engine.onEndFrameObservable.add(callback);\r\n if (mode === \"whenEnabled\") {\r\n this._enableCancelFunctions.set(callback, () => this._engine.onEndFrameObservable.remove(obs));\r\n } else {\r\n this._disableCancelFunctions.set(callback, () => this._engine.onEndFrameObservable.remove(obs));\r\n }\r\n }\r\n\r\n private _log(funcName: string, message: string) {\r\n if (this.showDebugLogs) {\r\n Logger.Log(`[Frame: ${this._engine.frameId}] SnapshotRenderingHelper:${funcName} - ${message}`);\r\n }\r\n }\r\n}\r\n"]}
@@ -1,7 +1,9 @@
1
1
  import { type BaseTexture } from "../Materials/Textures/baseTexture.js";
2
2
  import { type InternalTexture } from "../Materials/Textures/internalTexture.js";
3
- import { Texture } from "../Materials/Textures/texture.js";
3
+ import { Texture } from "../Materials/Textures/texture.pure.js";
4
4
  import { type Scene } from "../scene.js";
5
+ import { FromHalfFloat, ToHalfFloat } from "./halfFloat.js";
6
+ export { FromHalfFloat, ToHalfFloat };
5
7
  /**
6
8
  * Uses the GPU to create a copy texture rescaled at a given size
7
9
  * @param texture Texture to copy from
@@ -24,18 +26,6 @@ export declare function CreateResizedCopy(texture: Texture, width: number, heigh
24
26
  * @returns a promise with the internalTexture having its texture replaced by the result of the processing
25
27
  */
26
28
  export declare function ApplyPostProcess(postProcessName: string, internalTexture: InternalTexture, scene: Scene, type?: number, samplingMode?: number, format?: number, width?: number, height?: number): Promise<InternalTexture>;
27
- /**
28
- * Converts a number to half float
29
- * @param value number to convert
30
- * @returns converted number
31
- */
32
- export declare function ToHalfFloat(value: number): number;
33
- /**
34
- * Converts a half float to a number
35
- * @param value half float to convert
36
- * @returns converted half float
37
- */
38
- export declare function FromHalfFloat(value: number): number;
39
29
  /**
40
30
  * Waits for when the given texture is ready to be used (downloaded, converted, mip mapped...)
41
31
  * @param texture the texture to wait for
@@ -1,9 +1,11 @@
1
- import { Texture } from "../Materials/Textures/texture.js";
2
- import { RenderTargetTexture } from "../Materials/Textures/renderTargetTexture.js";
3
- import { PassPostProcess } from "../PostProcesses/passPostProcess.js";
1
+ import { Texture } from "../Materials/Textures/texture.pure.js";
2
+ import { RenderTargetTexture } from "../Materials/Textures/renderTargetTexture.pure.js";
3
+ import { PassPostProcess } from "../PostProcesses/passPostProcess.pure.js";
4
4
 
5
- import { PostProcess } from "../PostProcesses/postProcess.js";
5
+ import { PostProcess } from "../PostProcesses/postProcess.pure.js";
6
6
  import { Clamp } from "../Maths/math.scalar.functions.js";
7
+ import { FromHalfFloat, ToHalfFloat } from "./halfFloat.js";
8
+ export { FromHalfFloat, ToHalfFloat };
7
9
  /**
8
10
  * Uses the GPU to create a copy texture rescaled at a given size
9
11
  * @param texture Texture to copy from
@@ -113,66 +115,6 @@ export function ApplyPostProcess(postProcessName, internalTexture, scene, type,
113
115
  });
114
116
  });
115
117
  }
116
- // ref: http://stackoverflow.com/questions/32633585/how-do-you-convert-to-half-floats-in-javascript
117
- let floatView;
118
- let int32View;
119
- /**
120
- * Converts a number to half float
121
- * @param value number to convert
122
- * @returns converted number
123
- */
124
- export function ToHalfFloat(value) {
125
- if (!floatView) {
126
- floatView = new Float32Array(1);
127
- int32View = new Int32Array(floatView.buffer);
128
- }
129
- floatView[0] = value;
130
- const x = int32View[0];
131
- let bits = (x >> 16) & 0x8000; /* Get the sign */
132
- let m = (x >> 12) & 0x07ff; /* Keep one extra bit for rounding */
133
- const e = (x >> 23) & 0xff; /* Using int is faster here */
134
- /* If zero, or denormal, or exponent underflows too much for a denormal
135
- * half, return signed zero. */
136
- if (e < 103) {
137
- return bits;
138
- }
139
- /* If NaN, return NaN. If Inf or exponent overflow, return Inf. */
140
- if (e > 142) {
141
- bits |= 0x7c00;
142
- /* If exponent was 0xff and one mantissa bit was set, it means NaN,
143
- * not Inf, so make sure we set one mantissa bit too. */
144
- bits |= (e == 255 ? 0 : 1) && x & 0x007fffff;
145
- return bits;
146
- }
147
- /* If exponent underflows but not too much, return a denormal */
148
- if (e < 113) {
149
- m |= 0x0800;
150
- /* Extra rounding may overflow and set mantissa to 0 and exponent
151
- * to 1, which is OK. */
152
- bits |= (m >> (114 - e)) + ((m >> (113 - e)) & 1);
153
- return bits;
154
- }
155
- bits |= ((e - 112) << 10) | (m >> 1);
156
- bits += m & 1;
157
- return bits;
158
- }
159
- /**
160
- * Converts a half float to a number
161
- * @param value half float to convert
162
- * @returns converted half float
163
- */
164
- export function FromHalfFloat(value) {
165
- const s = (value & 0x8000) >> 15;
166
- const e = (value & 0x7c00) >> 10;
167
- const f = value & 0x03ff;
168
- if (e === 0) {
169
- return (s ? -1 : 1) * Math.pow(2, -14) * (f / Math.pow(2, 10));
170
- }
171
- else if (e == 0x1f) {
172
- return f ? NaN : (s ? -1 : 1) * Infinity;
173
- }
174
- return (s ? -1 : 1) * Math.pow(2, e - 15) * (1 + f / Math.pow(2, 10));
175
- }
176
118
  function IsCompressedTextureFormat(format) {
177
119
  switch (format) {
178
120
  case 36492:
@@ -1 +1 @@
1
- {"version":3,"file":"textureTools.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/textureTools.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { type BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport { type InternalTexture } from \"../Materials/Textures/internalTexture\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport { PassPostProcess } from \"../PostProcesses/passPostProcess\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { type Scene } from \"../scene\";\r\nimport { PostProcess } from \"../PostProcesses/postProcess\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { type Observable } from \"./observable\";\r\nimport { type Nullable } from \"../types\";\r\nimport { Clamp } from \"../Maths/math.scalar.functions\";\r\n\r\n/**\r\n * Uses the GPU to create a copy texture rescaled at a given size\r\n * @param texture Texture to copy from\r\n * @param width defines the desired width\r\n * @param height defines the desired height\r\n * @param useBilinearMode defines if bilinear mode has to be used\r\n * @returns the generated texture\r\n */\r\nexport function CreateResizedCopy(texture: Texture, width: number, height: number, useBilinearMode: boolean = true): Texture {\r\n const scene = <Scene>texture.getScene();\r\n const engine = scene.getEngine();\r\n\r\n const rtt = new RenderTargetTexture(\r\n \"resized\" + texture.name,\r\n { width: width, height: height },\r\n scene,\r\n !texture.noMipmap,\r\n true,\r\n (<InternalTexture>texture._texture).type,\r\n false,\r\n texture.samplingMode,\r\n false\r\n );\r\n\r\n rtt.wrapU = texture.wrapU;\r\n rtt.wrapV = texture.wrapV;\r\n rtt.uOffset = texture.uOffset;\r\n rtt.vOffset = texture.vOffset;\r\n rtt.uScale = texture.uScale;\r\n rtt.vScale = texture.vScale;\r\n rtt.uAng = texture.uAng;\r\n rtt.vAng = texture.vAng;\r\n rtt.wAng = texture.wAng;\r\n rtt.coordinatesIndex = texture.coordinatesIndex;\r\n rtt.level = texture.level;\r\n rtt.anisotropicFilteringLevel = texture.anisotropicFilteringLevel;\r\n (<InternalTexture>rtt._texture).isReady = false;\r\n\r\n texture.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n texture.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n\r\n const passPostProcess = new PassPostProcess(\r\n \"pass\",\r\n 1,\r\n null,\r\n useBilinearMode ? Texture.BILINEAR_SAMPLINGMODE : Texture.NEAREST_SAMPLINGMODE,\r\n engine,\r\n false,\r\n Constants.TEXTURETYPE_UNSIGNED_BYTE\r\n );\r\n passPostProcess.externalTextureSamplerBinding = true;\r\n passPostProcess.onEffectCreatedObservable.addOnce((e) => {\r\n e.executeWhenCompiled(() => {\r\n passPostProcess.onApply = function (effect) {\r\n effect.setTexture(\"textureSampler\", texture);\r\n };\r\n\r\n const internalTexture = rtt.renderTarget;\r\n\r\n if (internalTexture) {\r\n scene.postProcessManager.directRender([passPostProcess], internalTexture);\r\n\r\n engine.unBindFramebuffer(internalTexture);\r\n rtt.disposeFramebufferObjects();\r\n passPostProcess.dispose();\r\n\r\n rtt.getInternalTexture()!.isReady = true;\r\n }\r\n });\r\n });\r\n\r\n return rtt;\r\n}\r\n\r\n/**\r\n * Apply a post process to a texture\r\n * @param postProcessName name of the fragment post process\r\n * @param internalTexture the texture to encode\r\n * @param scene the scene hosting the texture\r\n * @param type type of the output texture. If not provided, use the one from internalTexture\r\n * @param samplingMode sampling mode to use to sample the source texture. If not provided, use the one from internalTexture\r\n * @param format format of the output texture. If not provided, use the one from internalTexture\r\n * @param width width of the output texture. If not provided, use the one from internalTexture\r\n * @param height height of the output texture. If not provided, use the one from internalTexture\r\n * @returns a promise with the internalTexture having its texture replaced by the result of the processing\r\n */\r\n// eslint-disable-next-line @typescript-eslint/promise-function-async\r\nexport function ApplyPostProcess(\r\n postProcessName: string,\r\n internalTexture: InternalTexture,\r\n scene: Scene,\r\n type?: number,\r\n samplingMode?: number,\r\n format?: number,\r\n width?: number,\r\n height?: number\r\n): Promise<InternalTexture> {\r\n // Gets everything ready.\r\n const engine = internalTexture.getEngine();\r\n\r\n internalTexture.isReady = false;\r\n\r\n samplingMode = samplingMode ?? internalTexture.samplingMode;\r\n type = type ?? internalTexture.type;\r\n format = format ?? internalTexture.format;\r\n width = width ?? internalTexture.width;\r\n height = height ?? internalTexture.height;\r\n\r\n if (type === -1) {\r\n type = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n }\r\n\r\n return new Promise((resolve) => {\r\n // Create the post process\r\n const postProcess = new PostProcess(\"postprocess\", postProcessName, null, null, 1, null, samplingMode, engine, false, undefined, type, undefined, null, false, format);\r\n postProcess.externalTextureSamplerBinding = true;\r\n\r\n // Hold the output of the decoding.\r\n const encodedTexture = engine.createRenderTargetTexture(\r\n { width: width, height: height },\r\n {\r\n generateDepthBuffer: false,\r\n generateMipMaps: false,\r\n generateStencilBuffer: false,\r\n samplingMode,\r\n type,\r\n format,\r\n }\r\n );\r\n\r\n postProcess.onEffectCreatedObservable.addOnce((e) => {\r\n e.executeWhenCompiled(() => {\r\n // PP Render Pass\r\n postProcess.onApply = (effect) => {\r\n effect._bindTexture(\"textureSampler\", internalTexture);\r\n effect.setFloat2(\"scale\", 1, 1);\r\n };\r\n scene.postProcessManager.directRender([postProcess], encodedTexture, true);\r\n\r\n // Cleanup\r\n engine.restoreDefaultFramebuffer();\r\n engine._releaseTexture(internalTexture);\r\n if (postProcess) {\r\n postProcess.dispose();\r\n }\r\n\r\n // Internal Swap\r\n encodedTexture._swapAndDie(internalTexture);\r\n\r\n // Ready to get rolling again.\r\n internalTexture.type = type!;\r\n internalTexture.format = Constants.TEXTUREFORMAT_RGBA;\r\n internalTexture.isReady = true;\r\n\r\n resolve(internalTexture);\r\n });\r\n });\r\n });\r\n}\r\n\r\n// ref: http://stackoverflow.com/questions/32633585/how-do-you-convert-to-half-floats-in-javascript\r\nlet floatView: Float32Array;\r\nlet int32View: Int32Array;\r\n/**\r\n * Converts a number to half float\r\n * @param value number to convert\r\n * @returns converted number\r\n */\r\nexport function ToHalfFloat(value: number): number {\r\n if (!floatView) {\r\n floatView = new Float32Array(1);\r\n int32View = new Int32Array(floatView.buffer);\r\n }\r\n\r\n floatView[0] = value;\r\n const x = int32View[0];\r\n\r\n let bits = (x >> 16) & 0x8000; /* Get the sign */\r\n let m = (x >> 12) & 0x07ff; /* Keep one extra bit for rounding */\r\n const e = (x >> 23) & 0xff; /* Using int is faster here */\r\n\r\n /* If zero, or denormal, or exponent underflows too much for a denormal\r\n * half, return signed zero. */\r\n if (e < 103) {\r\n return bits;\r\n }\r\n\r\n /* If NaN, return NaN. If Inf or exponent overflow, return Inf. */\r\n if (e > 142) {\r\n bits |= 0x7c00;\r\n /* If exponent was 0xff and one mantissa bit was set, it means NaN,\r\n * not Inf, so make sure we set one mantissa bit too. */\r\n bits |= (e == 255 ? 0 : 1) && x & 0x007fffff;\r\n return bits;\r\n }\r\n\r\n /* If exponent underflows but not too much, return a denormal */\r\n if (e < 113) {\r\n m |= 0x0800;\r\n /* Extra rounding may overflow and set mantissa to 0 and exponent\r\n * to 1, which is OK. */\r\n bits |= (m >> (114 - e)) + ((m >> (113 - e)) & 1);\r\n return bits;\r\n }\r\n\r\n bits |= ((e - 112) << 10) | (m >> 1);\r\n bits += m & 1;\r\n return bits;\r\n}\r\n\r\n/**\r\n * Converts a half float to a number\r\n * @param value half float to convert\r\n * @returns converted half float\r\n */\r\nexport function FromHalfFloat(value: number): number {\r\n const s = (value & 0x8000) >> 15;\r\n const e = (value & 0x7c00) >> 10;\r\n const f = value & 0x03ff;\r\n\r\n if (e === 0) {\r\n return (s ? -1 : 1) * Math.pow(2, -14) * (f / Math.pow(2, 10));\r\n } else if (e == 0x1f) {\r\n return f ? NaN : (s ? -1 : 1) * Infinity;\r\n }\r\n\r\n return (s ? -1 : 1) * Math.pow(2, e - 15) * (1 + f / Math.pow(2, 10));\r\n}\r\n\r\nfunction IsCompressedTextureFormat(format: number): boolean {\r\n switch (format) {\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_BPTC_UNORM:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB_ALPHA_BPTC_UNORM:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGB_BPTC_SIGNED_FLOAT:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT5:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT3:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT1:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGB_S3TC_DXT1:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB_S3TC_DXT1_EXT:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_4x4:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_5x4:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_5x5:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_6x5:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_6x6:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_8x5:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_8x6:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_8x8:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_10x5:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_10x6:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_10x8:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_10x10:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_12x10:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_12x12:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGB_ETC1_WEBGL:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGB8_ETC2:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ETC2:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA8_ETC2_EAC:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Waits for when the given texture is ready to be used (downloaded, converted, mip mapped...)\r\n * @param texture the texture to wait for\r\n * @returns a promise that resolves when the texture is ready\r\n */\r\nexport async function WhenTextureReadyAsync(texture: BaseTexture): Promise<void> {\r\n if (texture.isReady()) {\r\n return;\r\n }\r\n\r\n if (texture.loadingError) {\r\n throw new Error(texture.errorObject?.message || `Texture ${texture.name} errored while loading.`);\r\n }\r\n\r\n const onLoadObservable = (texture as any).onLoadObservable as Observable<BaseTexture>;\r\n if (onLoadObservable) {\r\n return await new Promise((res) => onLoadObservable.addOnce(() => res()));\r\n }\r\n\r\n const onLoadedObservable = texture._texture?.onLoadedObservable;\r\n if (onLoadedObservable) {\r\n return await new Promise((res) => onLoadedObservable.addOnce(() => res()));\r\n }\r\n\r\n throw new Error(`Cannot determine readiness of texture ${texture.name}.`);\r\n}\r\n\r\n/**\r\n * Gets the data of the specified texture by rendering it to an intermediate RGBA texture and retrieving the bytes from it.\r\n * This is convienent to get 8-bit RGBA values for a texture in a GPU compressed format, which cannot be read using readPixels.\r\n * @internal\r\n */\r\nasync function ReadPixelsUsingRTT(texture: BaseTexture, width: number, height: number, face: number, lod: number, slice: number = 0): Promise<Uint8Array> {\r\n const scene = texture.getScene()!;\r\n const engine = scene.getEngine();\r\n const sourceInternalTexture = texture.getInternalTexture();\r\n const is3DTexture = texture.is3D || !!sourceInternalTexture?.is3D;\r\n\r\n if (!engine.isWebGPU) {\r\n if (is3DTexture) {\r\n await import(\"../Shaders/lod3D.fragment\");\r\n } else if (texture.isCube) {\r\n await import(\"../Shaders/lodCube.fragment\");\r\n } else {\r\n await import(\"../Shaders/lod.fragment\");\r\n }\r\n } else {\r\n if (is3DTexture) {\r\n await import(\"../ShadersWGSL/lod3D.fragment\");\r\n } else if (texture.isCube) {\r\n await import(\"../ShadersWGSL/lodCube.fragment\");\r\n } else {\r\n await import(\"../ShadersWGSL/lod.fragment\");\r\n }\r\n }\r\n\r\n let lodPostProcess: PostProcess;\r\n\r\n if (is3DTexture) {\r\n lodPostProcess = new PostProcess(\"lod3D\", \"lod3D\", {\r\n uniforms: [\"lod\", \"gamma\", \"slice\"],\r\n samplingMode: Texture.NEAREST_NEAREST_MIPNEAREST,\r\n engine,\r\n shaderLanguage: engine.isWebGPU ? ShaderLanguage.WGSL : ShaderLanguage.GLSL,\r\n });\r\n } else if (!texture.isCube) {\r\n lodPostProcess = new PostProcess(\"lod\", \"lod\", {\r\n uniforms: [\"lod\", \"gamma\"],\r\n samplingMode: Texture.NEAREST_NEAREST_MIPNEAREST,\r\n engine,\r\n shaderLanguage: engine.isWebGPU ? ShaderLanguage.WGSL : ShaderLanguage.GLSL,\r\n });\r\n } else {\r\n const faceDefines = [\"#define POSITIVEX\", \"#define NEGATIVEX\", \"#define POSITIVEY\", \"#define NEGATIVEY\", \"#define POSITIVEZ\", \"#define NEGATIVEZ\"];\r\n lodPostProcess = new PostProcess(\"lodCube\", \"lodCube\", {\r\n uniforms: [\"lod\", \"gamma\"],\r\n samplingMode: Texture.NEAREST_NEAREST_MIPNEAREST,\r\n engine,\r\n defines: faceDefines[face],\r\n shaderLanguage: engine.isWebGPU ? ShaderLanguage.WGSL : ShaderLanguage.GLSL,\r\n });\r\n }\r\n\r\n await new Promise((resolve) => {\r\n lodPostProcess.onEffectCreatedObservable.addOnce((e) => {\r\n e.executeWhenCompiled(() => {\r\n resolve(0);\r\n });\r\n });\r\n });\r\n\r\n const rtt = new RenderTargetTexture(\"temp\", { width: width, height: height }, scene, false);\r\n\r\n lodPostProcess.onApply = function (effect) {\r\n effect.setTexture(\"textureSampler\", texture);\r\n effect.setFloat(\"lod\", lod);\r\n effect.setInt(\"gamma\", texture.gammaSpace ? 1 : 0);\r\n if (is3DTexture) {\r\n effect.setFloat(\"slice\", slice);\r\n }\r\n };\r\n\r\n try {\r\n if (rtt.renderTarget && sourceInternalTexture) {\r\n const samplingMode = sourceInternalTexture.samplingMode;\r\n if (lod !== 0) {\r\n texture.updateSamplingMode(Texture.NEAREST_NEAREST_MIPNEAREST);\r\n } else {\r\n texture.updateSamplingMode(Texture.NEAREST_NEAREST);\r\n }\r\n\r\n scene.postProcessManager.directRender([lodPostProcess], rtt.renderTarget, true);\r\n texture.updateSamplingMode(samplingMode);\r\n\r\n //Reading datas from WebGL\r\n const bufferView = await engine.readPixels(0, 0, width, height);\r\n const data = new Uint8Array(bufferView.buffer, bufferView.byteOffset, bufferView.byteLength);\r\n\r\n // Unbind\r\n engine.unBindFramebuffer(rtt.renderTarget);\r\n\r\n return data;\r\n } else {\r\n throw Error(\"Render to texture failed.\");\r\n }\r\n } finally {\r\n rtt.dispose();\r\n lodPostProcess.dispose();\r\n }\r\n}\r\n\r\n/**\r\n * Gets the pixel data of the specified texture, either by reading it directly\r\n * or by rendering it to an intermediate RGBA texture and retrieving the bytes from it.\r\n * This is convenient to get 8-bit RGBA values for a texture in a GPU compressed format.\r\n * When direct readback returns non-RGBA channel layouts, the result is normalized to RGBA8.\r\n * @param texture the source texture\r\n * @param width the target width of the result, which does not have to match the source texture width\r\n * @param height the target height of the result, which does not have to match the source texture height\r\n * @param face if the texture has multiple faces, the face index to use for the source\r\n * @param lod if the texture has multiple LODs, the lod index to use for the source\r\n * @param forceRTT if true, forces the use of the RTT path for reading pixels (useful for cube maps to ensure correct orientation and gamma)\r\n * @param slice if the texture is 3D, the depth slice index to use for the source\r\n * @returns the 8-bit texture data\r\n */\r\nexport async function GetTextureDataAsync(\r\n texture: BaseTexture,\r\n width?: number,\r\n height?: number,\r\n face: number = 0,\r\n lod: number = 0,\r\n forceRTT: boolean = false,\r\n slice: number = 0\r\n): Promise<Uint8Array> {\r\n await WhenTextureReadyAsync(texture);\r\n const internalTexture = texture.getInternalTexture();\r\n const is3DTexture = texture.is3D || !!internalTexture?.is3D;\r\n\r\n const { width: textureWidth, height: textureHeight } = texture.getSize();\r\n const targetWidth = width ?? textureWidth;\r\n const targetHeight = height ?? textureHeight;\r\n\r\n // If the internal texture format is compressed, we cannot read the pixels directly.\r\n // If we're resizing the texture, we need to use a render target texture.\r\n // forceRTT can be used to ensure correct orientation and gamma for cube maps.\r\n // 3D textures must also use RTT because direct readPixels does not expose slice selection.\r\n if (forceRTT || is3DTexture || IsCompressedTextureFormat(texture.textureFormat) || targetWidth !== textureWidth || targetHeight !== textureHeight) {\r\n if (texture.is2DArray) {\r\n throw new Error(`Reading pixels from 2D array textures with ${forceRTT ? \"RTT\" : \"compression\"} is not supported.`);\r\n }\r\n return await ReadPixelsUsingRTT(texture, targetWidth, targetHeight, face, lod, slice);\r\n }\r\n\r\n let data = (await texture.readPixels(face, lod)) as Nullable<Uint8Array | Float32Array>;\r\n if (!data) {\r\n throw new Error(`Failed to read pixels from texture ${texture.name}.`);\r\n }\r\n\r\n // Convert float RGBA values to uint8, if necessary.\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(Clamp(v) * 255);\r\n }\r\n data = data2;\r\n }\r\n\r\n // Some backends (notably WebGPU for single/dual/triple channel formats) can return\r\n // readback data that is not RGBA8. The inspector preview pipeline expects 4 bytes\r\n // per pixel, so normalize to RGBA here when needed.\r\n const pixelCount = targetWidth * targetHeight;\r\n const expectedLength = pixelCount * 4;\r\n\r\n if (data.length !== expectedLength) {\r\n const componentCount = pixelCount === 0 ? 0 : data.length / pixelCount;\r\n\r\n if (componentCount === 1 || componentCount === 2 || componentCount === 3) {\r\n const normalizedData = new Uint8Array(expectedLength);\r\n\r\n for (let pixel = 0, src = 0, dst = 0; pixel < pixelCount; pixel++, dst += 4) {\r\n const c0 = data[src++];\r\n\r\n if (componentCount === 1) {\r\n // Luminance/R-style data: replicate to RGB and use opaque alpha.\r\n normalizedData[dst] = c0;\r\n normalizedData[dst + 1] = c0;\r\n normalizedData[dst + 2] = c0;\r\n normalizedData[dst + 3] = 255;\r\n continue;\r\n }\r\n\r\n const c1 = data[src++];\r\n if (componentCount === 2) {\r\n // Two-channel data has no standard blue/alpha semantics for preview,\r\n // so preserve R/G, clear B, and force opaque alpha.\r\n normalizedData[dst] = c0;\r\n normalizedData[dst + 1] = c1;\r\n normalizedData[dst + 2] = 0;\r\n normalizedData[dst + 3] = 255;\r\n continue;\r\n }\r\n\r\n // RGB data: append an opaque alpha channel.\r\n normalizedData[dst] = c0;\r\n normalizedData[dst + 1] = c1;\r\n normalizedData[dst + 2] = data[src++];\r\n normalizedData[dst + 3] = 255;\r\n }\r\n\r\n return normalizedData;\r\n }\r\n }\r\n\r\n return data;\r\n}\r\n\r\n/**\r\n * Class used to host texture specific utilities\r\n */\r\nexport const TextureTools = {\r\n /**\r\n * Uses the GPU to create a copy texture rescaled at a given size\r\n * @param texture Texture to copy from\r\n * @param width defines the desired width\r\n * @param height defines the desired height\r\n * @param useBilinearMode defines if bilinear mode has to be used\r\n * @returns the generated texture\r\n */\r\n CreateResizedCopy,\r\n\r\n /**\r\n * Apply a post process to a texture\r\n * @param postProcessName name of the fragment post process\r\n * @param internalTexture the texture to encode\r\n * @param scene the scene hosting the texture\r\n * @param type type of the output texture. If not provided, use the one from internalTexture\r\n * @param samplingMode sampling mode to use to sample the source texture. If not provided, use the one from internalTexture\r\n * @param format format of the output texture. If not provided, use the one from internalTexture\r\n * @returns a promise with the internalTexture having its texture replaced by the result of the processing\r\n */\r\n ApplyPostProcess,\r\n /**\r\n * Converts a number to half float\r\n * @param value number to convert\r\n * @returns converted number\r\n */\r\n ToHalfFloat,\r\n\r\n /**\r\n * Converts a half float to a number\r\n * @param value half float to convert\r\n * @returns converted half float\r\n */\r\n FromHalfFloat,\r\n\r\n /**\r\n * Gets the data of the specified texture by rendering it to an intermediate RGBA texture and retrieving the bytes from it.\r\n * This is convienent to get 8-bit RGBA values for a texture in a GPU compressed format.\r\n * @param texture the source texture\r\n * @param width the width of the result, which does not have to match the source texture width\r\n * @param height the height of the result, which does not have to match the source texture height\r\n * @param face if the texture has multiple faces, the face index to use for the source\r\n * @param lod if the texture has multiple LODs, the lod index to use for the source\r\n * @returns the 8-bit texture data\r\n */\r\n GetTextureDataAsync,\r\n};\r\n"]}
1
+ {"version":3,"file":"textureTools.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/textureTools.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { type BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport { type InternalTexture } from \"../Materials/Textures/internalTexture\";\r\nimport { Texture } from \"../Materials/Textures/texture.pure\";\r\nimport { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture.pure\";\r\nimport { PassPostProcess } from \"../PostProcesses/passPostProcess.pure\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { type Scene } from \"../scene\";\r\nimport { PostProcess } from \"../PostProcesses/postProcess.pure\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { type Observable } from \"./observable\";\r\nimport { type Nullable } from \"../types\";\r\nimport { Clamp } from \"../Maths/math.scalar.functions\";\r\nimport { FromHalfFloat, ToHalfFloat } from \"./halfFloat\";\r\n\r\nexport { FromHalfFloat, ToHalfFloat };\r\n\r\n/**\r\n * Uses the GPU to create a copy texture rescaled at a given size\r\n * @param texture Texture to copy from\r\n * @param width defines the desired width\r\n * @param height defines the desired height\r\n * @param useBilinearMode defines if bilinear mode has to be used\r\n * @returns the generated texture\r\n */\r\nexport function CreateResizedCopy(texture: Texture, width: number, height: number, useBilinearMode: boolean = true): Texture {\r\n const scene = <Scene>texture.getScene();\r\n const engine = scene.getEngine();\r\n\r\n const rtt = new RenderTargetTexture(\r\n \"resized\" + texture.name,\r\n { width: width, height: height },\r\n scene,\r\n !texture.noMipmap,\r\n true,\r\n (<InternalTexture>texture._texture).type,\r\n false,\r\n texture.samplingMode,\r\n false\r\n );\r\n\r\n rtt.wrapU = texture.wrapU;\r\n rtt.wrapV = texture.wrapV;\r\n rtt.uOffset = texture.uOffset;\r\n rtt.vOffset = texture.vOffset;\r\n rtt.uScale = texture.uScale;\r\n rtt.vScale = texture.vScale;\r\n rtt.uAng = texture.uAng;\r\n rtt.vAng = texture.vAng;\r\n rtt.wAng = texture.wAng;\r\n rtt.coordinatesIndex = texture.coordinatesIndex;\r\n rtt.level = texture.level;\r\n rtt.anisotropicFilteringLevel = texture.anisotropicFilteringLevel;\r\n (<InternalTexture>rtt._texture).isReady = false;\r\n\r\n texture.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n texture.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n\r\n const passPostProcess = new PassPostProcess(\r\n \"pass\",\r\n 1,\r\n null,\r\n useBilinearMode ? Texture.BILINEAR_SAMPLINGMODE : Texture.NEAREST_SAMPLINGMODE,\r\n engine,\r\n false,\r\n Constants.TEXTURETYPE_UNSIGNED_BYTE\r\n );\r\n passPostProcess.externalTextureSamplerBinding = true;\r\n passPostProcess.onEffectCreatedObservable.addOnce((e) => {\r\n e.executeWhenCompiled(() => {\r\n passPostProcess.onApply = function (effect) {\r\n effect.setTexture(\"textureSampler\", texture);\r\n };\r\n\r\n const internalTexture = rtt.renderTarget;\r\n\r\n if (internalTexture) {\r\n scene.postProcessManager.directRender([passPostProcess], internalTexture);\r\n\r\n engine.unBindFramebuffer(internalTexture);\r\n rtt.disposeFramebufferObjects();\r\n passPostProcess.dispose();\r\n\r\n rtt.getInternalTexture()!.isReady = true;\r\n }\r\n });\r\n });\r\n\r\n return rtt;\r\n}\r\n\r\n/**\r\n * Apply a post process to a texture\r\n * @param postProcessName name of the fragment post process\r\n * @param internalTexture the texture to encode\r\n * @param scene the scene hosting the texture\r\n * @param type type of the output texture. If not provided, use the one from internalTexture\r\n * @param samplingMode sampling mode to use to sample the source texture. If not provided, use the one from internalTexture\r\n * @param format format of the output texture. If not provided, use the one from internalTexture\r\n * @param width width of the output texture. If not provided, use the one from internalTexture\r\n * @param height height of the output texture. If not provided, use the one from internalTexture\r\n * @returns a promise with the internalTexture having its texture replaced by the result of the processing\r\n */\r\n// eslint-disable-next-line @typescript-eslint/promise-function-async\r\nexport function ApplyPostProcess(\r\n postProcessName: string,\r\n internalTexture: InternalTexture,\r\n scene: Scene,\r\n type?: number,\r\n samplingMode?: number,\r\n format?: number,\r\n width?: number,\r\n height?: number\r\n): Promise<InternalTexture> {\r\n // Gets everything ready.\r\n const engine = internalTexture.getEngine();\r\n\r\n internalTexture.isReady = false;\r\n\r\n samplingMode = samplingMode ?? internalTexture.samplingMode;\r\n type = type ?? internalTexture.type;\r\n format = format ?? internalTexture.format;\r\n width = width ?? internalTexture.width;\r\n height = height ?? internalTexture.height;\r\n\r\n if (type === -1) {\r\n type = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n }\r\n\r\n return new Promise((resolve) => {\r\n // Create the post process\r\n const postProcess = new PostProcess(\"postprocess\", postProcessName, null, null, 1, null, samplingMode, engine, false, undefined, type, undefined, null, false, format);\r\n postProcess.externalTextureSamplerBinding = true;\r\n\r\n // Hold the output of the decoding.\r\n const encodedTexture = engine.createRenderTargetTexture(\r\n { width: width, height: height },\r\n {\r\n generateDepthBuffer: false,\r\n generateMipMaps: false,\r\n generateStencilBuffer: false,\r\n samplingMode,\r\n type,\r\n format,\r\n }\r\n );\r\n\r\n postProcess.onEffectCreatedObservable.addOnce((e) => {\r\n e.executeWhenCompiled(() => {\r\n // PP Render Pass\r\n postProcess.onApply = (effect) => {\r\n effect._bindTexture(\"textureSampler\", internalTexture);\r\n effect.setFloat2(\"scale\", 1, 1);\r\n };\r\n scene.postProcessManager.directRender([postProcess], encodedTexture, true);\r\n\r\n // Cleanup\r\n engine.restoreDefaultFramebuffer();\r\n engine._releaseTexture(internalTexture);\r\n if (postProcess) {\r\n postProcess.dispose();\r\n }\r\n\r\n // Internal Swap\r\n encodedTexture._swapAndDie(internalTexture);\r\n\r\n // Ready to get rolling again.\r\n internalTexture.type = type!;\r\n internalTexture.format = Constants.TEXTUREFORMAT_RGBA;\r\n internalTexture.isReady = true;\r\n\r\n resolve(internalTexture);\r\n });\r\n });\r\n });\r\n}\r\n\r\nfunction IsCompressedTextureFormat(format: number): boolean {\r\n switch (format) {\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_BPTC_UNORM:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB_ALPHA_BPTC_UNORM:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGB_BPTC_SIGNED_FLOAT:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT5:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT3:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT1:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGB_S3TC_DXT1:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB_S3TC_DXT1_EXT:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_4x4:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_5x4:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_5x5:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_6x5:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_6x6:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_8x5:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_8x6:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_8x8:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_10x5:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_10x6:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_10x8:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_10x10:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_12x10:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_12x12:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGB_ETC1_WEBGL:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGB8_ETC2:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ETC2:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA8_ETC2_EAC:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Waits for when the given texture is ready to be used (downloaded, converted, mip mapped...)\r\n * @param texture the texture to wait for\r\n * @returns a promise that resolves when the texture is ready\r\n */\r\nexport async function WhenTextureReadyAsync(texture: BaseTexture): Promise<void> {\r\n if (texture.isReady()) {\r\n return;\r\n }\r\n\r\n if (texture.loadingError) {\r\n throw new Error(texture.errorObject?.message || `Texture ${texture.name} errored while loading.`);\r\n }\r\n\r\n const onLoadObservable = (texture as any).onLoadObservable as Observable<BaseTexture>;\r\n if (onLoadObservable) {\r\n return await new Promise((res) => onLoadObservable.addOnce(() => res()));\r\n }\r\n\r\n const onLoadedObservable = texture._texture?.onLoadedObservable;\r\n if (onLoadedObservable) {\r\n return await new Promise((res) => onLoadedObservable.addOnce(() => res()));\r\n }\r\n\r\n throw new Error(`Cannot determine readiness of texture ${texture.name}.`);\r\n}\r\n\r\n/**\r\n * Gets the data of the specified texture by rendering it to an intermediate RGBA texture and retrieving the bytes from it.\r\n * This is convienent to get 8-bit RGBA values for a texture in a GPU compressed format, which cannot be read using readPixels.\r\n * @internal\r\n */\r\nasync function ReadPixelsUsingRTT(texture: BaseTexture, width: number, height: number, face: number, lod: number, slice: number = 0): Promise<Uint8Array> {\r\n const scene = texture.getScene()!;\r\n const engine = scene.getEngine();\r\n const sourceInternalTexture = texture.getInternalTexture();\r\n const is3DTexture = texture.is3D || !!sourceInternalTexture?.is3D;\r\n\r\n if (!engine.isWebGPU) {\r\n if (is3DTexture) {\r\n await import(\"../Shaders/lod3D.fragment\");\r\n } else if (texture.isCube) {\r\n await import(\"../Shaders/lodCube.fragment\");\r\n } else {\r\n await import(\"../Shaders/lod.fragment\");\r\n }\r\n } else {\r\n if (is3DTexture) {\r\n await import(\"../ShadersWGSL/lod3D.fragment\");\r\n } else if (texture.isCube) {\r\n await import(\"../ShadersWGSL/lodCube.fragment\");\r\n } else {\r\n await import(\"../ShadersWGSL/lod.fragment\");\r\n }\r\n }\r\n\r\n let lodPostProcess: PostProcess;\r\n\r\n if (is3DTexture) {\r\n lodPostProcess = new PostProcess(\"lod3D\", \"lod3D\", {\r\n uniforms: [\"lod\", \"gamma\", \"slice\"],\r\n samplingMode: Texture.NEAREST_NEAREST_MIPNEAREST,\r\n engine,\r\n shaderLanguage: engine.isWebGPU ? ShaderLanguage.WGSL : ShaderLanguage.GLSL,\r\n });\r\n } else if (!texture.isCube) {\r\n lodPostProcess = new PostProcess(\"lod\", \"lod\", {\r\n uniforms: [\"lod\", \"gamma\"],\r\n samplingMode: Texture.NEAREST_NEAREST_MIPNEAREST,\r\n engine,\r\n shaderLanguage: engine.isWebGPU ? ShaderLanguage.WGSL : ShaderLanguage.GLSL,\r\n });\r\n } else {\r\n const faceDefines = [\"#define POSITIVEX\", \"#define NEGATIVEX\", \"#define POSITIVEY\", \"#define NEGATIVEY\", \"#define POSITIVEZ\", \"#define NEGATIVEZ\"];\r\n lodPostProcess = new PostProcess(\"lodCube\", \"lodCube\", {\r\n uniforms: [\"lod\", \"gamma\"],\r\n samplingMode: Texture.NEAREST_NEAREST_MIPNEAREST,\r\n engine,\r\n defines: faceDefines[face],\r\n shaderLanguage: engine.isWebGPU ? ShaderLanguage.WGSL : ShaderLanguage.GLSL,\r\n });\r\n }\r\n\r\n await new Promise((resolve) => {\r\n lodPostProcess.onEffectCreatedObservable.addOnce((e) => {\r\n e.executeWhenCompiled(() => {\r\n resolve(0);\r\n });\r\n });\r\n });\r\n\r\n const rtt = new RenderTargetTexture(\"temp\", { width: width, height: height }, scene, false);\r\n\r\n lodPostProcess.onApply = function (effect) {\r\n effect.setTexture(\"textureSampler\", texture);\r\n effect.setFloat(\"lod\", lod);\r\n effect.setInt(\"gamma\", texture.gammaSpace ? 1 : 0);\r\n if (is3DTexture) {\r\n effect.setFloat(\"slice\", slice);\r\n }\r\n };\r\n\r\n try {\r\n if (rtt.renderTarget && sourceInternalTexture) {\r\n const samplingMode = sourceInternalTexture.samplingMode;\r\n if (lod !== 0) {\r\n texture.updateSamplingMode(Texture.NEAREST_NEAREST_MIPNEAREST);\r\n } else {\r\n texture.updateSamplingMode(Texture.NEAREST_NEAREST);\r\n }\r\n\r\n scene.postProcessManager.directRender([lodPostProcess], rtt.renderTarget, true);\r\n texture.updateSamplingMode(samplingMode);\r\n\r\n //Reading datas from WebGL\r\n const bufferView = await engine.readPixels(0, 0, width, height);\r\n const data = new Uint8Array(bufferView.buffer, bufferView.byteOffset, bufferView.byteLength);\r\n\r\n // Unbind\r\n engine.unBindFramebuffer(rtt.renderTarget);\r\n\r\n return data;\r\n } else {\r\n throw Error(\"Render to texture failed.\");\r\n }\r\n } finally {\r\n rtt.dispose();\r\n lodPostProcess.dispose();\r\n }\r\n}\r\n\r\n/**\r\n * Gets the pixel data of the specified texture, either by reading it directly\r\n * or by rendering it to an intermediate RGBA texture and retrieving the bytes from it.\r\n * This is convenient to get 8-bit RGBA values for a texture in a GPU compressed format.\r\n * When direct readback returns non-RGBA channel layouts, the result is normalized to RGBA8.\r\n * @param texture the source texture\r\n * @param width the target width of the result, which does not have to match the source texture width\r\n * @param height the target height of the result, which does not have to match the source texture height\r\n * @param face if the texture has multiple faces, the face index to use for the source\r\n * @param lod if the texture has multiple LODs, the lod index to use for the source\r\n * @param forceRTT if true, forces the use of the RTT path for reading pixels (useful for cube maps to ensure correct orientation and gamma)\r\n * @param slice if the texture is 3D, the depth slice index to use for the source\r\n * @returns the 8-bit texture data\r\n */\r\nexport async function GetTextureDataAsync(\r\n texture: BaseTexture,\r\n width?: number,\r\n height?: number,\r\n face: number = 0,\r\n lod: number = 0,\r\n forceRTT: boolean = false,\r\n slice: number = 0\r\n): Promise<Uint8Array> {\r\n await WhenTextureReadyAsync(texture);\r\n const internalTexture = texture.getInternalTexture();\r\n const is3DTexture = texture.is3D || !!internalTexture?.is3D;\r\n\r\n const { width: textureWidth, height: textureHeight } = texture.getSize();\r\n const targetWidth = width ?? textureWidth;\r\n const targetHeight = height ?? textureHeight;\r\n\r\n // If the internal texture format is compressed, we cannot read the pixels directly.\r\n // If we're resizing the texture, we need to use a render target texture.\r\n // forceRTT can be used to ensure correct orientation and gamma for cube maps.\r\n // 3D textures must also use RTT because direct readPixels does not expose slice selection.\r\n if (forceRTT || is3DTexture || IsCompressedTextureFormat(texture.textureFormat) || targetWidth !== textureWidth || targetHeight !== textureHeight) {\r\n if (texture.is2DArray) {\r\n throw new Error(`Reading pixels from 2D array textures with ${forceRTT ? \"RTT\" : \"compression\"} is not supported.`);\r\n }\r\n return await ReadPixelsUsingRTT(texture, targetWidth, targetHeight, face, lod, slice);\r\n }\r\n\r\n let data = (await texture.readPixels(face, lod)) as Nullable<Uint8Array | Float32Array>;\r\n if (!data) {\r\n throw new Error(`Failed to read pixels from texture ${texture.name}.`);\r\n }\r\n\r\n // Convert float RGBA values to uint8, if necessary.\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(Clamp(v) * 255);\r\n }\r\n data = data2;\r\n }\r\n\r\n // Some backends (notably WebGPU for single/dual/triple channel formats) can return\r\n // readback data that is not RGBA8. The inspector preview pipeline expects 4 bytes\r\n // per pixel, so normalize to RGBA here when needed.\r\n const pixelCount = targetWidth * targetHeight;\r\n const expectedLength = pixelCount * 4;\r\n\r\n if (data.length !== expectedLength) {\r\n const componentCount = pixelCount === 0 ? 0 : data.length / pixelCount;\r\n\r\n if (componentCount === 1 || componentCount === 2 || componentCount === 3) {\r\n const normalizedData = new Uint8Array(expectedLength);\r\n\r\n for (let pixel = 0, src = 0, dst = 0; pixel < pixelCount; pixel++, dst += 4) {\r\n const c0 = data[src++];\r\n\r\n if (componentCount === 1) {\r\n // Luminance/R-style data: replicate to RGB and use opaque alpha.\r\n normalizedData[dst] = c0;\r\n normalizedData[dst + 1] = c0;\r\n normalizedData[dst + 2] = c0;\r\n normalizedData[dst + 3] = 255;\r\n continue;\r\n }\r\n\r\n const c1 = data[src++];\r\n if (componentCount === 2) {\r\n // Two-channel data has no standard blue/alpha semantics for preview,\r\n // so preserve R/G, clear B, and force opaque alpha.\r\n normalizedData[dst] = c0;\r\n normalizedData[dst + 1] = c1;\r\n normalizedData[dst + 2] = 0;\r\n normalizedData[dst + 3] = 255;\r\n continue;\r\n }\r\n\r\n // RGB data: append an opaque alpha channel.\r\n normalizedData[dst] = c0;\r\n normalizedData[dst + 1] = c1;\r\n normalizedData[dst + 2] = data[src++];\r\n normalizedData[dst + 3] = 255;\r\n }\r\n\r\n return normalizedData;\r\n }\r\n }\r\n\r\n return data;\r\n}\r\n\r\n/**\r\n * Class used to host texture specific utilities\r\n */\r\nexport const TextureTools = {\r\n /**\r\n * Uses the GPU to create a copy texture rescaled at a given size\r\n * @param texture Texture to copy from\r\n * @param width defines the desired width\r\n * @param height defines the desired height\r\n * @param useBilinearMode defines if bilinear mode has to be used\r\n * @returns the generated texture\r\n */\r\n CreateResizedCopy,\r\n\r\n /**\r\n * Apply a post process to a texture\r\n * @param postProcessName name of the fragment post process\r\n * @param internalTexture the texture to encode\r\n * @param scene the scene hosting the texture\r\n * @param type type of the output texture. If not provided, use the one from internalTexture\r\n * @param samplingMode sampling mode to use to sample the source texture. If not provided, use the one from internalTexture\r\n * @param format format of the output texture. If not provided, use the one from internalTexture\r\n * @returns a promise with the internalTexture having its texture replaced by the result of the processing\r\n */\r\n ApplyPostProcess,\r\n /**\r\n * Converts a number to half float\r\n * @param value number to convert\r\n * @returns converted number\r\n */\r\n ToHalfFloat,\r\n\r\n /**\r\n * Converts a half float to a number\r\n * @param value half float to convert\r\n * @returns converted half float\r\n */\r\n FromHalfFloat,\r\n\r\n /**\r\n * Gets the data of the specified texture by rendering it to an intermediate RGBA texture and retrieving the bytes from it.\r\n * This is convienent to get 8-bit RGBA values for a texture in a GPU compressed format.\r\n * @param texture the source texture\r\n * @param width the width of the result, which does not have to match the source texture width\r\n * @param height the height of the result, which does not have to match the source texture height\r\n * @param face if the texture has multiple faces, the face index to use for the source\r\n * @param lod if the texture has multiple LODs, the lod index to use for the source\r\n * @returns the 8-bit texture data\r\n */\r\n GetTextureDataAsync,\r\n};\r\n"]}
@@ -1,6 +1,6 @@
1
1
  import { type Nullable, type EffectWrapperCreationOptions, type AbstractEngine, type InternalTexture, type Scene } from "../index.js";
2
2
  import { Observable } from "./observable.js";
3
- import { EffectWrapper } from "../Materials/effectRenderer.js";
3
+ import { EffectWrapper } from "../Materials/effectRenderer.pure.js";
4
4
  /**
5
5
  * @internal
6
6
  */
@@ -1,5 +1,5 @@
1
1
  import { Observable } from "./observable.js";
2
- import { EffectWrapper } from "../Materials/effectRenderer.js";
2
+ import { EffectWrapper } from "../Materials/effectRenderer.pure.js";
3
3
  import { EngineStore } from "../Engines/engineStore.js";
4
4
 
5
5
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"thinMinMaxReducer.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/thinMinMaxReducer.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Nullable, type EffectWrapperCreationOptions, type AbstractEngine, type InternalTexture, type Scene } from \"core/index\";\r\nimport { Observable } from \"./observable\";\r\nimport { EffectWrapper } from \"../Materials/effectRenderer\";\r\nimport { EngineStore } from \"core/Engines/engineStore\";\r\nimport { Constants } from \"../Engines/constants\";\r\n\r\n/**\r\n * @internal\r\n */\r\nexport const enum DepthTextureType {\r\n NormalizedViewDepth = 0,\r\n ViewDepth = 1,\r\n ScreenDepth = 2,\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class ThinMinMaxReducerPostProcess extends EffectWrapper {\r\n public static readonly FragmentUrl = \"minmaxRedux\";\r\n\r\n public static readonly Uniforms = [\"texSize\"];\r\n\r\n protected override _gatherImports(useWebGPU: boolean, list: Promise<any>[]) {\r\n if (useWebGPU) {\r\n this._webGPUReady = true;\r\n list.push(import(\"../ShadersWGSL/minmaxRedux.fragment\"));\r\n } else {\r\n list.push(import(\"../Shaders/minmaxRedux.fragment\"));\r\n }\r\n }\r\n\r\n public textureWidth = 0;\r\n\r\n public textureHeight = 0;\r\n\r\n constructor(name: string, engine: Nullable<AbstractEngine> = null, defines = \"\", options?: EffectWrapperCreationOptions) {\r\n super({\r\n ...options,\r\n name,\r\n engine: engine || EngineStore.LastCreatedEngine!,\r\n useShaderStore: true,\r\n useAsPostProcess: true,\r\n fragmentShader: ThinMinMaxReducerPostProcess.FragmentUrl,\r\n uniforms: ThinMinMaxReducerPostProcess.Uniforms,\r\n defines,\r\n });\r\n }\r\n\r\n public override bind(noDefaultBindings = false) {\r\n super.bind(noDefaultBindings);\r\n\r\n const effect = this.drawWrapper.effect!;\r\n\r\n if (this.textureWidth === 1 || this.textureHeight === 1) {\r\n effect.setInt2(\"texSize\", this.textureWidth, this.textureHeight);\r\n } else {\r\n effect.setFloat2(\"texSize\", this.textureWidth, this.textureHeight);\r\n }\r\n }\r\n}\r\n\r\nconst BufferFloat = new Float32Array(4 * 1 * 1);\r\nconst BufferUint8 = new Uint8Array(4 * 1 * 1);\r\nconst MinMax = { min: 0, max: 0 };\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class ThinMinMaxReducer {\r\n public readonly onAfterReductionPerformed = new Observable<{ min: number; max: number }>();\r\n\r\n public readonly reductionSteps: Array<ThinMinMaxReducerPostProcess>;\r\n\r\n private _depthRedux: boolean;\r\n private _depthTextureType: DepthTextureType;\r\n\r\n public get depthRedux() {\r\n return this._depthRedux;\r\n }\r\n\r\n public set depthRedux(value: boolean) {\r\n if (this._depthRedux === value) {\r\n return;\r\n }\r\n\r\n this._depthRedux = value;\r\n\r\n this._recreatePostProcesses();\r\n }\r\n\r\n protected readonly _scene: Scene;\r\n\r\n private _textureWidth = 0;\r\n private _textureHeight = 0;\r\n\r\n public get textureWidth() {\r\n return this._textureWidth;\r\n }\r\n\r\n public get textureHeight() {\r\n return this._textureHeight;\r\n }\r\n\r\n constructor(scene: Scene, depthRedux = true) {\r\n this._scene = scene;\r\n this._depthRedux = depthRedux;\r\n this.reductionSteps = [];\r\n }\r\n\r\n public setTextureDimensions(width: number, height: number, depthTextureType: DepthTextureType = DepthTextureType.NormalizedViewDepth) {\r\n if (width === this._textureWidth && height === this._textureHeight && depthTextureType === this._depthTextureType) {\r\n return false;\r\n }\r\n\r\n this._textureWidth = width;\r\n this._textureHeight = height;\r\n this._depthTextureType = depthTextureType;\r\n\r\n this._recreatePostProcesses();\r\n\r\n return true;\r\n }\r\n\r\n public readMinMax(texture: InternalTexture) {\r\n // Note that we should normally await the call to _readTexturePixels!\r\n // But because WebGL does the read synchronously, we know the values will be updated without waiting for the promise to be resolved, which will let us get the updated values\r\n // in the current frame, whereas in WebGPU, the read is asynchronous and we should normally wait for the promise to be resolved to get the updated values.\r\n // However, it's safe to avoid waiting for the promise to be resolved in WebGPU as well, because we will simply use the current values until \"buffer\" is updated later on.\r\n // Note that it means we can suffer some rendering artifacts in WebGPU because we may use previous min/max values for the current frame.\r\n const isFloat = texture.type === Constants.TEXTURETYPE_FLOAT || texture.type === Constants.TEXTURETYPE_HALF_FLOAT;\r\n const buffer = isFloat ? BufferFloat : BufferUint8;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._scene.getEngine()._readTexturePixels(texture, 1, 1, -1, 0, buffer, false);\r\n\r\n MinMax.min = buffer[0];\r\n MinMax.max = buffer[1];\r\n\r\n if (!isFloat) {\r\n MinMax.min = MinMax.min / 255.0;\r\n MinMax.max = MinMax.max / 255.0;\r\n }\r\n\r\n if (MinMax.min >= MinMax.max) {\r\n MinMax.min = 0;\r\n MinMax.max = 1;\r\n }\r\n\r\n this.onAfterReductionPerformed.notifyObservers(MinMax);\r\n }\r\n\r\n public dispose(disposeAll = true): void {\r\n if (disposeAll) {\r\n this.onAfterReductionPerformed.clear();\r\n this._textureWidth = 0;\r\n this._textureHeight = 0;\r\n }\r\n\r\n for (let i = 0; i < this.reductionSteps.length; ++i) {\r\n this.reductionSteps[i].dispose();\r\n }\r\n this.reductionSteps.length = 0;\r\n }\r\n\r\n private _recreatePostProcesses() {\r\n this.dispose(false);\r\n\r\n const scene = this._scene;\r\n\r\n let w = this.textureWidth,\r\n h = this.textureHeight;\r\n\r\n const reductionInitial = new ThinMinMaxReducerPostProcess(\r\n \"Initial reduction phase\",\r\n scene.getEngine(),\r\n \"#define INITIAL\" + (this._depthRedux ? \"\\n#define DEPTH_REDUX\" : \"\") + (this._depthTextureType === DepthTextureType.ViewDepth ? \"\\n#define VIEW_DEPTH\" : \"\")\r\n );\r\n\r\n reductionInitial.textureWidth = w;\r\n reductionInitial.textureHeight = h;\r\n\r\n this.reductionSteps.push(reductionInitial);\r\n\r\n let index = 1;\r\n\r\n // create the additional steps\r\n while (w > 1 || h > 1) {\r\n w = Math.max(Math.round(w / 2), 1);\r\n h = Math.max(Math.round(h / 2), 1);\r\n\r\n const reduction = new ThinMinMaxReducerPostProcess(\r\n \"Reduction phase \" + index,\r\n scene.getEngine(),\r\n \"#define \" + (w == 1 && h == 1 ? \"LAST\" : w == 1 || h == 1 ? \"ONEBEFORELAST\" : \"MAIN\")\r\n );\r\n\r\n reduction.textureWidth = w;\r\n reduction.textureHeight = h;\r\n\r\n this.reductionSteps.push(reduction);\r\n\r\n index++;\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"thinMinMaxReducer.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/thinMinMaxReducer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD;;GAEG;AACH,MAAM,CAAN,IAAkB,gBAIjB;AAJD,WAAkB,gBAAgB;IAC9B,qFAAuB,CAAA;IACvB,iEAAa,CAAA;IACb,qEAAe,CAAA;AACnB,CAAC,EAJiB,gBAAgB,KAAhB,gBAAgB,QAIjC;AAED;;GAEG;AACH,MAAM,OAAO,4BAA6B,SAAQ,aAAa;IAKxC,cAAc,CAAC,SAAkB,EAAE,IAAoB;QACtE,IAAI,SAAS,EAAE,CAAC;YACZ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,qCAAqC,CAAC,CAAC,CAAC;QAC7D,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC,CAAC;QACzD,CAAC;IACL,CAAC;IAMD,YAAY,IAAY,EAAE,SAAmC,IAAI,EAAE,OAAO,GAAG,EAAE,EAAE,OAAsC;QACnH,KAAK,CAAC;YACF,GAAG,OAAO;YACV,IAAI;YACJ,MAAM,EAAE,MAAM,IAAI,WAAW,CAAC,iBAAkB;YAChD,cAAc,EAAE,IAAI;YACpB,gBAAgB,EAAE,IAAI;YACtB,cAAc,EAAE,4BAA4B,CAAC,WAAW;YACxD,QAAQ,EAAE,4BAA4B,CAAC,QAAQ;YAC/C,OAAO;SACV,CAAC,CAAC;QAdA,iBAAY,GAAG,CAAC,CAAC;QAEjB,kBAAa,GAAG,CAAC,CAAC;IAazB,CAAC;IAEe,IAAI,CAAC,iBAAiB,GAAG,KAAK;QAC1C,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAE9B,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAO,CAAC;QAExC,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,IAAI,IAAI,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;YACtD,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACrE,CAAC;aAAM,CAAC;YACJ,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACvE,CAAC;IACL,CAAC;;AAxCsB,wCAAW,GAAG,aAAa,AAAhB,CAAiB;AAE5B,qCAAQ,GAAG,CAAC,SAAS,CAAC,AAAd,CAAe;AAyClD,MAAM,WAAW,GAAG,IAAI,YAAY,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAChD,MAAM,WAAW,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9C,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AAElC;;GAEG;AACH,MAAM,OAAO,iBAAiB;IAQ1B,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,IAAW,UAAU,CAAC,KAAc;QAChC,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;YAC7B,OAAO;QACX,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QAEzB,IAAI,CAAC,sBAAsB,EAAE,CAAC;IAClC,CAAC;IAOD,IAAW,YAAY;QACnB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;IAED,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED,YAAY,KAAY,EAAE,UAAU,GAAG,IAAI;QAlC3B,8BAAyB,GAAG,IAAI,UAAU,EAAgC,CAAC;QAuBnF,kBAAa,GAAG,CAAC,CAAC;QAClB,mBAAc,GAAG,CAAC,CAAC;QAWvB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;IAC7B,CAAC;IAEM,oBAAoB,CAAC,KAAa,EAAE,MAAc,EAAE,+DAAyE;QAChI,IAAI,KAAK,KAAK,IAAI,CAAC,aAAa,IAAI,MAAM,KAAK,IAAI,CAAC,cAAc,IAAI,gBAAgB,KAAK,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAChH,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;QAC7B,IAAI,CAAC,iBAAiB,GAAG,gBAAgB,CAAC;QAE1C,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAE9B,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,UAAU,CAAC,OAAwB;QACtC,qEAAqE;QACrE,6KAA6K;QAC7K,0JAA0J;QAC1J,0KAA0K;QAC1K,wIAAwI;QACxI,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,iBAAiB,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,sBAAsB,CAAC;QAClH,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC;QAEnD,mEAAmE;QACnE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAEhF,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACvB,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAEvB,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC;YAChC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC;QACpC,CAAC;QAED,IAAI,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC;YACf,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC;QACnB,CAAC;QAED,IAAI,CAAC,yBAAyB,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAC3D,CAAC;IAEM,OAAO,CAAC,UAAU,GAAG,IAAI;QAC5B,IAAI,UAAU,EAAE,CAAC;YACb,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,CAAC;YACvC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QAC5B,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACrC,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;IACnC,CAAC;IAEO,sBAAsB;QAC1B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAEpB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;QAE1B,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,EACrB,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;QAE3B,MAAM,gBAAgB,GAAG,IAAI,4BAA4B,CACrD,yBAAyB,EACzB,KAAK,CAAC,SAAS,EAAE,EACjB,iBAAiB,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,uCAA+B,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,CAAC,CAChK,CAAC;QAEF,gBAAgB,CAAC,YAAY,GAAG,CAAC,CAAC;QAClC,gBAAgB,CAAC,aAAa,GAAG,CAAC,CAAC;QAEnC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAE3C,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,8BAA8B;QAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACpB,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACnC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAEnC,MAAM,SAAS,GAAG,IAAI,4BAA4B,CAC9C,kBAAkB,GAAG,KAAK,EAC1B,KAAK,CAAC,SAAS,EAAE,EACjB,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CACzF,CAAC;YAEF,SAAS,CAAC,YAAY,GAAG,CAAC,CAAC;YAC3B,SAAS,CAAC,aAAa,GAAG,CAAC,CAAC;YAE5B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAEpC,KAAK,EAAE,CAAC;QACZ,CAAC;IACL,CAAC;CACJ","sourcesContent":["import { type Nullable, type EffectWrapperCreationOptions, type AbstractEngine, type InternalTexture, type Scene } from \"core/index\";\r\nimport { Observable } from \"./observable\";\r\nimport { EffectWrapper } from \"../Materials/effectRenderer.pure\";\r\nimport { EngineStore } from \"core/Engines/engineStore\";\r\nimport { Constants } from \"../Engines/constants\";\r\n\r\n/**\r\n * @internal\r\n */\r\nexport const enum DepthTextureType {\r\n NormalizedViewDepth = 0,\r\n ViewDepth = 1,\r\n ScreenDepth = 2,\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class ThinMinMaxReducerPostProcess extends EffectWrapper {\r\n public static readonly FragmentUrl = \"minmaxRedux\";\r\n\r\n public static readonly Uniforms = [\"texSize\"];\r\n\r\n protected override _gatherImports(useWebGPU: boolean, list: Promise<any>[]) {\r\n if (useWebGPU) {\r\n this._webGPUReady = true;\r\n list.push(import(\"../ShadersWGSL/minmaxRedux.fragment\"));\r\n } else {\r\n list.push(import(\"../Shaders/minmaxRedux.fragment\"));\r\n }\r\n }\r\n\r\n public textureWidth = 0;\r\n\r\n public textureHeight = 0;\r\n\r\n constructor(name: string, engine: Nullable<AbstractEngine> = null, defines = \"\", options?: EffectWrapperCreationOptions) {\r\n super({\r\n ...options,\r\n name,\r\n engine: engine || EngineStore.LastCreatedEngine!,\r\n useShaderStore: true,\r\n useAsPostProcess: true,\r\n fragmentShader: ThinMinMaxReducerPostProcess.FragmentUrl,\r\n uniforms: ThinMinMaxReducerPostProcess.Uniforms,\r\n defines,\r\n });\r\n }\r\n\r\n public override bind(noDefaultBindings = false) {\r\n super.bind(noDefaultBindings);\r\n\r\n const effect = this.drawWrapper.effect!;\r\n\r\n if (this.textureWidth === 1 || this.textureHeight === 1) {\r\n effect.setInt2(\"texSize\", this.textureWidth, this.textureHeight);\r\n } else {\r\n effect.setFloat2(\"texSize\", this.textureWidth, this.textureHeight);\r\n }\r\n }\r\n}\r\n\r\nconst BufferFloat = new Float32Array(4 * 1 * 1);\r\nconst BufferUint8 = new Uint8Array(4 * 1 * 1);\r\nconst MinMax = { min: 0, max: 0 };\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class ThinMinMaxReducer {\r\n public readonly onAfterReductionPerformed = new Observable<{ min: number; max: number }>();\r\n\r\n public readonly reductionSteps: Array<ThinMinMaxReducerPostProcess>;\r\n\r\n private _depthRedux: boolean;\r\n private _depthTextureType: DepthTextureType;\r\n\r\n public get depthRedux() {\r\n return this._depthRedux;\r\n }\r\n\r\n public set depthRedux(value: boolean) {\r\n if (this._depthRedux === value) {\r\n return;\r\n }\r\n\r\n this._depthRedux = value;\r\n\r\n this._recreatePostProcesses();\r\n }\r\n\r\n protected readonly _scene: Scene;\r\n\r\n private _textureWidth = 0;\r\n private _textureHeight = 0;\r\n\r\n public get textureWidth() {\r\n return this._textureWidth;\r\n }\r\n\r\n public get textureHeight() {\r\n return this._textureHeight;\r\n }\r\n\r\n constructor(scene: Scene, depthRedux = true) {\r\n this._scene = scene;\r\n this._depthRedux = depthRedux;\r\n this.reductionSteps = [];\r\n }\r\n\r\n public setTextureDimensions(width: number, height: number, depthTextureType: DepthTextureType = DepthTextureType.NormalizedViewDepth) {\r\n if (width === this._textureWidth && height === this._textureHeight && depthTextureType === this._depthTextureType) {\r\n return false;\r\n }\r\n\r\n this._textureWidth = width;\r\n this._textureHeight = height;\r\n this._depthTextureType = depthTextureType;\r\n\r\n this._recreatePostProcesses();\r\n\r\n return true;\r\n }\r\n\r\n public readMinMax(texture: InternalTexture) {\r\n // Note that we should normally await the call to _readTexturePixels!\r\n // But because WebGL does the read synchronously, we know the values will be updated without waiting for the promise to be resolved, which will let us get the updated values\r\n // in the current frame, whereas in WebGPU, the read is asynchronous and we should normally wait for the promise to be resolved to get the updated values.\r\n // However, it's safe to avoid waiting for the promise to be resolved in WebGPU as well, because we will simply use the current values until \"buffer\" is updated later on.\r\n // Note that it means we can suffer some rendering artifacts in WebGPU because we may use previous min/max values for the current frame.\r\n const isFloat = texture.type === Constants.TEXTURETYPE_FLOAT || texture.type === Constants.TEXTURETYPE_HALF_FLOAT;\r\n const buffer = isFloat ? BufferFloat : BufferUint8;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._scene.getEngine()._readTexturePixels(texture, 1, 1, -1, 0, buffer, false);\r\n\r\n MinMax.min = buffer[0];\r\n MinMax.max = buffer[1];\r\n\r\n if (!isFloat) {\r\n MinMax.min = MinMax.min / 255.0;\r\n MinMax.max = MinMax.max / 255.0;\r\n }\r\n\r\n if (MinMax.min >= MinMax.max) {\r\n MinMax.min = 0;\r\n MinMax.max = 1;\r\n }\r\n\r\n this.onAfterReductionPerformed.notifyObservers(MinMax);\r\n }\r\n\r\n public dispose(disposeAll = true): void {\r\n if (disposeAll) {\r\n this.onAfterReductionPerformed.clear();\r\n this._textureWidth = 0;\r\n this._textureHeight = 0;\r\n }\r\n\r\n for (let i = 0; i < this.reductionSteps.length; ++i) {\r\n this.reductionSteps[i].dispose();\r\n }\r\n this.reductionSteps.length = 0;\r\n }\r\n\r\n private _recreatePostProcesses() {\r\n this.dispose(false);\r\n\r\n const scene = this._scene;\r\n\r\n let w = this.textureWidth,\r\n h = this.textureHeight;\r\n\r\n const reductionInitial = new ThinMinMaxReducerPostProcess(\r\n \"Initial reduction phase\",\r\n scene.getEngine(),\r\n \"#define INITIAL\" + (this._depthRedux ? \"\\n#define DEPTH_REDUX\" : \"\") + (this._depthTextureType === DepthTextureType.ViewDepth ? \"\\n#define VIEW_DEPTH\" : \"\")\r\n );\r\n\r\n reductionInitial.textureWidth = w;\r\n reductionInitial.textureHeight = h;\r\n\r\n this.reductionSteps.push(reductionInitial);\r\n\r\n let index = 1;\r\n\r\n // create the additional steps\r\n while (w > 1 || h > 1) {\r\n w = Math.max(Math.round(w / 2), 1);\r\n h = Math.max(Math.round(h / 2), 1);\r\n\r\n const reduction = new ThinMinMaxReducerPostProcess(\r\n \"Reduction phase \" + index,\r\n scene.getEngine(),\r\n \"#define \" + (w == 1 && h == 1 ? \"LAST\" : w == 1 || h == 1 ? \"ONEBEFORELAST\" : \"MAIN\")\r\n );\r\n\r\n reduction.textureWidth = w;\r\n reduction.textureHeight = h;\r\n\r\n this.reductionSteps.push(reduction);\r\n\r\n index++;\r\n }\r\n }\r\n}\r\n"]}