@babylonjs/core 5.0.0-alpha.59 → 5.0.0-alpha.62

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 (400) hide show
  1. package/Animations/animation.d.ts +20 -0
  2. package/Animations/animation.js +57 -8
  3. package/Animations/animation.js.map +1 -1
  4. package/Animations/animationKey.d.ts +4 -0
  5. package/Animations/animationKey.js +4 -0
  6. package/Animations/animationKey.js.map +1 -1
  7. package/Audio/sound.js +1 -1
  8. package/Audio/sound.js.map +1 -1
  9. package/BakedVertexAnimation/bakedVertexAnimationManager.d.ts +130 -0
  10. package/BakedVertexAnimation/bakedVertexAnimationManager.js +134 -0
  11. package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -0
  12. package/BakedVertexAnimation/index.d.ts +2 -0
  13. package/BakedVertexAnimation/index.js +3 -0
  14. package/BakedVertexAnimation/index.js.map +1 -0
  15. package/BakedVertexAnimation/vertexAnimationBaker.d.ts +65 -0
  16. package/BakedVertexAnimation/vertexAnimationBaker.js +155 -0
  17. package/BakedVertexAnimation/vertexAnimationBaker.js.map +1 -0
  18. package/Behaviors/Cameras/autoRotationBehavior.d.ts +5 -0
  19. package/Behaviors/Cameras/autoRotationBehavior.js +7 -0
  20. package/Behaviors/Cameras/autoRotationBehavior.js.map +1 -1
  21. package/Behaviors/Cameras/framingBehavior.d.ts +5 -0
  22. package/Behaviors/Cameras/framingBehavior.js +8 -1
  23. package/Behaviors/Cameras/framingBehavior.js.map +1 -1
  24. package/Bones/bone.d.ts +3 -1
  25. package/Bones/bone.js +4 -1
  26. package/Bones/bone.js.map +1 -1
  27. package/Cameras/Inputs/BaseCameraPointersInput.js +4 -6
  28. package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
  29. package/Cameras/Inputs/flyCameraMouseInput.js +4 -4
  30. package/Cameras/Inputs/flyCameraMouseInput.js.map +1 -1
  31. package/Cameras/Inputs/freeCameraMouseInput.js +4 -4
  32. package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
  33. package/Cameras/camera.js +8 -2
  34. package/Cameras/camera.js.map +1 -1
  35. package/Cameras/targetCamera.js +1 -1
  36. package/Cameras/targetCamera.js.map +1 -1
  37. package/Culling/boundingBox.d.ts +4 -0
  38. package/Culling/boundingBox.js +8 -0
  39. package/Culling/boundingBox.js.map +1 -1
  40. package/Debug/physicsViewer.js +1 -1
  41. package/Debug/physicsViewer.js.map +1 -1
  42. package/Debug/skeletonViewer.js +2 -2
  43. package/Debug/skeletonViewer.js.map +1 -1
  44. package/DeviceInput/Implementations/nativeDeviceInputWrapper.d.ts +6 -1
  45. package/DeviceInput/Implementations/nativeDeviceInputWrapper.js +16 -1
  46. package/DeviceInput/Implementations/nativeDeviceInputWrapper.js.map +1 -1
  47. package/DeviceInput/Implementations/webDeviceInputSystem.js +10 -10
  48. package/DeviceInput/Implementations/webDeviceInputSystem.js.map +1 -1
  49. package/DeviceInput/deviceInputSystem.js +6 -1
  50. package/DeviceInput/deviceInputSystem.js.map +1 -1
  51. package/Engines/Extensions/engine.dynamicTexture.d.ts +2 -1
  52. package/Engines/Extensions/engine.dynamicTexture.js +2 -1
  53. package/Engines/Extensions/engine.dynamicTexture.js.map +1 -1
  54. package/Engines/Extensions/engine.multiview.js +17 -6
  55. package/Engines/Extensions/engine.multiview.js.map +1 -1
  56. package/Engines/WebGPU/Extensions/engine.dynamicTexture.js +3 -11
  57. package/Engines/WebGPU/Extensions/engine.dynamicTexture.js.map +1 -1
  58. package/Engines/WebGPU/Extensions/engine.multiRender.js +0 -4
  59. package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
  60. package/Engines/WebGPU/Extensions/engine.query.js +19 -3
  61. package/Engines/WebGPU/Extensions/engine.query.js.map +1 -1
  62. package/Engines/WebGPU/Extensions/engine.renderTarget.js +0 -4
  63. package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
  64. package/Engines/WebGPU/webgpuBundleList.d.ts +13 -0
  65. package/Engines/WebGPU/webgpuBundleList.js +27 -0
  66. package/Engines/WebGPU/webgpuBundleList.js.map +1 -1
  67. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +42 -61
  68. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  69. package/Engines/WebGPU/webgpuCacheSampler.js +6 -4
  70. package/Engines/WebGPU/webgpuCacheSampler.js.map +1 -1
  71. package/Engines/WebGPU/webgpuConstants.d.ts +57 -13
  72. package/Engines/WebGPU/webgpuConstants.js +62 -13
  73. package/Engines/WebGPU/webgpuConstants.js.map +1 -1
  74. package/Engines/WebGPU/webgpuHardwareTexture.d.ts +25 -2
  75. package/Engines/WebGPU/webgpuHardwareTexture.js +2 -1
  76. package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
  77. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.d.ts +6 -0
  78. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +6 -0
  79. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
  80. package/Engines/WebGPU/webgpuSnapshotRendering.d.ts +27 -0
  81. package/Engines/WebGPU/webgpuSnapshotRendering.js +107 -0
  82. package/Engines/WebGPU/webgpuSnapshotRendering.js.map +1 -0
  83. package/Engines/WebGPU/webgpuTextureHelper.d.ts +4 -4
  84. package/Engines/WebGPU/webgpuTextureHelper.js +273 -80
  85. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  86. package/Engines/constants.d.ts +2 -0
  87. package/Engines/constants.js +2 -0
  88. package/Engines/constants.js.map +1 -1
  89. package/Engines/engine.d.ts +94 -40
  90. package/Engines/engine.js +43 -1
  91. package/Engines/engine.js.map +1 -1
  92. package/Engines/engineFeatures.d.ts +2 -0
  93. package/Engines/engineFeatures.js.map +1 -1
  94. package/Engines/index.d.ts +1 -0
  95. package/Engines/index.js +1 -0
  96. package/Engines/index.js.map +1 -1
  97. package/Engines/nativeEngine.js +49 -23
  98. package/Engines/nativeEngine.js.map +1 -1
  99. package/Engines/nullEngine.js +1 -0
  100. package/Engines/nullEngine.js.map +1 -1
  101. package/Engines/thinEngine.d.ts +0 -11
  102. package/Engines/thinEngine.js +12 -40
  103. package/Engines/thinEngine.js.map +1 -1
  104. package/Engines/webgpuEngine.d.ts +6 -6
  105. package/Engines/webgpuEngine.js +28 -71
  106. package/Engines/webgpuEngine.js.map +1 -1
  107. package/Helpers/sceneHelpers.d.ts +3 -3
  108. package/Helpers/sceneHelpers.js +1 -2
  109. package/Helpers/sceneHelpers.js.map +1 -1
  110. package/Inputs/scene.inputManager.js +12 -14
  111. package/Inputs/scene.inputManager.js.map +1 -1
  112. package/Layers/effectLayer.d.ts +13 -1
  113. package/Layers/effectLayer.js +115 -65
  114. package/Layers/effectLayer.js.map +1 -1
  115. package/Layers/highlightLayer.d.ts +2 -1
  116. package/Layers/highlightLayer.js +6 -3
  117. package/Layers/highlightLayer.js.map +1 -1
  118. package/Lights/Shadows/cascadedShadowGenerator.d.ts +1 -0
  119. package/Lights/Shadows/cascadedShadowGenerator.js +14 -0
  120. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  121. package/Lights/Shadows/shadowGenerator.d.ts +4 -0
  122. package/Lights/Shadows/shadowGenerator.js +31 -3
  123. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  124. package/Lights/light.js +7 -1
  125. package/Lights/light.js.map +1 -1
  126. package/Lights/pointLight.js +1 -1
  127. package/Lights/pointLight.js.map +1 -1
  128. package/Lights/spotLight.js +1 -1
  129. package/Lights/spotLight.js.map +1 -1
  130. package/Loading/Plugins/babylonFileLoader.js +17 -4
  131. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  132. package/Materials/Background/backgroundMaterial.js +1 -0
  133. package/Materials/Background/backgroundMaterial.js.map +1 -1
  134. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.d.ts +10 -0
  135. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +31 -0
  136. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
  137. package/Materials/Node/Blocks/Fragment/index.d.ts +2 -0
  138. package/Materials/Node/Blocks/Fragment/index.js +2 -0
  139. package/Materials/Node/Blocks/Fragment/index.js.map +1 -1
  140. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.d.ts +41 -0
  141. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js +128 -0
  142. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js.map +1 -0
  143. package/Materials/Node/Blocks/Fragment/twirlBlock.d.ts +49 -0
  144. package/Materials/Node/Blocks/Fragment/twirlBlock.js +145 -0
  145. package/Materials/Node/Blocks/Fragment/twirlBlock.js.map +1 -0
  146. package/Materials/Node/Blocks/Input/inputBlock.js +1 -1
  147. package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
  148. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.d.ts +1 -0
  149. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js +15 -0
  150. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js.map +1 -1
  151. package/Materials/Node/Blocks/customBlock.d.ts +31 -0
  152. package/Materials/Node/Blocks/customBlock.js +144 -0
  153. package/Materials/Node/Blocks/customBlock.js.map +1 -0
  154. package/Materials/Node/Blocks/index.d.ts +2 -0
  155. package/Materials/Node/Blocks/index.js +2 -0
  156. package/Materials/Node/Blocks/index.js.map +1 -1
  157. package/Materials/Node/Blocks/vectorMergerBlock.js +4 -4
  158. package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
  159. package/Materials/Node/Blocks/voronoiNoiseBlock.d.ts +39 -0
  160. package/Materials/Node/Blocks/voronoiNoiseBlock.js +107 -0
  161. package/Materials/Node/Blocks/voronoiNoiseBlock.js.map +1 -0
  162. package/Materials/Node/Blocks/worleyNoise3DBlock.d.ts +8 -0
  163. package/Materials/Node/Blocks/worleyNoise3DBlock.js +34 -2
  164. package/Materials/Node/Blocks/worleyNoise3DBlock.js.map +1 -1
  165. package/Materials/Node/nodeMaterial.d.ts +1 -0
  166. package/Materials/Node/nodeMaterial.js +2 -0
  167. package/Materials/Node/nodeMaterial.js.map +1 -1
  168. package/Materials/Node/nodeMaterialBuildStateSharedData.d.ts +5 -0
  169. package/Materials/Node/nodeMaterialBuildStateSharedData.js.map +1 -1
  170. package/Materials/PBR/pbrBaseMaterial.d.ts +2 -0
  171. package/Materials/PBR/pbrBaseMaterial.js +12 -5
  172. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  173. package/Materials/PBR/pbrSubSurfaceConfiguration.d.ts +11 -0
  174. package/Materials/PBR/pbrSubSurfaceConfiguration.js +18 -3
  175. package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
  176. package/Materials/Textures/dynamicTexture.d.ts +2 -1
  177. package/Materials/Textures/dynamicTexture.js +4 -2
  178. package/Materials/Textures/dynamicTexture.js.map +1 -1
  179. package/Materials/Textures/hdrCubeTexture.d.ts +9 -0
  180. package/Materials/Textures/hdrCubeTexture.js +21 -5
  181. package/Materials/Textures/hdrCubeTexture.js.map +1 -1
  182. package/Materials/Textures/mirrorTexture.d.ts +2 -0
  183. package/Materials/Textures/mirrorTexture.js +13 -0
  184. package/Materials/Textures/mirrorTexture.js.map +1 -1
  185. package/Materials/Textures/thinRenderTargetTexture.js +1 -1
  186. package/Materials/Textures/thinRenderTargetTexture.js.map +1 -1
  187. package/Materials/Textures/thinTexture.d.ts +1 -2
  188. package/Materials/Textures/thinTexture.js +2 -4
  189. package/Materials/Textures/thinTexture.js.map +1 -1
  190. package/Materials/imageProcessingConfiguration.d.ts +16 -1
  191. package/Materials/imageProcessingConfiguration.js +31 -0
  192. package/Materials/imageProcessingConfiguration.js.map +1 -1
  193. package/Materials/materialHelper.d.ts +15 -1
  194. package/Materials/materialHelper.js +40 -3
  195. package/Materials/materialHelper.js.map +1 -1
  196. package/Materials/pushMaterial.d.ts +2 -2
  197. package/Materials/pushMaterial.js +7 -3
  198. package/Materials/pushMaterial.js.map +1 -1
  199. package/Materials/shaderMaterial.d.ts +6 -5
  200. package/Materials/shaderMaterial.js +70 -28
  201. package/Materials/shaderMaterial.js.map +1 -1
  202. package/Materials/shadowDepthWrapper.js +7 -7
  203. package/Materials/shadowDepthWrapper.js.map +1 -1
  204. package/Materials/standardMaterial.d.ts +2 -0
  205. package/Materials/standardMaterial.js +11 -1
  206. package/Materials/standardMaterial.js.map +1 -1
  207. package/Materials/uniformBuffer.js +1 -2
  208. package/Materials/uniformBuffer.js.map +1 -1
  209. package/Maths/math.color.d.ts +20 -0
  210. package/Maths/math.color.js +45 -2
  211. package/Maths/math.color.js.map +1 -1
  212. package/Maths/math.vector.d.ts +14 -9
  213. package/Maths/math.vector.js +36 -17
  214. package/Maths/math.vector.js.map +1 -1
  215. package/Meshes/Builders/boxBuilder.d.ts +1 -1
  216. package/Meshes/Builders/boxBuilder.js +1 -0
  217. package/Meshes/Builders/boxBuilder.js.map +1 -1
  218. package/Meshes/Builders/cylinderBuilder.d.ts +17 -17
  219. package/Meshes/Builders/cylinderBuilder.js +1 -0
  220. package/Meshes/Builders/cylinderBuilder.js.map +1 -1
  221. package/Meshes/Builders/discBuilder.d.ts +1 -1
  222. package/Meshes/Builders/discBuilder.js +1 -0
  223. package/Meshes/Builders/discBuilder.js.map +1 -1
  224. package/Meshes/Builders/groundBuilder.d.ts +8 -8
  225. package/Meshes/Builders/groundBuilder.js +2 -0
  226. package/Meshes/Builders/groundBuilder.js.map +1 -1
  227. package/Meshes/Builders/hemisphereBuilder.d.ts +4 -4
  228. package/Meshes/Builders/hemisphereBuilder.js +1 -0
  229. package/Meshes/Builders/hemisphereBuilder.js.map +1 -1
  230. package/Meshes/Builders/icoSphereBuilder.d.ts +1 -1
  231. package/Meshes/Builders/icoSphereBuilder.js +1 -0
  232. package/Meshes/Builders/icoSphereBuilder.js.map +1 -1
  233. package/Meshes/Builders/planeBuilder.d.ts +1 -1
  234. package/Meshes/Builders/planeBuilder.js +1 -0
  235. package/Meshes/Builders/planeBuilder.js.map +1 -1
  236. package/Meshes/Builders/polyhedronBuilder.d.ts +1 -1
  237. package/Meshes/Builders/polyhedronBuilder.js +1 -0
  238. package/Meshes/Builders/polyhedronBuilder.js.map +1 -1
  239. package/Meshes/Builders/sphereBuilder.d.ts +1 -1
  240. package/Meshes/Builders/sphereBuilder.js +1 -0
  241. package/Meshes/Builders/sphereBuilder.js.map +1 -1
  242. package/Meshes/Builders/torusBuilder.d.ts +8 -8
  243. package/Meshes/Builders/torusBuilder.js +1 -0
  244. package/Meshes/Builders/torusBuilder.js.map +1 -1
  245. package/Meshes/Builders/torusKnotBuilder.d.ts +11 -11
  246. package/Meshes/Builders/torusKnotBuilder.js +1 -0
  247. package/Meshes/Builders/torusKnotBuilder.js.map +1 -1
  248. package/Meshes/abstractMesh.d.ts +22 -2
  249. package/Meshes/abstractMesh.js +78 -28
  250. package/Meshes/abstractMesh.js.map +1 -1
  251. package/Meshes/geometry.d.ts +3 -0
  252. package/Meshes/geometry.js +15 -7
  253. package/Meshes/geometry.js.map +1 -1
  254. package/Meshes/linesMesh.d.ts +0 -2
  255. package/Meshes/linesMesh.js +3 -35
  256. package/Meshes/linesMesh.js.map +1 -1
  257. package/Meshes/mesh.d.ts +12 -0
  258. package/Meshes/mesh.js +186 -117
  259. package/Meshes/mesh.js.map +1 -1
  260. package/Meshes/mesh.vertexData.d.ts +6 -1
  261. package/Meshes/mesh.vertexData.js +295 -114
  262. package/Meshes/mesh.vertexData.js.map +1 -1
  263. package/Meshes/thinInstanceMesh.js +6 -5
  264. package/Meshes/thinInstanceMesh.js.map +1 -1
  265. package/Meshes/transformNode.d.ts +8 -8
  266. package/Meshes/transformNode.js +25 -17
  267. package/Meshes/transformNode.js.map +1 -1
  268. package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.d.ts +1 -0
  269. package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js +13 -8
  270. package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js.map +1 -1
  271. package/Misc/PerformanceViewer/performanceViewerCollector.js +1 -1
  272. package/Misc/PerformanceViewer/performanceViewerCollector.js.map +1 -1
  273. package/Misc/basis.d.ts +3 -2
  274. package/Misc/basis.js +31 -15
  275. package/Misc/basis.js.map +1 -1
  276. package/Misc/coroutine.d.ts +45 -0
  277. package/Misc/coroutine.js +123 -0
  278. package/Misc/coroutine.js.map +1 -0
  279. package/Misc/index.d.ts +1 -0
  280. package/Misc/index.js +1 -0
  281. package/Misc/index.js.map +1 -1
  282. package/Misc/observableCoroutine.d.ts +9 -10
  283. package/Misc/observableCoroutine.js +31 -39
  284. package/Misc/observableCoroutine.js.map +1 -1
  285. package/Misc/sceneSerializer.js +0 -3
  286. package/Misc/sceneSerializer.js.map +1 -1
  287. package/Misc/tools.d.ts +2 -4
  288. package/Misc/tools.js +6 -10
  289. package/Misc/tools.js.map +1 -1
  290. package/Particles/particleSystem.js +19 -16
  291. package/Particles/particleSystem.js.map +1 -1
  292. package/Particles/solidParticleSystem.js +29 -5
  293. package/Particles/solidParticleSystem.js.map +1 -1
  294. package/Particles/subEmitter.js +1 -0
  295. package/Particles/subEmitter.js.map +1 -1
  296. package/Physics/Plugins/ammoJSPlugin.js +10 -8
  297. package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
  298. package/PostProcesses/imageProcessingPostProcess.js +1 -0
  299. package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
  300. package/Probes/reflectionProbe.d.ts +2 -0
  301. package/Probes/reflectionProbe.js +21 -0
  302. package/Probes/reflectionProbe.js.map +1 -1
  303. package/Rendering/boundingBoxRenderer.d.ts +3 -0
  304. package/Rendering/boundingBoxRenderer.js +49 -14
  305. package/Rendering/boundingBoxRenderer.js.map +1 -1
  306. package/Rendering/depthRenderer.d.ts +1 -1
  307. package/Rendering/depthRenderer.js +2 -2
  308. package/Rendering/depthRenderer.js.map +1 -1
  309. package/Rendering/edgesRenderer.js +3 -1
  310. package/Rendering/edgesRenderer.js.map +1 -1
  311. package/Rendering/geometryBufferRenderer.d.ts +0 -2
  312. package/Rendering/geometryBufferRenderer.js +13 -10
  313. package/Rendering/geometryBufferRenderer.js.map +1 -1
  314. package/Shaders/ShadersInclude/bakedVertexAnimation.d.ts +5 -0
  315. package/Shaders/ShadersInclude/bakedVertexAnimation.js +7 -0
  316. package/Shaders/ShadersInclude/bakedVertexAnimation.js.map +1 -0
  317. package/Shaders/ShadersInclude/bakedVertexAnimationDeclaration.d.ts +5 -0
  318. package/Shaders/ShadersInclude/bakedVertexAnimationDeclaration.js +7 -0
  319. package/Shaders/ShadersInclude/bakedVertexAnimationDeclaration.js.map +1 -0
  320. package/Shaders/ShadersInclude/bonesDeclaration.js +1 -1
  321. package/Shaders/ShadersInclude/bonesDeclaration.js.map +1 -1
  322. package/Shaders/ShadersInclude/bonesVertex.js +1 -1
  323. package/Shaders/ShadersInclude/bonesVertex.js.map +1 -1
  324. package/Shaders/ShadersInclude/pbrBlockImageProcessing.js +1 -1
  325. package/Shaders/ShadersInclude/pbrBlockImageProcessing.js.map +1 -1
  326. package/Shaders/ShadersInclude/shadowsFragmentFunctions.js +1 -1
  327. package/Shaders/ShadersInclude/shadowsFragmentFunctions.js.map +1 -1
  328. package/Shaders/background.fragment.js +1 -1
  329. package/Shaders/background.fragment.js.map +1 -1
  330. package/Shaders/background.vertex.d.ts +2 -0
  331. package/Shaders/background.vertex.js +3 -1
  332. package/Shaders/background.vertex.js.map +1 -1
  333. package/Shaders/color.vertex.d.ts +2 -0
  334. package/Shaders/color.vertex.js +3 -1
  335. package/Shaders/color.vertex.js.map +1 -1
  336. package/Shaders/default.vertex.d.ts +2 -0
  337. package/Shaders/default.vertex.js +3 -1
  338. package/Shaders/default.vertex.js.map +1 -1
  339. package/Shaders/depth.vertex.d.ts +2 -0
  340. package/Shaders/depth.vertex.js +3 -1
  341. package/Shaders/depth.vertex.js.map +1 -1
  342. package/Shaders/geometry.vertex.d.ts +2 -0
  343. package/Shaders/geometry.vertex.js +3 -1
  344. package/Shaders/geometry.vertex.js.map +1 -1
  345. package/Shaders/glowMapGeneration.vertex.d.ts +2 -0
  346. package/Shaders/glowMapGeneration.vertex.js +3 -1
  347. package/Shaders/glowMapGeneration.vertex.js.map +1 -1
  348. package/Shaders/outline.vertex.d.ts +2 -0
  349. package/Shaders/outline.vertex.js +3 -1
  350. package/Shaders/outline.vertex.js.map +1 -1
  351. package/Shaders/pbr.vertex.d.ts +2 -0
  352. package/Shaders/pbr.vertex.js +3 -1
  353. package/Shaders/pbr.vertex.js.map +1 -1
  354. package/Shaders/shadowMap.vertex.d.ts +2 -0
  355. package/Shaders/shadowMap.vertex.js +3 -1
  356. package/Shaders/shadowMap.vertex.js.map +1 -1
  357. package/Shaders/volumetricLightScatteringPass.vertex.d.ts +2 -0
  358. package/Shaders/volumetricLightScatteringPass.vertex.js +3 -1
  359. package/Shaders/volumetricLightScatteringPass.vertex.js.map +1 -1
  360. package/ShadersWGSL/ShadersInclude/bakedVertexAnimation.d.ts +5 -0
  361. package/ShadersWGSL/ShadersInclude/bakedVertexAnimation.js +7 -0
  362. package/ShadersWGSL/ShadersInclude/bakedVertexAnimation.js.map +1 -0
  363. package/ShadersWGSL/ShadersInclude/bakedVertexAnimationDeclaration.d.ts +5 -0
  364. package/ShadersWGSL/ShadersInclude/bakedVertexAnimationDeclaration.js +7 -0
  365. package/ShadersWGSL/ShadersInclude/bakedVertexAnimationDeclaration.js.map +1 -0
  366. package/ShadersWGSL/ShadersInclude/bonesDeclaration.js +1 -1
  367. package/ShadersWGSL/ShadersInclude/bonesDeclaration.js.map +1 -1
  368. package/ShadersWGSL/ShadersInclude/bonesVertex.js +1 -1
  369. package/ShadersWGSL/ShadersInclude/bonesVertex.js.map +1 -1
  370. package/ShadersWGSL/ShadersInclude/clipPlaneFragment.d.ts +5 -0
  371. package/ShadersWGSL/ShadersInclude/clipPlaneFragment.js +7 -0
  372. package/ShadersWGSL/ShadersInclude/clipPlaneFragment.js.map +1 -0
  373. package/ShadersWGSL/ShadersInclude/clipPlaneFragmentDeclaration.d.ts +5 -0
  374. package/ShadersWGSL/ShadersInclude/clipPlaneFragmentDeclaration.js +7 -0
  375. package/ShadersWGSL/ShadersInclude/clipPlaneFragmentDeclaration.js.map +1 -0
  376. package/ShadersWGSL/ShadersInclude/clipPlaneVertex.d.ts +5 -0
  377. package/ShadersWGSL/ShadersInclude/clipPlaneVertex.js +7 -0
  378. package/ShadersWGSL/ShadersInclude/clipPlaneVertex.js.map +1 -0
  379. package/ShadersWGSL/ShadersInclude/clipPlaneVertexDeclaration.d.ts +5 -0
  380. package/ShadersWGSL/ShadersInclude/clipPlaneVertexDeclaration.js +7 -0
  381. package/ShadersWGSL/ShadersInclude/clipPlaneVertexDeclaration.js.map +1 -0
  382. package/Sprites/spriteRenderer.d.ts +1 -0
  383. package/Sprites/spriteRenderer.js +13 -1
  384. package/Sprites/spriteRenderer.js.map +1 -1
  385. package/XR/features/WebXRControllerPointerSelection.d.ts +14 -0
  386. package/XR/features/WebXRControllerPointerSelection.js +38 -10
  387. package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
  388. package/XR/features/WebXRNearInteraction.d.ts +1 -0
  389. package/XR/features/WebXRNearInteraction.js +2 -0
  390. package/XR/features/WebXRNearInteraction.js.map +1 -1
  391. package/index.d.ts +1 -0
  392. package/index.js +1 -0
  393. package/index.js.map +1 -1
  394. package/node.d.ts +30 -1
  395. package/node.js +12 -0
  396. package/node.js.map +1 -1
  397. package/package.json +52 -1
  398. package/scene.d.ts +10 -0
  399. package/scene.js +27 -0
  400. package/scene.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"imageProcessingPostProcess.js","sourceRoot":"","sources":["../../../sourceES6/core/PostProcesses/imageProcessingPostProcess.ts"],"names":[],"mappings":"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","sourcesContent":["import { Nullable } from \"../types\";\r\nimport { Observer } from \"../Misc/observable\";\r\nimport { serialize } from \"../Misc/decorators\";\r\nimport { Color4 } from \"../Maths/math.color\";\r\nimport { Camera } from \"../Cameras/camera\";\r\nimport { BaseTexture } from \"../Materials/Textures/baseTexture\";\r\nimport { Effect } from \"../Materials/effect\";\r\nimport { ColorCurves } from \"../Materials/colorCurves\";\r\nimport { ImageProcessingConfiguration, IImageProcessingConfigurationDefines } from \"../Materials/imageProcessingConfiguration\";\r\nimport { PostProcess, PostProcessOptions } from \"./postProcess\";\r\nimport { Engine } from \"../Engines/engine\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\n\r\n\r\nimport \"../Shaders/imageProcessing.fragment\";\r\nimport \"../Shaders/postprocess.vertex\";\r\n\r\n/**\r\n * ImageProcessingPostProcess\r\n * @see https://doc.babylonjs.com/how_to/how_to_use_postprocesses#imageprocessing\r\n */\r\nexport class ImageProcessingPostProcess extends PostProcess {\r\n /**\r\n * Default configuration related to image processing available in the PBR Material.\r\n */\r\n protected _imageProcessingConfiguration: ImageProcessingConfiguration;\r\n\r\n /**\r\n * Gets the image processing configuration used either in this material.\r\n */\r\n public get imageProcessingConfiguration(): ImageProcessingConfiguration {\r\n return this._imageProcessingConfiguration;\r\n }\r\n\r\n /**\r\n * Sets the Default image processing configuration used either in the this material.\r\n *\r\n * If sets to null, the scene one is in use.\r\n */\r\n public set imageProcessingConfiguration(value: ImageProcessingConfiguration) {\r\n // We are almost sure it is applied by post process as\r\n // We are in the post process :-)\r\n value.applyByPostProcess = true;\r\n this._attachImageProcessingConfiguration(value);\r\n }\r\n\r\n /**\r\n * Keep track of the image processing observer to allow dispose and replace.\r\n */\r\n private _imageProcessingObserver: Nullable<Observer<ImageProcessingConfiguration>>;\r\n\r\n /**\r\n * Attaches a new image processing configuration to the PBR Material.\r\n * @param configuration\r\n */\r\n protected _attachImageProcessingConfiguration(configuration: Nullable<ImageProcessingConfiguration>, doNotBuild = false): void {\r\n if (configuration === this._imageProcessingConfiguration) {\r\n return;\r\n }\r\n\r\n // Detaches observer.\r\n if (this._imageProcessingConfiguration && this._imageProcessingObserver) {\r\n this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver);\r\n }\r\n\r\n // Pick the scene configuration if needed.\r\n if (!configuration) {\r\n var scene = null;\r\n var engine = this.getEngine();\r\n var camera = this.getCamera();\r\n\r\n if (camera) {\r\n scene = camera.getScene();\r\n }\r\n else if (engine && engine.scenes) {\r\n var scenes = engine.scenes;\r\n scene = scenes[scenes.length - 1];\r\n }\r\n else {\r\n scene = EngineStore.LastCreatedScene;\r\n }\r\n\r\n if (scene) {\r\n this._imageProcessingConfiguration = scene.imageProcessingConfiguration;\r\n }\r\n else {\r\n this._imageProcessingConfiguration = new ImageProcessingConfiguration();\r\n }\r\n }\r\n else {\r\n this._imageProcessingConfiguration = configuration;\r\n }\r\n\r\n // Attaches observer.\r\n if (this._imageProcessingConfiguration) {\r\n this._imageProcessingObserver = this._imageProcessingConfiguration.onUpdateParameters.add(() => {\r\n this._updateParameters();\r\n });\r\n }\r\n\r\n // Ensure the effect will be rebuilt.\r\n if (!doNotBuild) {\r\n this._updateParameters();\r\n }\r\n }\r\n\r\n /**\r\n * If the post process is supported.\r\n */\r\n public get isSupported(): boolean {\r\n const effect = this.getEffect();\r\n return !effect || effect.isSupported;\r\n }\r\n\r\n /**\r\n * Gets Color curves setup used in the effect if colorCurvesEnabled is set to true .\r\n */\r\n public get colorCurves(): Nullable<ColorCurves> {\r\n return this.imageProcessingConfiguration.colorCurves;\r\n }\r\n /**\r\n * Sets Color curves setup used in the effect if colorCurvesEnabled is set to true .\r\n */\r\n public set colorCurves(value: Nullable<ColorCurves>) {\r\n this.imageProcessingConfiguration.colorCurves = value;\r\n }\r\n\r\n /**\r\n * Gets whether the color curves effect is enabled.\r\n */\r\n public get colorCurvesEnabled(): boolean {\r\n return this.imageProcessingConfiguration.colorCurvesEnabled;\r\n }\r\n /**\r\n * Sets whether the color curves effect is enabled.\r\n */\r\n public set colorCurvesEnabled(value: boolean) {\r\n this.imageProcessingConfiguration.colorCurvesEnabled = value;\r\n }\r\n\r\n /**\r\n * Gets Color grading LUT texture used in the effect if colorGradingEnabled is set to true.\r\n */\r\n public get colorGradingTexture(): Nullable<BaseTexture> {\r\n return this.imageProcessingConfiguration.colorGradingTexture;\r\n }\r\n /**\r\n * Sets Color grading LUT texture used in the effect if colorGradingEnabled is set to true.\r\n */\r\n public set colorGradingTexture(value: Nullable<BaseTexture>) {\r\n this.imageProcessingConfiguration.colorGradingTexture = value;\r\n }\r\n\r\n /**\r\n * Gets whether the color grading effect is enabled.\r\n */\r\n public get colorGradingEnabled(): boolean {\r\n return this.imageProcessingConfiguration.colorGradingEnabled;\r\n }\r\n /**\r\n * Gets whether the color grading effect is enabled.\r\n */\r\n public set colorGradingEnabled(value: boolean) {\r\n this.imageProcessingConfiguration.colorGradingEnabled = value;\r\n }\r\n\r\n /**\r\n * Gets exposure used in the effect.\r\n */\r\n public get exposure(): number {\r\n return this.imageProcessingConfiguration.exposure;\r\n }\r\n /**\r\n * Sets exposure used in the effect.\r\n */\r\n public set exposure(value: number) {\r\n this.imageProcessingConfiguration.exposure = value;\r\n }\r\n\r\n /**\r\n * Gets whether tonemapping is enabled or not.\r\n */\r\n public get toneMappingEnabled(): boolean {\r\n return this._imageProcessingConfiguration.toneMappingEnabled;\r\n }\r\n /**\r\n * Sets whether tonemapping is enabled or not\r\n */\r\n public set toneMappingEnabled(value: boolean) {\r\n this._imageProcessingConfiguration.toneMappingEnabled = value;\r\n }\r\n\r\n /**\r\n * Gets the type of tone mapping effect.\r\n */\r\n public get toneMappingType(): number {\r\n return this._imageProcessingConfiguration.toneMappingType;\r\n }\r\n /**\r\n * Sets the type of tone mapping effect.\r\n */\r\n public set toneMappingType(value: number) {\r\n this._imageProcessingConfiguration.toneMappingType = value;\r\n }\r\n\r\n /**\r\n * Gets contrast used in the effect.\r\n */\r\n public get contrast(): number {\r\n return this.imageProcessingConfiguration.contrast;\r\n }\r\n /**\r\n * Sets contrast used in the effect.\r\n */\r\n public set contrast(value: number) {\r\n this.imageProcessingConfiguration.contrast = value;\r\n }\r\n\r\n /**\r\n * Gets Vignette stretch size.\r\n */\r\n public get vignetteStretch(): number {\r\n return this.imageProcessingConfiguration.vignetteStretch;\r\n }\r\n /**\r\n * Sets Vignette stretch size.\r\n */\r\n public set vignetteStretch(value: number) {\r\n this.imageProcessingConfiguration.vignetteStretch = value;\r\n }\r\n\r\n /**\r\n * Gets Vignette centre X Offset.\r\n */\r\n public get vignetteCentreX(): number {\r\n return this.imageProcessingConfiguration.vignetteCentreX;\r\n }\r\n /**\r\n * Sets Vignette centre X Offset.\r\n */\r\n public set vignetteCentreX(value: number) {\r\n this.imageProcessingConfiguration.vignetteCentreX = value;\r\n }\r\n\r\n /**\r\n * Gets Vignette centre Y Offset.\r\n */\r\n public get vignetteCentreY(): number {\r\n return this.imageProcessingConfiguration.vignetteCentreY;\r\n }\r\n /**\r\n * Sets Vignette centre Y Offset.\r\n */\r\n public set vignetteCentreY(value: number) {\r\n this.imageProcessingConfiguration.vignetteCentreY = value;\r\n }\r\n\r\n /**\r\n * Gets Vignette weight or intensity of the vignette effect.\r\n */\r\n public get vignetteWeight(): number {\r\n return this.imageProcessingConfiguration.vignetteWeight;\r\n }\r\n /**\r\n * Sets Vignette weight or intensity of the vignette effect.\r\n */\r\n public set vignetteWeight(value: number) {\r\n this.imageProcessingConfiguration.vignetteWeight = value;\r\n }\r\n\r\n /**\r\n * Gets Color of the vignette applied on the screen through the chosen blend mode (vignetteBlendMode)\r\n * if vignetteEnabled is set to true.\r\n */\r\n public get vignetteColor(): Color4 {\r\n return this.imageProcessingConfiguration.vignetteColor;\r\n }\r\n /**\r\n * Sets Color of the vignette applied on the screen through the chosen blend mode (vignetteBlendMode)\r\n * if vignetteEnabled is set to true.\r\n */\r\n public set vignetteColor(value: Color4) {\r\n this.imageProcessingConfiguration.vignetteColor = value;\r\n }\r\n\r\n /**\r\n * Gets Camera field of view used by the Vignette effect.\r\n */\r\n public get vignetteCameraFov(): number {\r\n return this.imageProcessingConfiguration.vignetteCameraFov;\r\n }\r\n /**\r\n * Sets Camera field of view used by the Vignette effect.\r\n */\r\n public set vignetteCameraFov(value: number) {\r\n this.imageProcessingConfiguration.vignetteCameraFov = value;\r\n }\r\n\r\n /**\r\n * Gets the vignette blend mode allowing different kind of effect.\r\n */\r\n public get vignetteBlendMode(): number {\r\n return this.imageProcessingConfiguration.vignetteBlendMode;\r\n }\r\n /**\r\n * Sets the vignette blend mode allowing different kind of effect.\r\n */\r\n public set vignetteBlendMode(value: number) {\r\n this.imageProcessingConfiguration.vignetteBlendMode = value;\r\n }\r\n\r\n /**\r\n * Gets whether the vignette effect is enabled.\r\n */\r\n public get vignetteEnabled(): boolean {\r\n return this.imageProcessingConfiguration.vignetteEnabled;\r\n }\r\n /**\r\n * Sets whether the vignette effect is enabled.\r\n */\r\n public set vignetteEnabled(value: boolean) {\r\n this.imageProcessingConfiguration.vignetteEnabled = value;\r\n }\r\n\r\n @serialize()\r\n private _fromLinearSpace = true;\r\n /**\r\n * Gets whether the input of the processing is in Gamma or Linear Space.\r\n */\r\n public get fromLinearSpace(): boolean {\r\n return this._fromLinearSpace;\r\n }\r\n /**\r\n * Sets whether the input of the processing is in Gamma or Linear Space.\r\n */\r\n public set fromLinearSpace(value: boolean) {\r\n if (this._fromLinearSpace === value) {\r\n return;\r\n }\r\n\r\n this._fromLinearSpace = value;\r\n this._updateParameters();\r\n }\r\n\r\n /**\r\n * Defines cache preventing GC.\r\n */\r\n private _defines: IImageProcessingConfigurationDefines & { FROMLINEARSPACE: boolean } = {\r\n IMAGEPROCESSING: false,\r\n VIGNETTE: false,\r\n VIGNETTEBLENDMODEMULTIPLY: false,\r\n VIGNETTEBLENDMODEOPAQUE: false,\r\n TONEMAPPING: false,\r\n TONEMAPPING_ACES: false,\r\n CONTRAST: false,\r\n COLORCURVES: false,\r\n COLORGRADING: false,\r\n COLORGRADING3D: false,\r\n FROMLINEARSPACE: false,\r\n SAMPLER3DGREENDEPTH: false,\r\n SAMPLER3DBGRMAP: false,\r\n IMAGEPROCESSINGPOSTPROCESS: false,\r\n EXPOSURE: false,\r\n };\r\n\r\n constructor(name: string, options: number | PostProcessOptions, camera: Nullable<Camera> = null, samplingMode?: number, engine?: Engine, reusable?: boolean, textureType: number = 0, imageProcessingConfiguration?: ImageProcessingConfiguration) {\r\n super(name, \"imageProcessing\", [], [], options, camera, samplingMode, engine, reusable,\r\n null, textureType, \"postprocess\", null, true);\r\n\r\n // Setup the configuration as forced by the constructor. This would then not force the\r\n // scene materials output in linear space and let untouched the default forward pass.\r\n if (imageProcessingConfiguration) {\r\n imageProcessingConfiguration.applyByPostProcess = true;\r\n this._attachImageProcessingConfiguration(imageProcessingConfiguration, true);\r\n // This will cause the shader to be compiled\r\n this.fromLinearSpace = false;\r\n }\r\n // Setup the default processing configuration to the scene.\r\n else {\r\n this._attachImageProcessingConfiguration(null, true);\r\n this.imageProcessingConfiguration.applyByPostProcess = true;\r\n }\r\n\r\n this.onApply = (effect: Effect) => {\r\n this.imageProcessingConfiguration.bind(effect, this.aspectRatio);\r\n };\r\n }\r\n /**\r\n * \"ImageProcessingPostProcess\"\r\n * @returns \"ImageProcessingPostProcess\"\r\n */\r\n public getClassName(): string {\r\n return \"ImageProcessingPostProcess\";\r\n }\r\n\r\n /**\r\n * @hidden\r\n */\r\n public _updateParameters(): void {\r\n this._defines.FROMLINEARSPACE = this._fromLinearSpace;\r\n this.imageProcessingConfiguration.prepareDefines(this._defines, true);\r\n var defines = \"\";\r\n for (const define in this._defines) {\r\n if ((<any>this._defines)[define]) {\r\n defines += `#define ${define};\\r\\n`;\r\n }\r\n }\r\n\r\n var samplers = [\"textureSampler\"];\r\n var uniforms = [\"scale\"];\r\n\r\n if (ImageProcessingConfiguration) {\r\n ImageProcessingConfiguration.PrepareSamplers(samplers, this._defines);\r\n ImageProcessingConfiguration.PrepareUniforms(uniforms, this._defines);\r\n }\r\n\r\n this.updateEffect(defines, uniforms, samplers);\r\n }\r\n\r\n public dispose(camera?: Camera): void {\r\n super.dispose(camera);\r\n\r\n if (this._imageProcessingConfiguration && this._imageProcessingObserver) {\r\n this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver);\r\n }\r\n\r\n if (this._imageProcessingConfiguration) {\r\n this.imageProcessingConfiguration.applyByPostProcess = false;\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"imageProcessingPostProcess.js","sourceRoot":"","sources":["../../../sourceES6/core/PostProcesses/imageProcessingPostProcess.ts"],"names":[],"mappings":"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","sourcesContent":["import { Nullable } from \"../types\";\r\nimport { Observer } from \"../Misc/observable\";\r\nimport { serialize } from \"../Misc/decorators\";\r\nimport { Color4 } from \"../Maths/math.color\";\r\nimport { Camera } from \"../Cameras/camera\";\r\nimport { BaseTexture } from \"../Materials/Textures/baseTexture\";\r\nimport { Effect } from \"../Materials/effect\";\r\nimport { ColorCurves } from \"../Materials/colorCurves\";\r\nimport { ImageProcessingConfiguration, IImageProcessingConfigurationDefines } from \"../Materials/imageProcessingConfiguration\";\r\nimport { PostProcess, PostProcessOptions } from \"./postProcess\";\r\nimport { Engine } from \"../Engines/engine\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\n\r\n\r\nimport \"../Shaders/imageProcessing.fragment\";\r\nimport \"../Shaders/postprocess.vertex\";\r\n\r\n/**\r\n * ImageProcessingPostProcess\r\n * @see https://doc.babylonjs.com/how_to/how_to_use_postprocesses#imageprocessing\r\n */\r\nexport class ImageProcessingPostProcess extends PostProcess {\r\n /**\r\n * Default configuration related to image processing available in the PBR Material.\r\n */\r\n protected _imageProcessingConfiguration: ImageProcessingConfiguration;\r\n\r\n /**\r\n * Gets the image processing configuration used either in this material.\r\n */\r\n public get imageProcessingConfiguration(): ImageProcessingConfiguration {\r\n return this._imageProcessingConfiguration;\r\n }\r\n\r\n /**\r\n * Sets the Default image processing configuration used either in the this material.\r\n *\r\n * If sets to null, the scene one is in use.\r\n */\r\n public set imageProcessingConfiguration(value: ImageProcessingConfiguration) {\r\n // We are almost sure it is applied by post process as\r\n // We are in the post process :-)\r\n value.applyByPostProcess = true;\r\n this._attachImageProcessingConfiguration(value);\r\n }\r\n\r\n /**\r\n * Keep track of the image processing observer to allow dispose and replace.\r\n */\r\n private _imageProcessingObserver: Nullable<Observer<ImageProcessingConfiguration>>;\r\n\r\n /**\r\n * Attaches a new image processing configuration to the PBR Material.\r\n * @param configuration\r\n */\r\n protected _attachImageProcessingConfiguration(configuration: Nullable<ImageProcessingConfiguration>, doNotBuild = false): void {\r\n if (configuration === this._imageProcessingConfiguration) {\r\n return;\r\n }\r\n\r\n // Detaches observer.\r\n if (this._imageProcessingConfiguration && this._imageProcessingObserver) {\r\n this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver);\r\n }\r\n\r\n // Pick the scene configuration if needed.\r\n if (!configuration) {\r\n var scene = null;\r\n var engine = this.getEngine();\r\n var camera = this.getCamera();\r\n\r\n if (camera) {\r\n scene = camera.getScene();\r\n }\r\n else if (engine && engine.scenes) {\r\n var scenes = engine.scenes;\r\n scene = scenes[scenes.length - 1];\r\n }\r\n else {\r\n scene = EngineStore.LastCreatedScene;\r\n }\r\n\r\n if (scene) {\r\n this._imageProcessingConfiguration = scene.imageProcessingConfiguration;\r\n }\r\n else {\r\n this._imageProcessingConfiguration = new ImageProcessingConfiguration();\r\n }\r\n }\r\n else {\r\n this._imageProcessingConfiguration = configuration;\r\n }\r\n\r\n // Attaches observer.\r\n if (this._imageProcessingConfiguration) {\r\n this._imageProcessingObserver = this._imageProcessingConfiguration.onUpdateParameters.add(() => {\r\n this._updateParameters();\r\n });\r\n }\r\n\r\n // Ensure the effect will be rebuilt.\r\n if (!doNotBuild) {\r\n this._updateParameters();\r\n }\r\n }\r\n\r\n /**\r\n * If the post process is supported.\r\n */\r\n public get isSupported(): boolean {\r\n const effect = this.getEffect();\r\n return !effect || effect.isSupported;\r\n }\r\n\r\n /**\r\n * Gets Color curves setup used in the effect if colorCurvesEnabled is set to true .\r\n */\r\n public get colorCurves(): Nullable<ColorCurves> {\r\n return this.imageProcessingConfiguration.colorCurves;\r\n }\r\n /**\r\n * Sets Color curves setup used in the effect if colorCurvesEnabled is set to true .\r\n */\r\n public set colorCurves(value: Nullable<ColorCurves>) {\r\n this.imageProcessingConfiguration.colorCurves = value;\r\n }\r\n\r\n /**\r\n * Gets whether the color curves effect is enabled.\r\n */\r\n public get colorCurvesEnabled(): boolean {\r\n return this.imageProcessingConfiguration.colorCurvesEnabled;\r\n }\r\n /**\r\n * Sets whether the color curves effect is enabled.\r\n */\r\n public set colorCurvesEnabled(value: boolean) {\r\n this.imageProcessingConfiguration.colorCurvesEnabled = value;\r\n }\r\n\r\n /**\r\n * Gets Color grading LUT texture used in the effect if colorGradingEnabled is set to true.\r\n */\r\n public get colorGradingTexture(): Nullable<BaseTexture> {\r\n return this.imageProcessingConfiguration.colorGradingTexture;\r\n }\r\n /**\r\n * Sets Color grading LUT texture used in the effect if colorGradingEnabled is set to true.\r\n */\r\n public set colorGradingTexture(value: Nullable<BaseTexture>) {\r\n this.imageProcessingConfiguration.colorGradingTexture = value;\r\n }\r\n\r\n /**\r\n * Gets whether the color grading effect is enabled.\r\n */\r\n public get colorGradingEnabled(): boolean {\r\n return this.imageProcessingConfiguration.colorGradingEnabled;\r\n }\r\n /**\r\n * Gets whether the color grading effect is enabled.\r\n */\r\n public set colorGradingEnabled(value: boolean) {\r\n this.imageProcessingConfiguration.colorGradingEnabled = value;\r\n }\r\n\r\n /**\r\n * Gets exposure used in the effect.\r\n */\r\n public get exposure(): number {\r\n return this.imageProcessingConfiguration.exposure;\r\n }\r\n /**\r\n * Sets exposure used in the effect.\r\n */\r\n public set exposure(value: number) {\r\n this.imageProcessingConfiguration.exposure = value;\r\n }\r\n\r\n /**\r\n * Gets whether tonemapping is enabled or not.\r\n */\r\n public get toneMappingEnabled(): boolean {\r\n return this._imageProcessingConfiguration.toneMappingEnabled;\r\n }\r\n /**\r\n * Sets whether tonemapping is enabled or not\r\n */\r\n public set toneMappingEnabled(value: boolean) {\r\n this._imageProcessingConfiguration.toneMappingEnabled = value;\r\n }\r\n\r\n /**\r\n * Gets the type of tone mapping effect.\r\n */\r\n public get toneMappingType(): number {\r\n return this._imageProcessingConfiguration.toneMappingType;\r\n }\r\n /**\r\n * Sets the type of tone mapping effect.\r\n */\r\n public set toneMappingType(value: number) {\r\n this._imageProcessingConfiguration.toneMappingType = value;\r\n }\r\n\r\n /**\r\n * Gets contrast used in the effect.\r\n */\r\n public get contrast(): number {\r\n return this.imageProcessingConfiguration.contrast;\r\n }\r\n /**\r\n * Sets contrast used in the effect.\r\n */\r\n public set contrast(value: number) {\r\n this.imageProcessingConfiguration.contrast = value;\r\n }\r\n\r\n /**\r\n * Gets Vignette stretch size.\r\n */\r\n public get vignetteStretch(): number {\r\n return this.imageProcessingConfiguration.vignetteStretch;\r\n }\r\n /**\r\n * Sets Vignette stretch size.\r\n */\r\n public set vignetteStretch(value: number) {\r\n this.imageProcessingConfiguration.vignetteStretch = value;\r\n }\r\n\r\n /**\r\n * Gets Vignette centre X Offset.\r\n */\r\n public get vignetteCentreX(): number {\r\n return this.imageProcessingConfiguration.vignetteCentreX;\r\n }\r\n /**\r\n * Sets Vignette centre X Offset.\r\n */\r\n public set vignetteCentreX(value: number) {\r\n this.imageProcessingConfiguration.vignetteCentreX = value;\r\n }\r\n\r\n /**\r\n * Gets Vignette centre Y Offset.\r\n */\r\n public get vignetteCentreY(): number {\r\n return this.imageProcessingConfiguration.vignetteCentreY;\r\n }\r\n /**\r\n * Sets Vignette centre Y Offset.\r\n */\r\n public set vignetteCentreY(value: number) {\r\n this.imageProcessingConfiguration.vignetteCentreY = value;\r\n }\r\n\r\n /**\r\n * Gets Vignette weight or intensity of the vignette effect.\r\n */\r\n public get vignetteWeight(): number {\r\n return this.imageProcessingConfiguration.vignetteWeight;\r\n }\r\n /**\r\n * Sets Vignette weight or intensity of the vignette effect.\r\n */\r\n public set vignetteWeight(value: number) {\r\n this.imageProcessingConfiguration.vignetteWeight = value;\r\n }\r\n\r\n /**\r\n * Gets Color of the vignette applied on the screen through the chosen blend mode (vignetteBlendMode)\r\n * if vignetteEnabled is set to true.\r\n */\r\n public get vignetteColor(): Color4 {\r\n return this.imageProcessingConfiguration.vignetteColor;\r\n }\r\n /**\r\n * Sets Color of the vignette applied on the screen through the chosen blend mode (vignetteBlendMode)\r\n * if vignetteEnabled is set to true.\r\n */\r\n public set vignetteColor(value: Color4) {\r\n this.imageProcessingConfiguration.vignetteColor = value;\r\n }\r\n\r\n /**\r\n * Gets Camera field of view used by the Vignette effect.\r\n */\r\n public get vignetteCameraFov(): number {\r\n return this.imageProcessingConfiguration.vignetteCameraFov;\r\n }\r\n /**\r\n * Sets Camera field of view used by the Vignette effect.\r\n */\r\n public set vignetteCameraFov(value: number) {\r\n this.imageProcessingConfiguration.vignetteCameraFov = value;\r\n }\r\n\r\n /**\r\n * Gets the vignette blend mode allowing different kind of effect.\r\n */\r\n public get vignetteBlendMode(): number {\r\n return this.imageProcessingConfiguration.vignetteBlendMode;\r\n }\r\n /**\r\n * Sets the vignette blend mode allowing different kind of effect.\r\n */\r\n public set vignetteBlendMode(value: number) {\r\n this.imageProcessingConfiguration.vignetteBlendMode = value;\r\n }\r\n\r\n /**\r\n * Gets whether the vignette effect is enabled.\r\n */\r\n public get vignetteEnabled(): boolean {\r\n return this.imageProcessingConfiguration.vignetteEnabled;\r\n }\r\n /**\r\n * Sets whether the vignette effect is enabled.\r\n */\r\n public set vignetteEnabled(value: boolean) {\r\n this.imageProcessingConfiguration.vignetteEnabled = value;\r\n }\r\n\r\n @serialize()\r\n private _fromLinearSpace = true;\r\n /**\r\n * Gets whether the input of the processing is in Gamma or Linear Space.\r\n */\r\n public get fromLinearSpace(): boolean {\r\n return this._fromLinearSpace;\r\n }\r\n /**\r\n * Sets whether the input of the processing is in Gamma or Linear Space.\r\n */\r\n public set fromLinearSpace(value: boolean) {\r\n if (this._fromLinearSpace === value) {\r\n return;\r\n }\r\n\r\n this._fromLinearSpace = value;\r\n this._updateParameters();\r\n }\r\n\r\n /**\r\n * Defines cache preventing GC.\r\n */\r\n private _defines: IImageProcessingConfigurationDefines & { FROMLINEARSPACE: boolean } = {\r\n IMAGEPROCESSING: false,\r\n VIGNETTE: false,\r\n VIGNETTEBLENDMODEMULTIPLY: false,\r\n VIGNETTEBLENDMODEOPAQUE: false,\r\n TONEMAPPING: false,\r\n TONEMAPPING_ACES: false,\r\n CONTRAST: false,\r\n COLORCURVES: false,\r\n COLORGRADING: false,\r\n COLORGRADING3D: false,\r\n FROMLINEARSPACE: false,\r\n SAMPLER3DGREENDEPTH: false,\r\n SAMPLER3DBGRMAP: false,\r\n IMAGEPROCESSINGPOSTPROCESS: false,\r\n EXPOSURE: false,\r\n SKIPFINALCOLORCLAMP: false,\r\n };\r\n\r\n constructor(name: string, options: number | PostProcessOptions, camera: Nullable<Camera> = null, samplingMode?: number, engine?: Engine, reusable?: boolean, textureType: number = 0, imageProcessingConfiguration?: ImageProcessingConfiguration) {\r\n super(name, \"imageProcessing\", [], [], options, camera, samplingMode, engine, reusable,\r\n null, textureType, \"postprocess\", null, true);\r\n\r\n // Setup the configuration as forced by the constructor. This would then not force the\r\n // scene materials output in linear space and let untouched the default forward pass.\r\n if (imageProcessingConfiguration) {\r\n imageProcessingConfiguration.applyByPostProcess = true;\r\n this._attachImageProcessingConfiguration(imageProcessingConfiguration, true);\r\n // This will cause the shader to be compiled\r\n this.fromLinearSpace = false;\r\n }\r\n // Setup the default processing configuration to the scene.\r\n else {\r\n this._attachImageProcessingConfiguration(null, true);\r\n this.imageProcessingConfiguration.applyByPostProcess = true;\r\n }\r\n\r\n this.onApply = (effect: Effect) => {\r\n this.imageProcessingConfiguration.bind(effect, this.aspectRatio);\r\n };\r\n }\r\n /**\r\n * \"ImageProcessingPostProcess\"\r\n * @returns \"ImageProcessingPostProcess\"\r\n */\r\n public getClassName(): string {\r\n return \"ImageProcessingPostProcess\";\r\n }\r\n\r\n /**\r\n * @hidden\r\n */\r\n public _updateParameters(): void {\r\n this._defines.FROMLINEARSPACE = this._fromLinearSpace;\r\n this.imageProcessingConfiguration.prepareDefines(this._defines, true);\r\n var defines = \"\";\r\n for (const define in this._defines) {\r\n if ((<any>this._defines)[define]) {\r\n defines += `#define ${define};\\r\\n`;\r\n }\r\n }\r\n\r\n var samplers = [\"textureSampler\"];\r\n var uniforms = [\"scale\"];\r\n\r\n if (ImageProcessingConfiguration) {\r\n ImageProcessingConfiguration.PrepareSamplers(samplers, this._defines);\r\n ImageProcessingConfiguration.PrepareUniforms(uniforms, this._defines);\r\n }\r\n\r\n this.updateEffect(defines, uniforms, samplers);\r\n }\r\n\r\n public dispose(camera?: Camera): void {\r\n super.dispose(camera);\r\n\r\n if (this._imageProcessingConfiguration && this._imageProcessingObserver) {\r\n this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver);\r\n }\r\n\r\n if (this._imageProcessingConfiguration) {\r\n this.imageProcessingConfiguration.applyByPostProcess = false;\r\n }\r\n }\r\n}\r\n"]}
@@ -39,6 +39,8 @@ export declare class ReflectionProbe {
39
39
  private _add;
40
40
  private _attachedMesh;
41
41
  private _invertYAxis;
42
+ private _sceneUBOs;
43
+ private _currentSceneUBO;
42
44
  /** Gets or sets probe position (center of the cube map) */
43
45
  position: Vector3;
44
46
  /** @hidden */
@@ -50,6 +50,12 @@ var ReflectionProbe = /** @class */ (function () {
50
50
  /** @hidden */
51
51
  this._parentContainer = null;
52
52
  this._scene = scene;
53
+ if (scene.getEngine().supportsUniformBuffers) {
54
+ this._sceneUBOs = [];
55
+ for (var i = 0; i < 6; ++i) {
56
+ this._sceneUBOs.push(scene.createSceneUniformBuffer("Scene for Reflection Probe (name \"" + name + "\") face #" + i));
57
+ }
58
+ }
53
59
  // Create the scene field if not exist.
54
60
  if (!this._scene.reflectionProbes) {
55
61
  this._scene.reflectionProbes = new Array();
@@ -69,6 +75,10 @@ var ReflectionProbe = /** @class */ (function () {
69
75
  this._renderTargetTexture.gammaSpace = !linearSpace;
70
76
  var useReverseDepthBuffer = scene.getEngine().useReverseDepthBuffer;
71
77
  this._renderTargetTexture.onBeforeRenderObservable.add(function (faceIndex) {
78
+ if (_this._sceneUBOs) {
79
+ scene.setSceneUniformBuffer(_this._sceneUBOs[faceIndex]);
80
+ scene.getSceneUniformBuffer().unbindEffect();
81
+ }
72
82
  switch (faceIndex) {
73
83
  case 0:
74
84
  _this._add.copyFromFloats(1, 0, 0);
@@ -108,6 +118,7 @@ var ReflectionProbe = /** @class */ (function () {
108
118
  var currentApplyByPostProcess;
109
119
  this._renderTargetTexture.onBeforeBindObservable.add(function () {
110
120
  var _a, _b;
121
+ _this._currentSceneUBO = scene.getSceneUniformBuffer();
111
122
  (_b = (_a = scene.getEngine())._debugPushGroup) === null || _b === void 0 ? void 0 : _b.call(_a, "reflection probe generation for " + name, 1);
112
123
  currentApplyByPostProcess = _this._scene.imageProcessingConfiguration.applyByPostProcess;
113
124
  if (linearSpace) {
@@ -118,6 +129,9 @@ var ReflectionProbe = /** @class */ (function () {
118
129
  var _a, _b;
119
130
  scene.imageProcessingConfiguration.applyByPostProcess = currentApplyByPostProcess;
120
131
  scene._forcedViewPosition = null;
132
+ if (_this._sceneUBOs) {
133
+ scene.setSceneUniformBuffer(_this._currentSceneUBO);
134
+ }
121
135
  scene.updateTransformMatrix(true);
122
136
  (_b = (_a = scene.getEngine())._debugPopGroup) === null || _b === void 0 ? void 0 : _b.call(_a, 1);
123
137
  });
@@ -202,6 +216,13 @@ var ReflectionProbe = /** @class */ (function () {
202
216
  this._renderTargetTexture.dispose();
203
217
  this._renderTargetTexture = null;
204
218
  }
219
+ if (this._sceneUBOs) {
220
+ for (var _i = 0, _a = this._sceneUBOs; _i < _a.length; _i++) {
221
+ var ubo = _a[_i];
222
+ ubo.dispose();
223
+ }
224
+ this._sceneUBOs = [];
225
+ }
205
226
  };
206
227
  /**
207
228
  * Converts the reflection probe information to a readable string for debug purpose.
@@ -1 +1 @@
1
- {"version":3,"file":"reflectionProbe.js","sourceRoot":"","sources":["../../../sourceES6/core/Probes/reflectionProbe.ts"],"names":[],"mappings":"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","sourcesContent":["import { serializeAsMeshReference, serializeAsVector3, SerializationHelper } from \"../Misc/decorators\";\r\nimport { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport { Matrix, Vector3 } from \"../Maths/math.vector\";\r\nimport { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { Nullable } from \"../types\";\r\nimport { AbstractScene } from \"../abstractScene\";\r\nimport { Scene } from \"../scene\";\r\n\r\n\r\ndeclare module \"../abstractScene\" {\r\n export interface AbstractScene {\r\n /**\r\n * The list of reflection probes added to the scene\r\n * @see https://doc.babylonjs.com/how_to/how_to_use_reflection_probes\r\n */\r\n reflectionProbes: Array<ReflectionProbe>;\r\n\r\n /**\r\n * Removes the given reflection probe from this scene.\r\n * @param toRemove The reflection probe to remove\r\n * @returns The index of the removed reflection probe\r\n */\r\n removeReflectionProbe(toRemove: ReflectionProbe): number;\r\n\r\n /**\r\n * Adds the given reflection probe to this scene.\r\n * @param newReflectionProbe The reflection probe to add\r\n */\r\n addReflectionProbe(newReflectionProbe: ReflectionProbe): void;\r\n }\r\n}\r\n\r\nAbstractScene.prototype.removeReflectionProbe = function (toRemove: ReflectionProbe): number {\r\n if (!this.reflectionProbes) {\r\n return -1;\r\n }\r\n\r\n var index = this.reflectionProbes.indexOf(toRemove);\r\n if (index !== -1) {\r\n this.reflectionProbes.splice(index, 1);\r\n }\r\n\r\n return index;\r\n};\r\n\r\nAbstractScene.prototype.addReflectionProbe = function (newReflectionProbe: ReflectionProbe): void {\r\n if (!this.reflectionProbes) {\r\n this.reflectionProbes = [];\r\n }\r\n\r\n this.reflectionProbes.push(newReflectionProbe);\r\n};\r\n\r\n/**\r\n * Class used to generate realtime reflection / refraction cube textures\r\n * @see https://doc.babylonjs.com/how_to/how_to_use_reflection_probes\r\n */\r\nexport class ReflectionProbe {\r\n private _scene: Scene;\r\n private _renderTargetTexture: RenderTargetTexture;\r\n private _projectionMatrix: Matrix;\r\n private _viewMatrix = Matrix.Identity();\r\n private _target = Vector3.Zero();\r\n private _add = Vector3.Zero();\r\n @serializeAsMeshReference()\r\n private _attachedMesh: Nullable<AbstractMesh>;\r\n\r\n private _invertYAxis = false;\r\n\r\n /** Gets or sets probe position (center of the cube map) */\r\n @serializeAsVector3()\r\n public position = Vector3.Zero();\r\n\r\n /** @hidden */\r\n public _parentContainer: Nullable<AbstractScene> = null;\r\n\r\n /**\r\n * Creates a new reflection probe\r\n * @param name defines the name of the probe\r\n * @param size defines the texture resolution (for each face)\r\n * @param scene defines the hosting scene\r\n * @param generateMipMaps defines if mip maps should be generated automatically (true by default)\r\n * @param useFloat defines if HDR data (float data) should be used to store colors (false by default)\r\n * @param linearSpace defines if the probe should be generated in linear space or not (false by default)\r\n */\r\n constructor(\r\n /** defines the name of the probe */\r\n public name: string,\r\n size: number, scene: Scene, generateMipMaps = true, useFloat = false, linearSpace = false) {\r\n this._scene = scene;\r\n\r\n // Create the scene field if not exist.\r\n if (!this._scene.reflectionProbes) {\r\n this._scene.reflectionProbes = new Array<ReflectionProbe>();\r\n }\r\n this._scene.reflectionProbes.push(this);\r\n\r\n let textureType = 0;\r\n if (useFloat) {\r\n const caps = this._scene.getEngine().getCaps();\r\n if (caps.textureHalfFloatRender) {\r\n textureType = 2;\r\n }\r\n else if (caps.textureFloatRender) {\r\n textureType = 1;\r\n }\r\n }\r\n this._renderTargetTexture = new RenderTargetTexture(name, size, scene, generateMipMaps, true, textureType, true);\r\n this._renderTargetTexture.gammaSpace = !linearSpace;\r\n\r\n const useReverseDepthBuffer = scene.getEngine().useReverseDepthBuffer;\r\n\r\n this._renderTargetTexture.onBeforeRenderObservable.add((faceIndex: number) => {\r\n switch (faceIndex) {\r\n case 0:\r\n this._add.copyFromFloats(1, 0, 0);\r\n break;\r\n case 1:\r\n this._add.copyFromFloats(-1, 0, 0);\r\n break;\r\n case 2:\r\n this._add.copyFromFloats(0, this._invertYAxis ? 1 : -1, 0);\r\n break;\r\n case 3:\r\n this._add.copyFromFloats(0, this._invertYAxis ? -1 : 1, 0);\r\n break;\r\n case 4:\r\n this._add.copyFromFloats(0, 0, scene.useRightHandedSystem ? -1 : 1);\r\n break;\r\n case 5:\r\n this._add.copyFromFloats(0, 0, scene.useRightHandedSystem ? 1 : -1);\r\n break;\r\n\r\n }\r\n\r\n if (this._attachedMesh) {\r\n this.position.copyFrom(this._attachedMesh.getAbsolutePosition());\r\n }\r\n\r\n this.position.addToRef(this._add, this._target);\r\n\r\n const lookAtFunction = scene.useRightHandedSystem ? Matrix.LookAtRHToRef : Matrix.LookAtLHToRef;\r\n const perspectiveFunction = scene.useRightHandedSystem ? Matrix.PerspectiveFovRH : Matrix.PerspectiveFovLH;\r\n\r\n lookAtFunction(this.position, this._target, Vector3.Up(), this._viewMatrix);\r\n\r\n if (scene.activeCamera) {\r\n this._projectionMatrix = perspectiveFunction(Math.PI / 2, 1, useReverseDepthBuffer ? scene.activeCamera.maxZ : scene.activeCamera.minZ, useReverseDepthBuffer ? scene.activeCamera.minZ : scene.activeCamera.maxZ, this._scene.getEngine().isNDCHalfZRange);\r\n scene.setTransformMatrix(this._viewMatrix, this._projectionMatrix);\r\n if (scene.activeCamera.isRigCamera && !this._renderTargetTexture.activeCamera) {\r\n this._renderTargetTexture.activeCamera = scene.activeCamera.rigParent || null;\r\n }\r\n }\r\n scene._forcedViewPosition = this.position;\r\n });\r\n\r\n let currentApplyByPostProcess: boolean;\r\n\r\n this._renderTargetTexture.onBeforeBindObservable.add(() => {\r\n scene.getEngine()._debugPushGroup?.(`reflection probe generation for ${name}`, 1);\r\n currentApplyByPostProcess = this._scene.imageProcessingConfiguration.applyByPostProcess;\r\n if (linearSpace) {\r\n scene.imageProcessingConfiguration.applyByPostProcess = true;\r\n }\r\n });\r\n\r\n this._renderTargetTexture.onAfterUnbindObservable.add(() => {\r\n scene.imageProcessingConfiguration.applyByPostProcess = currentApplyByPostProcess;\r\n scene._forcedViewPosition = null;\r\n scene.updateTransformMatrix(true);\r\n scene.getEngine()._debugPopGroup?.(1);\r\n });\r\n }\r\n\r\n /** Gets or sets the number of samples to use for multi-sampling (0 by default). Required WebGL2 */\r\n public get samples(): number {\r\n return this._renderTargetTexture.samples;\r\n }\r\n\r\n public set samples(value: number) {\r\n this._renderTargetTexture.samples = value;\r\n }\r\n\r\n /** Gets or sets the refresh rate to use (on every frame by default) */\r\n public get refreshRate(): number {\r\n return this._renderTargetTexture.refreshRate;\r\n }\r\n\r\n public set refreshRate(value: number) {\r\n this._renderTargetTexture.refreshRate = value;\r\n }\r\n\r\n /**\r\n * Gets the hosting scene\r\n * @returns a Scene\r\n */\r\n public getScene(): Scene {\r\n return this._scene;\r\n }\r\n\r\n /** Gets the internal CubeTexture used to render to */\r\n public get cubeTexture(): RenderTargetTexture {\r\n return this._renderTargetTexture;\r\n }\r\n\r\n /** Gets the list of meshes to render */\r\n public get renderList(): Nullable<AbstractMesh[]> {\r\n return this._renderTargetTexture.renderList;\r\n }\r\n\r\n /**\r\n * Attach the probe to a specific mesh (Rendering will be done from attached mesh's position)\r\n * @param mesh defines the mesh to attach to\r\n */\r\n public attachToMesh(mesh: Nullable<AbstractMesh>): void {\r\n this._attachedMesh = mesh;\r\n }\r\n\r\n /**\r\n * Specifies whether or not the stencil and depth buffer are cleared between two rendering groups\r\n * @param renderingGroupId The rendering group id corresponding to its index\r\n * @param autoClearDepthStencil Automatically clears depth and stencil between groups if true.\r\n */\r\n public setRenderingAutoClearDepthStencil(renderingGroupId: number, autoClearDepthStencil: boolean): void {\r\n this._renderTargetTexture.setRenderingAutoClearDepthStencil(renderingGroupId, autoClearDepthStencil);\r\n }\r\n\r\n /**\r\n * Clean all associated resources\r\n */\r\n public dispose() {\r\n var index = this._scene.reflectionProbes.indexOf(this);\r\n\r\n if (index !== -1) {\r\n // Remove from the scene if found\r\n this._scene.reflectionProbes.splice(index, 1);\r\n }\r\n\r\n if (this._parentContainer) {\r\n const index = this._parentContainer.reflectionProbes.indexOf(this);\r\n if (index > -1) {\r\n this._parentContainer.reflectionProbes.splice(index, 1);\r\n }\r\n this._parentContainer = null;\r\n }\r\n\r\n if (this._renderTargetTexture) {\r\n this._renderTargetTexture.dispose();\r\n (<any>this._renderTargetTexture) = null;\r\n }\r\n }\r\n\r\n /**\r\n * Converts the reflection probe information to a readable string for debug purpose.\r\n * @param fullDetails Supports for multiple levels of logging within scene loading\r\n * @returns the human readable reflection probe info\r\n */\r\n public toString(fullDetails?: boolean): string {\r\n var ret = \"Name: \" + this.name;\r\n\r\n if (fullDetails) {\r\n ret += \", position: \" + this.position.toString();\r\n\r\n if (this._attachedMesh) {\r\n ret += \", attached mesh: \" + this._attachedMesh.name;\r\n }\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n /**\r\n * Get the class name of the refection probe.\r\n * @returns \"ReflectionProbe\"\r\n */\r\n public getClassName(): string {\r\n return \"ReflectionProbe\";\r\n }\r\n\r\n /**\r\n * Serialize the reflection probe to a JSON representation we can easily use in the respective Parse function.\r\n * @returns The JSON representation of the texture\r\n */\r\n public serialize(): any {\r\n const serializationObject = SerializationHelper.Serialize(this, this._renderTargetTexture.serialize());\r\n serializationObject.isReflectionProbe = true;\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Parse the JSON representation of a reflection probe in order to recreate the reflection probe in the given scene.\r\n * @param parsedReflectionProbe Define the JSON representation of the reflection probe\r\n * @param scene Define the scene the parsed reflection probe should be instantiated in\r\n * @param rootUrl Define the root url of the parsing sequence in the case of relative dependencies\r\n * @returns The parsed reflection probe if successful\r\n */\r\n public static Parse(parsedReflectionProbe: any, scene: Scene, rootUrl: string): Nullable<ReflectionProbe> {\r\n let reflectionProbe: Nullable<ReflectionProbe> = null;\r\n if (scene.reflectionProbes) {\r\n for (let index = 0; index < scene.reflectionProbes.length; index++) {\r\n const rp = scene.reflectionProbes[index];\r\n if (rp.name === parsedReflectionProbe.name) {\r\n reflectionProbe = rp;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n reflectionProbe = SerializationHelper.Parse(() => reflectionProbe || new ReflectionProbe(parsedReflectionProbe.name, parsedReflectionProbe.renderTargetSize, scene, parsedReflectionProbe._generateMipMaps), parsedReflectionProbe, scene, rootUrl);\r\n reflectionProbe.cubeTexture._waitingRenderList = parsedReflectionProbe.renderList;\r\n\r\n if (parsedReflectionProbe._attachedMesh) {\r\n reflectionProbe.attachToMesh(scene.getMeshById(parsedReflectionProbe._attachedMesh));\r\n }\r\n\r\n return reflectionProbe;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"reflectionProbe.js","sourceRoot":"","sources":["../../../sourceES6/core/Probes/reflectionProbe.ts"],"names":[],"mappings":"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","sourcesContent":["import { serializeAsMeshReference, serializeAsVector3, SerializationHelper } from \"../Misc/decorators\";\r\nimport { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport { Matrix, Vector3 } from \"../Maths/math.vector\";\r\nimport { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { Nullable } from \"../types\";\r\nimport { AbstractScene } from \"../abstractScene\";\r\nimport { Scene } from \"../scene\";\r\n\r\nimport { UniformBuffer } from \"../Materials/uniformBuffer\";\r\n\r\ndeclare module \"../abstractScene\" {\r\n export interface AbstractScene {\r\n /**\r\n * The list of reflection probes added to the scene\r\n * @see https://doc.babylonjs.com/how_to/how_to_use_reflection_probes\r\n */\r\n reflectionProbes: Array<ReflectionProbe>;\r\n\r\n /**\r\n * Removes the given reflection probe from this scene.\r\n * @param toRemove The reflection probe to remove\r\n * @returns The index of the removed reflection probe\r\n */\r\n removeReflectionProbe(toRemove: ReflectionProbe): number;\r\n\r\n /**\r\n * Adds the given reflection probe to this scene.\r\n * @param newReflectionProbe The reflection probe to add\r\n */\r\n addReflectionProbe(newReflectionProbe: ReflectionProbe): void;\r\n }\r\n}\r\n\r\nAbstractScene.prototype.removeReflectionProbe = function (toRemove: ReflectionProbe): number {\r\n if (!this.reflectionProbes) {\r\n return -1;\r\n }\r\n\r\n var index = this.reflectionProbes.indexOf(toRemove);\r\n if (index !== -1) {\r\n this.reflectionProbes.splice(index, 1);\r\n }\r\n\r\n return index;\r\n};\r\n\r\nAbstractScene.prototype.addReflectionProbe = function (newReflectionProbe: ReflectionProbe): void {\r\n if (!this.reflectionProbes) {\r\n this.reflectionProbes = [];\r\n }\r\n\r\n this.reflectionProbes.push(newReflectionProbe);\r\n};\r\n\r\n/**\r\n * Class used to generate realtime reflection / refraction cube textures\r\n * @see https://doc.babylonjs.com/how_to/how_to_use_reflection_probes\r\n */\r\nexport class ReflectionProbe {\r\n private _scene: Scene;\r\n private _renderTargetTexture: RenderTargetTexture;\r\n private _projectionMatrix: Matrix;\r\n private _viewMatrix = Matrix.Identity();\r\n private _target = Vector3.Zero();\r\n private _add = Vector3.Zero();\r\n @serializeAsMeshReference()\r\n private _attachedMesh: Nullable<AbstractMesh>;\r\n\r\n private _invertYAxis = false;\r\n private _sceneUBOs: UniformBuffer[];\r\n private _currentSceneUBO: UniformBuffer;\r\n\r\n /** Gets or sets probe position (center of the cube map) */\r\n @serializeAsVector3()\r\n public position = Vector3.Zero();\r\n\r\n /** @hidden */\r\n public _parentContainer: Nullable<AbstractScene> = null;\r\n\r\n /**\r\n * Creates a new reflection probe\r\n * @param name defines the name of the probe\r\n * @param size defines the texture resolution (for each face)\r\n * @param scene defines the hosting scene\r\n * @param generateMipMaps defines if mip maps should be generated automatically (true by default)\r\n * @param useFloat defines if HDR data (float data) should be used to store colors (false by default)\r\n * @param linearSpace defines if the probe should be generated in linear space or not (false by default)\r\n */\r\n constructor(\r\n /** defines the name of the probe */\r\n public name: string,\r\n size: number, scene: Scene, generateMipMaps = true, useFloat = false, linearSpace = false) {\r\n this._scene = scene;\r\n\r\n if (scene.getEngine().supportsUniformBuffers) {\r\n this._sceneUBOs = [];\r\n for (let i = 0; i < 6; ++i) {\r\n this._sceneUBOs.push(scene.createSceneUniformBuffer(`Scene for Reflection Probe (name \"${name}\") face #${i}`));\r\n }\r\n }\r\n\r\n // Create the scene field if not exist.\r\n if (!this._scene.reflectionProbes) {\r\n this._scene.reflectionProbes = new Array<ReflectionProbe>();\r\n }\r\n this._scene.reflectionProbes.push(this);\r\n\r\n let textureType = 0;\r\n if (useFloat) {\r\n const caps = this._scene.getEngine().getCaps();\r\n if (caps.textureHalfFloatRender) {\r\n textureType = 2;\r\n }\r\n else if (caps.textureFloatRender) {\r\n textureType = 1;\r\n }\r\n }\r\n this._renderTargetTexture = new RenderTargetTexture(name, size, scene, generateMipMaps, true, textureType, true);\r\n this._renderTargetTexture.gammaSpace = !linearSpace;\r\n\r\n const useReverseDepthBuffer = scene.getEngine().useReverseDepthBuffer;\r\n\r\n this._renderTargetTexture.onBeforeRenderObservable.add((faceIndex: number) => {\r\n if (this._sceneUBOs) {\r\n scene.setSceneUniformBuffer(this._sceneUBOs[faceIndex]);\r\n scene.getSceneUniformBuffer().unbindEffect();\r\n }\r\n switch (faceIndex) {\r\n case 0:\r\n this._add.copyFromFloats(1, 0, 0);\r\n break;\r\n case 1:\r\n this._add.copyFromFloats(-1, 0, 0);\r\n break;\r\n case 2:\r\n this._add.copyFromFloats(0, this._invertYAxis ? 1 : -1, 0);\r\n break;\r\n case 3:\r\n this._add.copyFromFloats(0, this._invertYAxis ? -1 : 1, 0);\r\n break;\r\n case 4:\r\n this._add.copyFromFloats(0, 0, scene.useRightHandedSystem ? -1 : 1);\r\n break;\r\n case 5:\r\n this._add.copyFromFloats(0, 0, scene.useRightHandedSystem ? 1 : -1);\r\n break;\r\n\r\n }\r\n\r\n if (this._attachedMesh) {\r\n this.position.copyFrom(this._attachedMesh.getAbsolutePosition());\r\n }\r\n\r\n this.position.addToRef(this._add, this._target);\r\n\r\n const lookAtFunction = scene.useRightHandedSystem ? Matrix.LookAtRHToRef : Matrix.LookAtLHToRef;\r\n const perspectiveFunction = scene.useRightHandedSystem ? Matrix.PerspectiveFovRH : Matrix.PerspectiveFovLH;\r\n\r\n lookAtFunction(this.position, this._target, Vector3.Up(), this._viewMatrix);\r\n\r\n if (scene.activeCamera) {\r\n this._projectionMatrix = perspectiveFunction(Math.PI / 2, 1, useReverseDepthBuffer ? scene.activeCamera.maxZ : scene.activeCamera.minZ, useReverseDepthBuffer ? scene.activeCamera.minZ : scene.activeCamera.maxZ, this._scene.getEngine().isNDCHalfZRange);\r\n scene.setTransformMatrix(this._viewMatrix, this._projectionMatrix);\r\n if (scene.activeCamera.isRigCamera && !this._renderTargetTexture.activeCamera) {\r\n this._renderTargetTexture.activeCamera = scene.activeCamera.rigParent || null;\r\n }\r\n }\r\n scene._forcedViewPosition = this.position;\r\n });\r\n\r\n let currentApplyByPostProcess: boolean;\r\n\r\n this._renderTargetTexture.onBeforeBindObservable.add(() => {\r\n this._currentSceneUBO = scene.getSceneUniformBuffer();\r\n scene.getEngine()._debugPushGroup?.(`reflection probe generation for ${name}`, 1);\r\n currentApplyByPostProcess = this._scene.imageProcessingConfiguration.applyByPostProcess;\r\n if (linearSpace) {\r\n scene.imageProcessingConfiguration.applyByPostProcess = true;\r\n }\r\n });\r\n\r\n this._renderTargetTexture.onAfterUnbindObservable.add(() => {\r\n scene.imageProcessingConfiguration.applyByPostProcess = currentApplyByPostProcess;\r\n scene._forcedViewPosition = null;\r\n if (this._sceneUBOs) {\r\n scene.setSceneUniformBuffer(this._currentSceneUBO);\r\n }\r\n scene.updateTransformMatrix(true);\r\n scene.getEngine()._debugPopGroup?.(1);\r\n });\r\n }\r\n\r\n /** Gets or sets the number of samples to use for multi-sampling (0 by default). Required WebGL2 */\r\n public get samples(): number {\r\n return this._renderTargetTexture.samples;\r\n }\r\n\r\n public set samples(value: number) {\r\n this._renderTargetTexture.samples = value;\r\n }\r\n\r\n /** Gets or sets the refresh rate to use (on every frame by default) */\r\n public get refreshRate(): number {\r\n return this._renderTargetTexture.refreshRate;\r\n }\r\n\r\n public set refreshRate(value: number) {\r\n this._renderTargetTexture.refreshRate = value;\r\n }\r\n\r\n /**\r\n * Gets the hosting scene\r\n * @returns a Scene\r\n */\r\n public getScene(): Scene {\r\n return this._scene;\r\n }\r\n\r\n /** Gets the internal CubeTexture used to render to */\r\n public get cubeTexture(): RenderTargetTexture {\r\n return this._renderTargetTexture;\r\n }\r\n\r\n /** Gets the list of meshes to render */\r\n public get renderList(): Nullable<AbstractMesh[]> {\r\n return this._renderTargetTexture.renderList;\r\n }\r\n\r\n /**\r\n * Attach the probe to a specific mesh (Rendering will be done from attached mesh's position)\r\n * @param mesh defines the mesh to attach to\r\n */\r\n public attachToMesh(mesh: Nullable<AbstractMesh>): void {\r\n this._attachedMesh = mesh;\r\n }\r\n\r\n /**\r\n * Specifies whether or not the stencil and depth buffer are cleared between two rendering groups\r\n * @param renderingGroupId The rendering group id corresponding to its index\r\n * @param autoClearDepthStencil Automatically clears depth and stencil between groups if true.\r\n */\r\n public setRenderingAutoClearDepthStencil(renderingGroupId: number, autoClearDepthStencil: boolean): void {\r\n this._renderTargetTexture.setRenderingAutoClearDepthStencil(renderingGroupId, autoClearDepthStencil);\r\n }\r\n\r\n /**\r\n * Clean all associated resources\r\n */\r\n public dispose() {\r\n var index = this._scene.reflectionProbes.indexOf(this);\r\n\r\n if (index !== -1) {\r\n // Remove from the scene if found\r\n this._scene.reflectionProbes.splice(index, 1);\r\n }\r\n\r\n if (this._parentContainer) {\r\n const index = this._parentContainer.reflectionProbes.indexOf(this);\r\n if (index > -1) {\r\n this._parentContainer.reflectionProbes.splice(index, 1);\r\n }\r\n this._parentContainer = null;\r\n }\r\n\r\n if (this._renderTargetTexture) {\r\n this._renderTargetTexture.dispose();\r\n (<any>this._renderTargetTexture) = null;\r\n }\r\n\r\n if (this._sceneUBOs) {\r\n for (const ubo of this._sceneUBOs) {\r\n ubo.dispose();\r\n }\r\n this._sceneUBOs = [];\r\n }\r\n }\r\n\r\n /**\r\n * Converts the reflection probe information to a readable string for debug purpose.\r\n * @param fullDetails Supports for multiple levels of logging within scene loading\r\n * @returns the human readable reflection probe info\r\n */\r\n public toString(fullDetails?: boolean): string {\r\n var ret = \"Name: \" + this.name;\r\n\r\n if (fullDetails) {\r\n ret += \", position: \" + this.position.toString();\r\n\r\n if (this._attachedMesh) {\r\n ret += \", attached mesh: \" + this._attachedMesh.name;\r\n }\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n /**\r\n * Get the class name of the refection probe.\r\n * @returns \"ReflectionProbe\"\r\n */\r\n public getClassName(): string {\r\n return \"ReflectionProbe\";\r\n }\r\n\r\n /**\r\n * Serialize the reflection probe to a JSON representation we can easily use in the respective Parse function.\r\n * @returns The JSON representation of the texture\r\n */\r\n public serialize(): any {\r\n const serializationObject = SerializationHelper.Serialize(this, this._renderTargetTexture.serialize());\r\n serializationObject.isReflectionProbe = true;\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Parse the JSON representation of a reflection probe in order to recreate the reflection probe in the given scene.\r\n * @param parsedReflectionProbe Define the JSON representation of the reflection probe\r\n * @param scene Define the scene the parsed reflection probe should be instantiated in\r\n * @param rootUrl Define the root url of the parsing sequence in the case of relative dependencies\r\n * @returns The parsed reflection probe if successful\r\n */\r\n public static Parse(parsedReflectionProbe: any, scene: Scene, rootUrl: string): Nullable<ReflectionProbe> {\r\n let reflectionProbe: Nullable<ReflectionProbe> = null;\r\n if (scene.reflectionProbes) {\r\n for (let index = 0; index < scene.reflectionProbes.length; index++) {\r\n const rp = scene.reflectionProbes[index];\r\n if (rp.name === parsedReflectionProbe.name) {\r\n reflectionProbe = rp;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n reflectionProbe = SerializationHelper.Parse(() => reflectionProbe || new ReflectionProbe(parsedReflectionProbe.name, parsedReflectionProbe.renderTargetSize, scene, parsedReflectionProbe._generateMipMaps), parsedReflectionProbe, scene, rootUrl);\r\n reflectionProbe.cubeTexture._waitingRenderList = parsedReflectionProbe.renderList;\r\n\r\n if (parsedReflectionProbe._attachedMesh) {\r\n reflectionProbe.attachToMesh(scene.getMeshById(parsedReflectionProbe._attachedMesh));\r\n }\r\n\r\n return reflectionProbe;\r\n }\r\n}\r\n"]}
@@ -80,12 +80,14 @@ export declare class BoundingBoxRenderer implements ISceneComponent {
80
80
  */
81
81
  renderList: SmartArray<BoundingBox>;
82
82
  private _colorShader;
83
+ private _colorShaderForOcclusionQuery;
83
84
  private _vertexBuffers;
84
85
  private _indexBuffer;
85
86
  private _fillIndexBuffer;
86
87
  private _fillIndexData;
87
88
  private _uniformBufferFront;
88
89
  private _uniformBufferBack;
90
+ private _renderPassIdForOcclusionQuery;
89
91
  /**
90
92
  * Instantiates a new bounding box renderer in a scene.
91
93
  * @param scene the scene the renderer renders in
@@ -114,6 +116,7 @@ export declare class BoundingBoxRenderer implements ISceneComponent {
114
116
  * @param renderingGroupId defines the rendering group to render
115
117
  */
116
118
  render(renderingGroupId: number): void;
119
+ private _createWrappersForBoundingBox;
117
120
  /**
118
121
  * In case of occlusion queries, we can render the occlusion bounding box through this method
119
122
  * @param mesh Define the mesh to render the occlusion bounding box for
@@ -143,10 +143,18 @@ var BoundingBoxRenderer = /** @class */ (function () {
143
143
  attributes: [VertexBuffer.PositionKind],
144
144
  uniforms: ["world", "viewProjection", "color"],
145
145
  uniformBuffers: ["BoundingBoxRenderer"]
146
- });
146
+ }, false);
147
147
  this._colorShader.reservedDataStore = {
148
148
  hidden: true
149
149
  };
150
+ this._colorShaderForOcclusionQuery = new ShaderMaterial("colorShaderOccQuery", this.scene, "boundingBoxRenderer", {
151
+ attributes: [VertexBuffer.PositionKind],
152
+ uniforms: ["world", "viewProjection", "color"],
153
+ uniformBuffers: ["BoundingBoxRenderer"]
154
+ }, true);
155
+ this._colorShaderForOcclusionQuery.reservedDataStore = {
156
+ hidden: true
157
+ };
150
158
  var engine = this.scene.getEngine();
151
159
  var boxdata = CreateBoxVertexData({ size: 1.0 });
152
160
  this._vertexBuffers[VertexBuffer.PositionKind] = new VertexBuffer(engine, boxdata.positions, VertexBuffer.PositionKind, false);
@@ -198,12 +206,7 @@ var BoundingBoxRenderer = /** @class */ (function () {
198
206
  if (boundingBox._tag !== renderingGroupId) {
199
207
  continue;
200
208
  }
201
- if (!boundingBox._drawWrapperFront) {
202
- boundingBox._drawWrapperFront = new DrawWrapper(engine);
203
- boundingBox._drawWrapperBack = new DrawWrapper(engine);
204
- boundingBox._drawWrapperFront.setEffect(this._colorShader.getEffect());
205
- boundingBox._drawWrapperBack.setEffect(this._colorShader.getEffect());
206
- }
209
+ this._createWrappersForBoundingBox(boundingBox);
207
210
  this.onBeforeBoxRenderingObservable.notifyObservers(boundingBox);
208
211
  var min = boundingBox.minimum;
209
212
  var max = boundingBox.maximum;
@@ -255,22 +258,38 @@ var BoundingBoxRenderer = /** @class */ (function () {
255
258
  engine.setDepthFunctionToLessOrEqual();
256
259
  engine.setDepthWrite(true);
257
260
  };
261
+ BoundingBoxRenderer.prototype._createWrappersForBoundingBox = function (boundingBox) {
262
+ if (!boundingBox._drawWrapperFront) {
263
+ var engine = this.scene.getEngine();
264
+ boundingBox._drawWrapperFront = new DrawWrapper(engine);
265
+ boundingBox._drawWrapperBack = new DrawWrapper(engine);
266
+ boundingBox._drawWrapperFront.setEffect(this._colorShader.getEffect());
267
+ boundingBox._drawWrapperBack.setEffect(this._colorShader.getEffect());
268
+ }
269
+ };
258
270
  /**
259
271
  * In case of occlusion queries, we can render the occlusion bounding box through this method
260
272
  * @param mesh Define the mesh to render the occlusion bounding box for
261
273
  */
262
274
  BoundingBoxRenderer.prototype.renderOcclusionBoundingBox = function (mesh) {
275
+ var engine = this.scene.getEngine();
276
+ if (this._renderPassIdForOcclusionQuery === undefined) {
277
+ this._renderPassIdForOcclusionQuery = engine.createRenderPassId("Render pass for occlusion query");
278
+ }
279
+ var currentRenderPassId = engine.currentRenderPassId;
280
+ engine.currentRenderPassId = this._renderPassIdForOcclusionQuery;
263
281
  this._prepareResources();
264
- if (!this._colorShader.isReady() || !mesh.hasBoundingInfo) {
282
+ var subMesh = mesh.subMeshes[0];
283
+ if (!this._colorShaderForOcclusionQuery.isReady(mesh, undefined, subMesh) || !mesh.hasBoundingInfo) {
284
+ engine.currentRenderPassId = currentRenderPassId;
265
285
  return;
266
286
  }
267
- var engine = this.scene.getEngine();
268
287
  if (!this._fillIndexBuffer) {
269
288
  this._fillIndexBuffer = engine.createIndexBuffer(this._fillIndexData);
270
289
  }
290
+ var useReverseDepthBuffer = engine.useReverseDepthBuffer;
271
291
  engine.setDepthWrite(false);
272
292
  engine.setColorWrite(false);
273
- this._colorShader._preBind();
274
293
  var boundingBox = mesh.getBoundingInfo().boundingBox;
275
294
  var min = boundingBox.minimum;
276
295
  var max = boundingBox.maximum;
@@ -279,20 +298,35 @@ var BoundingBoxRenderer = /** @class */ (function () {
279
298
  var worldMatrix = Matrix.Scaling(diff.x, diff.y, diff.z)
280
299
  .multiply(Matrix.Translation(median.x, median.y, median.z))
281
300
  .multiply(boundingBox.getWorldMatrix());
282
- engine.bindBuffers(this._vertexBuffers, this._fillIndexBuffer, this._colorShader.getEffect());
283
- engine.setDepthFunctionToLess();
301
+ var drawWrapper = subMesh._drawWrapper;
302
+ this._colorShaderForOcclusionQuery._preBind(drawWrapper);
303
+ engine.bindBuffers(this._vertexBuffers, this._fillIndexBuffer, drawWrapper.effect);
304
+ if (useReverseDepthBuffer) {
305
+ engine.setDepthFunctionToGreater();
306
+ }
307
+ else {
308
+ engine.setDepthFunctionToLess();
309
+ }
284
310
  this.scene.resetCachedMaterial();
285
- this._colorShader.bind(worldMatrix);
311
+ this._uniformBufferFront.bindToEffect(drawWrapper.effect, "BoundingBoxRenderer");
312
+ this._uniformBufferFront.updateMatrix("world", worldMatrix);
313
+ this._uniformBufferFront.updateMatrix("viewProjection", this.scene.getTransformMatrix());
314
+ this._uniformBufferFront.update();
286
315
  engine.drawElementsType(Material.TriangleFillMode, 0, 36);
287
- this._colorShader.unbind();
316
+ this._colorShaderForOcclusionQuery.unbind();
288
317
  engine.setDepthFunctionToLessOrEqual();
289
318
  engine.setDepthWrite(true);
290
319
  engine.setColorWrite(true);
320
+ engine.currentRenderPassId = currentRenderPassId;
291
321
  };
292
322
  /**
293
323
  * Dispose and release the resources attached to this renderer.
294
324
  */
295
325
  BoundingBoxRenderer.prototype.dispose = function () {
326
+ if (this._renderPassIdForOcclusionQuery !== undefined) {
327
+ this.scene.getEngine().releaseRenderPassId(this._renderPassIdForOcclusionQuery);
328
+ this._renderPassIdForOcclusionQuery = undefined;
329
+ }
296
330
  if (!this._colorShader) {
297
331
  return;
298
332
  }
@@ -301,6 +335,7 @@ var BoundingBoxRenderer = /** @class */ (function () {
301
335
  this.onResourcesReadyObservable.clear();
302
336
  this.renderList.dispose();
303
337
  this._colorShader.dispose();
338
+ this._colorShaderForOcclusionQuery.dispose();
304
339
  this._uniformBufferFront.dispose();
305
340
  this._uniformBufferBack.dispose();
306
341
  var buffer = this._vertexBuffers[VertexBuffer.PositionKind];
@@ -1 +1 @@
1
- {"version":3,"file":"boundingBoxRenderer.js","sourceRoot":"","sources":["../../../sourceES6/core/Rendering/boundingBoxRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Scene } from \"../scene\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport { SubMesh } from \"../Meshes/subMesh\";\r\nimport { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { Matrix } from \"../Maths/math.vector\";\r\nimport { SmartArray } from \"../Misc/smartArray\";\r\nimport { Nullable, FloatArray, IndicesArray } from \"../types\";\r\nimport { ISceneComponent, SceneComponentConstants } from \"../sceneComponent\";\r\nimport { BoundingBox } from \"../Culling/boundingBox\";\r\nimport { Effect } from \"../Materials/effect\";\r\nimport { Material } from \"../Materials/material\";\r\nimport { ShaderMaterial } from \"../Materials/shaderMaterial\";\r\nimport { DataBuffer } from '../Buffers/dataBuffer';\r\nimport { Color3 } from '../Maths/math.color';\r\nimport { Observable } from '../Misc/observable';\r\nimport { DrawWrapper } from \"../Materials/drawWrapper\";\r\nimport { UniformBuffer } from \"../Materials/uniformBuffer\";\r\nimport { CreateBoxVertexData } from \"../Meshes/Builders/boxBuilder\";\r\n\r\nimport \"../Shaders/boundingBoxRenderer.fragment\";\r\nimport \"../Shaders/boundingBoxRenderer.vertex\";\r\n\r\ndeclare module \"../scene\" {\r\n export interface Scene {\r\n /** @hidden (Backing field) */\r\n _boundingBoxRenderer: BoundingBoxRenderer;\r\n\r\n /** @hidden (Backing field) */\r\n _forceShowBoundingBoxes: boolean;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if all bounding boxes must be rendered\r\n */\r\n forceShowBoundingBoxes: boolean;\r\n\r\n /**\r\n * Gets the bounding box renderer associated with the scene\r\n * @returns a BoundingBoxRenderer\r\n */\r\n getBoundingBoxRenderer(): BoundingBoxRenderer;\r\n }\r\n}\r\n\r\nObject.defineProperty(Scene.prototype, \"forceShowBoundingBoxes\", {\r\n get: function (this: Scene) {\r\n return this._forceShowBoundingBoxes || false;\r\n },\r\n set: function (this: Scene, value: boolean) {\r\n this._forceShowBoundingBoxes = value;\r\n // Lazyly creates a BB renderer if needed.\r\n if (value) {\r\n this.getBoundingBoxRenderer();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n});\r\n\r\nScene.prototype.getBoundingBoxRenderer = function (): BoundingBoxRenderer {\r\n\r\n if (!this._boundingBoxRenderer) {\r\n this._boundingBoxRenderer = new BoundingBoxRenderer(this);\r\n }\r\n\r\n return this._boundingBoxRenderer;\r\n};\r\n\r\ndeclare module \"../Meshes/abstractMesh\" {\r\n export interface AbstractMesh {\r\n /** @hidden (Backing field) */\r\n _showBoundingBox: boolean;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if the bounding box must be rendered as well (false by default)\r\n */\r\n showBoundingBox: boolean;\r\n }\r\n}\r\n\r\nObject.defineProperty(AbstractMesh.prototype, \"showBoundingBox\", {\r\n get: function (this: AbstractMesh) {\r\n return this._showBoundingBox || false;\r\n },\r\n set: function (this: AbstractMesh, value: boolean) {\r\n this._showBoundingBox = value;\r\n // Lazyly creates a BB renderer if needed.\r\n if (value) {\r\n this.getScene().getBoundingBoxRenderer();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n});\r\n\r\n/**\r\n * Component responsible of rendering the bounding box of the meshes in a scene.\r\n * This is usually used through the mesh.showBoundingBox or the scene.forceShowBoundingBoxes properties\r\n */\r\nexport class BoundingBoxRenderer implements ISceneComponent {\r\n /**\r\n * The component name helpful to identify the component in the list of scene components.\r\n */\r\n public readonly name = SceneComponentConstants.NAME_BOUNDINGBOXRENDERER;\r\n\r\n /**\r\n * The scene the component belongs to.\r\n */\r\n public scene: Scene;\r\n\r\n /**\r\n * Color of the bounding box lines placed in front of an object\r\n */\r\n public frontColor = new Color3(1, 1, 1);\r\n /**\r\n * Color of the bounding box lines placed behind an object\r\n */\r\n public backColor = new Color3(0.1, 0.1, 0.1);\r\n /**\r\n * Defines if the renderer should show the back lines or not\r\n */\r\n public showBackLines = true;\r\n\r\n /**\r\n * Observable raised before rendering a bounding box\r\n */\r\n public onBeforeBoxRenderingObservable = new Observable<BoundingBox>();\r\n\r\n /**\r\n * Observable raised after rendering a bounding box\r\n */\r\n public onAfterBoxRenderingObservable = new Observable<BoundingBox>();\r\n\r\n /**\r\n * Observable raised after resources are created\r\n */\r\n public onResourcesReadyObservable = new Observable<BoundingBoxRenderer>();\r\n\r\n /**\r\n * When false, no bounding boxes will be rendered\r\n */\r\n public enabled = true;\r\n\r\n /**\r\n * @hidden\r\n */\r\n public renderList = new SmartArray<BoundingBox>(32);\r\n\r\n private _colorShader: ShaderMaterial;\r\n private _vertexBuffers: { [key: string]: Nullable<VertexBuffer> } = {};\r\n private _indexBuffer: DataBuffer;\r\n private _fillIndexBuffer: Nullable<DataBuffer> = null;\r\n private _fillIndexData: Nullable<IndicesArray> = null;\r\n private _uniformBufferFront: UniformBuffer;\r\n private _uniformBufferBack: UniformBuffer;\r\n\r\n /**\r\n * Instantiates a new bounding box renderer in a scene.\r\n * @param scene the scene the renderer renders in\r\n */\r\n constructor(scene: Scene) {\r\n this.scene = scene;\r\n scene._addComponent(this);\r\n this._uniformBufferFront = new UniformBuffer(this.scene.getEngine(), undefined, undefined, \"BoundingBoxRendererFront\");\r\n this._buildUniformLayout(this._uniformBufferFront);\r\n this._uniformBufferBack = new UniformBuffer(this.scene.getEngine(), undefined, undefined, \"BoundingBoxRendererBack\");\r\n this._buildUniformLayout(this._uniformBufferBack);\r\n }\r\n\r\n private _buildUniformLayout(ubo: UniformBuffer): void {\r\n ubo.addUniform(\"color\", 4);\r\n ubo.addUniform(\"world\", 16);\r\n ubo.addUniform(\"viewProjection\", 16);\r\n ubo.addUniform(\"viewProjectionR\", 16);\r\n ubo.create();\r\n }\r\n\r\n /**\r\n * Registers the component in a given scene\r\n */\r\n public register(): void {\r\n this.scene._beforeEvaluateActiveMeshStage.registerStep(SceneComponentConstants.STEP_BEFOREEVALUATEACTIVEMESH_BOUNDINGBOXRENDERER, this, this.reset);\r\n\r\n this.scene._preActiveMeshStage.registerStep(SceneComponentConstants.STEP_PREACTIVEMESH_BOUNDINGBOXRENDERER, this, this._preActiveMesh);\r\n\r\n this.scene._evaluateSubMeshStage.registerStep(SceneComponentConstants.STEP_EVALUATESUBMESH_BOUNDINGBOXRENDERER, this, this._evaluateSubMesh);\r\n\r\n this.scene._afterRenderingGroupDrawStage.registerStep(SceneComponentConstants.STEP_AFTERRENDERINGGROUPDRAW_BOUNDINGBOXRENDERER, this, this.render);\r\n }\r\n\r\n private _evaluateSubMesh(mesh: AbstractMesh, subMesh: SubMesh): void {\r\n if (mesh.showSubMeshesBoundingBox) {\r\n const boundingInfo = subMesh.getBoundingInfo();\r\n if (boundingInfo !== null && boundingInfo !== undefined) {\r\n boundingInfo.boundingBox._tag = mesh.renderingGroupId;\r\n this.renderList.push(boundingInfo.boundingBox);\r\n }\r\n }\r\n }\r\n\r\n private _preActiveMesh(mesh: AbstractMesh): void {\r\n if (mesh.showBoundingBox || this.scene.forceShowBoundingBoxes) {\r\n let boundingInfo = mesh.getBoundingInfo();\r\n boundingInfo.boundingBox._tag = mesh.renderingGroupId;\r\n this.renderList.push(boundingInfo.boundingBox);\r\n }\r\n }\r\n\r\n private _prepareResources(): void {\r\n if (this._colorShader) {\r\n return;\r\n }\r\n\r\n this._colorShader = new ShaderMaterial(\"colorShader\", this.scene, \"boundingBoxRenderer\",\r\n {\r\n attributes: [VertexBuffer.PositionKind],\r\n uniforms: [\"world\", \"viewProjection\", \"color\"],\r\n uniformBuffers: [\"BoundingBoxRenderer\"]\r\n });\r\n\r\n this._colorShader.reservedDataStore = {\r\n hidden: true\r\n };\r\n var engine = this.scene.getEngine();\r\n var boxdata = CreateBoxVertexData({ size: 1.0 });\r\n this._vertexBuffers[VertexBuffer.PositionKind] = new VertexBuffer(engine, <FloatArray>boxdata.positions, VertexBuffer.PositionKind, false);\r\n this._createIndexBuffer();\r\n this._fillIndexData = boxdata.indices;\r\n this.onResourcesReadyObservable.notifyObservers(this);\r\n }\r\n\r\n private _createIndexBuffer(): void {\r\n var engine = this.scene.getEngine();\r\n this._indexBuffer = engine.createIndexBuffer([0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 7, 1, 6, 2, 5, 3, 4]);\r\n }\r\n\r\n /**\r\n * Rebuilds the elements related to this component in case of\r\n * context lost for instance.\r\n */\r\n public rebuild(): void {\r\n let vb = this._vertexBuffers[VertexBuffer.PositionKind];\r\n if (vb) {\r\n vb._rebuild();\r\n }\r\n this._createIndexBuffer();\r\n }\r\n\r\n /**\r\n * @hidden\r\n */\r\n public reset(): void {\r\n this.renderList.reset();\r\n }\r\n\r\n /**\r\n * Render the bounding boxes of a specific rendering group\r\n * @param renderingGroupId defines the rendering group to render\r\n */\r\n public render(renderingGroupId: number): void {\r\n if (this.renderList.length === 0 || !this.enabled) {\r\n return;\r\n }\r\n\r\n this._prepareResources();\r\n\r\n if (!this._colorShader.isReady()) {\r\n return;\r\n }\r\n\r\n var engine = this.scene.getEngine();\r\n engine.setDepthWrite(false);\r\n\r\n const frontColor = this.frontColor.toColor4();\r\n const backColor = this.backColor.toColor4();\r\n const transformMatrix = this.scene.getTransformMatrix();\r\n\r\n for (var boundingBoxIndex = 0; boundingBoxIndex < this.renderList.length; boundingBoxIndex++) {\r\n var boundingBox = this.renderList.data[boundingBoxIndex];\r\n if (boundingBox._tag !== renderingGroupId) {\r\n continue;\r\n }\r\n if (!boundingBox._drawWrapperFront) {\r\n boundingBox._drawWrapperFront = new DrawWrapper(engine);\r\n boundingBox._drawWrapperBack = new DrawWrapper(engine);\r\n\r\n boundingBox._drawWrapperFront.setEffect(this._colorShader.getEffect());\r\n boundingBox._drawWrapperBack.setEffect(this._colorShader.getEffect());\r\n }\r\n\r\n this.onBeforeBoxRenderingObservable.notifyObservers(boundingBox);\r\n\r\n var min = boundingBox.minimum;\r\n var max = boundingBox.maximum;\r\n var diff = max.subtract(min);\r\n var median = min.add(diff.scale(0.5));\r\n\r\n var worldMatrix = Matrix.Scaling(diff.x, diff.y, diff.z)\r\n .multiply(Matrix.Translation(median.x, median.y, median.z))\r\n .multiply(boundingBox.getWorldMatrix());\r\n\r\n const useReverseDepthBuffer = engine.useReverseDepthBuffer;\r\n\r\n if (this.showBackLines) {\r\n const drawWrapperBack = boundingBox._drawWrapperBack ?? this._colorShader._getDrawWrapper();\r\n\r\n this._colorShader._preBind(drawWrapperBack);\r\n\r\n engine.bindBuffers(this._vertexBuffers, this._indexBuffer, <Effect>this._colorShader.getEffect());\r\n\r\n // Back\r\n if (useReverseDepthBuffer) {\r\n engine.setDepthFunctionToLessOrEqual();\r\n } else {\r\n engine.setDepthFunctionToGreaterOrEqual();\r\n }\r\n this._uniformBufferBack.bindToEffect(drawWrapperBack.effect!, \"BoundingBoxRenderer\");\r\n this._uniformBufferBack.updateDirectColor4(\"color\", backColor);\r\n this._uniformBufferBack.updateMatrix(\"world\", worldMatrix);\r\n this._uniformBufferBack.updateMatrix(\"viewProjection\", transformMatrix);\r\n this._uniformBufferBack.update();\r\n\r\n // Draw order\r\n engine.drawElementsType(Material.LineListDrawMode, 0, 24);\r\n }\r\n\r\n const drawWrapperFront = boundingBox._drawWrapperFront ?? this._colorShader._getDrawWrapper();\r\n\r\n this._colorShader._preBind(drawWrapperFront);\r\n\r\n engine.bindBuffers(this._vertexBuffers, this._indexBuffer, <Effect>this._colorShader.getEffect());\r\n\r\n // Front\r\n if (useReverseDepthBuffer) {\r\n engine.setDepthFunctionToGreater();\r\n } else {\r\n engine.setDepthFunctionToLess();\r\n }\r\n this._uniformBufferFront.bindToEffect(drawWrapperFront.effect!, \"BoundingBoxRenderer\");\r\n this._uniformBufferFront.updateDirectColor4(\"color\", frontColor);\r\n this._uniformBufferFront.updateMatrix(\"world\", worldMatrix);\r\n this._uniformBufferFront.updateMatrix(\"viewProjection\", transformMatrix);\r\n this._uniformBufferFront.update();\r\n\r\n // Draw order\r\n engine.drawElementsType(Material.LineListDrawMode, 0, 24);\r\n\r\n this.onAfterBoxRenderingObservable.notifyObservers(boundingBox);\r\n }\r\n this._colorShader.unbind();\r\n engine.setDepthFunctionToLessOrEqual();\r\n engine.setDepthWrite(true);\r\n }\r\n\r\n /**\r\n * In case of occlusion queries, we can render the occlusion bounding box through this method\r\n * @param mesh Define the mesh to render the occlusion bounding box for\r\n */\r\n public renderOcclusionBoundingBox(mesh: AbstractMesh): void {\r\n\r\n this._prepareResources();\r\n\r\n if (!this._colorShader.isReady() || !mesh.hasBoundingInfo) {\r\n return;\r\n }\r\n\r\n var engine = this.scene.getEngine();\r\n if (!this._fillIndexBuffer) {\r\n this._fillIndexBuffer = engine.createIndexBuffer(this._fillIndexData!);\r\n }\r\n\r\n engine.setDepthWrite(false);\r\n engine.setColorWrite(false);\r\n this._colorShader._preBind();\r\n\r\n var boundingBox = mesh.getBoundingInfo().boundingBox;\r\n var min = boundingBox.minimum;\r\n var max = boundingBox.maximum;\r\n var diff = max.subtract(min);\r\n var median = min.add(diff.scale(0.5));\r\n\r\n var worldMatrix = Matrix.Scaling(diff.x, diff.y, diff.z)\r\n .multiply(Matrix.Translation(median.x, median.y, median.z))\r\n .multiply(boundingBox.getWorldMatrix());\r\n\r\n engine.bindBuffers(this._vertexBuffers, this._fillIndexBuffer, <Effect>this._colorShader.getEffect());\r\n\r\n engine.setDepthFunctionToLess();\r\n this.scene.resetCachedMaterial();\r\n this._colorShader.bind(worldMatrix);\r\n\r\n engine.drawElementsType(Material.TriangleFillMode, 0, 36);\r\n\r\n this._colorShader.unbind();\r\n engine.setDepthFunctionToLessOrEqual();\r\n engine.setDepthWrite(true);\r\n engine.setColorWrite(true);\r\n }\r\n\r\n /**\r\n * Dispose and release the resources attached to this renderer.\r\n */\r\n public dispose(): void {\r\n if (!this._colorShader) {\r\n return;\r\n }\r\n\r\n this.onBeforeBoxRenderingObservable.clear();\r\n this.onAfterBoxRenderingObservable.clear();\r\n this.onResourcesReadyObservable.clear();\r\n\r\n this.renderList.dispose();\r\n\r\n this._colorShader.dispose();\r\n\r\n this._uniformBufferFront.dispose();\r\n this._uniformBufferBack.dispose();\r\n\r\n var buffer = this._vertexBuffers[VertexBuffer.PositionKind];\r\n if (buffer) {\r\n buffer.dispose();\r\n this._vertexBuffers[VertexBuffer.PositionKind] = null;\r\n }\r\n this.scene.getEngine()._releaseBuffer(this._indexBuffer);\r\n\r\n if (this._fillIndexBuffer) {\r\n this.scene.getEngine()._releaseBuffer(this._fillIndexBuffer);\r\n this._fillIndexBuffer = null;\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"boundingBoxRenderer.js","sourceRoot":"","sources":["../../../sourceES6/core/Rendering/boundingBoxRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Scene } from \"../scene\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport { SubMesh } from \"../Meshes/subMesh\";\r\nimport { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { Matrix } from \"../Maths/math.vector\";\r\nimport { SmartArray } from \"../Misc/smartArray\";\r\nimport { Nullable, FloatArray, IndicesArray } from \"../types\";\r\nimport { ISceneComponent, SceneComponentConstants } from \"../sceneComponent\";\r\nimport { BoundingBox } from \"../Culling/boundingBox\";\r\nimport { Effect } from \"../Materials/effect\";\r\nimport { Material } from \"../Materials/material\";\r\nimport { ShaderMaterial } from \"../Materials/shaderMaterial\";\r\nimport { DataBuffer } from '../Buffers/dataBuffer';\r\nimport { Color3 } from '../Maths/math.color';\r\nimport { Observable } from '../Misc/observable';\r\nimport { DrawWrapper } from \"../Materials/drawWrapper\";\r\nimport { UniformBuffer } from \"../Materials/uniformBuffer\";\r\nimport { CreateBoxVertexData } from \"../Meshes/Builders/boxBuilder\";\r\n\r\nimport \"../Shaders/boundingBoxRenderer.fragment\";\r\nimport \"../Shaders/boundingBoxRenderer.vertex\";\r\n\r\ndeclare module \"../scene\" {\r\n export interface Scene {\r\n /** @hidden (Backing field) */\r\n _boundingBoxRenderer: BoundingBoxRenderer;\r\n\r\n /** @hidden (Backing field) */\r\n _forceShowBoundingBoxes: boolean;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if all bounding boxes must be rendered\r\n */\r\n forceShowBoundingBoxes: boolean;\r\n\r\n /**\r\n * Gets the bounding box renderer associated with the scene\r\n * @returns a BoundingBoxRenderer\r\n */\r\n getBoundingBoxRenderer(): BoundingBoxRenderer;\r\n }\r\n}\r\n\r\nObject.defineProperty(Scene.prototype, \"forceShowBoundingBoxes\", {\r\n get: function (this: Scene) {\r\n return this._forceShowBoundingBoxes || false;\r\n },\r\n set: function (this: Scene, value: boolean) {\r\n this._forceShowBoundingBoxes = value;\r\n // Lazyly creates a BB renderer if needed.\r\n if (value) {\r\n this.getBoundingBoxRenderer();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n});\r\n\r\nScene.prototype.getBoundingBoxRenderer = function (): BoundingBoxRenderer {\r\n\r\n if (!this._boundingBoxRenderer) {\r\n this._boundingBoxRenderer = new BoundingBoxRenderer(this);\r\n }\r\n\r\n return this._boundingBoxRenderer;\r\n};\r\n\r\ndeclare module \"../Meshes/abstractMesh\" {\r\n export interface AbstractMesh {\r\n /** @hidden (Backing field) */\r\n _showBoundingBox: boolean;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if the bounding box must be rendered as well (false by default)\r\n */\r\n showBoundingBox: boolean;\r\n }\r\n}\r\n\r\nObject.defineProperty(AbstractMesh.prototype, \"showBoundingBox\", {\r\n get: function (this: AbstractMesh) {\r\n return this._showBoundingBox || false;\r\n },\r\n set: function (this: AbstractMesh, value: boolean) {\r\n this._showBoundingBox = value;\r\n // Lazyly creates a BB renderer if needed.\r\n if (value) {\r\n this.getScene().getBoundingBoxRenderer();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n});\r\n\r\n/**\r\n * Component responsible of rendering the bounding box of the meshes in a scene.\r\n * This is usually used through the mesh.showBoundingBox or the scene.forceShowBoundingBoxes properties\r\n */\r\nexport class BoundingBoxRenderer implements ISceneComponent {\r\n /**\r\n * The component name helpful to identify the component in the list of scene components.\r\n */\r\n public readonly name = SceneComponentConstants.NAME_BOUNDINGBOXRENDERER;\r\n\r\n /**\r\n * The scene the component belongs to.\r\n */\r\n public scene: Scene;\r\n\r\n /**\r\n * Color of the bounding box lines placed in front of an object\r\n */\r\n public frontColor = new Color3(1, 1, 1);\r\n /**\r\n * Color of the bounding box lines placed behind an object\r\n */\r\n public backColor = new Color3(0.1, 0.1, 0.1);\r\n /**\r\n * Defines if the renderer should show the back lines or not\r\n */\r\n public showBackLines = true;\r\n\r\n /**\r\n * Observable raised before rendering a bounding box\r\n */\r\n public onBeforeBoxRenderingObservable = new Observable<BoundingBox>();\r\n\r\n /**\r\n * Observable raised after rendering a bounding box\r\n */\r\n public onAfterBoxRenderingObservable = new Observable<BoundingBox>();\r\n\r\n /**\r\n * Observable raised after resources are created\r\n */\r\n public onResourcesReadyObservable = new Observable<BoundingBoxRenderer>();\r\n\r\n /**\r\n * When false, no bounding boxes will be rendered\r\n */\r\n public enabled = true;\r\n\r\n /**\r\n * @hidden\r\n */\r\n public renderList = new SmartArray<BoundingBox>(32);\r\n\r\n private _colorShader: ShaderMaterial;\r\n private _colorShaderForOcclusionQuery: ShaderMaterial;\r\n private _vertexBuffers: { [key: string]: Nullable<VertexBuffer> } = {};\r\n private _indexBuffer: DataBuffer;\r\n private _fillIndexBuffer: Nullable<DataBuffer> = null;\r\n private _fillIndexData: Nullable<IndicesArray> = null;\r\n private _uniformBufferFront: UniformBuffer;\r\n private _uniformBufferBack: UniformBuffer;\r\n private _renderPassIdForOcclusionQuery: number;\r\n\r\n /**\r\n * Instantiates a new bounding box renderer in a scene.\r\n * @param scene the scene the renderer renders in\r\n */\r\n constructor(scene: Scene) {\r\n this.scene = scene;\r\n scene._addComponent(this);\r\n this._uniformBufferFront = new UniformBuffer(this.scene.getEngine(), undefined, undefined, \"BoundingBoxRendererFront\");\r\n this._buildUniformLayout(this._uniformBufferFront);\r\n this._uniformBufferBack = new UniformBuffer(this.scene.getEngine(), undefined, undefined, \"BoundingBoxRendererBack\");\r\n this._buildUniformLayout(this._uniformBufferBack);\r\n }\r\n\r\n private _buildUniformLayout(ubo: UniformBuffer): void {\r\n ubo.addUniform(\"color\", 4);\r\n ubo.addUniform(\"world\", 16);\r\n ubo.addUniform(\"viewProjection\", 16);\r\n ubo.addUniform(\"viewProjectionR\", 16);\r\n ubo.create();\r\n }\r\n\r\n /**\r\n * Registers the component in a given scene\r\n */\r\n public register(): void {\r\n this.scene._beforeEvaluateActiveMeshStage.registerStep(SceneComponentConstants.STEP_BEFOREEVALUATEACTIVEMESH_BOUNDINGBOXRENDERER, this, this.reset);\r\n\r\n this.scene._preActiveMeshStage.registerStep(SceneComponentConstants.STEP_PREACTIVEMESH_BOUNDINGBOXRENDERER, this, this._preActiveMesh);\r\n\r\n this.scene._evaluateSubMeshStage.registerStep(SceneComponentConstants.STEP_EVALUATESUBMESH_BOUNDINGBOXRENDERER, this, this._evaluateSubMesh);\r\n\r\n this.scene._afterRenderingGroupDrawStage.registerStep(SceneComponentConstants.STEP_AFTERRENDERINGGROUPDRAW_BOUNDINGBOXRENDERER, this, this.render);\r\n }\r\n\r\n private _evaluateSubMesh(mesh: AbstractMesh, subMesh: SubMesh): void {\r\n if (mesh.showSubMeshesBoundingBox) {\r\n const boundingInfo = subMesh.getBoundingInfo();\r\n if (boundingInfo !== null && boundingInfo !== undefined) {\r\n boundingInfo.boundingBox._tag = mesh.renderingGroupId;\r\n this.renderList.push(boundingInfo.boundingBox);\r\n }\r\n }\r\n }\r\n\r\n private _preActiveMesh(mesh: AbstractMesh): void {\r\n if (mesh.showBoundingBox || this.scene.forceShowBoundingBoxes) {\r\n let boundingInfo = mesh.getBoundingInfo();\r\n boundingInfo.boundingBox._tag = mesh.renderingGroupId;\r\n this.renderList.push(boundingInfo.boundingBox);\r\n }\r\n }\r\n\r\n private _prepareResources(): void {\r\n if (this._colorShader) {\r\n return;\r\n }\r\n\r\n this._colorShader = new ShaderMaterial(\"colorShader\", this.scene, \"boundingBoxRenderer\",\r\n {\r\n attributes: [VertexBuffer.PositionKind],\r\n uniforms: [\"world\", \"viewProjection\", \"color\"],\r\n uniformBuffers: [\"BoundingBoxRenderer\"]\r\n }, false);\r\n\r\n this._colorShader.reservedDataStore = {\r\n hidden: true\r\n };\r\n\r\n this._colorShaderForOcclusionQuery = new ShaderMaterial(\"colorShaderOccQuery\", this.scene, \"boundingBoxRenderer\",\r\n {\r\n attributes: [VertexBuffer.PositionKind],\r\n uniforms: [\"world\", \"viewProjection\", \"color\"],\r\n uniformBuffers: [\"BoundingBoxRenderer\"]\r\n }, true);\r\n\r\n this._colorShaderForOcclusionQuery.reservedDataStore = {\r\n hidden: true\r\n };\r\n\r\n var engine = this.scene.getEngine();\r\n var boxdata = CreateBoxVertexData({ size: 1.0 });\r\n this._vertexBuffers[VertexBuffer.PositionKind] = new VertexBuffer(engine, <FloatArray>boxdata.positions, VertexBuffer.PositionKind, false);\r\n this._createIndexBuffer();\r\n this._fillIndexData = boxdata.indices;\r\n this.onResourcesReadyObservable.notifyObservers(this);\r\n }\r\n\r\n private _createIndexBuffer(): void {\r\n var engine = this.scene.getEngine();\r\n this._indexBuffer = engine.createIndexBuffer([0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 7, 1, 6, 2, 5, 3, 4]);\r\n }\r\n\r\n /**\r\n * Rebuilds the elements related to this component in case of\r\n * context lost for instance.\r\n */\r\n public rebuild(): void {\r\n let vb = this._vertexBuffers[VertexBuffer.PositionKind];\r\n if (vb) {\r\n vb._rebuild();\r\n }\r\n this._createIndexBuffer();\r\n }\r\n\r\n /**\r\n * @hidden\r\n */\r\n public reset(): void {\r\n this.renderList.reset();\r\n }\r\n\r\n /**\r\n * Render the bounding boxes of a specific rendering group\r\n * @param renderingGroupId defines the rendering group to render\r\n */\r\n public render(renderingGroupId: number): void {\r\n if (this.renderList.length === 0 || !this.enabled) {\r\n return;\r\n }\r\n\r\n this._prepareResources();\r\n\r\n if (!this._colorShader.isReady()) {\r\n return;\r\n }\r\n\r\n var engine = this.scene.getEngine();\r\n engine.setDepthWrite(false);\r\n\r\n const frontColor = this.frontColor.toColor4();\r\n const backColor = this.backColor.toColor4();\r\n const transformMatrix = this.scene.getTransformMatrix();\r\n\r\n for (var boundingBoxIndex = 0; boundingBoxIndex < this.renderList.length; boundingBoxIndex++) {\r\n var boundingBox = this.renderList.data[boundingBoxIndex];\r\n if (boundingBox._tag !== renderingGroupId) {\r\n continue;\r\n }\r\n\r\n this._createWrappersForBoundingBox(boundingBox);\r\n this.onBeforeBoxRenderingObservable.notifyObservers(boundingBox);\r\n\r\n var min = boundingBox.minimum;\r\n var max = boundingBox.maximum;\r\n var diff = max.subtract(min);\r\n var median = min.add(diff.scale(0.5));\r\n\r\n var worldMatrix = Matrix.Scaling(diff.x, diff.y, diff.z)\r\n .multiply(Matrix.Translation(median.x, median.y, median.z))\r\n .multiply(boundingBox.getWorldMatrix());\r\n\r\n const useReverseDepthBuffer = engine.useReverseDepthBuffer;\r\n\r\n if (this.showBackLines) {\r\n const drawWrapperBack = boundingBox._drawWrapperBack ?? this._colorShader._getDrawWrapper();\r\n\r\n this._colorShader._preBind(drawWrapperBack);\r\n\r\n engine.bindBuffers(this._vertexBuffers, this._indexBuffer, <Effect>this._colorShader.getEffect());\r\n\r\n // Back\r\n if (useReverseDepthBuffer) {\r\n engine.setDepthFunctionToLessOrEqual();\r\n } else {\r\n engine.setDepthFunctionToGreaterOrEqual();\r\n }\r\n this._uniformBufferBack.bindToEffect(drawWrapperBack.effect!, \"BoundingBoxRenderer\");\r\n this._uniformBufferBack.updateDirectColor4(\"color\", backColor);\r\n this._uniformBufferBack.updateMatrix(\"world\", worldMatrix);\r\n this._uniformBufferBack.updateMatrix(\"viewProjection\", transformMatrix);\r\n this._uniformBufferBack.update();\r\n\r\n // Draw order\r\n engine.drawElementsType(Material.LineListDrawMode, 0, 24);\r\n }\r\n\r\n const drawWrapperFront = boundingBox._drawWrapperFront ?? this._colorShader._getDrawWrapper();\r\n\r\n this._colorShader._preBind(drawWrapperFront);\r\n\r\n engine.bindBuffers(this._vertexBuffers, this._indexBuffer, <Effect>this._colorShader.getEffect());\r\n\r\n // Front\r\n if (useReverseDepthBuffer) {\r\n engine.setDepthFunctionToGreater();\r\n } else {\r\n engine.setDepthFunctionToLess();\r\n }\r\n this._uniformBufferFront.bindToEffect(drawWrapperFront.effect!, \"BoundingBoxRenderer\");\r\n this._uniformBufferFront.updateDirectColor4(\"color\", frontColor);\r\n this._uniformBufferFront.updateMatrix(\"world\", worldMatrix);\r\n this._uniformBufferFront.updateMatrix(\"viewProjection\", transformMatrix);\r\n this._uniformBufferFront.update();\r\n\r\n // Draw order\r\n engine.drawElementsType(Material.LineListDrawMode, 0, 24);\r\n\r\n this.onAfterBoxRenderingObservable.notifyObservers(boundingBox);\r\n }\r\n this._colorShader.unbind();\r\n engine.setDepthFunctionToLessOrEqual();\r\n engine.setDepthWrite(true);\r\n }\r\n\r\n private _createWrappersForBoundingBox(boundingBox: BoundingBox): void {\r\n if (!boundingBox._drawWrapperFront) {\r\n const engine = this.scene.getEngine();\r\n\r\n boundingBox._drawWrapperFront = new DrawWrapper(engine);\r\n boundingBox._drawWrapperBack = new DrawWrapper(engine);\r\n\r\n boundingBox._drawWrapperFront.setEffect(this._colorShader.getEffect());\r\n boundingBox._drawWrapperBack.setEffect(this._colorShader.getEffect());\r\n }\r\n }\r\n\r\n /**\r\n * In case of occlusion queries, we can render the occlusion bounding box through this method\r\n * @param mesh Define the mesh to render the occlusion bounding box for\r\n */\r\n public renderOcclusionBoundingBox(mesh: AbstractMesh): void {\r\n const engine = this.scene.getEngine();\r\n\r\n if (this._renderPassIdForOcclusionQuery === undefined) {\r\n this._renderPassIdForOcclusionQuery = engine.createRenderPassId(`Render pass for occlusion query`);\r\n }\r\n\r\n const currentRenderPassId = engine.currentRenderPassId;\r\n\r\n engine.currentRenderPassId = this._renderPassIdForOcclusionQuery;\r\n\r\n this._prepareResources();\r\n\r\n const subMesh = mesh.subMeshes[0];\r\n\r\n if (!this._colorShaderForOcclusionQuery.isReady(mesh, undefined, subMesh) || !mesh.hasBoundingInfo) {\r\n engine.currentRenderPassId = currentRenderPassId;\r\n return;\r\n }\r\n\r\n if (!this._fillIndexBuffer) {\r\n this._fillIndexBuffer = engine.createIndexBuffer(this._fillIndexData!);\r\n }\r\n\r\n const useReverseDepthBuffer = engine.useReverseDepthBuffer;\r\n\r\n engine.setDepthWrite(false);\r\n engine.setColorWrite(false);\r\n\r\n var boundingBox = mesh.getBoundingInfo().boundingBox;\r\n var min = boundingBox.minimum;\r\n var max = boundingBox.maximum;\r\n var diff = max.subtract(min);\r\n var median = min.add(diff.scale(0.5));\r\n\r\n var worldMatrix = Matrix.Scaling(diff.x, diff.y, diff.z)\r\n .multiply(Matrix.Translation(median.x, median.y, median.z))\r\n .multiply(boundingBox.getWorldMatrix());\r\n\r\n const drawWrapper = subMesh._drawWrapper;\r\n\r\n this._colorShaderForOcclusionQuery._preBind(drawWrapper);\r\n\r\n engine.bindBuffers(this._vertexBuffers, this._fillIndexBuffer, <Effect>drawWrapper.effect);\r\n\r\n if (useReverseDepthBuffer) {\r\n engine.setDepthFunctionToGreater();\r\n } else {\r\n engine.setDepthFunctionToLess();\r\n }\r\n\r\n this.scene.resetCachedMaterial();\r\n\r\n this._uniformBufferFront.bindToEffect(drawWrapper.effect!, \"BoundingBoxRenderer\");\r\n this._uniformBufferFront.updateMatrix(\"world\", worldMatrix);\r\n this._uniformBufferFront.updateMatrix(\"viewProjection\", this.scene.getTransformMatrix());\r\n this._uniformBufferFront.update();\r\n\r\n engine.drawElementsType(Material.TriangleFillMode, 0, 36);\r\n\r\n this._colorShaderForOcclusionQuery.unbind();\r\n engine.setDepthFunctionToLessOrEqual();\r\n engine.setDepthWrite(true);\r\n engine.setColorWrite(true);\r\n\r\n engine.currentRenderPassId = currentRenderPassId;\r\n }\r\n\r\n /**\r\n * Dispose and release the resources attached to this renderer.\r\n */\r\n public dispose(): void {\r\n if (this._renderPassIdForOcclusionQuery !== undefined) {\r\n this.scene.getEngine().releaseRenderPassId(this._renderPassIdForOcclusionQuery);\r\n this._renderPassIdForOcclusionQuery = undefined as any;\r\n }\r\n\r\n if (!this._colorShader) {\r\n return;\r\n }\r\n\r\n this.onBeforeBoxRenderingObservable.clear();\r\n this.onAfterBoxRenderingObservable.clear();\r\n this.onResourcesReadyObservable.clear();\r\n\r\n this.renderList.dispose();\r\n\r\n this._colorShader.dispose();\r\n this._colorShaderForOcclusionQuery.dispose();\r\n\r\n this._uniformBufferFront.dispose();\r\n this._uniformBufferBack.dispose();\r\n\r\n var buffer = this._vertexBuffers[VertexBuffer.PositionKind];\r\n if (buffer) {\r\n buffer.dispose();\r\n this._vertexBuffers[VertexBuffer.PositionKind] = null;\r\n }\r\n this.scene.getEngine()._releaseBuffer(this._indexBuffer);\r\n\r\n if (this._fillIndexBuffer) {\r\n this.scene.getEngine()._releaseBuffer(this._fillIndexBuffer);\r\n this._fillIndexBuffer = null;\r\n }\r\n }\r\n}\r\n"]}
@@ -34,7 +34,7 @@ export declare class DepthRenderer {
34
34
  /**
35
35
  * Sets a specific material to be used to render a mesh/a list of meshes by the depth renderer
36
36
  * @param mesh mesh or array of meshes
37
- * @param material material or array of materials to use by the depth renderer. If undefined is passed, the specific material created by the depth renderer will be used.
37
+ * @param material material to use by the depth render when rendering the mesh(es). If undefined is passed, the specific material created by the depth renderer will be used.
38
38
  */
39
39
  setMaterialForRendering(mesh: AbstractMesh | AbstractMesh[], material?: Material): void;
40
40
  /**
@@ -202,7 +202,7 @@ var DepthRenderer = /** @class */ (function () {
202
202
  /**
203
203
  * Sets a specific material to be used to render a mesh/a list of meshes by the depth renderer
204
204
  * @param mesh mesh or array of meshes
205
- * @param material material or array of materials to use by the depth renderer. If undefined is passed, the specific material created by the depth renderer will be used.
205
+ * @param material material to use by the depth render when rendering the mesh(es). If undefined is passed, the specific material created by the depth renderer will be used.
206
206
  */
207
207
  DepthRenderer.prototype.setMaterialForRendering = function (mesh, material) {
208
208
  this._depthMap.setMaterialForRendering(mesh, material);
@@ -222,7 +222,7 @@ var DepthRenderer = /** @class */ (function () {
222
222
  return renderingMaterial.isReadyForSubMesh(mesh, subMesh, useInstances);
223
223
  }
224
224
  var material = subMesh.getMaterial();
225
- if (material.disableDepthWrite) {
225
+ if (!material || material.disableDepthWrite) {
226
226
  return false;
227
227
  }
228
228
  var defines = [];