@babylonjs/core 8.8.0 → 8.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (342) hide show
  1. package/Actions/actionManager.js +2 -0
  2. package/Actions/actionManager.js.map +1 -1
  3. package/Animations/animatable.core.js +1 -1
  4. package/Animations/animatable.core.js.map +1 -1
  5. package/Animations/animation.js +4 -2
  6. package/Animations/animation.js.map +1 -1
  7. package/Audio/audioEngine.d.ts +1 -1
  8. package/Audio/audioEngine.js +20 -10
  9. package/Audio/audioEngine.js.map +1 -1
  10. package/Audio/audioSceneComponent.js +2 -0
  11. package/Audio/audioSceneComponent.js.map +1 -1
  12. package/Audio/sound.js +2 -0
  13. package/Audio/sound.js.map +1 -1
  14. package/AudioV2/abstractAudio/audioEngineV2.js +8 -1
  15. package/AudioV2/abstractAudio/audioEngineV2.js.map +1 -1
  16. package/AudioV2/abstractAudio/streamingSound.js +3 -1
  17. package/AudioV2/abstractAudio/streamingSound.js.map +1 -1
  18. package/AudioV2/abstractAudio/subNodes/abstractAudioSubGraph.js +6 -2
  19. package/AudioV2/abstractAudio/subNodes/abstractAudioSubGraph.js.map +1 -1
  20. package/AudioV2/abstractAudio/subProperties/audioAnalyzer.js +3 -0
  21. package/AudioV2/abstractAudio/subProperties/audioAnalyzer.js.map +1 -1
  22. package/AudioV2/abstractAudio/subProperties/spatialAudio.js +1 -0
  23. package/AudioV2/abstractAudio/subProperties/spatialAudio.js.map +1 -1
  24. package/AudioV2/webAudio/webAudioEngine.js +5 -1
  25. package/AudioV2/webAudio/webAudioEngine.js.map +1 -1
  26. package/AudioV2/webAudio/webAudioStaticSound.js +2 -0
  27. package/AudioV2/webAudio/webAudioStaticSound.js.map +1 -1
  28. package/AudioV2/webAudio/webAudioStreamingSound.js +3 -0
  29. package/AudioV2/webAudio/webAudioStreamingSound.js.map +1 -1
  30. package/AudioV2/webAudio/webAudioUnmuteUI.js +1 -0
  31. package/AudioV2/webAudio/webAudioUnmuteUI.js.map +1 -1
  32. package/BakedVertexAnimation/vertexAnimationBaker.d.ts +1 -0
  33. package/BakedVertexAnimation/vertexAnimationBaker.js +3 -1
  34. package/BakedVertexAnimation/vertexAnimationBaker.js.map +1 -1
  35. package/Buffers/buffer.nonFloatVertexBuffers.js +1 -0
  36. package/Buffers/buffer.nonFloatVertexBuffers.js.map +1 -1
  37. package/Buffers/storageBuffer.js +1 -1
  38. package/Buffers/storageBuffer.js.map +1 -1
  39. package/Cameras/Inputs/arcRotateCameraVRDeviceOrientationInput.js +2 -0
  40. package/Cameras/Inputs/arcRotateCameraVRDeviceOrientationInput.js.map +1 -1
  41. package/Cameras/Inputs/freeCameraDeviceOrientationInput.js +6 -1
  42. package/Cameras/Inputs/freeCameraDeviceOrientationInput.js.map +1 -1
  43. package/Cameras/VR/vrExperienceHelper.js +2 -0
  44. package/Cameras/VR/vrExperienceHelper.js.map +1 -1
  45. package/Collisions/gpuPicker.js +9 -6
  46. package/Collisions/gpuPicker.js.map +1 -1
  47. package/Compute/computeShader.js +1 -1
  48. package/Compute/computeShader.js.map +1 -1
  49. package/Culling/Helper/boundingInfoHelper.js +3 -3
  50. package/Culling/Helper/boundingInfoHelper.js.map +1 -1
  51. package/Culling/Helper/computeShaderBoundingHelper.js +3 -1
  52. package/Culling/Helper/computeShaderBoundingHelper.js.map +1 -1
  53. package/Culling/Helper/transformFeedbackBoundingHelper.js +3 -0
  54. package/Culling/Helper/transformFeedbackBoundingHelper.js.map +1 -1
  55. package/Debug/debugLayer.js +1 -1
  56. package/Debug/debugLayer.js.map +1 -1
  57. package/Engines/AbstractEngine/abstractEngine.cubeTexture.js +1 -0
  58. package/Engines/AbstractEngine/abstractEngine.cubeTexture.js.map +1 -1
  59. package/Engines/Extensions/engine.prefilteredCubeTexture.js +1 -0
  60. package/Engines/Extensions/engine.prefilteredCubeTexture.js.map +1 -1
  61. package/Engines/Extensions/engine.readTexture.js +1 -0
  62. package/Engines/Extensions/engine.readTexture.js.map +1 -1
  63. package/Engines/WebGPU/Extensions/engine.computeShader.js +1 -0
  64. package/Engines/WebGPU/Extensions/engine.computeShader.js.map +1 -1
  65. package/Engines/WebGPU/Extensions/engine.readTexture.js +1 -0
  66. package/Engines/WebGPU/Extensions/engine.readTexture.js.map +1 -1
  67. package/Engines/WebGPU/Extensions/engine.videoTexture.js +2 -0
  68. package/Engines/WebGPU/Extensions/engine.videoTexture.js.map +1 -1
  69. package/Engines/WebGPU/webgpuBufferManager.js +3 -1
  70. package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
  71. package/Engines/WebGPU/webgpuOcclusionQuery.js +1 -0
  72. package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
  73. package/Engines/WebGPU/webgpuQuerySet.js +15 -9
  74. package/Engines/WebGPU/webgpuQuerySet.js.map +1 -1
  75. package/Engines/WebGPU/webgpuTextureManager.js +1 -0
  76. package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
  77. package/Engines/WebGPU/webgpuTimestampQuery.js +4 -2
  78. package/Engines/WebGPU/webgpuTimestampQuery.js.map +1 -1
  79. package/Engines/WebGPU/webgpuTintWASM.js +1 -0
  80. package/Engines/WebGPU/webgpuTintWASM.js.map +1 -1
  81. package/Engines/abstractEngine.js +5 -2
  82. package/Engines/abstractEngine.js.map +1 -1
  83. package/Engines/engine.common.js +7 -1
  84. package/Engines/engine.common.js.map +1 -1
  85. package/Engines/engine.js +5 -3
  86. package/Engines/engine.js.map +1 -1
  87. package/Engines/engineFactory.js +1 -1
  88. package/Engines/engineFactory.js.map +1 -1
  89. package/Engines/nativeEngine.js +19 -11
  90. package/Engines/nativeEngine.js.map +1 -1
  91. package/Engines/webgpuEngine.js +30 -11
  92. package/Engines/webgpuEngine.js.map +1 -1
  93. package/FlowGraph/flowGraphParser.js +2 -2
  94. package/FlowGraph/flowGraphParser.js.map +1 -1
  95. package/FrameGraph/Node/nodeRenderGraph.js +5 -1
  96. package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
  97. package/FrameGraph/Node/nodeRenderGraphBlock.js +1 -1
  98. package/FrameGraph/Node/nodeRenderGraphBlock.js.map +1 -1
  99. package/FrameGraph/frameGraph.js +1 -1
  100. package/FrameGraph/frameGraph.js.map +1 -1
  101. package/Helpers/sceneHelpers.js +1 -3
  102. package/Helpers/sceneHelpers.js.map +1 -1
  103. package/Helpers/videoDome.js +1 -0
  104. package/Helpers/videoDome.js.map +1 -1
  105. package/Layers/thinEffectLayer.js +1 -0
  106. package/Layers/thinEffectLayer.js.map +1 -1
  107. package/LensFlares/lensFlareSystem.js +1 -0
  108. package/LensFlares/lensFlareSystem.js.map +1 -1
  109. package/Lights/Shadows/shadowGenerator.js +3 -2
  110. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  111. package/Lights/areaLight.js +2 -0
  112. package/Lights/areaLight.js.map +1 -1
  113. package/Loading/sceneLoader.js +56 -22
  114. package/Loading/sceneLoader.js.map +1 -1
  115. package/Materials/GaussianSplatting/gaussianSplattingMaterial.d.ts +15 -1
  116. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +34 -7
  117. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
  118. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js +1 -0
  119. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js.map +1 -1
  120. package/Materials/Node/Blocks/Dual/fogBlock.js +1 -0
  121. package/Materials/Node/Blocks/Dual/fogBlock.js.map +1 -1
  122. package/Materials/Node/Blocks/Dual/lightBlock.js +1 -0
  123. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  124. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +1 -0
  125. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
  126. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js +1 -0
  127. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
  128. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js +1 -0
  129. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js.map +1 -1
  130. package/Materials/Node/Blocks/Fragment/shadowMapBlock.js +1 -0
  131. package/Materials/Node/Blocks/Fragment/shadowMapBlock.js.map +1 -1
  132. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +1 -0
  133. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  134. package/Materials/Node/Blocks/Vertex/bonesBlock.js +1 -0
  135. package/Materials/Node/Blocks/Vertex/bonesBlock.js.map +1 -1
  136. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +1 -0
  137. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
  138. package/Materials/Node/nodeMaterial.js +11 -3
  139. package/Materials/Node/nodeMaterial.js.map +1 -1
  140. package/Materials/Node/nodeMaterialBuildState.js +1 -0
  141. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  142. package/Materials/Textures/Filtering/hdrIrradianceFiltering.js +1 -0
  143. package/Materials/Textures/Filtering/hdrIrradianceFiltering.js.map +1 -1
  144. package/Materials/Textures/Loaders/basisTextureLoader.js +4 -0
  145. package/Materials/Textures/Loaders/basisTextureLoader.js.map +1 -1
  146. package/Materials/Textures/Loaders/envTextureLoader.js +1 -0
  147. package/Materials/Textures/Loaders/envTextureLoader.js.map +1 -1
  148. package/Materials/Textures/Loaders/exrTextureLoader.js +2 -0
  149. package/Materials/Textures/Loaders/exrTextureLoader.js.map +1 -1
  150. package/Materials/Textures/Loaders/ktxTextureLoader.js +1 -0
  151. package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
  152. package/Materials/Textures/Loaders/textureLoaderManager.js +9 -9
  153. package/Materials/Textures/Loaders/textureLoaderManager.js.map +1 -1
  154. package/Materials/Textures/Packer/packer.js +3 -1
  155. package/Materials/Textures/Packer/packer.js.map +1 -1
  156. package/Materials/Textures/Procedurals/proceduralTexture.js +1 -0
  157. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  158. package/Materials/Textures/baseTexture.polynomial.js +1 -0
  159. package/Materials/Textures/baseTexture.polynomial.js.map +1 -1
  160. package/Materials/Textures/hdrCubeTexture.js +1 -0
  161. package/Materials/Textures/hdrCubeTexture.js.map +1 -1
  162. package/Materials/Textures/internalTexture.js +1 -0
  163. package/Materials/Textures/internalTexture.js.map +1 -1
  164. package/Materials/Textures/rawCubeTexture.js +3 -0
  165. package/Materials/Textures/rawCubeTexture.js.map +1 -1
  166. package/Materials/Textures/renderTargetTexture.js +2 -0
  167. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  168. package/Materials/Textures/videoTexture.js +6 -0
  169. package/Materials/Textures/videoTexture.js.map +1 -1
  170. package/Materials/effect.js +2 -1
  171. package/Materials/effect.js.map +1 -1
  172. package/Materials/effect.webgl.functions.js +3 -1
  173. package/Materials/effect.webgl.functions.js.map +1 -1
  174. package/Materials/effectRenderer.js +1 -0
  175. package/Materials/effectRenderer.js.map +1 -1
  176. package/Materials/material.js +2 -1
  177. package/Materials/material.js.map +1 -1
  178. package/Materials/shaderMaterial.js +4 -2
  179. package/Materials/shaderMaterial.js.map +1 -1
  180. package/Meshes/Compression/dracoCodec.js +5 -1
  181. package/Meshes/Compression/dracoCodec.js.map +1 -1
  182. package/Meshes/Compression/dracoCompression.js +4 -3
  183. package/Meshes/Compression/dracoCompression.js.map +1 -1
  184. package/Meshes/Compression/dracoCompressionWorker.js +5 -2
  185. package/Meshes/Compression/dracoCompressionWorker.js.map +1 -1
  186. package/Meshes/Compression/dracoDecoder.js +5 -1
  187. package/Meshes/Compression/dracoDecoder.js.map +1 -1
  188. package/Meshes/Compression/dracoEncoder.js +3 -2
  189. package/Meshes/Compression/dracoEncoder.js.map +1 -1
  190. package/Meshes/Compression/meshoptCompression.js +18 -18
  191. package/Meshes/Compression/meshoptCompression.js.map +1 -1
  192. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +14 -15
  193. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  194. package/Meshes/Node/Blocks/Textures/geometryTextureBlock.js +20 -10
  195. package/Meshes/Node/Blocks/Textures/geometryTextureBlock.js.map +1 -1
  196. package/Meshes/Node/Blocks/booleanGeometryBlock.js +1 -0
  197. package/Meshes/Node/Blocks/booleanGeometryBlock.js.map +1 -1
  198. package/Meshes/Node/nodeGeometry.js +5 -1
  199. package/Meshes/Node/nodeGeometry.js.map +1 -1
  200. package/Meshes/mesh.js +2 -2
  201. package/Meshes/mesh.js.map +1 -1
  202. package/Meshes/meshUVSpaceRenderer.js +1 -0
  203. package/Meshes/meshUVSpaceRenderer.js.map +1 -1
  204. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js +1 -0
  205. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js.map +1 -1
  206. package/Misc/assetsManager.js +2 -1
  207. package/Misc/assetsManager.js.map +1 -1
  208. package/Misc/asyncLock.js +5 -2
  209. package/Misc/asyncLock.js.map +1 -1
  210. package/Misc/basis.js +9 -2
  211. package/Misc/basis.js.map +1 -1
  212. package/Misc/basisWorker.js +3 -1
  213. package/Misc/basisWorker.js.map +1 -1
  214. package/Misc/copyTextureToTexture.js +1 -0
  215. package/Misc/copyTextureToTexture.js.map +1 -1
  216. package/Misc/coroutine.js +2 -1
  217. package/Misc/coroutine.js.map +1 -1
  218. package/Misc/dataReader.js +3 -4
  219. package/Misc/dataReader.js.map +1 -1
  220. package/Misc/dumpTools.js +7 -1
  221. package/Misc/dumpTools.js.map +1 -1
  222. package/Misc/environmentTextureTools.d.ts +0 -2
  223. package/Misc/environmentTextureTools.js +20 -7
  224. package/Misc/environmentTextureTools.js.map +1 -1
  225. package/Misc/equirectangularCapture.js +2 -1
  226. package/Misc/equirectangularCapture.js.map +1 -1
  227. package/Misc/fileTools.js +2 -0
  228. package/Misc/fileTools.js.map +1 -1
  229. package/Misc/filesInput.js +5 -1
  230. package/Misc/filesInput.js.map +1 -1
  231. package/Misc/khronosTextureContainer2.js +10 -3
  232. package/Misc/khronosTextureContainer2.js.map +1 -1
  233. package/Misc/khronosTextureContainer2Worker.js +4 -1
  234. package/Misc/khronosTextureContainer2Worker.js.map +1 -1
  235. package/Misc/minMaxReducer.js +1 -0
  236. package/Misc/minMaxReducer.js.map +1 -1
  237. package/Misc/observable.extensions.js +3 -1
  238. package/Misc/observable.extensions.js.map +1 -1
  239. package/Misc/observable.js +2 -0
  240. package/Misc/observable.js.map +1 -1
  241. package/Misc/observableCoroutine.js +1 -0
  242. package/Misc/observableCoroutine.js.map +1 -1
  243. package/Misc/reflector.js +1 -0
  244. package/Misc/reflector.js.map +1 -1
  245. package/Misc/rgbdTextureTools.js +2 -1
  246. package/Misc/rgbdTextureTools.js.map +1 -1
  247. package/Misc/sceneSerializer.js +2 -2
  248. package/Misc/sceneSerializer.js.map +1 -1
  249. package/Misc/screenshotTools.js +9 -4
  250. package/Misc/screenshotTools.js.map +1 -1
  251. package/Misc/textureTools.js +2 -0
  252. package/Misc/textureTools.js.map +1 -1
  253. package/Misc/tools.internals.js +2 -1
  254. package/Misc/tools.internals.js.map +1 -1
  255. package/Misc/tools.js +9 -3
  256. package/Misc/tools.js.map +1 -1
  257. package/Misc/videoRecorder.js +1 -0
  258. package/Misc/videoRecorder.js.map +1 -1
  259. package/Misc/webRequest.fetch.js +2 -1
  260. package/Misc/webRequest.fetch.js.map +1 -1
  261. package/Misc/workerPool.js +3 -0
  262. package/Misc/workerPool.js.map +1 -1
  263. package/Particles/flowMap.js +1 -1
  264. package/Particles/flowMap.js.map +1 -1
  265. package/Particles/particleHelper.js +7 -0
  266. package/Particles/particleHelper.js.map +1 -1
  267. package/Particles/pointsCloudSystem.js +7 -7
  268. package/Particles/pointsCloudSystem.js.map +1 -1
  269. package/Particles/thinParticleSystem.js +2 -0
  270. package/Particles/thinParticleSystem.js.map +1 -1
  271. package/Physics/physicsHelper.js +2 -2
  272. package/Physics/physicsHelper.js.map +1 -1
  273. package/Physics/v1/Plugins/oimoJSPlugin.js +1 -1
  274. package/Physics/v1/Plugins/oimoJSPlugin.js.map +1 -1
  275. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js +1 -0
  276. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
  277. package/Rendering/GlobalIllumination/giRSMManager.js +1 -0
  278. package/Rendering/GlobalIllumination/giRSMManager.js.map +1 -1
  279. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js +1 -0
  280. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js.map +1 -1
  281. package/Rendering/depthRenderer.js +1 -0
  282. package/Rendering/depthRenderer.js.map +1 -1
  283. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +3 -1
  284. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
  285. package/Rendering/fluidRenderer/fluidRenderingTextures.js.map +1 -1
  286. package/Rendering/geometryBufferRenderer.js +1 -0
  287. package/Rendering/geometryBufferRenderer.js.map +1 -1
  288. package/Rendering/iblCdfGenerator.js +4 -1
  289. package/Rendering/iblCdfGenerator.js.map +1 -1
  290. package/Sprites/spriteManager.js +5 -1
  291. package/Sprites/spriteManager.js.map +1 -1
  292. package/Sprites/spriteRenderer.js +1 -0
  293. package/Sprites/spriteRenderer.js.map +1 -1
  294. package/XR/features/WebXRAnchorSystem.js +4 -3
  295. package/XR/features/WebXRAnchorSystem.js.map +1 -1
  296. package/XR/features/WebXRDepthSensing.js +1 -1
  297. package/XR/features/WebXRDepthSensing.js.map +1 -1
  298. package/XR/features/WebXRHandTracking.js +4 -1
  299. package/XR/features/WebXRHandTracking.js.map +1 -1
  300. package/XR/features/WebXRHitTest.js +4 -1
  301. package/XR/features/WebXRHitTest.js.map +1 -1
  302. package/XR/features/WebXRHitTestLegacy.js +6 -5
  303. package/XR/features/WebXRHitTestLegacy.js.map +1 -1
  304. package/XR/features/WebXRImageTracking.js +2 -1
  305. package/XR/features/WebXRImageTracking.js.map +1 -1
  306. package/XR/features/WebXRLightEstimation.js +3 -0
  307. package/XR/features/WebXRLightEstimation.js.map +1 -1
  308. package/XR/features/WebXRNearInteraction.js +2 -0
  309. package/XR/features/WebXRNearInteraction.js.map +1 -1
  310. package/XR/features/WebXRPlaneDetector.js +2 -2
  311. package/XR/features/WebXRPlaneDetector.js.map +1 -1
  312. package/XR/motionController/webXRAbstractMotionController.js +3 -2
  313. package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
  314. package/XR/motionController/webXRMicrosoftMixedRealityController.js +6 -6
  315. package/XR/motionController/webXRMicrosoftMixedRealityController.js.map +1 -1
  316. package/XR/motionController/webXRMotionControllerManager.js +15 -9
  317. package/XR/motionController/webXRMotionControllerManager.js.map +1 -1
  318. package/XR/motionController/webXRProfiledMotionController.js +1 -1
  319. package/XR/motionController/webXRProfiledMotionController.js.map +1 -1
  320. package/XR/native/nativeXRFrame.js +1 -0
  321. package/XR/native/nativeXRFrame.js.map +1 -1
  322. package/XR/webXRDefaultExperience.js +10 -12
  323. package/XR/webXRDefaultExperience.js.map +1 -1
  324. package/XR/webXREnterExitUI.js +2 -1
  325. package/XR/webXREnterExitUI.js.map +1 -1
  326. package/XR/webXRExperienceHelper.js +5 -2
  327. package/XR/webXRExperienceHelper.js.map +1 -1
  328. package/XR/webXRFeaturesManager.js +1 -0
  329. package/XR/webXRFeaturesManager.js.map +1 -1
  330. package/XR/webXRInput.js +1 -0
  331. package/XR/webXRInput.js.map +1 -1
  332. package/XR/webXRInputSource.js +2 -0
  333. package/XR/webXRInputSource.js.map +1 -1
  334. package/XR/webXRManagedOutputCanvas.js +5 -1
  335. package/XR/webXRManagedOutputCanvas.js.map +1 -1
  336. package/XR/webXRSessionManager.js +56 -60
  337. package/XR/webXRSessionManager.js.map +1 -1
  338. package/assetContainer.js +28 -28
  339. package/assetContainer.js.map +1 -1
  340. package/package.json +1 -1
  341. package/scene.js +5 -4
  342. package/scene.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"computeShaderBoundingHelper.js","sourceRoot":"","sources":["../../../../../dev/core/src/Culling/Helper/computeShaderBoundingHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IBoundingInfoHelperPlatform } from \"./IBoundingInfoHelperPlatform\";\r\nimport type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport { ComputeShader } from \"core/Compute/computeShader\";\r\nimport { StorageBuffer } from \"core/Buffers/storageBuffer\";\r\nimport type { WebGPUEngine } from \"core/Engines/webgpuEngine\";\r\nimport type { AbstractEngine } from \"core/Engines/abstractEngine\";\r\nimport type { Mesh } from \"core/Meshes/mesh\";\r\nimport { VertexBuffer } from \"core/Buffers/buffer\";\r\nimport { Vector3 } from \"core/Maths/math.vector\";\r\nimport { UniformBuffer } from \"core/Materials/uniformBuffer\";\r\nimport type { DataBuffer } from \"core/Buffers/dataBuffer\";\r\nimport type { ComputeBindingMapping } from \"core/Engines/Extensions/engine.computeShader\";\r\n\r\nimport \"../../ShadersWGSL/boundingInfo.compute\";\r\nimport { _RetryWithInterval } from \"core/Misc/timingTools\";\r\n\r\n/** @internal */\r\nexport class ComputeShaderBoundingHelper implements IBoundingInfoHelperPlatform {\r\n private _engine: AbstractEngine;\r\n private _computeShadersCache: { [key: string]: ComputeShader } = {};\r\n private _positionBuffers: { [key: number]: StorageBuffer } = {};\r\n private _indexBuffers: { [key: number]: StorageBuffer } = {};\r\n private _weightBuffers: { [key: number]: StorageBuffer } = {};\r\n private _indexExtraBuffers: { [key: number]: StorageBuffer } = {};\r\n private _weightExtraBuffers: { [key: number]: StorageBuffer } = {};\r\n private _morphTargetInfluenceBuffers: { [key: number]: StorageBuffer } = {};\r\n private _morphTargetTextureIndexBuffers: { [key: number]: StorageBuffer } = {};\r\n private _ubos: UniformBuffer[] = [];\r\n private _uboIndex: number = 0;\r\n private _processedMeshes: AbstractMesh[] = [];\r\n private _computeShaders: ComputeShader[][] = [];\r\n private _uniqueComputeShaders: Set<ComputeShader> = new Set();\r\n private _resultBuffers: StorageBuffer[] = [];\r\n\r\n /**\r\n * Creates a new ComputeShaderBoundingHelper\r\n * @param engine defines the engine to use\r\n */\r\n constructor(engine: AbstractEngine) {\r\n this._engine = engine;\r\n }\r\n\r\n private _getComputeShader(defines: string[], hasBones: boolean, hasMorphs: boolean) {\r\n let computeShader: ComputeShader;\r\n const join = defines.join(\"\\n\");\r\n\r\n if (!this._computeShadersCache[join]) {\r\n const bindingsMapping: ComputeBindingMapping = {\r\n positionBuffer: { group: 0, binding: 0 },\r\n resultBuffer: { group: 0, binding: 1 },\r\n settings: { group: 0, binding: 7 },\r\n };\r\n\r\n if (hasBones) {\r\n bindingsMapping.boneSampler = { group: 0, binding: 2 };\r\n bindingsMapping.indexBuffer = { group: 0, binding: 3 };\r\n bindingsMapping.weightBuffer = { group: 0, binding: 4 };\r\n bindingsMapping.indexExtraBuffer = { group: 0, binding: 5 };\r\n bindingsMapping.weightExtraBuffer = { group: 0, binding: 6 };\r\n }\r\n if (hasMorphs) {\r\n bindingsMapping.morphTargets = { group: 0, binding: 8 };\r\n bindingsMapping.morphTargetInfluences = { group: 0, binding: 9 };\r\n bindingsMapping.morphTargetTextureIndices = { group: 0, binding: 10 };\r\n }\r\n\r\n computeShader = new ComputeShader(`boundingInfoCompute${hasBones ? \"_bones\" : \"\"}${hasMorphs ? \"_morphs\" : \"\"}`, this._engine, \"boundingInfo\", {\r\n bindingsMapping,\r\n defines: defines,\r\n });\r\n this._computeShadersCache[join] = computeShader;\r\n } else {\r\n computeShader = this._computeShadersCache[join];\r\n }\r\n\r\n return computeShader;\r\n }\r\n\r\n private _getUBO() {\r\n if (this._uboIndex >= this._ubos.length) {\r\n const ubo = new UniformBuffer(this._engine);\r\n ubo.addFloat3(\"morphTargetTextureInfo\", 0, 0, 0);\r\n ubo.addUniform(\"morphTargetCount\", 1);\r\n ubo.addUniform(\"indexResult\", 1);\r\n this._ubos.push(ubo);\r\n }\r\n\r\n return this._ubos[this._uboIndex++];\r\n }\r\n\r\n private _extractDataAndLink(computeShader: ComputeShader, mesh: Mesh, kind: string, stride: number, name: string, storageUnit: { [key: number]: StorageBuffer }) {\r\n let buffer: StorageBuffer;\r\n const vertexCount = mesh.getTotalVertices();\r\n if (!storageUnit[mesh.uniqueId]) {\r\n const dataArray = mesh.getVertexBuffer(kind)?.getFloatData(vertexCount);\r\n buffer = new StorageBuffer(this._engine as WebGPUEngine, Float32Array.BYTES_PER_ELEMENT * vertexCount * stride);\r\n buffer.update(dataArray!);\r\n\r\n storageUnit[mesh.uniqueId] = buffer;\r\n } else {\r\n buffer = storageUnit[mesh.uniqueId];\r\n }\r\n\r\n computeShader.setStorageBuffer(name, buffer);\r\n }\r\n\r\n private _prepareStorage(computeShader: ComputeShader, name: string, id: number, storageUnit: { [key: number]: StorageBuffer }, numInfluencers: number, data: Float32Array) {\r\n let buffer: StorageBuffer;\r\n if (!storageUnit[id]) {\r\n buffer = new StorageBuffer(this._engine as WebGPUEngine, Float32Array.BYTES_PER_ELEMENT * numInfluencers);\r\n\r\n storageUnit[id] = buffer;\r\n } else {\r\n buffer = storageUnit[id];\r\n }\r\n buffer.update(data);\r\n\r\n computeShader.setStorageBuffer(name, buffer);\r\n }\r\n\r\n /** @internal */\r\n public async processAsync(meshes: AbstractMesh | AbstractMesh[]): Promise<void> {\r\n await this.registerMeshListAsync(meshes);\r\n this.processMeshList();\r\n await this.fetchResultsForMeshListAsync();\r\n }\r\n\r\n /** @internal */\r\n public registerMeshListAsync(meshes: AbstractMesh | AbstractMesh[]): Promise<void> {\r\n this._disposeForMeshList();\r\n\r\n if (!Array.isArray(meshes)) {\r\n meshes = [meshes];\r\n }\r\n\r\n let maxNumInfluencers = 0;\r\n for (let i = 0; i < meshes.length; i++) {\r\n const mesh = meshes[i];\r\n const vertexCount = mesh.getTotalVertices();\r\n\r\n if (vertexCount === 0 || !(mesh as Mesh).getVertexBuffer || !(mesh as Mesh).getVertexBuffer(VertexBuffer.PositionKind)) {\r\n continue;\r\n }\r\n\r\n this._processedMeshes.push(mesh);\r\n\r\n const manager = (<Mesh>mesh).morphTargetManager;\r\n if (manager && manager.supportsPositions) {\r\n maxNumInfluencers = Math.max(maxNumInfluencers, manager.numTargets);\r\n }\r\n }\r\n\r\n for (let i = 0; i < this._processedMeshes.length; i++) {\r\n const mesh = this._processedMeshes[i];\r\n let defines = [\"\"];\r\n\r\n let hasBones = false;\r\n if (mesh && mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton) {\r\n defines.push(\"#define NUM_BONE_INFLUENCERS \" + mesh.numBoneInfluencers);\r\n hasBones = true;\r\n }\r\n\r\n const computeShaderWithoutMorph = this._getComputeShader(defines, hasBones, false);\r\n\r\n this._uniqueComputeShaders.add(computeShaderWithoutMorph);\r\n\r\n const manager = (<Mesh>mesh).morphTargetManager;\r\n if (manager && manager.supportsPositions) {\r\n defines = defines.slice();\r\n defines.push(\"#define MORPHTARGETS\");\r\n defines.push(\"#define NUM_MORPH_INFLUENCERS \" + maxNumInfluencers);\r\n\r\n const computeShaderWithMorph = this._getComputeShader(defines, hasBones, true);\r\n\r\n this._uniqueComputeShaders.add(computeShaderWithMorph);\r\n this._computeShaders.push([computeShaderWithoutMorph, computeShaderWithMorph]);\r\n } else {\r\n this._computeShaders.push([computeShaderWithoutMorph, computeShaderWithoutMorph]);\r\n }\r\n\r\n // Pre-build the ubos, as they won't change if there's no morph targets\r\n const ubo = this._getUBO();\r\n ubo.updateUInt(\"indexResult\", i);\r\n\r\n ubo.update();\r\n }\r\n\r\n return new Promise((resolve) => {\r\n _RetryWithInterval(() => {\r\n const iterator = this._uniqueComputeShaders.keys();\r\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\r\n const computeShader = key.value;\r\n if (!computeShader.isReady()) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }, resolve);\r\n });\r\n }\r\n\r\n /** @internal */\r\n public processMeshList(): void {\r\n if (this._processedMeshes.length === 0) {\r\n return;\r\n }\r\n\r\n this._uboIndex = 0;\r\n\r\n const resultDataSize = 8 * this._processedMeshes.length;\r\n const resultData = new Float32Array(resultDataSize);\r\n\r\n const resultBuffer = new StorageBuffer(this._engine as WebGPUEngine, Float32Array.BYTES_PER_ELEMENT * resultDataSize);\r\n this._resultBuffers.push(resultBuffer);\r\n\r\n for (let i = 0; i < this._processedMeshes.length; i++) {\r\n resultData[i * 8 + 0] = Number.POSITIVE_INFINITY;\r\n resultData[i * 8 + 1] = Number.POSITIVE_INFINITY;\r\n resultData[i * 8 + 2] = Number.POSITIVE_INFINITY;\r\n\r\n resultData[i * 8 + 3] = Number.NEGATIVE_INFINITY;\r\n resultData[i * 8 + 4] = Number.NEGATIVE_INFINITY;\r\n resultData[i * 8 + 5] = Number.NEGATIVE_INFINITY;\r\n }\r\n\r\n resultBuffer.update(resultData);\r\n\r\n for (let i = 0; i < this._processedMeshes.length; i++) {\r\n const mesh = this._processedMeshes[i];\r\n const vertexCount = mesh.getTotalVertices();\r\n\r\n const [computeShaderWithoutMorph, computeShaderWithMorph] = this._computeShaders[i];\r\n\r\n const manager = (<Mesh>mesh).morphTargetManager;\r\n const hasMorphs = manager && manager.numInfluencers > 0 && manager.supportsPositions;\r\n const computeShader = hasMorphs ? computeShaderWithMorph : computeShaderWithoutMorph;\r\n\r\n this._extractDataAndLink(computeShader, mesh as Mesh, VertexBuffer.PositionKind, 3, \"positionBuffer\", this._positionBuffers);\r\n\r\n // Bones\r\n if (mesh && mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton && mesh.skeleton.useTextureToStoreBoneMatrices) {\r\n this._extractDataAndLink(computeShader, mesh as Mesh, VertexBuffer.MatricesIndicesKind, 4, \"indexBuffer\", this._indexBuffers);\r\n this._extractDataAndLink(computeShader, mesh as Mesh, VertexBuffer.MatricesWeightsKind, 4, \"weightBuffer\", this._weightBuffers);\r\n const boneSampler = mesh.skeleton.getTransformMatrixTexture(mesh);\r\n computeShader.setTexture(\"boneSampler\", boneSampler!, false);\r\n if (mesh.numBoneInfluencers > 4) {\r\n this._extractDataAndLink(computeShader, mesh as Mesh, VertexBuffer.MatricesIndicesExtraKind, 4, \"indexExtraBuffer\", this._indexExtraBuffers);\r\n this._extractDataAndLink(computeShader, mesh as Mesh, VertexBuffer.MatricesWeightsExtraKind, 4, \"weightExtraBuffer\", this._weightExtraBuffers);\r\n }\r\n }\r\n\r\n const ubo = this._getUBO();\r\n\r\n // Morphs\r\n if (hasMorphs) {\r\n const morphTargets = manager._targetStoreTexture;\r\n computeShader.setTexture(\"morphTargets\", morphTargets!, false);\r\n\r\n this._prepareStorage(computeShader, \"morphTargetInfluences\", mesh.uniqueId, this._morphTargetInfluenceBuffers, manager.numInfluencers, manager.influences);\r\n this._prepareStorage(\r\n computeShader,\r\n \"morphTargetTextureIndices\",\r\n mesh.uniqueId,\r\n this._morphTargetTextureIndexBuffers,\r\n manager.numInfluencers,\r\n manager._morphTargetTextureIndices\r\n );\r\n\r\n ubo.updateFloat3(\"morphTargetTextureInfo\", manager._textureVertexStride, manager._textureWidth, manager._textureHeight);\r\n ubo.updateInt(\"morphTargetCount\", manager.numInfluencers);\r\n ubo.update();\r\n }\r\n\r\n computeShader.setStorageBuffer(\"resultBuffer\", resultBuffer);\r\n\r\n computeShader.setUniformBuffer(\"settings\", ubo);\r\n\r\n // Dispatch\r\n computeShader.dispatch(Math.ceil(vertexCount / 256));\r\n\r\n this._engine.flushFramebuffer();\r\n }\r\n }\r\n\r\n /** @internal */\r\n public async fetchResultsForMeshListAsync(): Promise<void> {\r\n return new Promise((resolve) => {\r\n const buffers: DataBuffer[] = [];\r\n let size = 0;\r\n for (let i = 0; i < this._resultBuffers.length; i++) {\r\n const buffer = this._resultBuffers[i].getBuffer();\r\n buffers.push(buffer);\r\n size += buffer.capacity;\r\n }\r\n\r\n const resultData = new Float32Array(size / Float32Array.BYTES_PER_ELEMENT);\r\n\r\n const minimum = Vector3.Zero();\r\n const maximum = Vector3.Zero();\r\n\r\n const minmax = { minimum, maximum };\r\n\r\n (this._engine as WebGPUEngine).readFromMultipleStorageBuffers(buffers, 0, undefined, resultData, true).then(() => {\r\n let resultDataOffset = 0;\r\n for (let j = 0; j < this._resultBuffers.length; j++) {\r\n for (let i = 0; i < this._processedMeshes.length; i++) {\r\n const mesh = this._processedMeshes[i];\r\n\r\n Vector3.FromArrayToRef(resultData, resultDataOffset + i * 8, minimum);\r\n Vector3.FromArrayToRef(resultData, resultDataOffset + i * 8 + 3, maximum);\r\n\r\n if (j > 0) {\r\n minimum.minimizeInPlace(mesh.getBoundingInfo().minimum);\r\n maximum.maximizeInPlace(mesh.getBoundingInfo().maximum);\r\n }\r\n\r\n mesh._refreshBoundingInfoDirect(minmax);\r\n }\r\n\r\n resultDataOffset += 8 * this._processedMeshes.length;\r\n }\r\n\r\n for (const resultBuffer of this._resultBuffers) {\r\n resultBuffer.dispose();\r\n }\r\n\r\n this._resultBuffers = [];\r\n this._uboIndex = 0;\r\n\r\n resolve();\r\n });\r\n });\r\n }\r\n\r\n private _disposeCache(storageUnit: { [key: number]: StorageBuffer }) {\r\n for (const key in storageUnit) {\r\n storageUnit[key].dispose();\r\n }\r\n }\r\n\r\n private _disposeForMeshList() {\r\n for (const resultBuffer of this._resultBuffers) {\r\n resultBuffer.dispose();\r\n }\r\n this._resultBuffers = [];\r\n this._processedMeshes = [];\r\n this._computeShaders = [];\r\n this._uniqueComputeShaders = new Set();\r\n }\r\n\r\n /** @internal */\r\n public dispose(): void {\r\n this._disposeCache(this._positionBuffers);\r\n this._positionBuffers = {};\r\n this._disposeCache(this._indexBuffers);\r\n this._indexBuffers = {};\r\n this._disposeCache(this._weightBuffers);\r\n this._weightBuffers = {};\r\n this._disposeCache(this._morphTargetInfluenceBuffers);\r\n this._morphTargetInfluenceBuffers = {};\r\n this._disposeCache(this._morphTargetTextureIndexBuffers);\r\n this._morphTargetTextureIndexBuffers = {};\r\n for (const ubo of this._ubos) {\r\n ubo.dispose();\r\n }\r\n this._ubos = [];\r\n this._computeShadersCache = {};\r\n this._engine = undefined!;\r\n this._disposeForMeshList();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"computeShaderBoundingHelper.js","sourceRoot":"","sources":["../../../../../dev/core/src/Culling/Helper/computeShaderBoundingHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IBoundingInfoHelperPlatform } from \"./IBoundingInfoHelperPlatform\";\r\nimport type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport { ComputeShader } from \"core/Compute/computeShader\";\r\nimport { StorageBuffer } from \"core/Buffers/storageBuffer\";\r\nimport type { WebGPUEngine } from \"core/Engines/webgpuEngine\";\r\nimport type { AbstractEngine } from \"core/Engines/abstractEngine\";\r\nimport type { Mesh } from \"core/Meshes/mesh\";\r\nimport { VertexBuffer } from \"core/Buffers/buffer\";\r\nimport { Vector3 } from \"core/Maths/math.vector\";\r\nimport { UniformBuffer } from \"core/Materials/uniformBuffer\";\r\nimport type { DataBuffer } from \"core/Buffers/dataBuffer\";\r\nimport type { ComputeBindingMapping } from \"core/Engines/Extensions/engine.computeShader\";\r\n\r\nimport \"../../ShadersWGSL/boundingInfo.compute\";\r\nimport { _RetryWithInterval } from \"core/Misc/timingTools\";\r\n\r\n/** @internal */\r\nexport class ComputeShaderBoundingHelper implements IBoundingInfoHelperPlatform {\r\n private _engine: AbstractEngine;\r\n private _computeShadersCache: { [key: string]: ComputeShader } = {};\r\n private _positionBuffers: { [key: number]: StorageBuffer } = {};\r\n private _indexBuffers: { [key: number]: StorageBuffer } = {};\r\n private _weightBuffers: { [key: number]: StorageBuffer } = {};\r\n private _indexExtraBuffers: { [key: number]: StorageBuffer } = {};\r\n private _weightExtraBuffers: { [key: number]: StorageBuffer } = {};\r\n private _morphTargetInfluenceBuffers: { [key: number]: StorageBuffer } = {};\r\n private _morphTargetTextureIndexBuffers: { [key: number]: StorageBuffer } = {};\r\n private _ubos: UniformBuffer[] = [];\r\n private _uboIndex: number = 0;\r\n private _processedMeshes: AbstractMesh[] = [];\r\n private _computeShaders: ComputeShader[][] = [];\r\n private _uniqueComputeShaders: Set<ComputeShader> = new Set();\r\n private _resultBuffers: StorageBuffer[] = [];\r\n\r\n /**\r\n * Creates a new ComputeShaderBoundingHelper\r\n * @param engine defines the engine to use\r\n */\r\n constructor(engine: AbstractEngine) {\r\n this._engine = engine;\r\n }\r\n\r\n private _getComputeShader(defines: string[], hasBones: boolean, hasMorphs: boolean) {\r\n let computeShader: ComputeShader;\r\n const join = defines.join(\"\\n\");\r\n\r\n if (!this._computeShadersCache[join]) {\r\n const bindingsMapping: ComputeBindingMapping = {\r\n positionBuffer: { group: 0, binding: 0 },\r\n resultBuffer: { group: 0, binding: 1 },\r\n settings: { group: 0, binding: 7 },\r\n };\r\n\r\n if (hasBones) {\r\n bindingsMapping.boneSampler = { group: 0, binding: 2 };\r\n bindingsMapping.indexBuffer = { group: 0, binding: 3 };\r\n bindingsMapping.weightBuffer = { group: 0, binding: 4 };\r\n bindingsMapping.indexExtraBuffer = { group: 0, binding: 5 };\r\n bindingsMapping.weightExtraBuffer = { group: 0, binding: 6 };\r\n }\r\n if (hasMorphs) {\r\n bindingsMapping.morphTargets = { group: 0, binding: 8 };\r\n bindingsMapping.morphTargetInfluences = { group: 0, binding: 9 };\r\n bindingsMapping.morphTargetTextureIndices = { group: 0, binding: 10 };\r\n }\r\n\r\n computeShader = new ComputeShader(`boundingInfoCompute${hasBones ? \"_bones\" : \"\"}${hasMorphs ? \"_morphs\" : \"\"}`, this._engine, \"boundingInfo\", {\r\n bindingsMapping,\r\n defines: defines,\r\n });\r\n this._computeShadersCache[join] = computeShader;\r\n } else {\r\n computeShader = this._computeShadersCache[join];\r\n }\r\n\r\n return computeShader;\r\n }\r\n\r\n private _getUBO() {\r\n if (this._uboIndex >= this._ubos.length) {\r\n const ubo = new UniformBuffer(this._engine);\r\n ubo.addFloat3(\"morphTargetTextureInfo\", 0, 0, 0);\r\n ubo.addUniform(\"morphTargetCount\", 1);\r\n ubo.addUniform(\"indexResult\", 1);\r\n this._ubos.push(ubo);\r\n }\r\n\r\n return this._ubos[this._uboIndex++];\r\n }\r\n\r\n private _extractDataAndLink(computeShader: ComputeShader, mesh: Mesh, kind: string, stride: number, name: string, storageUnit: { [key: number]: StorageBuffer }) {\r\n let buffer: StorageBuffer;\r\n const vertexCount = mesh.getTotalVertices();\r\n if (!storageUnit[mesh.uniqueId]) {\r\n const dataArray = mesh.getVertexBuffer(kind)?.getFloatData(vertexCount);\r\n buffer = new StorageBuffer(this._engine as WebGPUEngine, Float32Array.BYTES_PER_ELEMENT * vertexCount * stride);\r\n buffer.update(dataArray!);\r\n\r\n storageUnit[mesh.uniqueId] = buffer;\r\n } else {\r\n buffer = storageUnit[mesh.uniqueId];\r\n }\r\n\r\n computeShader.setStorageBuffer(name, buffer);\r\n }\r\n\r\n private _prepareStorage(computeShader: ComputeShader, name: string, id: number, storageUnit: { [key: number]: StorageBuffer }, numInfluencers: number, data: Float32Array) {\r\n let buffer: StorageBuffer;\r\n if (!storageUnit[id]) {\r\n buffer = new StorageBuffer(this._engine as WebGPUEngine, Float32Array.BYTES_PER_ELEMENT * numInfluencers);\r\n\r\n storageUnit[id] = buffer;\r\n } else {\r\n buffer = storageUnit[id];\r\n }\r\n buffer.update(data);\r\n\r\n computeShader.setStorageBuffer(name, buffer);\r\n }\r\n\r\n /** @internal */\r\n public async processAsync(meshes: AbstractMesh | AbstractMesh[]): Promise<void> {\r\n await this.registerMeshListAsync(meshes);\r\n this.processMeshList();\r\n await this.fetchResultsForMeshListAsync();\r\n }\r\n\r\n /** @internal */\r\n // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\r\n public registerMeshListAsync(meshes: AbstractMesh | AbstractMesh[]): Promise<void> {\r\n this._disposeForMeshList();\r\n\r\n if (!Array.isArray(meshes)) {\r\n meshes = [meshes];\r\n }\r\n\r\n let maxNumInfluencers = 0;\r\n for (let i = 0; i < meshes.length; i++) {\r\n const mesh = meshes[i];\r\n const vertexCount = mesh.getTotalVertices();\r\n\r\n if (vertexCount === 0 || !(mesh as Mesh).getVertexBuffer || !(mesh as Mesh).getVertexBuffer(VertexBuffer.PositionKind)) {\r\n continue;\r\n }\r\n\r\n this._processedMeshes.push(mesh);\r\n\r\n const manager = (<Mesh>mesh).morphTargetManager;\r\n if (manager && manager.supportsPositions) {\r\n maxNumInfluencers = Math.max(maxNumInfluencers, manager.numTargets);\r\n }\r\n }\r\n\r\n for (let i = 0; i < this._processedMeshes.length; i++) {\r\n const mesh = this._processedMeshes[i];\r\n let defines = [\"\"];\r\n\r\n let hasBones = false;\r\n if (mesh && mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton) {\r\n defines.push(\"#define NUM_BONE_INFLUENCERS \" + mesh.numBoneInfluencers);\r\n hasBones = true;\r\n }\r\n\r\n const computeShaderWithoutMorph = this._getComputeShader(defines, hasBones, false);\r\n\r\n this._uniqueComputeShaders.add(computeShaderWithoutMorph);\r\n\r\n const manager = (<Mesh>mesh).morphTargetManager;\r\n if (manager && manager.supportsPositions) {\r\n defines = defines.slice();\r\n defines.push(\"#define MORPHTARGETS\");\r\n defines.push(\"#define NUM_MORPH_INFLUENCERS \" + maxNumInfluencers);\r\n\r\n const computeShaderWithMorph = this._getComputeShader(defines, hasBones, true);\r\n\r\n this._uniqueComputeShaders.add(computeShaderWithMorph);\r\n this._computeShaders.push([computeShaderWithoutMorph, computeShaderWithMorph]);\r\n } else {\r\n this._computeShaders.push([computeShaderWithoutMorph, computeShaderWithoutMorph]);\r\n }\r\n\r\n // Pre-build the ubos, as they won't change if there's no morph targets\r\n const ubo = this._getUBO();\r\n ubo.updateUInt(\"indexResult\", i);\r\n\r\n ubo.update();\r\n }\r\n\r\n return new Promise((resolve) => {\r\n _RetryWithInterval(() => {\r\n const iterator = this._uniqueComputeShaders.keys();\r\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\r\n const computeShader = key.value;\r\n if (!computeShader.isReady()) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }, resolve);\r\n });\r\n }\r\n\r\n /** @internal */\r\n public processMeshList(): void {\r\n if (this._processedMeshes.length === 0) {\r\n return;\r\n }\r\n\r\n this._uboIndex = 0;\r\n\r\n const resultDataSize = 8 * this._processedMeshes.length;\r\n const resultData = new Float32Array(resultDataSize);\r\n\r\n const resultBuffer = new StorageBuffer(this._engine as WebGPUEngine, Float32Array.BYTES_PER_ELEMENT * resultDataSize);\r\n this._resultBuffers.push(resultBuffer);\r\n\r\n for (let i = 0; i < this._processedMeshes.length; i++) {\r\n resultData[i * 8 + 0] = Number.POSITIVE_INFINITY;\r\n resultData[i * 8 + 1] = Number.POSITIVE_INFINITY;\r\n resultData[i * 8 + 2] = Number.POSITIVE_INFINITY;\r\n\r\n resultData[i * 8 + 3] = Number.NEGATIVE_INFINITY;\r\n resultData[i * 8 + 4] = Number.NEGATIVE_INFINITY;\r\n resultData[i * 8 + 5] = Number.NEGATIVE_INFINITY;\r\n }\r\n\r\n resultBuffer.update(resultData);\r\n\r\n for (let i = 0; i < this._processedMeshes.length; i++) {\r\n const mesh = this._processedMeshes[i];\r\n const vertexCount = mesh.getTotalVertices();\r\n\r\n const [computeShaderWithoutMorph, computeShaderWithMorph] = this._computeShaders[i];\r\n\r\n const manager = (<Mesh>mesh).morphTargetManager;\r\n const hasMorphs = manager && manager.numInfluencers > 0 && manager.supportsPositions;\r\n const computeShader = hasMorphs ? computeShaderWithMorph : computeShaderWithoutMorph;\r\n\r\n this._extractDataAndLink(computeShader, mesh as Mesh, VertexBuffer.PositionKind, 3, \"positionBuffer\", this._positionBuffers);\r\n\r\n // Bones\r\n if (mesh && mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton && mesh.skeleton.useTextureToStoreBoneMatrices) {\r\n this._extractDataAndLink(computeShader, mesh as Mesh, VertexBuffer.MatricesIndicesKind, 4, \"indexBuffer\", this._indexBuffers);\r\n this._extractDataAndLink(computeShader, mesh as Mesh, VertexBuffer.MatricesWeightsKind, 4, \"weightBuffer\", this._weightBuffers);\r\n const boneSampler = mesh.skeleton.getTransformMatrixTexture(mesh);\r\n computeShader.setTexture(\"boneSampler\", boneSampler!, false);\r\n if (mesh.numBoneInfluencers > 4) {\r\n this._extractDataAndLink(computeShader, mesh as Mesh, VertexBuffer.MatricesIndicesExtraKind, 4, \"indexExtraBuffer\", this._indexExtraBuffers);\r\n this._extractDataAndLink(computeShader, mesh as Mesh, VertexBuffer.MatricesWeightsExtraKind, 4, \"weightExtraBuffer\", this._weightExtraBuffers);\r\n }\r\n }\r\n\r\n const ubo = this._getUBO();\r\n\r\n // Morphs\r\n if (hasMorphs) {\r\n const morphTargets = manager._targetStoreTexture;\r\n computeShader.setTexture(\"morphTargets\", morphTargets!, false);\r\n\r\n this._prepareStorage(computeShader, \"morphTargetInfluences\", mesh.uniqueId, this._morphTargetInfluenceBuffers, manager.numInfluencers, manager.influences);\r\n this._prepareStorage(\r\n computeShader,\r\n \"morphTargetTextureIndices\",\r\n mesh.uniqueId,\r\n this._morphTargetTextureIndexBuffers,\r\n manager.numInfluencers,\r\n manager._morphTargetTextureIndices\r\n );\r\n\r\n ubo.updateFloat3(\"morphTargetTextureInfo\", manager._textureVertexStride, manager._textureWidth, manager._textureHeight);\r\n ubo.updateInt(\"morphTargetCount\", manager.numInfluencers);\r\n ubo.update();\r\n }\r\n\r\n computeShader.setStorageBuffer(\"resultBuffer\", resultBuffer);\r\n\r\n computeShader.setUniformBuffer(\"settings\", ubo);\r\n\r\n // Dispatch\r\n computeShader.dispatch(Math.ceil(vertexCount / 256));\r\n\r\n this._engine.flushFramebuffer();\r\n }\r\n }\r\n\r\n /** @internal */\r\n public async fetchResultsForMeshListAsync(): Promise<void> {\r\n return await new Promise((resolve) => {\r\n const buffers: DataBuffer[] = [];\r\n let size = 0;\r\n for (let i = 0; i < this._resultBuffers.length; i++) {\r\n const buffer = this._resultBuffers[i].getBuffer();\r\n buffers.push(buffer);\r\n size += buffer.capacity;\r\n }\r\n\r\n const resultData = new Float32Array(size / Float32Array.BYTES_PER_ELEMENT);\r\n\r\n const minimum = Vector3.Zero();\r\n const maximum = Vector3.Zero();\r\n\r\n const minmax = { minimum, maximum };\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises, github/no-then\r\n (this._engine as WebGPUEngine).readFromMultipleStorageBuffers(buffers, 0, undefined, resultData, true).then(() => {\r\n let resultDataOffset = 0;\r\n for (let j = 0; j < this._resultBuffers.length; j++) {\r\n for (let i = 0; i < this._processedMeshes.length; i++) {\r\n const mesh = this._processedMeshes[i];\r\n\r\n Vector3.FromArrayToRef(resultData, resultDataOffset + i * 8, minimum);\r\n Vector3.FromArrayToRef(resultData, resultDataOffset + i * 8 + 3, maximum);\r\n\r\n if (j > 0) {\r\n minimum.minimizeInPlace(mesh.getBoundingInfo().minimum);\r\n maximum.maximizeInPlace(mesh.getBoundingInfo().maximum);\r\n }\r\n\r\n mesh._refreshBoundingInfoDirect(minmax);\r\n }\r\n\r\n resultDataOffset += 8 * this._processedMeshes.length;\r\n }\r\n\r\n for (const resultBuffer of this._resultBuffers) {\r\n resultBuffer.dispose();\r\n }\r\n\r\n this._resultBuffers = [];\r\n this._uboIndex = 0;\r\n\r\n resolve();\r\n });\r\n });\r\n }\r\n\r\n private _disposeCache(storageUnit: { [key: number]: StorageBuffer }) {\r\n for (const key in storageUnit) {\r\n storageUnit[key].dispose();\r\n }\r\n }\r\n\r\n private _disposeForMeshList() {\r\n for (const resultBuffer of this._resultBuffers) {\r\n resultBuffer.dispose();\r\n }\r\n this._resultBuffers = [];\r\n this._processedMeshes = [];\r\n this._computeShaders = [];\r\n this._uniqueComputeShaders = new Set();\r\n }\r\n\r\n /** @internal */\r\n public dispose(): void {\r\n this._disposeCache(this._positionBuffers);\r\n this._positionBuffers = {};\r\n this._disposeCache(this._indexBuffers);\r\n this._indexBuffers = {};\r\n this._disposeCache(this._weightBuffers);\r\n this._weightBuffers = {};\r\n this._disposeCache(this._morphTargetInfluenceBuffers);\r\n this._morphTargetInfluenceBuffers = {};\r\n this._disposeCache(this._morphTargetTextureIndexBuffers);\r\n this._morphTargetTextureIndexBuffers = {};\r\n for (const ubo of this._ubos) {\r\n ubo.dispose();\r\n }\r\n this._ubos = [];\r\n this._computeShadersCache = {};\r\n this._engine = undefined!;\r\n this._disposeForMeshList();\r\n }\r\n}\r\n"]}
@@ -18,6 +18,7 @@ export class TransformFeedbackBoundingHelper {
18
18
  this._engine = engine;
19
19
  }
20
20
  /** @internal */
21
+ // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax
21
22
  processAsync(meshes) {
22
23
  if (!Array.isArray(meshes)) {
23
24
  meshes = [meshes];
@@ -158,6 +159,7 @@ export class TransformFeedbackBoundingHelper {
158
159
  }
159
160
  }
160
161
  /** @internal */
162
+ // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax
161
163
  registerMeshListAsync(meshes) {
162
164
  if (!Array.isArray(meshes)) {
163
165
  meshes = [meshes];
@@ -175,6 +177,7 @@ export class TransformFeedbackBoundingHelper {
175
177
  this._meshListCounter++;
176
178
  }
177
179
  /** @internal */
180
+ // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax
178
181
  fetchResultsForMeshListAsync() {
179
182
  this._meshListCounter = 0;
180
183
  return Promise.resolve();
@@ -1 +1 @@
1
- {"version":3,"file":"transformFeedbackBoundingHelper.js","sourceRoot":"","sources":["../../../../../dev/core/src/Culling/Helper/transformFeedbackBoundingHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Effect } from \"core/Materials/effect\";\r\nimport type { ThinEngine } from \"core/Engines/thinEngine\";\r\nimport { VertexBuffer, Buffer } from \"core/Buffers/buffer\";\r\nimport type { Engine } from \"core/Engines/engine\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport type { Nullable } from \"core/types\";\r\nimport type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport {\r\n BindBonesParameters,\r\n BindMorphTargetParameters,\r\n PrepareAttributesForBakedVertexAnimation,\r\n PrepareDefinesAndAttributesForMorphTargets,\r\n} from \"core/Materials/materialHelper.functions\";\r\nimport type { Mesh } from \"core/Meshes/mesh\";\r\nimport type { IBoundingInfoHelperPlatform } from \"./IBoundingInfoHelperPlatform\";\r\nimport { extractMinAndMax } from \"core/Maths/math.functions\";\r\nimport { Vector3 } from \"core/Maths/math.vector\";\r\n\r\nimport \"../../Shaders/gpuTransform.vertex\";\r\nimport \"../../Shaders/gpuTransform.fragment\";\r\n\r\n/** @internal */\r\nexport class TransformFeedbackBoundingHelper implements IBoundingInfoHelperPlatform {\r\n private static _Min = new Vector3();\r\n private static _Max = new Vector3();\r\n\r\n private _engine: Nullable<ThinEngine>;\r\n private _buffers: { [key: number]: Buffer } = {};\r\n private _effects: { [key: string]: Effect } = {};\r\n private _meshList: AbstractMesh[];\r\n private _meshListCounter = 0;\r\n\r\n /**\r\n * Creates a new TransformFeedbackBoundingHelper\r\n * @param engine defines the engine to use\r\n */\r\n constructor(engine: ThinEngine) {\r\n this._engine = engine;\r\n }\r\n\r\n /** @internal */\r\n public processAsync(meshes: AbstractMesh | AbstractMesh[]): Promise<void> {\r\n if (!Array.isArray(meshes)) {\r\n meshes = [meshes];\r\n }\r\n\r\n this._meshListCounter = 0;\r\n\r\n this._processMeshList(meshes);\r\n\r\n return Promise.resolve();\r\n }\r\n\r\n private _processMeshList(meshes: AbstractMesh[]) {\r\n const parallelShaderCompile = this._engine!.getCaps().parallelShaderCompile;\r\n\r\n this._engine!.getCaps().parallelShaderCompile = undefined;\r\n\r\n for (let i = 0; i < meshes.length; ++i) {\r\n const mesh = meshes[i];\r\n const vertexCount = mesh.getTotalVertices();\r\n\r\n if (vertexCount === 0 || !(mesh as Mesh).getVertexBuffer || !(mesh as Mesh).getVertexBuffer(VertexBuffer.PositionKind)) {\r\n continue;\r\n }\r\n\r\n // Get correct effect\r\n let computeEffect: Effect;\r\n const defines: string[] = [];\r\n const attribs = [VertexBuffer.PositionKind];\r\n\r\n // Bones\r\n if (mesh && mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton) {\r\n attribs.push(VertexBuffer.MatricesIndicesKind);\r\n attribs.push(VertexBuffer.MatricesWeightsKind);\r\n if (mesh.numBoneInfluencers > 4) {\r\n attribs.push(VertexBuffer.MatricesIndicesExtraKind);\r\n attribs.push(VertexBuffer.MatricesWeightsExtraKind);\r\n }\r\n defines.push(\"#define NUM_BONE_INFLUENCERS \" + mesh.numBoneInfluencers);\r\n defines.push(\"#define BONETEXTURE \" + mesh.skeleton.isUsingTextureForMatrices);\r\n defines.push(\"#define BonesPerMesh \" + (mesh.skeleton.bones.length + 1));\r\n } else {\r\n defines.push(\"#define NUM_BONE_INFLUENCERS 0\");\r\n }\r\n\r\n // Morph\r\n const numMorphInfluencers = mesh.morphTargetManager\r\n ? PrepareDefinesAndAttributesForMorphTargets(\r\n mesh.morphTargetManager,\r\n defines,\r\n attribs,\r\n mesh,\r\n true, // usePositionMorph\r\n false, // useNormalMorph\r\n false, // useTangentMorph\r\n false, // useUVMorph\r\n false, // useUV2Morph\r\n false // useColorMorph\r\n )\r\n : 0;\r\n\r\n // Baked Vertex Animation\r\n const bvaManager = (<Mesh>mesh).bakedVertexAnimationManager;\r\n if (bvaManager && bvaManager.isEnabled) {\r\n defines.push(\"#define BAKED_VERTEX_ANIMATION_TEXTURE\");\r\n PrepareAttributesForBakedVertexAnimation(attribs, mesh, defines);\r\n }\r\n\r\n const join = defines.join(\"\\n\");\r\n if (!this._effects[join]) {\r\n const uniforms = [\r\n \"boneTextureWidth\",\r\n \"mBones\",\r\n \"morphTargetInfluences\",\r\n \"morphTargetCount\",\r\n \"morphTargetTextureInfo\",\r\n \"morphTargetTextureIndices\",\r\n \"bakedVertexAnimationSettings\",\r\n \"bakedVertexAnimationTextureSizeInverted\",\r\n \"bakedVertexAnimationTime\",\r\n ];\r\n const samplers = [\"boneSampler\", \"morphTargets\", \"bakedVertexAnimationTexture\"];\r\n\r\n const computeEffectOptions = {\r\n attributes: attribs,\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: [],\r\n samplers: samplers,\r\n defines: join,\r\n fallbacks: null,\r\n onCompiled: null,\r\n onError: null,\r\n indexParameters: { maxSimultaneousMorphTargets: numMorphInfluencers },\r\n maxSimultaneousLights: 0,\r\n transformFeedbackVaryings: [\"outPosition\"],\r\n };\r\n computeEffect = this._engine!.createEffect(\"gpuTransform\", computeEffectOptions, this._engine!);\r\n this._effects[join] = computeEffect;\r\n } else {\r\n computeEffect = this._effects[join];\r\n }\r\n\r\n this._compute(mesh, computeEffect);\r\n }\r\n\r\n this._engine!.getCaps().parallelShaderCompile = parallelShaderCompile;\r\n }\r\n\r\n private _compute(mesh: AbstractMesh, effect: Effect): void {\r\n const engine = this._engine as Engine;\r\n\r\n // Buffer\r\n let targetBuffer: Buffer;\r\n const vertexCount = mesh.getTotalVertices();\r\n\r\n if (!this._buffers[mesh.uniqueId]) {\r\n const targetData = new Float32Array(vertexCount * 3);\r\n targetBuffer = new Buffer(mesh.getEngine(), targetData, true, 3);\r\n this._buffers[mesh.uniqueId] = targetBuffer;\r\n } else {\r\n targetBuffer = this._buffers[mesh.uniqueId];\r\n }\r\n\r\n // Bind\r\n effect.getEngine().enableEffect(effect);\r\n (mesh as Mesh)._bindDirect(effect, null, true);\r\n\r\n // Bones\r\n BindBonesParameters(mesh, effect);\r\n\r\n // Morph targets\r\n BindMorphTargetParameters(mesh, effect);\r\n if (mesh.morphTargetManager && mesh.morphTargetManager.isUsingTextureForTargets) {\r\n mesh.morphTargetManager._bind(effect);\r\n }\r\n\r\n // BVA\r\n const bvaManager = (<Mesh>mesh).bakedVertexAnimationManager;\r\n\r\n if (bvaManager && bvaManager.isEnabled) {\r\n mesh.bakedVertexAnimationManager?.bind(effect, false);\r\n }\r\n\r\n // Update\r\n const arrayBuffer = targetBuffer.getData()! as Float32Array;\r\n engine.bindTransformFeedbackBuffer(targetBuffer.getBuffer());\r\n engine.setRasterizerState(false);\r\n engine.beginTransformFeedback(true);\r\n engine.drawArraysType(Constants.MATERIAL_PointFillMode, 0, vertexCount);\r\n engine.endTransformFeedback();\r\n engine.setRasterizerState(true);\r\n engine.readTransformFeedbackBuffer(arrayBuffer);\r\n engine.bindTransformFeedbackBuffer(null);\r\n\r\n // Update mesh\r\n if (this._meshListCounter === 0) {\r\n mesh._refreshBoundingInfo(arrayBuffer, null);\r\n } else {\r\n const bb = mesh.getBoundingInfo().boundingBox;\r\n const extend = extractMinAndMax(arrayBuffer, 0, vertexCount);\r\n\r\n TransformFeedbackBoundingHelper._Min.copyFrom(bb.minimum).minimizeInPlace(extend.minimum);\r\n TransformFeedbackBoundingHelper._Max.copyFrom(bb.maximum).maximizeInPlace(extend.maximum);\r\n\r\n mesh._refreshBoundingInfoDirect({ minimum: TransformFeedbackBoundingHelper._Min, maximum: TransformFeedbackBoundingHelper._Max });\r\n }\r\n }\r\n\r\n /** @internal */\r\n public registerMeshListAsync(meshes: AbstractMesh | AbstractMesh[]): Promise<void> {\r\n if (!Array.isArray(meshes)) {\r\n meshes = [meshes];\r\n }\r\n\r\n this._meshList = meshes;\r\n this._meshListCounter = 0;\r\n\r\n return Promise.resolve();\r\n }\r\n\r\n /** @internal */\r\n public processMeshList(): void {\r\n if (this._meshList.length === 0) {\r\n return;\r\n }\r\n\r\n this._processMeshList(this._meshList);\r\n this._meshListCounter++;\r\n }\r\n\r\n /** @internal */\r\n public fetchResultsForMeshListAsync(): Promise<void> {\r\n this._meshListCounter = 0;\r\n\r\n return Promise.resolve();\r\n }\r\n\r\n /** @internal */\r\n public dispose(): void {\r\n for (const key in this._buffers) {\r\n this._buffers[key].dispose();\r\n }\r\n this._buffers = {};\r\n this._effects = {};\r\n this._engine = null;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"transformFeedbackBoundingHelper.js","sourceRoot":"","sources":["../../../../../dev/core/src/Culling/Helper/transformFeedbackBoundingHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Effect } from \"core/Materials/effect\";\r\nimport type { ThinEngine } from \"core/Engines/thinEngine\";\r\nimport { VertexBuffer, Buffer } from \"core/Buffers/buffer\";\r\nimport type { Engine } from \"core/Engines/engine\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport type { Nullable } from \"core/types\";\r\nimport type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport {\r\n BindBonesParameters,\r\n BindMorphTargetParameters,\r\n PrepareAttributesForBakedVertexAnimation,\r\n PrepareDefinesAndAttributesForMorphTargets,\r\n} from \"core/Materials/materialHelper.functions\";\r\nimport type { Mesh } from \"core/Meshes/mesh\";\r\nimport type { IBoundingInfoHelperPlatform } from \"./IBoundingInfoHelperPlatform\";\r\nimport { extractMinAndMax } from \"core/Maths/math.functions\";\r\nimport { Vector3 } from \"core/Maths/math.vector\";\r\n\r\nimport \"../../Shaders/gpuTransform.vertex\";\r\nimport \"../../Shaders/gpuTransform.fragment\";\r\n\r\n/** @internal */\r\nexport class TransformFeedbackBoundingHelper implements IBoundingInfoHelperPlatform {\r\n private static _Min = new Vector3();\r\n private static _Max = new Vector3();\r\n\r\n private _engine: Nullable<ThinEngine>;\r\n private _buffers: { [key: number]: Buffer } = {};\r\n private _effects: { [key: string]: Effect } = {};\r\n private _meshList: AbstractMesh[];\r\n private _meshListCounter = 0;\r\n\r\n /**\r\n * Creates a new TransformFeedbackBoundingHelper\r\n * @param engine defines the engine to use\r\n */\r\n constructor(engine: ThinEngine) {\r\n this._engine = engine;\r\n }\r\n\r\n /** @internal */\r\n // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\r\n public processAsync(meshes: AbstractMesh | AbstractMesh[]): Promise<void> {\r\n if (!Array.isArray(meshes)) {\r\n meshes = [meshes];\r\n }\r\n\r\n this._meshListCounter = 0;\r\n\r\n this._processMeshList(meshes);\r\n\r\n return Promise.resolve();\r\n }\r\n\r\n private _processMeshList(meshes: AbstractMesh[]) {\r\n const parallelShaderCompile = this._engine!.getCaps().parallelShaderCompile;\r\n\r\n this._engine!.getCaps().parallelShaderCompile = undefined;\r\n\r\n for (let i = 0; i < meshes.length; ++i) {\r\n const mesh = meshes[i];\r\n const vertexCount = mesh.getTotalVertices();\r\n\r\n if (vertexCount === 0 || !(mesh as Mesh).getVertexBuffer || !(mesh as Mesh).getVertexBuffer(VertexBuffer.PositionKind)) {\r\n continue;\r\n }\r\n\r\n // Get correct effect\r\n let computeEffect: Effect;\r\n const defines: string[] = [];\r\n const attribs = [VertexBuffer.PositionKind];\r\n\r\n // Bones\r\n if (mesh && mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton) {\r\n attribs.push(VertexBuffer.MatricesIndicesKind);\r\n attribs.push(VertexBuffer.MatricesWeightsKind);\r\n if (mesh.numBoneInfluencers > 4) {\r\n attribs.push(VertexBuffer.MatricesIndicesExtraKind);\r\n attribs.push(VertexBuffer.MatricesWeightsExtraKind);\r\n }\r\n defines.push(\"#define NUM_BONE_INFLUENCERS \" + mesh.numBoneInfluencers);\r\n defines.push(\"#define BONETEXTURE \" + mesh.skeleton.isUsingTextureForMatrices);\r\n defines.push(\"#define BonesPerMesh \" + (mesh.skeleton.bones.length + 1));\r\n } else {\r\n defines.push(\"#define NUM_BONE_INFLUENCERS 0\");\r\n }\r\n\r\n // Morph\r\n const numMorphInfluencers = mesh.morphTargetManager\r\n ? PrepareDefinesAndAttributesForMorphTargets(\r\n mesh.morphTargetManager,\r\n defines,\r\n attribs,\r\n mesh,\r\n true, // usePositionMorph\r\n false, // useNormalMorph\r\n false, // useTangentMorph\r\n false, // useUVMorph\r\n false, // useUV2Morph\r\n false // useColorMorph\r\n )\r\n : 0;\r\n\r\n // Baked Vertex Animation\r\n const bvaManager = (<Mesh>mesh).bakedVertexAnimationManager;\r\n if (bvaManager && bvaManager.isEnabled) {\r\n defines.push(\"#define BAKED_VERTEX_ANIMATION_TEXTURE\");\r\n PrepareAttributesForBakedVertexAnimation(attribs, mesh, defines);\r\n }\r\n\r\n const join = defines.join(\"\\n\");\r\n if (!this._effects[join]) {\r\n const uniforms = [\r\n \"boneTextureWidth\",\r\n \"mBones\",\r\n \"morphTargetInfluences\",\r\n \"morphTargetCount\",\r\n \"morphTargetTextureInfo\",\r\n \"morphTargetTextureIndices\",\r\n \"bakedVertexAnimationSettings\",\r\n \"bakedVertexAnimationTextureSizeInverted\",\r\n \"bakedVertexAnimationTime\",\r\n ];\r\n const samplers = [\"boneSampler\", \"morphTargets\", \"bakedVertexAnimationTexture\"];\r\n\r\n const computeEffectOptions = {\r\n attributes: attribs,\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: [],\r\n samplers: samplers,\r\n defines: join,\r\n fallbacks: null,\r\n onCompiled: null,\r\n onError: null,\r\n indexParameters: { maxSimultaneousMorphTargets: numMorphInfluencers },\r\n maxSimultaneousLights: 0,\r\n transformFeedbackVaryings: [\"outPosition\"],\r\n };\r\n computeEffect = this._engine!.createEffect(\"gpuTransform\", computeEffectOptions, this._engine!);\r\n this._effects[join] = computeEffect;\r\n } else {\r\n computeEffect = this._effects[join];\r\n }\r\n\r\n this._compute(mesh, computeEffect);\r\n }\r\n\r\n this._engine!.getCaps().parallelShaderCompile = parallelShaderCompile;\r\n }\r\n\r\n private _compute(mesh: AbstractMesh, effect: Effect): void {\r\n const engine = this._engine as Engine;\r\n\r\n // Buffer\r\n let targetBuffer: Buffer;\r\n const vertexCount = mesh.getTotalVertices();\r\n\r\n if (!this._buffers[mesh.uniqueId]) {\r\n const targetData = new Float32Array(vertexCount * 3);\r\n targetBuffer = new Buffer(mesh.getEngine(), targetData, true, 3);\r\n this._buffers[mesh.uniqueId] = targetBuffer;\r\n } else {\r\n targetBuffer = this._buffers[mesh.uniqueId];\r\n }\r\n\r\n // Bind\r\n effect.getEngine().enableEffect(effect);\r\n (mesh as Mesh)._bindDirect(effect, null, true);\r\n\r\n // Bones\r\n BindBonesParameters(mesh, effect);\r\n\r\n // Morph targets\r\n BindMorphTargetParameters(mesh, effect);\r\n if (mesh.morphTargetManager && mesh.morphTargetManager.isUsingTextureForTargets) {\r\n mesh.morphTargetManager._bind(effect);\r\n }\r\n\r\n // BVA\r\n const bvaManager = (<Mesh>mesh).bakedVertexAnimationManager;\r\n\r\n if (bvaManager && bvaManager.isEnabled) {\r\n mesh.bakedVertexAnimationManager?.bind(effect, false);\r\n }\r\n\r\n // Update\r\n const arrayBuffer = targetBuffer.getData()! as Float32Array;\r\n engine.bindTransformFeedbackBuffer(targetBuffer.getBuffer());\r\n engine.setRasterizerState(false);\r\n engine.beginTransformFeedback(true);\r\n engine.drawArraysType(Constants.MATERIAL_PointFillMode, 0, vertexCount);\r\n engine.endTransformFeedback();\r\n engine.setRasterizerState(true);\r\n engine.readTransformFeedbackBuffer(arrayBuffer);\r\n engine.bindTransformFeedbackBuffer(null);\r\n\r\n // Update mesh\r\n if (this._meshListCounter === 0) {\r\n mesh._refreshBoundingInfo(arrayBuffer, null);\r\n } else {\r\n const bb = mesh.getBoundingInfo().boundingBox;\r\n const extend = extractMinAndMax(arrayBuffer, 0, vertexCount);\r\n\r\n TransformFeedbackBoundingHelper._Min.copyFrom(bb.minimum).minimizeInPlace(extend.minimum);\r\n TransformFeedbackBoundingHelper._Max.copyFrom(bb.maximum).maximizeInPlace(extend.maximum);\r\n\r\n mesh._refreshBoundingInfoDirect({ minimum: TransformFeedbackBoundingHelper._Min, maximum: TransformFeedbackBoundingHelper._Max });\r\n }\r\n }\r\n\r\n /** @internal */\r\n // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\r\n public registerMeshListAsync(meshes: AbstractMesh | AbstractMesh[]): Promise<void> {\r\n if (!Array.isArray(meshes)) {\r\n meshes = [meshes];\r\n }\r\n\r\n this._meshList = meshes;\r\n this._meshListCounter = 0;\r\n\r\n return Promise.resolve();\r\n }\r\n\r\n /** @internal */\r\n public processMeshList(): void {\r\n if (this._meshList.length === 0) {\r\n return;\r\n }\r\n\r\n this._processMeshList(this._meshList);\r\n this._meshListCounter++;\r\n }\r\n\r\n /** @internal */\r\n // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\r\n public fetchResultsForMeshListAsync(): Promise<void> {\r\n this._meshListCounter = 0;\r\n\r\n return Promise.resolve();\r\n }\r\n\r\n /** @internal */\r\n public dispose(): void {\r\n for (const key in this._buffers) {\r\n this._buffers[key].dispose();\r\n }\r\n this._buffers = {};\r\n this._effects = {};\r\n this._engine = null;\r\n }\r\n}\r\n"]}
@@ -213,7 +213,7 @@ export class DebugLayer {
213
213
  */
214
214
  // eslint-disable-next-line @typescript-eslint/naming-convention
215
215
  async show(config) {
216
- return new Promise((resolve) => {
216
+ return await new Promise((resolve) => {
217
217
  if (typeof this.BJSINSPECTOR == "undefined") {
218
218
  const inspectorUrl = config && config.inspectorURL ? config.inspectorURL : DebugLayer.InspectorURL;
219
219
  // Load inspector and add it to the DOM
@@ -1 +1 @@
1
- {"version":3,"file":"debugLayer.js","sourceRoot":"","sources":["../../../../dev/core/src/Debug/debugLayer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Tools } from \"../Misc/tools\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport { Scene } from \"../scene\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport type { IInspectable } from \"../Misc/iInspectable\";\r\nimport type { Camera } from \"../Cameras/camera\";\r\nimport { AbstractEngine } from \"core/Engines/abstractEngine\";\r\n\r\n// declare INSPECTOR namespace for compilation issue\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\ndeclare let INSPECTOR: any;\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\ndeclare let BABYLON: any;\r\n// load the inspector using require, if not present in the global namespace.\r\n\r\n/**\r\n * Interface used to define scene explorer extensibility option\r\n */\r\nexport interface IExplorerExtensibilityOption {\r\n /**\r\n * Define the option label\r\n */\r\n label: string;\r\n /**\r\n * Defines the action to execute on click\r\n */\r\n action: (entity: any) => void;\r\n /**\r\n * Keep popup open after click\r\n */\r\n keepOpenAfterClick?: boolean;\r\n}\r\n\r\n/**\r\n * Defines a group of actions associated with a predicate to use when extending the Inspector scene explorer\r\n */\r\nexport interface IExplorerExtensibilityGroup {\r\n /**\r\n * Defines a predicate to test if a given type mut be extended\r\n */\r\n predicate: (entity: any) => boolean;\r\n /**\r\n * Gets the list of options added to a type\r\n */\r\n entries: IExplorerExtensibilityOption[];\r\n}\r\n\r\n/**\r\n * Defines a new node that will be displayed as top level node in the explorer\r\n */\r\nexport interface IExplorerAdditionalChild {\r\n /**\r\n * Gets the name of the additional node\r\n */\r\n name: string;\r\n /**\r\n * Function used to return the class name of the child node\r\n */\r\n getClassName(): string;\r\n /**\r\n * List of inspectable custom properties (used by the Inspector)\r\n * @see https://doc.babylonjs.com/toolsAndResources/inspector#extensibility\r\n */\r\n inspectableCustomProperties: IInspectable[];\r\n}\r\n\r\n/**\r\n * Defines a new node that will be displayed as top level node in the explorer\r\n */\r\nexport interface IExplorerAdditionalNode {\r\n /**\r\n * Gets the name of the additional node\r\n */\r\n name: string;\r\n /**\r\n * Function used to return the list of child entries\r\n */\r\n getContent(): IExplorerAdditionalChild[];\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport type IInspectorContextMenuType = \"pipeline\" | \"node\" | \"materials\" | \"spriteManagers\" | \"particleSystems\" | \"frameGraphs\";\r\n\r\n/**\r\n * Context menu item\r\n */\r\nexport interface IInspectorContextMenuItem {\r\n /**\r\n * Display label - menu item\r\n */\r\n label: string;\r\n /**\r\n * Callback function that will be called when the menu item is selected\r\n * @param entity the entity that is currently selected in the scene explorer\r\n */\r\n action: (entity?: unknown) => void;\r\n}\r\n\r\n/**\r\n * Interface used to define the options to use to create the Inspector\r\n */\r\nexport interface IInspectorOptions {\r\n /**\r\n * Display in overlay mode (default: false)\r\n */\r\n overlay?: boolean;\r\n /**\r\n * HTML element to use as root (the parent of the rendering canvas will be used as default value)\r\n */\r\n globalRoot?: HTMLElement;\r\n /**\r\n * Display the Scene explorer\r\n */\r\n showExplorer?: boolean;\r\n /**\r\n * Display the property inspector\r\n */\r\n showInspector?: boolean;\r\n /**\r\n * Display in embed mode (both panes on the right)\r\n */\r\n embedMode?: boolean;\r\n /**\r\n * let the Inspector handles resize of the canvas when panes are resized (default to true)\r\n */\r\n handleResize?: boolean;\r\n /**\r\n * Allow the panes to popup (default: true)\r\n */\r\n enablePopup?: boolean;\r\n /**\r\n * Allow the panes to be closed by users (default: true)\r\n */\r\n enableClose?: boolean;\r\n /**\r\n * Optional list of extensibility entries\r\n */\r\n explorerExtensibility?: IExplorerExtensibilityGroup[];\r\n /**\r\n * Optional list of additional top level nodes\r\n */\r\n additionalNodes?: IExplorerAdditionalNode[];\r\n /**\r\n * Optional URL to get the inspector script from (by default it uses the babylonjs CDN).\r\n */\r\n inspectorURL?: string;\r\n /**\r\n * Optional initial tab (default to DebugLayerTab.Properties)\r\n */\r\n initialTab?: DebugLayerTab;\r\n /**\r\n * Optional camera to use to render the gizmos from the inspector (default to the scene.activeCamera or the latest from scene.activeCameras)\r\n */\r\n gizmoCamera?: Camera;\r\n /**\r\n * Context menu for inspector tools such as \"Post Process\", \"Nodes\", \"Materials\", etc.\r\n */\r\n contextMenu?: Partial<Record<IInspectorContextMenuType, IInspectorContextMenuItem[]>>;\r\n /**\r\n * List of context menu items that should be completely overridden by custom items from the contextMenu property.\r\n */\r\n contextMenuOverride?: IInspectorContextMenuType[];\r\n\r\n /**\r\n * Should the default font loading be skipped\r\n */\r\n skipDefaultFontLoading?: boolean;\r\n}\r\n\r\ndeclare module \"../scene\" {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n export interface Scene {\r\n /**\r\n * @internal\r\n * Backing field\r\n */\r\n _debugLayer: DebugLayer;\r\n\r\n /**\r\n * Gets the debug layer (aka Inspector) associated with the scene\r\n * @see https://doc.babylonjs.com/toolsAndResources/inspector\r\n */\r\n debugLayer: DebugLayer;\r\n }\r\n}\r\nObject.defineProperty(Scene.prototype, \"debugLayer\", {\r\n get: function (this: Scene) {\r\n if (!this._debugLayer) {\r\n this._debugLayer = new DebugLayer(this);\r\n }\r\n return this._debugLayer;\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n});\r\n\r\n/**\r\n * Enum of inspector action tab\r\n */\r\nexport const enum DebugLayerTab {\r\n /**\r\n * Properties tag (default)\r\n */\r\n Properties = 0,\r\n /**\r\n * Debug tab\r\n */\r\n Debug = 1,\r\n /**\r\n * Statistics tab\r\n */\r\n Statistics = 2,\r\n /**\r\n * Tools tab\r\n */\r\n Tools = 3,\r\n /**\r\n * Settings tab\r\n */\r\n Settings = 4,\r\n}\r\n\r\n/**\r\n * The debug layer (aka Inspector) is the go to tool in order to better understand\r\n * what is happening in your scene\r\n * @see https://doc.babylonjs.com/toolsAndResources/inspector\r\n */\r\nexport class DebugLayer {\r\n /**\r\n * Define the url to get the inspector script from.\r\n * By default it uses the babylonjs CDN.\r\n * @ignoreNaming\r\n */\r\n public static InspectorURL = `${Tools._DefaultCdnUrl}/v${AbstractEngine.Version}/inspector/babylon.inspector.bundle.js`;\r\n\r\n /**\r\n * The default configuration of the inspector\r\n */\r\n public static Config: IInspectorOptions = {\r\n overlay: false,\r\n showExplorer: true,\r\n showInspector: true,\r\n embedMode: false,\r\n handleResize: true,\r\n enablePopup: true,\r\n };\r\n\r\n private _scene: Scene;\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private BJSINSPECTOR = this._getGlobalInspector();\r\n\r\n private _onPropertyChangedObservable?: Observable<{ object: any; property: string; value: any; initialValue: any }>;\r\n /**\r\n * Observable triggered when a property is changed through the inspector.\r\n */\r\n public get onPropertyChangedObservable() {\r\n if (this.BJSINSPECTOR && this.BJSINSPECTOR.Inspector) {\r\n return this.BJSINSPECTOR.Inspector.OnPropertyChangedObservable;\r\n }\r\n\r\n if (!this._onPropertyChangedObservable) {\r\n this._onPropertyChangedObservable = new Observable<{ object: any; property: string; value: any; initialValue: any }>();\r\n }\r\n\r\n return this._onPropertyChangedObservable;\r\n }\r\n\r\n private _onSelectionChangedObservable?: Observable<any>;\r\n /**\r\n * Observable triggered when the selection is changed through the inspector.\r\n */\r\n public get onSelectionChangedObservable() {\r\n if (this.BJSINSPECTOR && this.BJSINSPECTOR.Inspector) {\r\n return this.BJSINSPECTOR.Inspector.OnSelectionChangeObservable;\r\n }\r\n\r\n if (!this._onSelectionChangedObservable) {\r\n this._onSelectionChangedObservable = new Observable<any>();\r\n }\r\n\r\n return this._onSelectionChangedObservable;\r\n }\r\n\r\n /**\r\n * Instantiates a new debug layer.\r\n * The debug layer (aka Inspector) is the go to tool in order to better understand\r\n * what is happening in your scene\r\n * @see https://doc.babylonjs.com/toolsAndResources/inspector\r\n * @param scene Defines the scene to inspect\r\n */\r\n constructor(scene?: Scene) {\r\n this._scene = scene || <Scene>EngineStore.LastCreatedScene;\r\n if (!this._scene) {\r\n return;\r\n }\r\n this._scene.onDisposeObservable.add(() => {\r\n // Debug layer\r\n if (this._scene._debugLayer) {\r\n this._scene._debugLayer.hide();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Creates the inspector window.\r\n * @param config\r\n */\r\n private _createInspector(config?: Partial<IInspectorOptions>) {\r\n if (this.isVisible()) {\r\n return;\r\n }\r\n\r\n if (this._onPropertyChangedObservable) {\r\n for (const observer of this._onPropertyChangedObservable.observers) {\r\n this.BJSINSPECTOR.Inspector.OnPropertyChangedObservable.add(observer);\r\n }\r\n this._onPropertyChangedObservable.clear();\r\n this._onPropertyChangedObservable = undefined;\r\n }\r\n\r\n if (this._onSelectionChangedObservable) {\r\n for (const observer of this._onSelectionChangedObservable.observers) {\r\n this.BJSINSPECTOR.Inspector.OnSelectionChangedObservable.add(observer);\r\n }\r\n this._onSelectionChangedObservable.clear();\r\n this._onSelectionChangedObservable = undefined;\r\n }\r\n\r\n const userOptions: IInspectorOptions = {\r\n ...DebugLayer.Config,\r\n ...config,\r\n };\r\n\r\n this.BJSINSPECTOR = this.BJSINSPECTOR || this._getGlobalInspector();\r\n\r\n this.BJSINSPECTOR.Inspector.Show(this._scene, userOptions);\r\n }\r\n\r\n /**\r\n * Select a specific entity in the scene explorer and highlight a specific block in that entity property grid\r\n * @param entity defines the entity to select\r\n * @param lineContainerTitles defines the specific blocks to highlight (could be a string or an array of strings)\r\n */\r\n public select(entity: any, lineContainerTitles?: string | string[]) {\r\n if (this.BJSINSPECTOR) {\r\n if (lineContainerTitles) {\r\n if (Object.prototype.toString.call(lineContainerTitles) == \"[object String]\") {\r\n this.BJSINSPECTOR.Inspector.MarkLineContainerTitleForHighlighting(lineContainerTitles);\r\n } else {\r\n this.BJSINSPECTOR.Inspector.MarkMultipleLineContainerTitlesForHighlighting(lineContainerTitles);\r\n }\r\n }\r\n if (!this.BJSINSPECTOR.Inspector.IsVisible) {\r\n setTimeout(() => {\r\n this.select(entity, lineContainerTitles);\r\n }, 100);\r\n } else {\r\n this.BJSINSPECTOR.Inspector.OnSelectionChangeObservable.notifyObservers(entity);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Get the inspector from bundle or global\r\n * @returns the inspector instance if found otherwise, null\r\n */\r\n private _getGlobalInspector(): any {\r\n // UMD Global name detection from Webpack Bundle UMD Name.\r\n if (typeof INSPECTOR !== \"undefined\") {\r\n return INSPECTOR;\r\n }\r\n\r\n // In case of module let s check the global emitted from the Inspector entry point.\r\n if (typeof BABYLON !== \"undefined\" && typeof BABYLON.Inspector !== \"undefined\") {\r\n return BABYLON;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Get if the inspector is visible or not.\r\n * @returns true if visible otherwise, false\r\n */\r\n public isVisible(): boolean {\r\n return this.BJSINSPECTOR && this.BJSINSPECTOR.Inspector.IsVisible;\r\n }\r\n\r\n /**\r\n * Hide the inspector and close its window.\r\n */\r\n public hide() {\r\n if (this.BJSINSPECTOR) {\r\n this.BJSINSPECTOR.Inspector.Hide();\r\n }\r\n }\r\n\r\n /**\r\n * Get the number of opened panes in the inspector\r\n */\r\n public get openedPanes() {\r\n if (this.BJSINSPECTOR) {\r\n return this.BJSINSPECTOR.Inspector._OpenedPane;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n /**\r\n * Update the scene in the inspector\r\n */\r\n public setAsActiveScene() {\r\n if (this.BJSINSPECTOR) {\r\n this.BJSINSPECTOR.Inspector._SetNewScene(this._scene);\r\n }\r\n }\r\n\r\n public popupSceneExplorer() {\r\n if (this.BJSINSPECTOR) {\r\n this.BJSINSPECTOR.Inspector.PopupSceneExplorer();\r\n }\r\n }\r\n\r\n public popupInspector() {\r\n if (this.BJSINSPECTOR) {\r\n this.BJSINSPECTOR.Inspector.PopupInspector();\r\n }\r\n }\r\n\r\n public popupEmbed() {\r\n if (this.BJSINSPECTOR) {\r\n this.BJSINSPECTOR.Inspector.PopupEmbed();\r\n }\r\n }\r\n\r\n /**\r\n * Launch the debugLayer.\r\n * @param config Define the configuration of the inspector\r\n * @returns a promise fulfilled when the debug layer is visible\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public async show(config?: IInspectorOptions): Promise<DebugLayer> {\r\n return new Promise((resolve) => {\r\n if (typeof this.BJSINSPECTOR == \"undefined\") {\r\n const inspectorUrl = config && config.inspectorURL ? config.inspectorURL : DebugLayer.InspectorURL;\r\n\r\n // Load inspector and add it to the DOM\r\n Tools.LoadBabylonScript(inspectorUrl, () => {\r\n this._createInspector(config);\r\n resolve(this);\r\n });\r\n } else {\r\n // Otherwise creates the inspector\r\n this._createInspector(config);\r\n resolve(this);\r\n }\r\n });\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"debugLayer.js","sourceRoot":"","sources":["../../../../dev/core/src/Debug/debugLayer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Tools } from \"../Misc/tools\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport { Scene } from \"../scene\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport type { IInspectable } from \"../Misc/iInspectable\";\r\nimport type { Camera } from \"../Cameras/camera\";\r\nimport { AbstractEngine } from \"core/Engines/abstractEngine\";\r\n\r\n// declare INSPECTOR namespace for compilation issue\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\ndeclare let INSPECTOR: any;\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\ndeclare let BABYLON: any;\r\n// load the inspector using require, if not present in the global namespace.\r\n\r\n/**\r\n * Interface used to define scene explorer extensibility option\r\n */\r\nexport interface IExplorerExtensibilityOption {\r\n /**\r\n * Define the option label\r\n */\r\n label: string;\r\n /**\r\n * Defines the action to execute on click\r\n */\r\n action: (entity: any) => void;\r\n /**\r\n * Keep popup open after click\r\n */\r\n keepOpenAfterClick?: boolean;\r\n}\r\n\r\n/**\r\n * Defines a group of actions associated with a predicate to use when extending the Inspector scene explorer\r\n */\r\nexport interface IExplorerExtensibilityGroup {\r\n /**\r\n * Defines a predicate to test if a given type mut be extended\r\n */\r\n predicate: (entity: any) => boolean;\r\n /**\r\n * Gets the list of options added to a type\r\n */\r\n entries: IExplorerExtensibilityOption[];\r\n}\r\n\r\n/**\r\n * Defines a new node that will be displayed as top level node in the explorer\r\n */\r\nexport interface IExplorerAdditionalChild {\r\n /**\r\n * Gets the name of the additional node\r\n */\r\n name: string;\r\n /**\r\n * Function used to return the class name of the child node\r\n */\r\n getClassName(): string;\r\n /**\r\n * List of inspectable custom properties (used by the Inspector)\r\n * @see https://doc.babylonjs.com/toolsAndResources/inspector#extensibility\r\n */\r\n inspectableCustomProperties: IInspectable[];\r\n}\r\n\r\n/**\r\n * Defines a new node that will be displayed as top level node in the explorer\r\n */\r\nexport interface IExplorerAdditionalNode {\r\n /**\r\n * Gets the name of the additional node\r\n */\r\n name: string;\r\n /**\r\n * Function used to return the list of child entries\r\n */\r\n getContent(): IExplorerAdditionalChild[];\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport type IInspectorContextMenuType = \"pipeline\" | \"node\" | \"materials\" | \"spriteManagers\" | \"particleSystems\" | \"frameGraphs\";\r\n\r\n/**\r\n * Context menu item\r\n */\r\nexport interface IInspectorContextMenuItem {\r\n /**\r\n * Display label - menu item\r\n */\r\n label: string;\r\n /**\r\n * Callback function that will be called when the menu item is selected\r\n * @param entity the entity that is currently selected in the scene explorer\r\n */\r\n action: (entity?: unknown) => void;\r\n}\r\n\r\n/**\r\n * Interface used to define the options to use to create the Inspector\r\n */\r\nexport interface IInspectorOptions {\r\n /**\r\n * Display in overlay mode (default: false)\r\n */\r\n overlay?: boolean;\r\n /**\r\n * HTML element to use as root (the parent of the rendering canvas will be used as default value)\r\n */\r\n globalRoot?: HTMLElement;\r\n /**\r\n * Display the Scene explorer\r\n */\r\n showExplorer?: boolean;\r\n /**\r\n * Display the property inspector\r\n */\r\n showInspector?: boolean;\r\n /**\r\n * Display in embed mode (both panes on the right)\r\n */\r\n embedMode?: boolean;\r\n /**\r\n * let the Inspector handles resize of the canvas when panes are resized (default to true)\r\n */\r\n handleResize?: boolean;\r\n /**\r\n * Allow the panes to popup (default: true)\r\n */\r\n enablePopup?: boolean;\r\n /**\r\n * Allow the panes to be closed by users (default: true)\r\n */\r\n enableClose?: boolean;\r\n /**\r\n * Optional list of extensibility entries\r\n */\r\n explorerExtensibility?: IExplorerExtensibilityGroup[];\r\n /**\r\n * Optional list of additional top level nodes\r\n */\r\n additionalNodes?: IExplorerAdditionalNode[];\r\n /**\r\n * Optional URL to get the inspector script from (by default it uses the babylonjs CDN).\r\n */\r\n inspectorURL?: string;\r\n /**\r\n * Optional initial tab (default to DebugLayerTab.Properties)\r\n */\r\n initialTab?: DebugLayerTab;\r\n /**\r\n * Optional camera to use to render the gizmos from the inspector (default to the scene.activeCamera or the latest from scene.activeCameras)\r\n */\r\n gizmoCamera?: Camera;\r\n /**\r\n * Context menu for inspector tools such as \"Post Process\", \"Nodes\", \"Materials\", etc.\r\n */\r\n contextMenu?: Partial<Record<IInspectorContextMenuType, IInspectorContextMenuItem[]>>;\r\n /**\r\n * List of context menu items that should be completely overridden by custom items from the contextMenu property.\r\n */\r\n contextMenuOverride?: IInspectorContextMenuType[];\r\n\r\n /**\r\n * Should the default font loading be skipped\r\n */\r\n skipDefaultFontLoading?: boolean;\r\n}\r\n\r\ndeclare module \"../scene\" {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n export interface Scene {\r\n /**\r\n * @internal\r\n * Backing field\r\n */\r\n _debugLayer: DebugLayer;\r\n\r\n /**\r\n * Gets the debug layer (aka Inspector) associated with the scene\r\n * @see https://doc.babylonjs.com/toolsAndResources/inspector\r\n */\r\n debugLayer: DebugLayer;\r\n }\r\n}\r\nObject.defineProperty(Scene.prototype, \"debugLayer\", {\r\n get: function (this: Scene) {\r\n if (!this._debugLayer) {\r\n this._debugLayer = new DebugLayer(this);\r\n }\r\n return this._debugLayer;\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n});\r\n\r\n/**\r\n * Enum of inspector action tab\r\n */\r\nexport const enum DebugLayerTab {\r\n /**\r\n * Properties tag (default)\r\n */\r\n Properties = 0,\r\n /**\r\n * Debug tab\r\n */\r\n Debug = 1,\r\n /**\r\n * Statistics tab\r\n */\r\n Statistics = 2,\r\n /**\r\n * Tools tab\r\n */\r\n Tools = 3,\r\n /**\r\n * Settings tab\r\n */\r\n Settings = 4,\r\n}\r\n\r\n/**\r\n * The debug layer (aka Inspector) is the go to tool in order to better understand\r\n * what is happening in your scene\r\n * @see https://doc.babylonjs.com/toolsAndResources/inspector\r\n */\r\nexport class DebugLayer {\r\n /**\r\n * Define the url to get the inspector script from.\r\n * By default it uses the babylonjs CDN.\r\n * @ignoreNaming\r\n */\r\n public static InspectorURL = `${Tools._DefaultCdnUrl}/v${AbstractEngine.Version}/inspector/babylon.inspector.bundle.js`;\r\n\r\n /**\r\n * The default configuration of the inspector\r\n */\r\n public static Config: IInspectorOptions = {\r\n overlay: false,\r\n showExplorer: true,\r\n showInspector: true,\r\n embedMode: false,\r\n handleResize: true,\r\n enablePopup: true,\r\n };\r\n\r\n private _scene: Scene;\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private BJSINSPECTOR = this._getGlobalInspector();\r\n\r\n private _onPropertyChangedObservable?: Observable<{ object: any; property: string; value: any; initialValue: any }>;\r\n /**\r\n * Observable triggered when a property is changed through the inspector.\r\n */\r\n public get onPropertyChangedObservable() {\r\n if (this.BJSINSPECTOR && this.BJSINSPECTOR.Inspector) {\r\n return this.BJSINSPECTOR.Inspector.OnPropertyChangedObservable;\r\n }\r\n\r\n if (!this._onPropertyChangedObservable) {\r\n this._onPropertyChangedObservable = new Observable<{ object: any; property: string; value: any; initialValue: any }>();\r\n }\r\n\r\n return this._onPropertyChangedObservable;\r\n }\r\n\r\n private _onSelectionChangedObservable?: Observable<any>;\r\n /**\r\n * Observable triggered when the selection is changed through the inspector.\r\n */\r\n public get onSelectionChangedObservable() {\r\n if (this.BJSINSPECTOR && this.BJSINSPECTOR.Inspector) {\r\n return this.BJSINSPECTOR.Inspector.OnSelectionChangeObservable;\r\n }\r\n\r\n if (!this._onSelectionChangedObservable) {\r\n this._onSelectionChangedObservable = new Observable<any>();\r\n }\r\n\r\n return this._onSelectionChangedObservable;\r\n }\r\n\r\n /**\r\n * Instantiates a new debug layer.\r\n * The debug layer (aka Inspector) is the go to tool in order to better understand\r\n * what is happening in your scene\r\n * @see https://doc.babylonjs.com/toolsAndResources/inspector\r\n * @param scene Defines the scene to inspect\r\n */\r\n constructor(scene?: Scene) {\r\n this._scene = scene || <Scene>EngineStore.LastCreatedScene;\r\n if (!this._scene) {\r\n return;\r\n }\r\n this._scene.onDisposeObservable.add(() => {\r\n // Debug layer\r\n if (this._scene._debugLayer) {\r\n this._scene._debugLayer.hide();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Creates the inspector window.\r\n * @param config\r\n */\r\n private _createInspector(config?: Partial<IInspectorOptions>) {\r\n if (this.isVisible()) {\r\n return;\r\n }\r\n\r\n if (this._onPropertyChangedObservable) {\r\n for (const observer of this._onPropertyChangedObservable.observers) {\r\n this.BJSINSPECTOR.Inspector.OnPropertyChangedObservable.add(observer);\r\n }\r\n this._onPropertyChangedObservable.clear();\r\n this._onPropertyChangedObservable = undefined;\r\n }\r\n\r\n if (this._onSelectionChangedObservable) {\r\n for (const observer of this._onSelectionChangedObservable.observers) {\r\n this.BJSINSPECTOR.Inspector.OnSelectionChangedObservable.add(observer);\r\n }\r\n this._onSelectionChangedObservable.clear();\r\n this._onSelectionChangedObservable = undefined;\r\n }\r\n\r\n const userOptions: IInspectorOptions = {\r\n ...DebugLayer.Config,\r\n ...config,\r\n };\r\n\r\n this.BJSINSPECTOR = this.BJSINSPECTOR || this._getGlobalInspector();\r\n\r\n this.BJSINSPECTOR.Inspector.Show(this._scene, userOptions);\r\n }\r\n\r\n /**\r\n * Select a specific entity in the scene explorer and highlight a specific block in that entity property grid\r\n * @param entity defines the entity to select\r\n * @param lineContainerTitles defines the specific blocks to highlight (could be a string or an array of strings)\r\n */\r\n public select(entity: any, lineContainerTitles?: string | string[]) {\r\n if (this.BJSINSPECTOR) {\r\n if (lineContainerTitles) {\r\n if (Object.prototype.toString.call(lineContainerTitles) == \"[object String]\") {\r\n this.BJSINSPECTOR.Inspector.MarkLineContainerTitleForHighlighting(lineContainerTitles);\r\n } else {\r\n this.BJSINSPECTOR.Inspector.MarkMultipleLineContainerTitlesForHighlighting(lineContainerTitles);\r\n }\r\n }\r\n if (!this.BJSINSPECTOR.Inspector.IsVisible) {\r\n setTimeout(() => {\r\n this.select(entity, lineContainerTitles);\r\n }, 100);\r\n } else {\r\n this.BJSINSPECTOR.Inspector.OnSelectionChangeObservable.notifyObservers(entity);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Get the inspector from bundle or global\r\n * @returns the inspector instance if found otherwise, null\r\n */\r\n private _getGlobalInspector(): any {\r\n // UMD Global name detection from Webpack Bundle UMD Name.\r\n if (typeof INSPECTOR !== \"undefined\") {\r\n return INSPECTOR;\r\n }\r\n\r\n // In case of module let s check the global emitted from the Inspector entry point.\r\n if (typeof BABYLON !== \"undefined\" && typeof BABYLON.Inspector !== \"undefined\") {\r\n return BABYLON;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Get if the inspector is visible or not.\r\n * @returns true if visible otherwise, false\r\n */\r\n public isVisible(): boolean {\r\n return this.BJSINSPECTOR && this.BJSINSPECTOR.Inspector.IsVisible;\r\n }\r\n\r\n /**\r\n * Hide the inspector and close its window.\r\n */\r\n public hide() {\r\n if (this.BJSINSPECTOR) {\r\n this.BJSINSPECTOR.Inspector.Hide();\r\n }\r\n }\r\n\r\n /**\r\n * Get the number of opened panes in the inspector\r\n */\r\n public get openedPanes() {\r\n if (this.BJSINSPECTOR) {\r\n return this.BJSINSPECTOR.Inspector._OpenedPane;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n /**\r\n * Update the scene in the inspector\r\n */\r\n public setAsActiveScene() {\r\n if (this.BJSINSPECTOR) {\r\n this.BJSINSPECTOR.Inspector._SetNewScene(this._scene);\r\n }\r\n }\r\n\r\n public popupSceneExplorer() {\r\n if (this.BJSINSPECTOR) {\r\n this.BJSINSPECTOR.Inspector.PopupSceneExplorer();\r\n }\r\n }\r\n\r\n public popupInspector() {\r\n if (this.BJSINSPECTOR) {\r\n this.BJSINSPECTOR.Inspector.PopupInspector();\r\n }\r\n }\r\n\r\n public popupEmbed() {\r\n if (this.BJSINSPECTOR) {\r\n this.BJSINSPECTOR.Inspector.PopupEmbed();\r\n }\r\n }\r\n\r\n /**\r\n * Launch the debugLayer.\r\n * @param config Define the configuration of the inspector\r\n * @returns a promise fulfilled when the debug layer is visible\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public async show(config?: IInspectorOptions): Promise<DebugLayer> {\r\n return await new Promise((resolve) => {\r\n if (typeof this.BJSINSPECTOR == \"undefined\") {\r\n const inspectorUrl = config && config.inspectorURL ? config.inspectorURL : DebugLayer.InspectorURL;\r\n\r\n // Load inspector and add it to the DOM\r\n Tools.LoadBabylonScript(inspectorUrl, () => {\r\n this._createInspector(config);\r\n resolve(this);\r\n });\r\n } else {\r\n // Otherwise creates the inspector\r\n this._createInspector(config);\r\n resolve(this);\r\n }\r\n });\r\n }\r\n}\r\n"]}
@@ -94,6 +94,7 @@ AbstractEngine.prototype.createCubeTextureBase = function (rootUrl, scene, files
94
94
  }
95
95
  };
96
96
  if (loaderPromise) {
97
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises, github/no-then
97
98
  loaderPromise.then((loader) => {
98
99
  const onloaddata = (data) => {
99
100
  if (beforeLoadCubeDataCallback) {
@@ -1 +1 @@
1
- {"version":3,"file":"abstractEngine.cubeTexture.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/AbstractEngine/abstractEngine.cubeTexture.ts"],"names":[],"mappings":"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","sourcesContent":["import { InternalTexture, InternalTextureSource } from \"../../Materials/Textures/internalTexture\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { LoadImage } from \"../../Misc/fileTools\";\r\nimport { RandomGUID } from \"../../Misc/guid\";\r\nimport type { IWebRequest } from \"../../Misc/interfaces/iWebRequest\";\r\nimport { AbstractEngine } from \"../abstractEngine\";\r\nimport { _GetCompatibleTextureLoader } from \"core/Materials/Textures/Loaders/textureLoaderManager\";\r\nimport { GetExtensionFromUrl } from \"core/Misc/urlTools\";\r\n\r\ndeclare module \"../../Engines/abstractEngine\" {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n export interface AbstractEngine {\r\n /** @internal */\r\n createCubeTextureBase(\r\n rootUrl: string,\r\n scene: Nullable<Scene>,\r\n files: Nullable<string[]>,\r\n noMipmap: boolean,\r\n onLoad: Nullable<(data?: any) => void>,\r\n onError: Nullable<(message?: string, exception?: any) => void>,\r\n format: number | undefined,\r\n forcedExtension: any,\r\n createPolynomials: boolean,\r\n lodScale: number,\r\n lodOffset: number,\r\n fallback: Nullable<InternalTexture>,\r\n beforeLoadCubeDataCallback: Nullable<(texture: InternalTexture, data: ArrayBufferView | ArrayBufferView[]) => void>,\r\n imageHandler: Nullable<(texture: InternalTexture, imgs: HTMLImageElement[] | ImageBitmap[]) => void>,\r\n useSRGBBuffer: boolean,\r\n buffer: Nullable<ArrayBufferView>\r\n ): InternalTexture;\r\n\r\n /** @internal */\r\n _partialLoadFile(\r\n url: string,\r\n index: number,\r\n loadedFiles: ArrayBuffer[],\r\n onfinish: (files: ArrayBuffer[]) => void,\r\n onErrorCallBack: Nullable<(message?: string, exception?: any) => void>\r\n ): void;\r\n\r\n /** @internal */\r\n _cascadeLoadFiles(scene: Nullable<Scene>, onfinish: (images: ArrayBuffer[]) => void, files: string[], onError: Nullable<(message?: string, exception?: any) => void>): void;\r\n\r\n /** @internal */\r\n _cascadeLoadImgs(\r\n scene: Nullable<Scene>,\r\n texture: InternalTexture,\r\n onfinish: Nullable<(texture: InternalTexture, images: HTMLImageElement[] | ImageBitmap[]) => void>,\r\n files: string[],\r\n onError: Nullable<(message?: string, exception?: any) => void>,\r\n mimeType?: string\r\n ): void;\r\n\r\n /** @internal */\r\n _partialLoadImg(\r\n url: string,\r\n index: number,\r\n loadedImages: HTMLImageElement[] | ImageBitmap[],\r\n scene: Nullable<Scene>,\r\n texture: InternalTexture,\r\n onfinish: Nullable<(texture: InternalTexture, images: HTMLImageElement[] | ImageBitmap[]) => void>,\r\n onErrorCallBack: Nullable<(message?: string, exception?: any) => void>,\r\n mimeType?: string\r\n ): void;\r\n }\r\n}\r\n\r\nAbstractEngine.prototype._partialLoadFile = function (\r\n url: string,\r\n index: number,\r\n loadedFiles: ArrayBuffer[],\r\n onfinish: (files: ArrayBuffer[]) => void,\r\n onErrorCallBack: Nullable<(message?: string, exception?: any) => void> = null\r\n): void {\r\n const onload = (data: ArrayBuffer) => {\r\n loadedFiles[index] = data;\r\n (<any>loadedFiles)._internalCount++;\r\n\r\n if ((<any>loadedFiles)._internalCount === 6) {\r\n onfinish(loadedFiles);\r\n }\r\n };\r\n\r\n const onerror = (request?: IWebRequest, exception?: any) => {\r\n if (onErrorCallBack && request) {\r\n onErrorCallBack(request.status + \" \" + request.statusText, exception);\r\n }\r\n };\r\n\r\n this._loadFile(url, onload as (data: string | ArrayBuffer) => void, undefined, undefined, true, onerror);\r\n};\r\n\r\nAbstractEngine.prototype._cascadeLoadFiles = function (\r\n scene: Nullable<Scene>,\r\n onfinish: (images: ArrayBuffer[]) => void,\r\n files: string[],\r\n onError: Nullable<(message?: string, exception?: any) => void> = null\r\n): void {\r\n const loadedFiles: ArrayBuffer[] = [];\r\n (<any>loadedFiles)._internalCount = 0;\r\n\r\n for (let index = 0; index < 6; index++) {\r\n this._partialLoadFile(files[index], index, loadedFiles, onfinish, onError);\r\n }\r\n};\r\n\r\nAbstractEngine.prototype._cascadeLoadImgs = function (\r\n scene: Nullable<Scene>,\r\n texture: InternalTexture,\r\n onfinish: Nullable<(texture: InternalTexture, images: HTMLImageElement[] | ImageBitmap[]) => void>,\r\n files: string[],\r\n onError: Nullable<(message?: string, exception?: any) => void> = null,\r\n mimeType?: string\r\n) {\r\n const loadedImages: HTMLImageElement[] | ImageBitmap[] = [];\r\n (<any>loadedImages)._internalCount = 0;\r\n\r\n for (let index = 0; index < 6; index++) {\r\n this._partialLoadImg(files[index], index, loadedImages, scene, texture, onfinish, onError, mimeType);\r\n }\r\n};\r\n\r\nAbstractEngine.prototype._partialLoadImg = function (\r\n url: string,\r\n index: number,\r\n loadedImages: HTMLImageElement[] | ImageBitmap[],\r\n scene: Nullable<Scene>,\r\n texture: InternalTexture,\r\n onfinish: Nullable<(texture: InternalTexture, images: HTMLImageElement[] | ImageBitmap[]) => void>,\r\n onErrorCallBack: Nullable<(message?: string, exception?: any) => void> = null,\r\n mimeType?: string\r\n) {\r\n const tokenPendingData = RandomGUID();\r\n\r\n const onload = (img: HTMLImageElement | ImageBitmap) => {\r\n loadedImages[index] = img;\r\n (<any>loadedImages)._internalCount++;\r\n\r\n if (scene) {\r\n scene.removePendingData(tokenPendingData);\r\n }\r\n\r\n if ((<any>loadedImages)._internalCount === 6 && onfinish) {\r\n onfinish(texture, loadedImages);\r\n }\r\n };\r\n\r\n const onerror = (message?: string, exception?: any) => {\r\n if (scene) {\r\n scene.removePendingData(tokenPendingData);\r\n }\r\n\r\n if (onErrorCallBack) {\r\n onErrorCallBack(message, exception);\r\n }\r\n };\r\n\r\n LoadImage(url, onload, onerror, scene ? scene.offlineProvider : null, mimeType);\r\n if (scene) {\r\n scene.addPendingData(tokenPendingData);\r\n }\r\n};\r\n\r\nAbstractEngine.prototype.createCubeTextureBase = function (\r\n rootUrl: string,\r\n scene: Nullable<Scene>,\r\n files: Nullable<string[]>,\r\n noMipmap?: boolean,\r\n onLoad: Nullable<(data?: any) => void> = null,\r\n onError: Nullable<(message?: string, exception?: any) => void> = null,\r\n format?: number,\r\n forcedExtension: any = null,\r\n createPolynomials: boolean = false,\r\n lodScale: number = 0,\r\n lodOffset: number = 0,\r\n fallback: Nullable<InternalTexture> = null,\r\n beforeLoadCubeDataCallback: Nullable<(texture: InternalTexture, data: ArrayBufferView | ArrayBufferView[]) => void> = null,\r\n imageHandler: Nullable<(texture: InternalTexture, imgs: HTMLImageElement[] | ImageBitmap[]) => void> = null,\r\n useSRGBBuffer = false,\r\n buffer: Nullable<ArrayBufferView> = null\r\n): InternalTexture {\r\n const texture = fallback ? fallback : new InternalTexture(this, InternalTextureSource.Cube);\r\n texture.isCube = true;\r\n texture.url = rootUrl;\r\n texture.generateMipMaps = !noMipmap;\r\n texture._lodGenerationScale = lodScale;\r\n texture._lodGenerationOffset = lodOffset;\r\n texture._useSRGBBuffer = !!useSRGBBuffer && this._caps.supportSRGBBuffers && (this.version > 1 || this.isWebGPU || !!noMipmap);\r\n if (texture !== fallback) {\r\n texture.label = rootUrl.substring(0, 60); // default label, can be overriden by the caller\r\n }\r\n\r\n if (!this._doNotHandleContextLost) {\r\n texture._extension = forcedExtension;\r\n texture._files = files;\r\n texture._buffer = buffer;\r\n }\r\n\r\n const originalRootUrl = rootUrl;\r\n if (this._transformTextureUrl && !fallback) {\r\n rootUrl = this._transformTextureUrl(rootUrl);\r\n }\r\n\r\n const extension = forcedExtension ?? GetExtensionFromUrl(rootUrl);\r\n\r\n const loaderPromise = _GetCompatibleTextureLoader(extension);\r\n\r\n const onInternalError = (request?: IWebRequest, exception?: any) => {\r\n if (rootUrl === originalRootUrl) {\r\n if (onError && request) {\r\n onError(request.status + \" \" + request.statusText, exception);\r\n }\r\n } else {\r\n // fall back to the original url if the transformed url fails to load\r\n Logger.Warn(`Failed to load ${rootUrl}, falling back to the ${originalRootUrl}`);\r\n this.createCubeTextureBase(\r\n originalRootUrl,\r\n scene,\r\n files,\r\n !!noMipmap,\r\n onLoad,\r\n onError,\r\n format,\r\n forcedExtension,\r\n createPolynomials,\r\n lodScale,\r\n lodOffset,\r\n texture,\r\n beforeLoadCubeDataCallback,\r\n imageHandler,\r\n useSRGBBuffer,\r\n buffer\r\n );\r\n }\r\n };\r\n\r\n if (loaderPromise) {\r\n loaderPromise.then((loader) => {\r\n const onloaddata = (data: ArrayBufferView | ArrayBufferView[]) => {\r\n if (beforeLoadCubeDataCallback) {\r\n beforeLoadCubeDataCallback(texture, data);\r\n }\r\n loader.loadCubeData(data, texture, createPolynomials, onLoad, onError);\r\n };\r\n if (buffer) {\r\n onloaddata(buffer);\r\n } else if (files && files.length === 6) {\r\n if (loader.supportCascades) {\r\n this._cascadeLoadFiles(scene, (images) => onloaddata(images.map((image) => new Uint8Array(image))), files, onError);\r\n } else {\r\n if (onError) {\r\n onError(\"Textures type does not support cascades.\");\r\n } else {\r\n Logger.Warn(\"Texture loader does not support cascades.\");\r\n }\r\n }\r\n } else {\r\n this._loadFile(rootUrl, (data) => onloaddata(new Uint8Array(data as ArrayBuffer)), undefined, undefined, true, onInternalError);\r\n }\r\n });\r\n } else {\r\n if (!files || files.length === 0) {\r\n throw new Error(\"Cannot load cubemap because files were not defined, or the correct loader was not found.\");\r\n }\r\n\r\n this._cascadeLoadImgs(\r\n scene,\r\n texture,\r\n (texture: InternalTexture, imgs: HTMLImageElement[] | ImageBitmap[]) => {\r\n if (imageHandler) {\r\n imageHandler(texture, imgs);\r\n }\r\n },\r\n files,\r\n onError\r\n );\r\n }\r\n\r\n this._internalTexturesCache.push(texture);\r\n\r\n return texture;\r\n};\r\n"]}
1
+ {"version":3,"file":"abstractEngine.cubeTexture.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/AbstractEngine/abstractEngine.cubeTexture.ts"],"names":[],"mappings":"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","sourcesContent":["import { InternalTexture, InternalTextureSource } from \"../../Materials/Textures/internalTexture\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { LoadImage } from \"../../Misc/fileTools\";\r\nimport { RandomGUID } from \"../../Misc/guid\";\r\nimport type { IWebRequest } from \"../../Misc/interfaces/iWebRequest\";\r\nimport { AbstractEngine } from \"../abstractEngine\";\r\nimport { _GetCompatibleTextureLoader } from \"core/Materials/Textures/Loaders/textureLoaderManager\";\r\nimport { GetExtensionFromUrl } from \"core/Misc/urlTools\";\r\n\r\ndeclare module \"../../Engines/abstractEngine\" {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n export interface AbstractEngine {\r\n /** @internal */\r\n createCubeTextureBase(\r\n rootUrl: string,\r\n scene: Nullable<Scene>,\r\n files: Nullable<string[]>,\r\n noMipmap: boolean,\r\n onLoad: Nullable<(data?: any) => void>,\r\n onError: Nullable<(message?: string, exception?: any) => void>,\r\n format: number | undefined,\r\n forcedExtension: any,\r\n createPolynomials: boolean,\r\n lodScale: number,\r\n lodOffset: number,\r\n fallback: Nullable<InternalTexture>,\r\n beforeLoadCubeDataCallback: Nullable<(texture: InternalTexture, data: ArrayBufferView | ArrayBufferView[]) => void>,\r\n imageHandler: Nullable<(texture: InternalTexture, imgs: HTMLImageElement[] | ImageBitmap[]) => void>,\r\n useSRGBBuffer: boolean,\r\n buffer: Nullable<ArrayBufferView>\r\n ): InternalTexture;\r\n\r\n /** @internal */\r\n _partialLoadFile(\r\n url: string,\r\n index: number,\r\n loadedFiles: ArrayBuffer[],\r\n onfinish: (files: ArrayBuffer[]) => void,\r\n onErrorCallBack: Nullable<(message?: string, exception?: any) => void>\r\n ): void;\r\n\r\n /** @internal */\r\n _cascadeLoadFiles(scene: Nullable<Scene>, onfinish: (images: ArrayBuffer[]) => void, files: string[], onError: Nullable<(message?: string, exception?: any) => void>): void;\r\n\r\n /** @internal */\r\n _cascadeLoadImgs(\r\n scene: Nullable<Scene>,\r\n texture: InternalTexture,\r\n onfinish: Nullable<(texture: InternalTexture, images: HTMLImageElement[] | ImageBitmap[]) => void>,\r\n files: string[],\r\n onError: Nullable<(message?: string, exception?: any) => void>,\r\n mimeType?: string\r\n ): void;\r\n\r\n /** @internal */\r\n _partialLoadImg(\r\n url: string,\r\n index: number,\r\n loadedImages: HTMLImageElement[] | ImageBitmap[],\r\n scene: Nullable<Scene>,\r\n texture: InternalTexture,\r\n onfinish: Nullable<(texture: InternalTexture, images: HTMLImageElement[] | ImageBitmap[]) => void>,\r\n onErrorCallBack: Nullable<(message?: string, exception?: any) => void>,\r\n mimeType?: string\r\n ): void;\r\n }\r\n}\r\n\r\nAbstractEngine.prototype._partialLoadFile = function (\r\n url: string,\r\n index: number,\r\n loadedFiles: ArrayBuffer[],\r\n onfinish: (files: ArrayBuffer[]) => void,\r\n onErrorCallBack: Nullable<(message?: string, exception?: any) => void> = null\r\n): void {\r\n const onload = (data: ArrayBuffer) => {\r\n loadedFiles[index] = data;\r\n (<any>loadedFiles)._internalCount++;\r\n\r\n if ((<any>loadedFiles)._internalCount === 6) {\r\n onfinish(loadedFiles);\r\n }\r\n };\r\n\r\n const onerror = (request?: IWebRequest, exception?: any) => {\r\n if (onErrorCallBack && request) {\r\n onErrorCallBack(request.status + \" \" + request.statusText, exception);\r\n }\r\n };\r\n\r\n this._loadFile(url, onload as (data: string | ArrayBuffer) => void, undefined, undefined, true, onerror);\r\n};\r\n\r\nAbstractEngine.prototype._cascadeLoadFiles = function (\r\n scene: Nullable<Scene>,\r\n onfinish: (images: ArrayBuffer[]) => void,\r\n files: string[],\r\n onError: Nullable<(message?: string, exception?: any) => void> = null\r\n): void {\r\n const loadedFiles: ArrayBuffer[] = [];\r\n (<any>loadedFiles)._internalCount = 0;\r\n\r\n for (let index = 0; index < 6; index++) {\r\n this._partialLoadFile(files[index], index, loadedFiles, onfinish, onError);\r\n }\r\n};\r\n\r\nAbstractEngine.prototype._cascadeLoadImgs = function (\r\n scene: Nullable<Scene>,\r\n texture: InternalTexture,\r\n onfinish: Nullable<(texture: InternalTexture, images: HTMLImageElement[] | ImageBitmap[]) => void>,\r\n files: string[],\r\n onError: Nullable<(message?: string, exception?: any) => void> = null,\r\n mimeType?: string\r\n) {\r\n const loadedImages: HTMLImageElement[] | ImageBitmap[] = [];\r\n (<any>loadedImages)._internalCount = 0;\r\n\r\n for (let index = 0; index < 6; index++) {\r\n this._partialLoadImg(files[index], index, loadedImages, scene, texture, onfinish, onError, mimeType);\r\n }\r\n};\r\n\r\nAbstractEngine.prototype._partialLoadImg = function (\r\n url: string,\r\n index: number,\r\n loadedImages: HTMLImageElement[] | ImageBitmap[],\r\n scene: Nullable<Scene>,\r\n texture: InternalTexture,\r\n onfinish: Nullable<(texture: InternalTexture, images: HTMLImageElement[] | ImageBitmap[]) => void>,\r\n onErrorCallBack: Nullable<(message?: string, exception?: any) => void> = null,\r\n mimeType?: string\r\n) {\r\n const tokenPendingData = RandomGUID();\r\n\r\n const onload = (img: HTMLImageElement | ImageBitmap) => {\r\n loadedImages[index] = img;\r\n (<any>loadedImages)._internalCount++;\r\n\r\n if (scene) {\r\n scene.removePendingData(tokenPendingData);\r\n }\r\n\r\n if ((<any>loadedImages)._internalCount === 6 && onfinish) {\r\n onfinish(texture, loadedImages);\r\n }\r\n };\r\n\r\n const onerror = (message?: string, exception?: any) => {\r\n if (scene) {\r\n scene.removePendingData(tokenPendingData);\r\n }\r\n\r\n if (onErrorCallBack) {\r\n onErrorCallBack(message, exception);\r\n }\r\n };\r\n\r\n LoadImage(url, onload, onerror, scene ? scene.offlineProvider : null, mimeType);\r\n if (scene) {\r\n scene.addPendingData(tokenPendingData);\r\n }\r\n};\r\n\r\nAbstractEngine.prototype.createCubeTextureBase = function (\r\n rootUrl: string,\r\n scene: Nullable<Scene>,\r\n files: Nullable<string[]>,\r\n noMipmap?: boolean,\r\n onLoad: Nullable<(data?: any) => void> = null,\r\n onError: Nullable<(message?: string, exception?: any) => void> = null,\r\n format?: number,\r\n forcedExtension: any = null,\r\n createPolynomials: boolean = false,\r\n lodScale: number = 0,\r\n lodOffset: number = 0,\r\n fallback: Nullable<InternalTexture> = null,\r\n beforeLoadCubeDataCallback: Nullable<(texture: InternalTexture, data: ArrayBufferView | ArrayBufferView[]) => void> = null,\r\n imageHandler: Nullable<(texture: InternalTexture, imgs: HTMLImageElement[] | ImageBitmap[]) => void> = null,\r\n useSRGBBuffer = false,\r\n buffer: Nullable<ArrayBufferView> = null\r\n): InternalTexture {\r\n const texture = fallback ? fallback : new InternalTexture(this, InternalTextureSource.Cube);\r\n texture.isCube = true;\r\n texture.url = rootUrl;\r\n texture.generateMipMaps = !noMipmap;\r\n texture._lodGenerationScale = lodScale;\r\n texture._lodGenerationOffset = lodOffset;\r\n texture._useSRGBBuffer = !!useSRGBBuffer && this._caps.supportSRGBBuffers && (this.version > 1 || this.isWebGPU || !!noMipmap);\r\n if (texture !== fallback) {\r\n texture.label = rootUrl.substring(0, 60); // default label, can be overriden by the caller\r\n }\r\n\r\n if (!this._doNotHandleContextLost) {\r\n texture._extension = forcedExtension;\r\n texture._files = files;\r\n texture._buffer = buffer;\r\n }\r\n\r\n const originalRootUrl = rootUrl;\r\n if (this._transformTextureUrl && !fallback) {\r\n rootUrl = this._transformTextureUrl(rootUrl);\r\n }\r\n\r\n const extension = forcedExtension ?? GetExtensionFromUrl(rootUrl);\r\n\r\n const loaderPromise = _GetCompatibleTextureLoader(extension);\r\n\r\n const onInternalError = (request?: IWebRequest, exception?: any) => {\r\n if (rootUrl === originalRootUrl) {\r\n if (onError && request) {\r\n onError(request.status + \" \" + request.statusText, exception);\r\n }\r\n } else {\r\n // fall back to the original url if the transformed url fails to load\r\n Logger.Warn(`Failed to load ${rootUrl}, falling back to the ${originalRootUrl}`);\r\n this.createCubeTextureBase(\r\n originalRootUrl,\r\n scene,\r\n files,\r\n !!noMipmap,\r\n onLoad,\r\n onError,\r\n format,\r\n forcedExtension,\r\n createPolynomials,\r\n lodScale,\r\n lodOffset,\r\n texture,\r\n beforeLoadCubeDataCallback,\r\n imageHandler,\r\n useSRGBBuffer,\r\n buffer\r\n );\r\n }\r\n };\r\n\r\n if (loaderPromise) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises, github/no-then\r\n loaderPromise.then((loader) => {\r\n const onloaddata = (data: ArrayBufferView | ArrayBufferView[]) => {\r\n if (beforeLoadCubeDataCallback) {\r\n beforeLoadCubeDataCallback(texture, data);\r\n }\r\n loader.loadCubeData(data, texture, createPolynomials, onLoad, onError);\r\n };\r\n if (buffer) {\r\n onloaddata(buffer);\r\n } else if (files && files.length === 6) {\r\n if (loader.supportCascades) {\r\n this._cascadeLoadFiles(scene, (images) => onloaddata(images.map((image) => new Uint8Array(image))), files, onError);\r\n } else {\r\n if (onError) {\r\n onError(\"Textures type does not support cascades.\");\r\n } else {\r\n Logger.Warn(\"Texture loader does not support cascades.\");\r\n }\r\n }\r\n } else {\r\n this._loadFile(rootUrl, (data) => onloaddata(new Uint8Array(data as ArrayBuffer)), undefined, undefined, true, onInternalError);\r\n }\r\n });\r\n } else {\r\n if (!files || files.length === 0) {\r\n throw new Error(\"Cannot load cubemap because files were not defined, or the correct loader was not found.\");\r\n }\r\n\r\n this._cascadeLoadImgs(\r\n scene,\r\n texture,\r\n (texture: InternalTexture, imgs: HTMLImageElement[] | ImageBitmap[]) => {\r\n if (imageHandler) {\r\n imageHandler(texture, imgs);\r\n }\r\n },\r\n files,\r\n onError\r\n );\r\n }\r\n\r\n this._internalTexturesCache.push(texture);\r\n\r\n return texture;\r\n};\r\n"]}
@@ -82,6 +82,7 @@ ThinEngine.prototype.createPrefilteredCubeTexture = function (rootUrl, scene, lo
82
82
  onLoad(texture);
83
83
  }
84
84
  };
85
+ // eslint-disable-next-line @typescript-eslint/no-misused-promises
85
86
  return this.createCubeTexture(rootUrl, scene, null, false, callbackAsync, onError, format, forcedExtension, createPolynomials, lodScale, lodOffset);
86
87
  };
87
88
  //# sourceMappingURL=engine.prefilteredCubeTexture.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"engine.prefilteredCubeTexture.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/Extensions/engine.prefilteredCubeTexture.ts"],"names":[],"mappings":"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","sourcesContent":["import { ThinEngine } from \"../../Engines/thinEngine\";\r\nimport { InternalTexture, InternalTextureSource } from \"../../Materials/Textures/internalTexture\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { Constants } from \"../constants\";\r\nimport { SphericalPolynomial } from \"core/Maths/sphericalPolynomial\";\r\nimport { BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport type { DDSInfo } from \"core/Misc/dds\";\r\n\r\ndeclare module \"../../Engines/abstractEngine\" {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n export interface AbstractEngine {\r\n /**\r\n * Create a cube texture from prefiltered data (ie. the mipmaps contain ready to use data for PBR reflection)\r\n * @param rootUrl defines the url where the file to load is located\r\n * @param scene defines the current scene\r\n * @param lodScale defines scale to apply to the mip map selection\r\n * @param lodOffset defines offset to apply to the mip map selection\r\n * @param onLoad defines an optional callback raised when the texture is loaded\r\n * @param onError defines an optional callback raised if there is an issue to load the texture\r\n * @param format defines the format of the data\r\n * @param forcedExtension defines the extension to use to pick the right loader\r\n * @param createPolynomials defines wheter or not to create polynomails harmonics for the texture\r\n * @returns the cube texture as an InternalTexture\r\n */\r\n createPrefilteredCubeTexture(\r\n rootUrl: string,\r\n scene: Nullable<Scene>,\r\n lodScale: number,\r\n lodOffset: number,\r\n onLoad?: Nullable<(internalTexture: Nullable<InternalTexture>) => void>,\r\n onError?: Nullable<(message?: string, exception?: any) => void>,\r\n format?: number,\r\n forcedExtension?: any,\r\n createPolynomials?: boolean\r\n ): InternalTexture;\r\n }\r\n}\r\n\r\nThinEngine.prototype.createPrefilteredCubeTexture = function (\r\n rootUrl: string,\r\n scene: Nullable<Scene>,\r\n lodScale: number,\r\n lodOffset: number,\r\n onLoad: Nullable<(internalTexture: Nullable<InternalTexture>) => void> = null,\r\n onError: Nullable<(message?: string, exception?: any) => void> = null,\r\n format?: number,\r\n forcedExtension: any = null,\r\n createPolynomials: boolean = true\r\n): InternalTexture {\r\n const callbackAsync = async (loadData: any) => {\r\n if (!loadData) {\r\n if (onLoad) {\r\n onLoad(null);\r\n }\r\n return;\r\n }\r\n\r\n const texture = loadData.texture as InternalTexture;\r\n if (!createPolynomials) {\r\n texture._sphericalPolynomial = new SphericalPolynomial();\r\n } else if (loadData.info.sphericalPolynomial) {\r\n texture._sphericalPolynomial = loadData.info.sphericalPolynomial;\r\n }\r\n texture._source = InternalTextureSource.CubePrefiltered;\r\n\r\n if (this.getCaps().textureLOD) {\r\n // Do not add extra process if texture lod is supported.\r\n if (onLoad) {\r\n onLoad(texture);\r\n }\r\n return;\r\n }\r\n\r\n const mipSlices = 3;\r\n\r\n const gl = this._gl;\r\n const width = loadData.width;\r\n if (!width) {\r\n return;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n const { DDSTools } = await import(\"core/Misc/dds\");\r\n\r\n const textures: BaseTexture[] = [];\r\n for (let i = 0; i < mipSlices; i++) {\r\n //compute LOD from even spacing in smoothness (matching shader calculation)\r\n const smoothness = i / (mipSlices - 1);\r\n const roughness = 1 - smoothness;\r\n\r\n const minLODIndex = lodOffset; // roughness = 0\r\n const maxLODIndex = Math.log2(width) * lodScale + lodOffset; // roughness = 1\r\n\r\n const lodIndex = minLODIndex + (maxLODIndex - minLODIndex) * roughness;\r\n const mipmapIndex = Math.round(Math.min(Math.max(lodIndex, 0), maxLODIndex));\r\n\r\n const glTextureFromLod = new InternalTexture(this, InternalTextureSource.Temp);\r\n glTextureFromLod.type = texture.type;\r\n glTextureFromLod.format = texture.format;\r\n glTextureFromLod.width = Math.pow(2, Math.max(Math.log2(width) - mipmapIndex, 0));\r\n glTextureFromLod.height = glTextureFromLod.width;\r\n glTextureFromLod.isCube = true;\r\n glTextureFromLod._cachedWrapU = Constants.TEXTURE_CLAMP_ADDRESSMODE;\r\n glTextureFromLod._cachedWrapV = Constants.TEXTURE_CLAMP_ADDRESSMODE;\r\n this._bindTextureDirectly(gl.TEXTURE_CUBE_MAP, glTextureFromLod, true);\r\n\r\n glTextureFromLod.samplingMode = Constants.TEXTURE_LINEAR_LINEAR;\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\r\n\r\n if (loadData.isDDS) {\r\n const info: DDSInfo = loadData.info;\r\n const data: any = loadData.data;\r\n this._unpackFlipY(info.isCompressed);\r\n\r\n DDSTools.UploadDDSLevels(this, glTextureFromLod, data, info, true, 6, mipmapIndex);\r\n } else {\r\n Logger.Warn(\"DDS is the only prefiltered cube map supported so far.\");\r\n }\r\n\r\n this._bindTextureDirectly(gl.TEXTURE_CUBE_MAP, null);\r\n\r\n // Wrap in a base texture for easy binding.\r\n const lodTexture = new BaseTexture(scene);\r\n lodTexture._isCube = true;\r\n lodTexture._texture = glTextureFromLod;\r\n\r\n glTextureFromLod.isReady = true;\r\n textures.push(lodTexture);\r\n }\r\n\r\n texture._lodTextureHigh = textures[2];\r\n texture._lodTextureMid = textures[1];\r\n texture._lodTextureLow = textures[0];\r\n\r\n if (onLoad) {\r\n onLoad(texture);\r\n }\r\n };\r\n\r\n return this.createCubeTexture(rootUrl, scene, null, false, callbackAsync, onError, format, forcedExtension, createPolynomials, lodScale, lodOffset);\r\n};\r\n"]}
1
+ {"version":3,"file":"engine.prefilteredCubeTexture.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/Extensions/engine.prefilteredCubeTexture.ts"],"names":[],"mappings":"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","sourcesContent":["import { ThinEngine } from \"../../Engines/thinEngine\";\r\nimport { InternalTexture, InternalTextureSource } from \"../../Materials/Textures/internalTexture\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { Constants } from \"../constants\";\r\nimport { SphericalPolynomial } from \"core/Maths/sphericalPolynomial\";\r\nimport { BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport type { DDSInfo } from \"core/Misc/dds\";\r\n\r\ndeclare module \"../../Engines/abstractEngine\" {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n export interface AbstractEngine {\r\n /**\r\n * Create a cube texture from prefiltered data (ie. the mipmaps contain ready to use data for PBR reflection)\r\n * @param rootUrl defines the url where the file to load is located\r\n * @param scene defines the current scene\r\n * @param lodScale defines scale to apply to the mip map selection\r\n * @param lodOffset defines offset to apply to the mip map selection\r\n * @param onLoad defines an optional callback raised when the texture is loaded\r\n * @param onError defines an optional callback raised if there is an issue to load the texture\r\n * @param format defines the format of the data\r\n * @param forcedExtension defines the extension to use to pick the right loader\r\n * @param createPolynomials defines wheter or not to create polynomails harmonics for the texture\r\n * @returns the cube texture as an InternalTexture\r\n */\r\n createPrefilteredCubeTexture(\r\n rootUrl: string,\r\n scene: Nullable<Scene>,\r\n lodScale: number,\r\n lodOffset: number,\r\n onLoad?: Nullable<(internalTexture: Nullable<InternalTexture>) => void>,\r\n onError?: Nullable<(message?: string, exception?: any) => void>,\r\n format?: number,\r\n forcedExtension?: any,\r\n createPolynomials?: boolean\r\n ): InternalTexture;\r\n }\r\n}\r\n\r\nThinEngine.prototype.createPrefilteredCubeTexture = function (\r\n rootUrl: string,\r\n scene: Nullable<Scene>,\r\n lodScale: number,\r\n lodOffset: number,\r\n onLoad: Nullable<(internalTexture: Nullable<InternalTexture>) => void> = null,\r\n onError: Nullable<(message?: string, exception?: any) => void> = null,\r\n format?: number,\r\n forcedExtension: any = null,\r\n createPolynomials: boolean = true\r\n): InternalTexture {\r\n const callbackAsync = async (loadData: any) => {\r\n if (!loadData) {\r\n if (onLoad) {\r\n onLoad(null);\r\n }\r\n return;\r\n }\r\n\r\n const texture = loadData.texture as InternalTexture;\r\n if (!createPolynomials) {\r\n texture._sphericalPolynomial = new SphericalPolynomial();\r\n } else if (loadData.info.sphericalPolynomial) {\r\n texture._sphericalPolynomial = loadData.info.sphericalPolynomial;\r\n }\r\n texture._source = InternalTextureSource.CubePrefiltered;\r\n\r\n if (this.getCaps().textureLOD) {\r\n // Do not add extra process if texture lod is supported.\r\n if (onLoad) {\r\n onLoad(texture);\r\n }\r\n return;\r\n }\r\n\r\n const mipSlices = 3;\r\n\r\n const gl = this._gl;\r\n const width = loadData.width;\r\n if (!width) {\r\n return;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n const { DDSTools } = await import(\"core/Misc/dds\");\r\n\r\n const textures: BaseTexture[] = [];\r\n for (let i = 0; i < mipSlices; i++) {\r\n //compute LOD from even spacing in smoothness (matching shader calculation)\r\n const smoothness = i / (mipSlices - 1);\r\n const roughness = 1 - smoothness;\r\n\r\n const minLODIndex = lodOffset; // roughness = 0\r\n const maxLODIndex = Math.log2(width) * lodScale + lodOffset; // roughness = 1\r\n\r\n const lodIndex = minLODIndex + (maxLODIndex - minLODIndex) * roughness;\r\n const mipmapIndex = Math.round(Math.min(Math.max(lodIndex, 0), maxLODIndex));\r\n\r\n const glTextureFromLod = new InternalTexture(this, InternalTextureSource.Temp);\r\n glTextureFromLod.type = texture.type;\r\n glTextureFromLod.format = texture.format;\r\n glTextureFromLod.width = Math.pow(2, Math.max(Math.log2(width) - mipmapIndex, 0));\r\n glTextureFromLod.height = glTextureFromLod.width;\r\n glTextureFromLod.isCube = true;\r\n glTextureFromLod._cachedWrapU = Constants.TEXTURE_CLAMP_ADDRESSMODE;\r\n glTextureFromLod._cachedWrapV = Constants.TEXTURE_CLAMP_ADDRESSMODE;\r\n this._bindTextureDirectly(gl.TEXTURE_CUBE_MAP, glTextureFromLod, true);\r\n\r\n glTextureFromLod.samplingMode = Constants.TEXTURE_LINEAR_LINEAR;\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\r\n\r\n if (loadData.isDDS) {\r\n const info: DDSInfo = loadData.info;\r\n const data: any = loadData.data;\r\n this._unpackFlipY(info.isCompressed);\r\n\r\n DDSTools.UploadDDSLevels(this, glTextureFromLod, data, info, true, 6, mipmapIndex);\r\n } else {\r\n Logger.Warn(\"DDS is the only prefiltered cube map supported so far.\");\r\n }\r\n\r\n this._bindTextureDirectly(gl.TEXTURE_CUBE_MAP, null);\r\n\r\n // Wrap in a base texture for easy binding.\r\n const lodTexture = new BaseTexture(scene);\r\n lodTexture._isCube = true;\r\n lodTexture._texture = glTextureFromLod;\r\n\r\n glTextureFromLod.isReady = true;\r\n textures.push(lodTexture);\r\n }\r\n\r\n texture._lodTextureHigh = textures[2];\r\n texture._lodTextureMid = textures[1];\r\n texture._lodTextureLow = textures[0];\r\n\r\n if (onLoad) {\r\n onLoad(texture);\r\n }\r\n };\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\r\n return this.createCubeTexture(rootUrl, scene, null, false, callbackAsync, onError, format, forcedExtension, createPolynomials, lodScale, lodOffset);\r\n};\r\n"]}
@@ -48,6 +48,7 @@ ThinEngine.prototype._readTexturePixelsSync = function (texture, width, height,
48
48
  gl.bindFramebuffer(gl.FRAMEBUFFER, this._currentFramebuffer);
49
49
  return buffer;
50
50
  };
51
+ // eslint-disable-next-line @typescript-eslint/promise-function-async
51
52
  ThinEngine.prototype._readTexturePixels = function (texture, width, height, faceIndex = -1, level = 0, buffer = null, flushRenderer = true, noDataConversion = false, x = 0, y = 0) {
52
53
  return Promise.resolve(this._readTexturePixelsSync(texture, width, height, faceIndex, level, buffer, flushRenderer, noDataConversion, x, y));
53
54
  };
@@ -1 +1 @@
1
- {"version":3,"file":"engine.readTexture.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/Extensions/engine.readTexture.ts"],"names":[],"mappings":"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","sourcesContent":["import { ThinEngine } from \"../../Engines/thinEngine\";\r\nimport type { InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\nimport type { Nullable } from \"../../types\";\r\n\r\ndeclare module \"../../Engines/abstractEngine\" {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n export interface AbstractEngine {\r\n /** @internal */\r\n _readTexturePixels(\r\n texture: InternalTexture,\r\n width: number,\r\n height: number,\r\n faceIndex?: number,\r\n level?: number,\r\n buffer?: Nullable<ArrayBufferView>,\r\n flushRenderer?: boolean,\r\n noDataConversion?: boolean,\r\n x?: number,\r\n y?: number\r\n ): Promise<ArrayBufferView>;\r\n\r\n /** @internal */\r\n _readTexturePixelsSync(\r\n texture: InternalTexture,\r\n width: number,\r\n height: number,\r\n faceIndex?: number,\r\n level?: number,\r\n buffer?: Nullable<ArrayBufferView>,\r\n flushRenderer?: boolean,\r\n noDataConversion?: boolean,\r\n x?: number,\r\n y?: number\r\n ): ArrayBufferView;\r\n }\r\n}\r\n\r\n// back-compat\r\nimport { allocateAndCopyTypedBuffer } from \"../../Engines/abstractEngine.functions\";\r\nexport { allocateAndCopyTypedBuffer };\r\n\r\nThinEngine.prototype._readTexturePixelsSync = function (\r\n texture: InternalTexture,\r\n width: number,\r\n height: number,\r\n faceIndex = -1,\r\n level = 0,\r\n buffer: Nullable<ArrayBufferView> = null,\r\n flushRenderer = true,\r\n noDataConversion = false,\r\n x = 0,\r\n y = 0\r\n): ArrayBufferView {\r\n const gl = this._gl;\r\n if (!gl) {\r\n throw new Error(\"Engine does not have gl rendering context.\");\r\n }\r\n if (!this._dummyFramebuffer) {\r\n const dummy = gl.createFramebuffer();\r\n\r\n if (!dummy) {\r\n throw new Error(\"Unable to create dummy framebuffer\");\r\n }\r\n\r\n this._dummyFramebuffer = dummy;\r\n }\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, this._dummyFramebuffer);\r\n\r\n if (faceIndex > -1) {\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex, texture._hardwareTexture?.underlyingResource, level);\r\n } else {\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture._hardwareTexture?.underlyingResource, level);\r\n }\r\n\r\n let readType = texture.type !== undefined ? this._getWebGLTextureType(texture.type) : gl.UNSIGNED_BYTE;\r\n\r\n if (!noDataConversion) {\r\n switch (readType) {\r\n case gl.UNSIGNED_BYTE:\r\n if (!buffer) {\r\n buffer = new Uint8Array(4 * width * height);\r\n }\r\n readType = gl.UNSIGNED_BYTE;\r\n break;\r\n default:\r\n if (!buffer) {\r\n buffer = new Float32Array(4 * width * height);\r\n }\r\n readType = gl.FLOAT;\r\n break;\r\n }\r\n } else if (!buffer) {\r\n buffer = allocateAndCopyTypedBuffer(texture.type, 4 * width * height);\r\n }\r\n\r\n if (flushRenderer) {\r\n this.flushFramebuffer();\r\n }\r\n\r\n gl.readPixels(x, y, width, height, gl.RGBA, readType, <DataView>buffer);\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, this._currentFramebuffer);\r\n\r\n return buffer;\r\n};\r\n\r\nThinEngine.prototype._readTexturePixels = function (\r\n texture: InternalTexture,\r\n width: number,\r\n height: number,\r\n faceIndex = -1,\r\n level = 0,\r\n buffer: Nullable<ArrayBufferView> = null,\r\n flushRenderer = true,\r\n noDataConversion = false,\r\n x = 0,\r\n y = 0\r\n): Promise<ArrayBufferView> {\r\n return Promise.resolve(this._readTexturePixelsSync(texture, width, height, faceIndex, level, buffer, flushRenderer, noDataConversion, x, y));\r\n};\r\n"]}
1
+ {"version":3,"file":"engine.readTexture.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/Extensions/engine.readTexture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAqCtD,cAAc;AACd,OAAO,EAAE,0BAA0B,EAAE,MAAM,wCAAwC,CAAC;AACpF,OAAO,EAAE,0BAA0B,EAAE,CAAC;AAEtC,UAAU,CAAC,SAAS,CAAC,sBAAsB,GAAG,UAC1C,OAAwB,EACxB,KAAa,EACb,MAAc,EACd,SAAS,GAAG,CAAC,CAAC,EACd,KAAK,GAAG,CAAC,EACT,SAAoC,IAAI,EACxC,aAAa,GAAG,IAAI,EACpB,gBAAgB,GAAG,KAAK,EACxB,CAAC,GAAG,CAAC,EACL,CAAC,GAAG,CAAC;IAEL,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;IACpB,IAAI,CAAC,EAAE,EAAE,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,EAAE,CAAC,iBAAiB,EAAE,CAAC;QAErC,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;IACnC,CAAC;IACD,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAE3D,IAAI,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;QACjB,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,iBAAiB,EAAE,EAAE,CAAC,2BAA2B,GAAG,SAAS,EAAE,OAAO,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,KAAK,CAAC,CAAC;IACnK,CAAC;SAAM,CAAC;QACJ,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,iBAAiB,EAAE,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,KAAK,CAAC,CAAC;IACtI,CAAC;IAED,IAAI,QAAQ,GAAG,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC;IAEvG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACpB,QAAQ,QAAQ,EAAE,CAAC;YACf,KAAK,EAAE,CAAC,aAAa;gBACjB,IAAI,CAAC,MAAM,EAAE,CAAC;oBACV,MAAM,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,CAAC;gBAChD,CAAC;gBACD,QAAQ,GAAG,EAAE,CAAC,aAAa,CAAC;gBAC5B,MAAM;YACV;gBACI,IAAI,CAAC,MAAM,EAAE,CAAC;oBACV,MAAM,GAAG,IAAI,YAAY,CAAC,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,CAAC;gBAClD,CAAC;gBACD,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC;gBACpB,MAAM;QACd,CAAC;IACL,CAAC;SAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,MAAM,GAAG,0BAA0B,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,CAAC;IAC1E,CAAC;IAED,IAAI,aAAa,EAAE,CAAC;QAChB,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC5B,CAAC;IAED,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAY,MAAM,CAAC,CAAC;IACxE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAE7D,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF,qEAAqE;AACrE,UAAU,CAAC,SAAS,CAAC,kBAAkB,GAAG,UACtC,OAAwB,EACxB,KAAa,EACb,MAAc,EACd,SAAS,GAAG,CAAC,CAAC,EACd,KAAK,GAAG,CAAC,EACT,SAAoC,IAAI,EACxC,aAAa,GAAG,IAAI,EACpB,gBAAgB,GAAG,KAAK,EACxB,CAAC,GAAG,CAAC,EACL,CAAC,GAAG,CAAC;IAEL,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACjJ,CAAC,CAAC","sourcesContent":["import { ThinEngine } from \"../../Engines/thinEngine\";\r\nimport type { InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\nimport type { Nullable } from \"../../types\";\r\n\r\ndeclare module \"../../Engines/abstractEngine\" {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n export interface AbstractEngine {\r\n /** @internal */\r\n _readTexturePixels(\r\n texture: InternalTexture,\r\n width: number,\r\n height: number,\r\n faceIndex?: number,\r\n level?: number,\r\n buffer?: Nullable<ArrayBufferView>,\r\n flushRenderer?: boolean,\r\n noDataConversion?: boolean,\r\n x?: number,\r\n y?: number\r\n ): Promise<ArrayBufferView>;\r\n\r\n /** @internal */\r\n _readTexturePixelsSync(\r\n texture: InternalTexture,\r\n width: number,\r\n height: number,\r\n faceIndex?: number,\r\n level?: number,\r\n buffer?: Nullable<ArrayBufferView>,\r\n flushRenderer?: boolean,\r\n noDataConversion?: boolean,\r\n x?: number,\r\n y?: number\r\n ): ArrayBufferView;\r\n }\r\n}\r\n\r\n// back-compat\r\nimport { allocateAndCopyTypedBuffer } from \"../../Engines/abstractEngine.functions\";\r\nexport { allocateAndCopyTypedBuffer };\r\n\r\nThinEngine.prototype._readTexturePixelsSync = function (\r\n texture: InternalTexture,\r\n width: number,\r\n height: number,\r\n faceIndex = -1,\r\n level = 0,\r\n buffer: Nullable<ArrayBufferView> = null,\r\n flushRenderer = true,\r\n noDataConversion = false,\r\n x = 0,\r\n y = 0\r\n): ArrayBufferView {\r\n const gl = this._gl;\r\n if (!gl) {\r\n throw new Error(\"Engine does not have gl rendering context.\");\r\n }\r\n if (!this._dummyFramebuffer) {\r\n const dummy = gl.createFramebuffer();\r\n\r\n if (!dummy) {\r\n throw new Error(\"Unable to create dummy framebuffer\");\r\n }\r\n\r\n this._dummyFramebuffer = dummy;\r\n }\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, this._dummyFramebuffer);\r\n\r\n if (faceIndex > -1) {\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex, texture._hardwareTexture?.underlyingResource, level);\r\n } else {\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture._hardwareTexture?.underlyingResource, level);\r\n }\r\n\r\n let readType = texture.type !== undefined ? this._getWebGLTextureType(texture.type) : gl.UNSIGNED_BYTE;\r\n\r\n if (!noDataConversion) {\r\n switch (readType) {\r\n case gl.UNSIGNED_BYTE:\r\n if (!buffer) {\r\n buffer = new Uint8Array(4 * width * height);\r\n }\r\n readType = gl.UNSIGNED_BYTE;\r\n break;\r\n default:\r\n if (!buffer) {\r\n buffer = new Float32Array(4 * width * height);\r\n }\r\n readType = gl.FLOAT;\r\n break;\r\n }\r\n } else if (!buffer) {\r\n buffer = allocateAndCopyTypedBuffer(texture.type, 4 * width * height);\r\n }\r\n\r\n if (flushRenderer) {\r\n this.flushFramebuffer();\r\n }\r\n\r\n gl.readPixels(x, y, width, height, gl.RGBA, readType, <DataView>buffer);\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, this._currentFramebuffer);\r\n\r\n return buffer;\r\n};\r\n\r\n// eslint-disable-next-line @typescript-eslint/promise-function-async\r\nThinEngine.prototype._readTexturePixels = function (\r\n texture: InternalTexture,\r\n width: number,\r\n height: number,\r\n faceIndex = -1,\r\n level = 0,\r\n buffer: Nullable<ArrayBufferView> = null,\r\n flushRenderer = true,\r\n noDataConversion = false,\r\n x = 0,\r\n y = 0\r\n): Promise<ArrayBufferView> {\r\n return Promise.resolve(this._readTexturePixelsSync(texture, width, height, faceIndex, level, buffer, flushRenderer, noDataConversion, x, y));\r\n};\r\n"]}
@@ -110,6 +110,7 @@ WebGPUEngine.prototype._rebuildComputeEffects = function () {
110
110
  }
111
111
  };
112
112
  WebGPUEngine.prototype._executeWhenComputeStateIsCompiled = function (pipelineContext, action) {
113
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises, github/no-then
113
114
  pipelineContext.stage.module.getCompilationInfo().then((info) => {
114
115
  const compilationMessages = {
115
116
  numErrors: 0,