@babylonjs/core 6.29.0 → 6.29.2

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 (300) hide show
  1. package/Actions/abstractActionManager.js +1 -1
  2. package/Actions/abstractActionManager.js.map +1 -1
  3. package/Actions/actionManager.js +3 -3
  4. package/Actions/actionManager.js.map +1 -1
  5. package/Animations/animatable.js +1 -1
  6. package/Animations/animatable.js.map +1 -1
  7. package/Animations/animation.js +2 -2
  8. package/Animations/animation.js.map +1 -1
  9. package/Animations/pathCursor.js +1 -1
  10. package/Animations/pathCursor.js.map +1 -1
  11. package/Audio/audioSceneComponent.js +2 -2
  12. package/Audio/audioSceneComponent.js.map +1 -1
  13. package/Audio/soundTrack.js +1 -1
  14. package/Audio/soundTrack.js.map +1 -1
  15. package/Behaviors/Meshes/fadeInOutBehavior.js +1 -2
  16. package/Behaviors/Meshes/fadeInOutBehavior.js.map +1 -1
  17. package/Bones/bone.js +2 -2
  18. package/Bones/bone.js.map +1 -1
  19. package/Bones/skeleton.js +2 -2
  20. package/Bones/skeleton.js.map +1 -1
  21. package/Cameras/arcRotateCamera.js +13 -37
  22. package/Cameras/arcRotateCamera.js.map +1 -1
  23. package/Cameras/camera.d.ts +0 -21
  24. package/Cameras/camera.js +1 -36
  25. package/Cameras/camera.js.map +1 -1
  26. package/Cameras/targetCamera.js +30 -51
  27. package/Cameras/targetCamera.js.map +1 -1
  28. package/Culling/Octrees/octree.js +1 -1
  29. package/Culling/Octrees/octree.js.map +1 -1
  30. package/Culling/Octrees/octreeBlock.js +1 -1
  31. package/Culling/Octrees/octreeBlock.js.map +1 -1
  32. package/Culling/ray.js +1 -1
  33. package/Culling/ray.js.map +1 -1
  34. package/Debug/axesViewer.d.ts +3 -1
  35. package/Debug/axesViewer.js +14 -11
  36. package/Debug/axesViewer.js.map +1 -1
  37. package/Engines/Extensions/engine.multiRender.js +8 -8
  38. package/Engines/Extensions/engine.multiRender.js.map +1 -1
  39. package/Engines/Extensions/engine.textureSelector.js +1 -1
  40. package/Engines/Extensions/engine.textureSelector.js.map +1 -1
  41. package/Engines/Processors/shaderCodeInliner.js +1 -1
  42. package/Engines/Processors/shaderCodeInliner.js.map +1 -1
  43. package/Engines/WebGPU/Extensions/engine.computeShader.js +2 -10
  44. package/Engines/WebGPU/Extensions/engine.computeShader.js.map +1 -1
  45. package/Engines/WebGPU/Extensions/engine.debugging.js +3 -6
  46. package/Engines/WebGPU/Extensions/engine.debugging.js.map +1 -1
  47. package/Engines/WebGPU/Extensions/engine.dynamicTexture.js +1 -1
  48. package/Engines/WebGPU/Extensions/engine.dynamicTexture.js.map +1 -1
  49. package/Engines/WebGPU/Extensions/engine.multiRender.js +9 -14
  50. package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
  51. package/Engines/WebGPU/Extensions/engine.query.js +2 -6
  52. package/Engines/WebGPU/Extensions/engine.query.js.map +1 -1
  53. package/Engines/WebGPU/Extensions/engine.renderTarget.js +6 -10
  54. package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
  55. package/Engines/WebGPU/Extensions/engine.storageBuffer.js +1 -1
  56. package/Engines/WebGPU/Extensions/engine.storageBuffer.js.map +1 -1
  57. package/Engines/WebGPU/Extensions/engine.videoTexture.js +2 -2
  58. package/Engines/WebGPU/Extensions/engine.videoTexture.js.map +1 -1
  59. package/Engines/WebGPU/webgpuBundleList.js +2 -1
  60. package/Engines/WebGPU/webgpuBundleList.js.map +1 -1
  61. package/Engines/WebGPU/webgpuCacheBindGroups.js +1 -1
  62. package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
  63. package/Engines/WebGPU/webgpuCacheRenderPipeline.d.ts +1 -1
  64. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +4 -7
  65. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  66. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.d.ts +1 -1
  67. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js +2 -2
  68. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js.map +1 -1
  69. package/Engines/WebGPU/webgpuCacheSampler.d.ts +1 -1
  70. package/Engines/WebGPU/webgpuCacheSampler.js +5 -5
  71. package/Engines/WebGPU/webgpuCacheSampler.js.map +1 -1
  72. package/Engines/WebGPU/webgpuClearQuad.js +2 -2
  73. package/Engines/WebGPU/webgpuClearQuad.js.map +1 -1
  74. package/Engines/WebGPU/webgpuHardwareTexture.d.ts +0 -12
  75. package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
  76. package/Engines/WebGPU/webgpuMaterialContext.d.ts +3 -3
  77. package/Engines/WebGPU/webgpuMaterialContext.js +14 -10
  78. package/Engines/WebGPU/webgpuMaterialContext.js.map +1 -1
  79. package/Engines/WebGPU/webgpuOcclusionQuery.js +1 -12
  80. package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
  81. package/Engines/WebGPU/webgpuSnapshotRendering.d.ts +5 -8
  82. package/Engines/WebGPU/webgpuSnapshotRendering.js +24 -33
  83. package/Engines/WebGPU/webgpuSnapshotRendering.js.map +1 -1
  84. package/Engines/WebGPU/webgpuTextureHelper.d.ts +2 -1
  85. package/Engines/WebGPU/webgpuTextureHelper.js +11 -16
  86. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  87. package/Engines/constants.d.ts +2 -2
  88. package/Engines/constants.js +2 -2
  89. package/Engines/constants.js.map +1 -1
  90. package/Engines/engine.js +2 -2
  91. package/Engines/engine.js.map +1 -1
  92. package/Engines/engineCapabilities.d.ts +2 -0
  93. package/Engines/engineCapabilities.js.map +1 -1
  94. package/Engines/engineStore.js +1 -1
  95. package/Engines/engineStore.js.map +1 -1
  96. package/Engines/nativeEngine.js +1 -0
  97. package/Engines/nativeEngine.js.map +1 -1
  98. package/Engines/nullEngine.js +1 -0
  99. package/Engines/nullEngine.js.map +1 -1
  100. package/Engines/thinEngine.js +6 -2
  101. package/Engines/thinEngine.js.map +1 -1
  102. package/Engines/webgpuEngine.d.ts +27 -32
  103. package/Engines/webgpuEngine.js +237 -317
  104. package/Engines/webgpuEngine.js.map +1 -1
  105. package/Gizmos/boundingBoxGizmo.js +1 -1
  106. package/Gizmos/boundingBoxGizmo.js.map +1 -1
  107. package/Gizmos/cameraGizmo.d.ts +3 -1
  108. package/Gizmos/cameraGizmo.js +11 -8
  109. package/Gizmos/cameraGizmo.js.map +1 -1
  110. package/Layers/effectLayerSceneComponent.js +2 -2
  111. package/Layers/effectLayerSceneComponent.js.map +1 -1
  112. package/Layers/layerSceneComponent.js +1 -1
  113. package/Layers/layerSceneComponent.js.map +1 -1
  114. package/LensFlares/lensFlareSystem.js +1 -1
  115. package/LensFlares/lensFlareSystem.js.map +1 -1
  116. package/LensFlares/lensFlareSystemSceneComponent.js +2 -2
  117. package/LensFlares/lensFlareSystemSceneComponent.js.map +1 -1
  118. package/Lights/Shadows/shadowGenerator.js +1 -1
  119. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  120. package/Lights/light.js +2 -2
  121. package/Lights/light.js.map +1 -1
  122. package/Loading/Plugins/babylonFileLoader.js +1 -1
  123. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  124. package/Loading/sceneLoader.js +3 -3
  125. package/Loading/sceneLoader.js.map +1 -1
  126. package/Materials/GreasedLine/greasedLineMaterialDefaults.d.ts +2 -2
  127. package/Materials/GreasedLine/greasedLineMaterialDefaults.js.map +1 -1
  128. package/Materials/GreasedLine/greasedLineSimpleMaterial.js +4 -1
  129. package/Materials/GreasedLine/greasedLineSimpleMaterial.js.map +1 -1
  130. package/Materials/Node/Blocks/Dual/lightBlock.js +1 -1
  131. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  132. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +1 -1
  133. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  134. package/Materials/Node/nodeMaterial.js +1 -1
  135. package/Materials/Node/nodeMaterial.js.map +1 -1
  136. package/Materials/Node/nodeMaterialBlockConnectionPoint.js +2 -2
  137. package/Materials/Node/nodeMaterialBlockConnectionPoint.js.map +1 -1
  138. package/Materials/Node/nodeMaterialBuildState.js +4 -4
  139. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  140. package/Materials/Node/nodeMaterialBuildStateSharedData.js +12 -12
  141. package/Materials/Node/nodeMaterialBuildStateSharedData.js.map +1 -1
  142. package/Materials/Textures/Procedurals/proceduralTextureSceneComponent.js +1 -1
  143. package/Materials/Textures/Procedurals/proceduralTextureSceneComponent.js.map +1 -1
  144. package/Materials/Textures/baseTexture.js +1 -1
  145. package/Materials/Textures/baseTexture.js.map +1 -1
  146. package/Materials/Textures/dynamicTexture.d.ts +4 -3
  147. package/Materials/Textures/dynamicTexture.js +10 -6
  148. package/Materials/Textures/dynamicTexture.js.map +1 -1
  149. package/Materials/Textures/externalTexture.d.ts +4 -0
  150. package/Materials/Textures/externalTexture.js +4 -0
  151. package/Materials/Textures/externalTexture.js.map +1 -1
  152. package/Materials/Textures/internalTexture.d.ts +0 -4
  153. package/Materials/Textures/internalTexture.js.map +1 -1
  154. package/Materials/Textures/renderTargetTexture.js +1 -1
  155. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  156. package/Materials/Textures/textureSampler.d.ts +4 -0
  157. package/Materials/Textures/textureSampler.js.map +1 -1
  158. package/Materials/material.js +1 -1
  159. package/Materials/material.js.map +1 -1
  160. package/Materials/multiMaterial.js +1 -1
  161. package/Materials/multiMaterial.js.map +1 -1
  162. package/Materials/shaderMaterial.js +1 -1
  163. package/Materials/shaderMaterial.js.map +1 -1
  164. package/Maths/math.path.d.ts +9 -1
  165. package/Maths/math.path.js +23 -7
  166. package/Maths/math.path.js.map +1 -1
  167. package/Maths/math.vector.d.ts +93 -0
  168. package/Maths/math.vector.js +157 -26
  169. package/Maths/math.vector.js.map +1 -1
  170. package/Meshes/Builders/cylinderBuilder.js +5 -5
  171. package/Meshes/Builders/cylinderBuilder.js.map +1 -1
  172. package/Meshes/Builders/decalBuilder.js +1 -1
  173. package/Meshes/Builders/decalBuilder.js.map +1 -1
  174. package/Meshes/Builders/discBuilder.js +4 -4
  175. package/Meshes/Builders/discBuilder.js.map +1 -1
  176. package/Meshes/Builders/goldbergBuilder.js +4 -4
  177. package/Meshes/Builders/goldbergBuilder.js.map +1 -1
  178. package/Meshes/Builders/groundBuilder.js +4 -4
  179. package/Meshes/Builders/groundBuilder.js.map +1 -1
  180. package/Meshes/Builders/icoSphereBuilder.js +4 -4
  181. package/Meshes/Builders/icoSphereBuilder.js.map +1 -1
  182. package/Meshes/Builders/latheBuilder.js +1 -1
  183. package/Meshes/Builders/latheBuilder.js.map +1 -1
  184. package/Meshes/Builders/linesBuilder.js +2 -2
  185. package/Meshes/Builders/linesBuilder.js.map +1 -1
  186. package/Meshes/Builders/polyhedronBuilder.js +6 -6
  187. package/Meshes/Builders/polyhedronBuilder.js.map +1 -1
  188. package/Meshes/Builders/shapeBuilder.js +1 -1
  189. package/Meshes/Builders/shapeBuilder.js.map +1 -1
  190. package/Meshes/Builders/textBuilder.js +13 -5
  191. package/Meshes/Builders/textBuilder.js.map +1 -1
  192. package/Meshes/Builders/torusKnotBuilder.js +4 -4
  193. package/Meshes/Builders/torusKnotBuilder.js.map +1 -1
  194. package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.js +1 -1
  195. package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.js.map +1 -1
  196. package/Meshes/Node/Blocks/Sources/boxBlock.js +1 -0
  197. package/Meshes/Node/Blocks/Sources/boxBlock.js.map +1 -1
  198. package/Meshes/Node/Blocks/Sources/capsuleBlock.js +1 -0
  199. package/Meshes/Node/Blocks/Sources/capsuleBlock.js.map +1 -1
  200. package/Meshes/Node/Blocks/Sources/cylinderBlock.js +1 -0
  201. package/Meshes/Node/Blocks/Sources/cylinderBlock.js.map +1 -1
  202. package/Meshes/Node/Blocks/Sources/discBlock.js +1 -0
  203. package/Meshes/Node/Blocks/Sources/discBlock.js.map +1 -1
  204. package/Meshes/Node/Blocks/Sources/gridBlock.js +1 -0
  205. package/Meshes/Node/Blocks/Sources/gridBlock.js.map +1 -1
  206. package/Meshes/Node/Blocks/Sources/icoSphereBlock.js +1 -0
  207. package/Meshes/Node/Blocks/Sources/icoSphereBlock.js.map +1 -1
  208. package/Meshes/Node/Blocks/Sources/planeBlock.js +1 -0
  209. package/Meshes/Node/Blocks/Sources/planeBlock.js.map +1 -1
  210. package/Meshes/Node/Blocks/Sources/sphereBlock.js +1 -0
  211. package/Meshes/Node/Blocks/Sources/sphereBlock.js.map +1 -1
  212. package/Meshes/Node/Blocks/Sources/torusBlock.js +1 -0
  213. package/Meshes/Node/Blocks/Sources/torusBlock.js.map +1 -1
  214. package/Meshes/Node/nodeGeometry.js +1 -1
  215. package/Meshes/Node/nodeGeometry.js.map +1 -1
  216. package/Meshes/Node/nodeGeometryBlock.js +1 -0
  217. package/Meshes/Node/nodeGeometryBlock.js.map +1 -1
  218. package/Meshes/Node/nodeGeometryBlockConnectionPoint.d.ts +14 -0
  219. package/Meshes/Node/nodeGeometryBlockConnectionPoint.js +32 -5
  220. package/Meshes/Node/nodeGeometryBlockConnectionPoint.js.map +1 -1
  221. package/Meshes/abstractMesh.js +5 -5
  222. package/Meshes/abstractMesh.js.map +1 -1
  223. package/Meshes/csg.js +5 -5
  224. package/Meshes/csg.js.map +1 -1
  225. package/Meshes/geodesicMesh.js +1 -1
  226. package/Meshes/geodesicMesh.js.map +1 -1
  227. package/Meshes/mesh.js +14 -10
  228. package/Meshes/mesh.js.map +1 -1
  229. package/Meshes/mesh.vertexData.js +1 -1
  230. package/Meshes/mesh.vertexData.js.map +1 -1
  231. package/Meshes/meshSimplification.js +2 -2
  232. package/Meshes/meshSimplification.js.map +1 -1
  233. package/Meshes/polygonMesh.js +7 -7
  234. package/Meshes/polygonMesh.js.map +1 -1
  235. package/Meshes/thinInstanceMesh.js +1 -1
  236. package/Meshes/thinInstanceMesh.js.map +1 -1
  237. package/Misc/codeStringParsingTools.d.ts +2 -1
  238. package/Misc/codeStringParsingTools.js +3 -2
  239. package/Misc/codeStringParsingTools.js.map +1 -1
  240. package/Misc/dds.js +1 -1
  241. package/Misc/dds.js.map +1 -1
  242. package/Misc/filesInput.js +1 -1
  243. package/Misc/filesInput.js.map +1 -1
  244. package/Misc/greasedLineTools.d.ts +2 -1
  245. package/Misc/greasedLineTools.js +2 -0
  246. package/Misc/greasedLineTools.js.map +1 -1
  247. package/Misc/precisionDate.js +4 -2
  248. package/Misc/precisionDate.js.map +1 -1
  249. package/Misc/sceneOptimizer.js +2 -2
  250. package/Misc/sceneOptimizer.js.map +1 -1
  251. package/Morph/morphTarget.js +1 -1
  252. package/Morph/morphTarget.js.map +1 -1
  253. package/Particles/gpuParticleSystem.js +1 -1
  254. package/Particles/gpuParticleSystem.js.map +1 -1
  255. package/Particles/particleSystem.js +2 -2
  256. package/Particles/particleSystem.js.map +1 -1
  257. package/Particles/particleSystemComponent.js +2 -2
  258. package/Particles/particleSystemComponent.js.map +1 -1
  259. package/Particles/particleSystemSet.js +1 -1
  260. package/Particles/particleSystemSet.js.map +1 -1
  261. package/Physics/v1/Plugins/cannonJSPlugin.js +2 -2
  262. package/Physics/v1/Plugins/cannonJSPlugin.js.map +1 -1
  263. package/Physics/v2/Plugins/havokPlugin.js +3 -1
  264. package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
  265. package/PostProcesses/postProcess.d.ts +1 -0
  266. package/PostProcesses/postProcess.js +30 -23
  267. package/PostProcesses/postProcess.js.map +1 -1
  268. package/PostProcesses/volumetricLightScatteringPostProcess.js +2 -2
  269. package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
  270. package/Probes/reflectionProbe.js +1 -1
  271. package/Probes/reflectionProbe.js.map +1 -1
  272. package/Rendering/edgesRenderer.js +3 -3
  273. package/Rendering/edgesRenderer.js.map +1 -1
  274. package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.js +2 -1
  275. package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.js.map +1 -1
  276. package/Rendering/prePassRenderer.js +8 -4
  277. package/Rendering/prePassRenderer.js.map +1 -1
  278. package/Shaders/ShadersInclude/hdrFilteringFunctions.js +2 -1
  279. package/Shaders/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
  280. package/Sprites/spriteManager.js +1 -1
  281. package/Sprites/spriteManager.js.map +1 -1
  282. package/Sprites/spriteMap.js +4 -4
  283. package/Sprites/spriteMap.js.map +1 -1
  284. package/Sprites/spriteSceneComponent.js +2 -2
  285. package/Sprites/spriteSceneComponent.js.map +1 -1
  286. package/XR/features/WebXRFeaturePointSystem.js +2 -2
  287. package/XR/features/WebXRFeaturePointSystem.js.map +1 -1
  288. package/abstractScene.js +16 -16
  289. package/abstractScene.js.map +1 -1
  290. package/assetContainer.js +2 -2
  291. package/assetContainer.js.map +1 -1
  292. package/node.js +2 -2
  293. package/node.js.map +1 -1
  294. package/package.json +1 -1
  295. package/scene.d.ts +0 -4
  296. package/scene.js +6 -12
  297. package/scene.js.map +1 -1
  298. package/Engines/WebGPU/webgpuRenderPassWrapper.d.ts +0 -13
  299. package/Engines/WebGPU/webgpuRenderPassWrapper.js +0 -18
  300. package/Engines/WebGPU/webgpuRenderPassWrapper.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"effectLayerSceneComponent.js","sourceRoot":"","sources":["../../../../dev/core/src/Layers/effectLayerSceneComponent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAM3C,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,wCAAwC;AACxC,aAAa,CAAC,SAAS,CAAC,uBAAuB,CAAC,gBAAgB,EAAE,CAAC,UAAe,EAAE,KAAY,EAAE,SAAyB,EAAE,OAAe,EAAE,EAAE;IAC5I,IAAI,UAAU,CAAC,YAAY,EAAE;QACzB,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;YACzB,SAAS,CAAC,YAAY,GAAG,IAAI,KAAK,EAAe,CAAC;SACrD;QAED,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,UAAU,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACjE,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;YACtF,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SAC5C;KACJ;AACL,CAAC,CAAC,CAAC;AA0BH,aAAa,CAAC,SAAS,CAAC,iBAAiB,GAAG,UAAU,QAAqB;IACvE,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAClD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;QACd,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;KACtC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,aAAa,CAAC,SAAS,CAAC,cAAc,GAAG,UAAU,cAA2B;IAC1E,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAC3C,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,OAAO,yBAAyB;IAgBlC;;;OAGG;IACH,YAAY,KAAa;QAnBzB;;WAEG;QACa,SAAI,GAAG,uBAAuB,CAAC,gBAAgB,CAAC;QAQxD,mBAAc,GAAG,KAAK,CAAC;QACvB,iBAAY,GAAG,KAAK,CAAC;QACrB,0BAAqB,GAAG,KAAK,CAAC;QAOlC,IAAI,CAAC,KAAK,GAAG,KAAK,IAAW,WAAW,CAAC,gBAAgB,CAAC;QAC1D,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACb,OAAO;SACV;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,KAAK,EAAe,CAAC;IACvD,CAAC;IAED;;OAEG;IACI,QAAQ;QACX,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,YAAY,CAAC,uBAAuB,CAAC,+BAA+B,EAAE,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAElI,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,YAAY,CAAC,uBAAuB,CAAC,uCAAuC,EAAE,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAErJ,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,YAAY,CAAC,uBAAuB,CAAC,iCAAiC,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAElI,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,YAAY,CAAC,uBAAuB,CAAC,6CAA6C,EAAE,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAE7J,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,YAAY,CAAC,uBAAuB,CAAC,gCAAgC,EAAE,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QACpI,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,YAAY,CAAC,uBAAuB,CAAC,qCAAqC,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACzI,CAAC;IAED;;;OAGG;IACI,OAAO;QACV,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;QACvC,KAAK,MAAM,WAAW,IAAI,MAAM,EAAE;YAC9B,WAAW,CAAC,QAAQ,EAAE,CAAC;SAC1B;IACL,CAAC;IAED;;;OAGG;IACI,SAAS,CAAC,mBAAwB;QACrC,gBAAgB;QAChB,mBAAmB,CAAC,YAAY,GAAG,EAAE,CAAC;QAEtC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;QACvC,KAAK,MAAM,WAAW,IAAI,MAAM,EAAE;YAC9B,IAAI,WAAW,CAAC,SAAS,EAAE;gBACvB,mBAAmB,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC;aAClE;SACJ;IACL,CAAC;IAED;;;OAGG;IACI,gBAAgB,CAAC,SAAwB;QAC5C,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;YACzB,OAAO;SACV;QACD,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACjC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;OAIG;IACI,mBAAmB,CAAC,SAAwB,EAAE,OAAiB;QAClE,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;YACzB,OAAO;SACV;QACD,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACjC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;YAChC,IAAI,OAAO,EAAE;gBACT,CAAC,CAAC,OAAO,EAAE,CAAC;aACf;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACI,OAAO;QACV,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;QACvC,OAAO,MAAM,CAAC,MAAM,EAAE;YAClB,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SACvB;IACL,CAAC;IAEO,eAAe,CAAC,IAAkB,EAAE,0BAAmC;QAC3E,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC;QAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;QACvC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YACxB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBACtB,SAAS;aACZ;YAED,MAAM,YAAY,GAA8B,KAAM,CAAC,YAAY,CAAC;YACpE,IAAI,CAAC,OAAO,CAAC,mBAAmB,GAAG,YAAY,CAAC,YAAY,CAAC;YAE7D,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,0BAA0B,CAAC,EAAE;oBACrD,IAAI,CAAC,OAAO,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;oBACvD,OAAO,KAAK,CAAC;iBAChB;aACJ;SACJ;QACD,IAAI,CAAC,OAAO,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;QACvD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,kBAAkB,CAAC,MAAc;QACrC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAE1B,IAAI,UAAU,GAAG,KAAK,CAAC;QAEvB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;QACvC,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC7D,KAAK,MAAM,WAAW,IAAI,MAAM,EAAE;gBAC9B,IACI,WAAW,CAAC,YAAY,EAAE;oBAC1B,CAAC,CAAC,WAAW,CAAC,MAAM;wBAChB,CAAC,WAAW,CAAC,MAAM,CAAC,aAAa,KAAK,MAAM,CAAC,aAAa,IAAI,MAAM,KAAK,WAAW,CAAC,MAAM,CAAC;wBAC5F,CAAC,WAAW,CAAC,MAAM,CAAC,aAAa,KAAK,MAAM,CAAC,aAAa,IAAI,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EACzH;oBACE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;oBAC3B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC;oBAEnE,MAAM,YAAY,GAA8B,WAAY,CAAC,YAAY,CAAC;oBAC1E,IAAI,YAAY,CAAC,aAAa,EAAE,EAAE;wBAC9B,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;wBAC/B,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;wBAClC,UAAU,GAAG,IAAI,CAAC;qBACrB;iBACJ;aACJ;YAED,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;SAClC;QAED,OAAO,UAAU,CAAC;IACtB,CAAC;IAEO,WAAW;QACf,gCAAgC;QAChC,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;SACvC;IACL,CAAC;IAEO,eAAe;QACnB,+BAA+B;QAC/B,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;SAC7D;IACL,CAAC;IAEO,KAAK,CAAC,gBAAwB;QAClC,IAAI,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAEnC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;YACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACpC,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC9B,IAAI,WAAW,CAAC,gBAAgB,KAAK,gBAAgB,EAAE;oBACnD,IAAI,WAAW,CAAC,YAAY,EAAE,EAAE;wBAC5B,WAAW,CAAC,MAAM,EAAE,CAAC;qBACxB;iBACJ;aACJ;YACD,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;SACrC;IACL,CAAC;IAEO,WAAW;QACf,IAAI,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;SAClB;IACL,CAAC;IACO,mBAAmB,CAAC,KAAa;QACrC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,0BAA0B,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE;YACjE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SACrB;IACL,CAAC;CACJ;AAED,WAAW,CAAC,6BAA6B,GAAG,CAAC,KAAY,EAAE,EAAE;IACzD,IAAI,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,uBAAuB,CAAC,gBAAgB,CAA8B,CAAC;IAC3G,IAAI,CAAC,SAAS,EAAE;QACZ,SAAS,GAAG,IAAI,yBAAyB,CAAC,KAAK,CAAC,CAAC;QACjD,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;KAClC;AACL,CAAC,CAAC","sourcesContent":["import { Camera } from \"../Cameras/camera\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { Engine } from \"../Engines/engine\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport type { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport type { ISceneSerializableComponent } from \"../sceneComponent\";\r\nimport { SceneComponentConstants } from \"../sceneComponent\";\r\nimport { EffectLayer } from \"./effectLayer\";\r\nimport { AbstractScene } from \"../abstractScene\";\r\nimport type { AssetContainer } from \"../assetContainer\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\n// Adds the parser to the scene parsers.\r\nAbstractScene.AddParser(SceneComponentConstants.NAME_EFFECTLAYER, (parsedData: any, scene: Scene, container: AssetContainer, rootUrl: string) => {\r\n if (parsedData.effectLayers) {\r\n if (!container.effectLayers) {\r\n container.effectLayers = new Array<EffectLayer>();\r\n }\r\n\r\n for (let index = 0; index < parsedData.effectLayers.length; index++) {\r\n const effectLayer = EffectLayer.Parse(parsedData.effectLayers[index], scene, rootUrl);\r\n container.effectLayers.push(effectLayer);\r\n }\r\n }\r\n});\r\n\r\ndeclare module \"../abstractScene\" {\r\n export interface AbstractScene {\r\n /**\r\n * The list of effect layers (highlights/glow) added to the scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/highlightLayer\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/glowLayer\r\n */\r\n effectLayers: Array<EffectLayer>;\r\n\r\n /**\r\n * Removes the given effect layer from this scene.\r\n * @param toRemove defines the effect layer to remove\r\n * @returns the index of the removed effect layer\r\n */\r\n removeEffectLayer(toRemove: EffectLayer): number;\r\n\r\n /**\r\n * Adds the given effect layer to this scene\r\n * @param newEffectLayer defines the effect layer to add\r\n */\r\n addEffectLayer(newEffectLayer: EffectLayer): void;\r\n }\r\n}\r\n\r\nAbstractScene.prototype.removeEffectLayer = function (toRemove: EffectLayer): number {\r\n const index = this.effectLayers.indexOf(toRemove);\r\n if (index !== -1) {\r\n this.effectLayers.splice(index, 1);\r\n }\r\n\r\n return index;\r\n};\r\n\r\nAbstractScene.prototype.addEffectLayer = function (newEffectLayer: EffectLayer): void {\r\n this.effectLayers.push(newEffectLayer);\r\n};\r\n\r\n/**\r\n * Defines the layer scene component responsible to manage any effect layers\r\n * in a given scene.\r\n */\r\nexport class EffectLayerSceneComponent implements ISceneSerializableComponent {\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_EFFECTLAYER;\r\n\r\n /**\r\n * The scene the component belongs to.\r\n */\r\n public scene: Scene;\r\n\r\n private _engine: Engine;\r\n private _renderEffects = false;\r\n private _needStencil = false;\r\n private _previousStencilState = false;\r\n\r\n /**\r\n * Creates a new instance of the component for the given scene\r\n * @param scene Defines the scene to register the component in\r\n */\r\n constructor(scene?: Scene) {\r\n this.scene = scene || <Scene>EngineStore.LastCreatedScene;\r\n if (!this.scene) {\r\n return;\r\n }\r\n this._engine = this.scene.getEngine();\r\n this.scene.effectLayers = new Array<EffectLayer>();\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._isReadyForMeshStage.registerStep(SceneComponentConstants.STEP_ISREADYFORMESH_EFFECTLAYER, this, this._isReadyForMesh);\r\n\r\n this.scene._cameraDrawRenderTargetStage.registerStep(SceneComponentConstants.STEP_CAMERADRAWRENDERTARGET_EFFECTLAYER, this, this._renderMainTexture);\r\n\r\n this.scene._beforeCameraDrawStage.registerStep(SceneComponentConstants.STEP_BEFORECAMERADRAW_EFFECTLAYER, this, this._setStencil);\r\n\r\n this.scene._afterRenderingGroupDrawStage.registerStep(SceneComponentConstants.STEP_AFTERRENDERINGGROUPDRAW_EFFECTLAYER_DRAW, this, this._drawRenderingGroup);\r\n\r\n this.scene._afterCameraDrawStage.registerStep(SceneComponentConstants.STEP_AFTERCAMERADRAW_EFFECTLAYER, this, this._setStencilBack);\r\n this.scene._afterCameraDrawStage.registerStep(SceneComponentConstants.STEP_AFTERCAMERADRAW_EFFECTLAYER_DRAW, this, this._drawCamera);\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 const layers = this.scene.effectLayers;\r\n for (const effectLayer of layers) {\r\n effectLayer._rebuild();\r\n }\r\n }\r\n\r\n /**\r\n * Serializes the component data to the specified json object\r\n * @param serializationObject The object to serialize to\r\n */\r\n public serialize(serializationObject: any): void {\r\n // Effect layers\r\n serializationObject.effectLayers = [];\r\n\r\n const layers = this.scene.effectLayers;\r\n for (const effectLayer of layers) {\r\n if (effectLayer.serialize) {\r\n serializationObject.effectLayers.push(effectLayer.serialize());\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Adds all the elements from the container to the scene\r\n * @param container the container holding the elements\r\n */\r\n public addFromContainer(container: AbstractScene): void {\r\n if (!container.effectLayers) {\r\n return;\r\n }\r\n container.effectLayers.forEach((o) => {\r\n this.scene.addEffectLayer(o);\r\n });\r\n }\r\n\r\n /**\r\n * Removes all the elements in the container from the scene\r\n * @param container contains the elements to remove\r\n * @param dispose if the removed element should be disposed (default: false)\r\n */\r\n public removeFromContainer(container: AbstractScene, dispose?: boolean): void {\r\n if (!container.effectLayers) {\r\n return;\r\n }\r\n container.effectLayers.forEach((o) => {\r\n this.scene.removeEffectLayer(o);\r\n if (dispose) {\r\n o.dispose();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Disposes the component and the associated resources.\r\n */\r\n public dispose(): void {\r\n const layers = this.scene.effectLayers;\r\n while (layers.length) {\r\n layers[0].dispose();\r\n }\r\n }\r\n\r\n private _isReadyForMesh(mesh: AbstractMesh, hardwareInstancedRendering: boolean): boolean {\r\n const currentRenderPassId = this._engine.currentRenderPassId;\r\n const layers = this.scene.effectLayers;\r\n for (const layer of layers) {\r\n if (!layer.hasMesh(mesh)) {\r\n continue;\r\n }\r\n\r\n const renderTarget = <RenderTargetTexture>(<any>layer)._mainTexture;\r\n this._engine.currentRenderPassId = renderTarget.renderPassId;\r\n\r\n for (const subMesh of mesh.subMeshes) {\r\n if (!layer.isReady(subMesh, hardwareInstancedRendering)) {\r\n this._engine.currentRenderPassId = currentRenderPassId;\r\n return false;\r\n }\r\n }\r\n }\r\n this._engine.currentRenderPassId = currentRenderPassId;\r\n return true;\r\n }\r\n\r\n private _renderMainTexture(camera: Camera): boolean {\r\n this._renderEffects = false;\r\n this._needStencil = false;\r\n\r\n let needRebind = false;\r\n\r\n const layers = this.scene.effectLayers;\r\n if (layers && layers.length > 0) {\r\n this._previousStencilState = this._engine.getStencilBuffer();\r\n for (const effectLayer of layers) {\r\n if (\r\n effectLayer.shouldRender() &&\r\n (!effectLayer.camera ||\r\n (effectLayer.camera.cameraRigMode === Camera.RIG_MODE_NONE && camera === effectLayer.camera) ||\r\n (effectLayer.camera.cameraRigMode !== Camera.RIG_MODE_NONE && effectLayer.camera._rigCameras.indexOf(camera) > -1))\r\n ) {\r\n this._renderEffects = true;\r\n this._needStencil = this._needStencil || effectLayer.needStencil();\r\n\r\n const renderTarget = <RenderTargetTexture>(<any>effectLayer)._mainTexture;\r\n if (renderTarget._shouldRender()) {\r\n this.scene.incrementRenderId();\r\n renderTarget.render(false, false);\r\n needRebind = true;\r\n }\r\n }\r\n }\r\n\r\n this.scene.incrementRenderId();\r\n }\r\n\r\n return needRebind;\r\n }\r\n\r\n private _setStencil() {\r\n // Activate effect Layer stencil\r\n if (this._needStencil) {\r\n this._engine.setStencilBuffer(true);\r\n }\r\n }\r\n\r\n private _setStencilBack() {\r\n // Restore effect Layer stencil\r\n if (this._needStencil) {\r\n this._engine.setStencilBuffer(this._previousStencilState);\r\n }\r\n }\r\n\r\n private _draw(renderingGroupId: number): void {\r\n if (this._renderEffects) {\r\n this._engine.setDepthBuffer(false);\r\n\r\n const layers = this.scene.effectLayers;\r\n for (let i = 0; i < layers.length; i++) {\r\n const effectLayer = layers[i];\r\n if (effectLayer.renderingGroupId === renderingGroupId) {\r\n if (effectLayer.shouldRender()) {\r\n effectLayer.render();\r\n }\r\n }\r\n }\r\n this._engine.setDepthBuffer(true);\r\n }\r\n }\r\n\r\n private _drawCamera(): void {\r\n if (this._renderEffects) {\r\n this._draw(-1);\r\n }\r\n }\r\n private _drawRenderingGroup(index: number): void {\r\n if (!this.scene._isInIntermediateRendering() && this._renderEffects) {\r\n this._draw(index);\r\n }\r\n }\r\n}\r\n\r\nEffectLayer._SceneComponentInitialization = (scene: Scene) => {\r\n let component = scene._getComponent(SceneComponentConstants.NAME_EFFECTLAYER) as EffectLayerSceneComponent;\r\n if (!component) {\r\n component = new EffectLayerSceneComponent(scene);\r\n scene._addComponent(component);\r\n }\r\n};\r\n"]}
1
+ {"version":3,"file":"effectLayerSceneComponent.js","sourceRoot":"","sources":["../../../../dev/core/src/Layers/effectLayerSceneComponent.ts"],"names":[],"mappings":"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","sourcesContent":["import { Camera } from \"../Cameras/camera\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { Engine } from \"../Engines/engine\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport type { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport type { ISceneSerializableComponent } from \"../sceneComponent\";\r\nimport { SceneComponentConstants } from \"../sceneComponent\";\r\nimport { EffectLayer } from \"./effectLayer\";\r\nimport { AbstractScene } from \"../abstractScene\";\r\nimport type { AssetContainer } from \"../assetContainer\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\n// Adds the parser to the scene parsers.\r\nAbstractScene.AddParser(SceneComponentConstants.NAME_EFFECTLAYER, (parsedData: any, scene: Scene, container: AssetContainer, rootUrl: string) => {\r\n if (parsedData.effectLayers) {\r\n if (!container.effectLayers) {\r\n container.effectLayers = [] as EffectLayer[];\r\n }\r\n\r\n for (let index = 0; index < parsedData.effectLayers.length; index++) {\r\n const effectLayer = EffectLayer.Parse(parsedData.effectLayers[index], scene, rootUrl);\r\n container.effectLayers.push(effectLayer);\r\n }\r\n }\r\n});\r\n\r\ndeclare module \"../abstractScene\" {\r\n export interface AbstractScene {\r\n /**\r\n * The list of effect layers (highlights/glow) added to the scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/highlightLayer\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/glowLayer\r\n */\r\n effectLayers: Array<EffectLayer>;\r\n\r\n /**\r\n * Removes the given effect layer from this scene.\r\n * @param toRemove defines the effect layer to remove\r\n * @returns the index of the removed effect layer\r\n */\r\n removeEffectLayer(toRemove: EffectLayer): number;\r\n\r\n /**\r\n * Adds the given effect layer to this scene\r\n * @param newEffectLayer defines the effect layer to add\r\n */\r\n addEffectLayer(newEffectLayer: EffectLayer): void;\r\n }\r\n}\r\n\r\nAbstractScene.prototype.removeEffectLayer = function (toRemove: EffectLayer): number {\r\n const index = this.effectLayers.indexOf(toRemove);\r\n if (index !== -1) {\r\n this.effectLayers.splice(index, 1);\r\n }\r\n\r\n return index;\r\n};\r\n\r\nAbstractScene.prototype.addEffectLayer = function (newEffectLayer: EffectLayer): void {\r\n this.effectLayers.push(newEffectLayer);\r\n};\r\n\r\n/**\r\n * Defines the layer scene component responsible to manage any effect layers\r\n * in a given scene.\r\n */\r\nexport class EffectLayerSceneComponent implements ISceneSerializableComponent {\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_EFFECTLAYER;\r\n\r\n /**\r\n * The scene the component belongs to.\r\n */\r\n public scene: Scene;\r\n\r\n private _engine: Engine;\r\n private _renderEffects = false;\r\n private _needStencil = false;\r\n private _previousStencilState = false;\r\n\r\n /**\r\n * Creates a new instance of the component for the given scene\r\n * @param scene Defines the scene to register the component in\r\n */\r\n constructor(scene?: Scene) {\r\n this.scene = scene || <Scene>EngineStore.LastCreatedScene;\r\n if (!this.scene) {\r\n return;\r\n }\r\n this._engine = this.scene.getEngine();\r\n this.scene.effectLayers = [] as EffectLayer[];\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._isReadyForMeshStage.registerStep(SceneComponentConstants.STEP_ISREADYFORMESH_EFFECTLAYER, this, this._isReadyForMesh);\r\n\r\n this.scene._cameraDrawRenderTargetStage.registerStep(SceneComponentConstants.STEP_CAMERADRAWRENDERTARGET_EFFECTLAYER, this, this._renderMainTexture);\r\n\r\n this.scene._beforeCameraDrawStage.registerStep(SceneComponentConstants.STEP_BEFORECAMERADRAW_EFFECTLAYER, this, this._setStencil);\r\n\r\n this.scene._afterRenderingGroupDrawStage.registerStep(SceneComponentConstants.STEP_AFTERRENDERINGGROUPDRAW_EFFECTLAYER_DRAW, this, this._drawRenderingGroup);\r\n\r\n this.scene._afterCameraDrawStage.registerStep(SceneComponentConstants.STEP_AFTERCAMERADRAW_EFFECTLAYER, this, this._setStencilBack);\r\n this.scene._afterCameraDrawStage.registerStep(SceneComponentConstants.STEP_AFTERCAMERADRAW_EFFECTLAYER_DRAW, this, this._drawCamera);\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 const layers = this.scene.effectLayers;\r\n for (const effectLayer of layers) {\r\n effectLayer._rebuild();\r\n }\r\n }\r\n\r\n /**\r\n * Serializes the component data to the specified json object\r\n * @param serializationObject The object to serialize to\r\n */\r\n public serialize(serializationObject: any): void {\r\n // Effect layers\r\n serializationObject.effectLayers = [];\r\n\r\n const layers = this.scene.effectLayers;\r\n for (const effectLayer of layers) {\r\n if (effectLayer.serialize) {\r\n serializationObject.effectLayers.push(effectLayer.serialize());\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Adds all the elements from the container to the scene\r\n * @param container the container holding the elements\r\n */\r\n public addFromContainer(container: AbstractScene): void {\r\n if (!container.effectLayers) {\r\n return;\r\n }\r\n container.effectLayers.forEach((o) => {\r\n this.scene.addEffectLayer(o);\r\n });\r\n }\r\n\r\n /**\r\n * Removes all the elements in the container from the scene\r\n * @param container contains the elements to remove\r\n * @param dispose if the removed element should be disposed (default: false)\r\n */\r\n public removeFromContainer(container: AbstractScene, dispose?: boolean): void {\r\n if (!container.effectLayers) {\r\n return;\r\n }\r\n container.effectLayers.forEach((o) => {\r\n this.scene.removeEffectLayer(o);\r\n if (dispose) {\r\n o.dispose();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Disposes the component and the associated resources.\r\n */\r\n public dispose(): void {\r\n const layers = this.scene.effectLayers;\r\n while (layers.length) {\r\n layers[0].dispose();\r\n }\r\n }\r\n\r\n private _isReadyForMesh(mesh: AbstractMesh, hardwareInstancedRendering: boolean): boolean {\r\n const currentRenderPassId = this._engine.currentRenderPassId;\r\n const layers = this.scene.effectLayers;\r\n for (const layer of layers) {\r\n if (!layer.hasMesh(mesh)) {\r\n continue;\r\n }\r\n\r\n const renderTarget = <RenderTargetTexture>(<any>layer)._mainTexture;\r\n this._engine.currentRenderPassId = renderTarget.renderPassId;\r\n\r\n for (const subMesh of mesh.subMeshes) {\r\n if (!layer.isReady(subMesh, hardwareInstancedRendering)) {\r\n this._engine.currentRenderPassId = currentRenderPassId;\r\n return false;\r\n }\r\n }\r\n }\r\n this._engine.currentRenderPassId = currentRenderPassId;\r\n return true;\r\n }\r\n\r\n private _renderMainTexture(camera: Camera): boolean {\r\n this._renderEffects = false;\r\n this._needStencil = false;\r\n\r\n let needRebind = false;\r\n\r\n const layers = this.scene.effectLayers;\r\n if (layers && layers.length > 0) {\r\n this._previousStencilState = this._engine.getStencilBuffer();\r\n for (const effectLayer of layers) {\r\n if (\r\n effectLayer.shouldRender() &&\r\n (!effectLayer.camera ||\r\n (effectLayer.camera.cameraRigMode === Camera.RIG_MODE_NONE && camera === effectLayer.camera) ||\r\n (effectLayer.camera.cameraRigMode !== Camera.RIG_MODE_NONE && effectLayer.camera._rigCameras.indexOf(camera) > -1))\r\n ) {\r\n this._renderEffects = true;\r\n this._needStencil = this._needStencil || effectLayer.needStencil();\r\n\r\n const renderTarget = <RenderTargetTexture>(<any>effectLayer)._mainTexture;\r\n if (renderTarget._shouldRender()) {\r\n this.scene.incrementRenderId();\r\n renderTarget.render(false, false);\r\n needRebind = true;\r\n }\r\n }\r\n }\r\n\r\n this.scene.incrementRenderId();\r\n }\r\n\r\n return needRebind;\r\n }\r\n\r\n private _setStencil() {\r\n // Activate effect Layer stencil\r\n if (this._needStencil) {\r\n this._engine.setStencilBuffer(true);\r\n }\r\n }\r\n\r\n private _setStencilBack() {\r\n // Restore effect Layer stencil\r\n if (this._needStencil) {\r\n this._engine.setStencilBuffer(this._previousStencilState);\r\n }\r\n }\r\n\r\n private _draw(renderingGroupId: number): void {\r\n if (this._renderEffects) {\r\n this._engine.setDepthBuffer(false);\r\n\r\n const layers = this.scene.effectLayers;\r\n for (let i = 0; i < layers.length; i++) {\r\n const effectLayer = layers[i];\r\n if (effectLayer.renderingGroupId === renderingGroupId) {\r\n if (effectLayer.shouldRender()) {\r\n effectLayer.render();\r\n }\r\n }\r\n }\r\n this._engine.setDepthBuffer(true);\r\n }\r\n }\r\n\r\n private _drawCamera(): void {\r\n if (this._renderEffects) {\r\n this._draw(-1);\r\n }\r\n }\r\n private _drawRenderingGroup(index: number): void {\r\n if (!this.scene._isInIntermediateRendering() && this._renderEffects) {\r\n this._draw(index);\r\n }\r\n }\r\n}\r\n\r\nEffectLayer._SceneComponentInitialization = (scene: Scene) => {\r\n let component = scene._getComponent(SceneComponentConstants.NAME_EFFECTLAYER) as EffectLayerSceneComponent;\r\n if (!component) {\r\n component = new EffectLayerSceneComponent(scene);\r\n scene._addComponent(component);\r\n }\r\n};\r\n"]}
@@ -19,7 +19,7 @@ export class LayerSceneComponent {
19
19
  return;
20
20
  }
21
21
  this._engine = this.scene.getEngine();
22
- this.scene.layers = new Array();
22
+ this.scene.layers = [];
23
23
  }
24
24
  /**
25
25
  * Registers the component in a given scene
@@ -1 +1 @@
1
- {"version":3,"file":"layerSceneComponent.js","sourceRoot":"","sources":["../../../../dev/core/src/Layers/layerSceneComponent.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Camera } from \"../Cameras/camera\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { Engine } from \"../Engines/engine\";\r\nimport type { ISceneComponent } from \"../sceneComponent\";\r\nimport { SceneComponentConstants } from \"../sceneComponent\";\r\nimport type { Layer } from \"./layer\";\r\nimport type { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport type { AbstractScene } from \"../abstractScene\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\n\r\ndeclare module \"../abstractScene\" {\r\n export interface AbstractScene {\r\n /**\r\n * The list of layers (background and foreground) of the scene\r\n */\r\n layers: Array<Layer>;\r\n }\r\n}\r\n\r\n/**\r\n * Defines the layer scene component responsible to manage any layers\r\n * in a given scene.\r\n */\r\nexport class LayerSceneComponent 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_LAYER;\r\n\r\n /**\r\n * The scene the component belongs to.\r\n */\r\n public scene: Scene;\r\n\r\n private _engine: Engine;\r\n\r\n /**\r\n * Creates a new instance of the component for the given scene\r\n * @param scene Defines the scene to register the component in\r\n */\r\n constructor(scene?: Scene) {\r\n this.scene = scene || <Scene>EngineStore.LastCreatedScene;\r\n if (!this.scene) {\r\n return;\r\n }\r\n this._engine = this.scene.getEngine();\r\n this.scene.layers = new Array<Layer>();\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._beforeCameraDrawStage.registerStep(SceneComponentConstants.STEP_BEFORECAMERADRAW_LAYER, this, this._drawCameraBackground);\r\n this.scene._afterCameraDrawStage.registerStep(SceneComponentConstants.STEP_AFTERCAMERADRAW_LAYER, this, this._drawCameraForegroundWithPostProcessing);\r\n this.scene._afterCameraPostProcessStage.registerStep(SceneComponentConstants.STEP_AFTERCAMERAPOSTPROCESS_LAYER, this, this._drawCameraForegroundWithoutPostProcessing);\r\n\r\n this.scene._beforeRenderTargetDrawStage.registerStep(SceneComponentConstants.STEP_BEFORERENDERTARGETDRAW_LAYER, this, this._drawRenderTargetBackground);\r\n this.scene._afterRenderTargetDrawStage.registerStep(SceneComponentConstants.STEP_AFTERRENDERTARGETDRAW_LAYER, this, this._drawRenderTargetForegroundWithPostProcessing);\r\n this.scene._afterRenderTargetPostProcessStage.registerStep(\r\n SceneComponentConstants.STEP_AFTERRENDERTARGETPOSTPROCESS_LAYER,\r\n this,\r\n this._drawRenderTargetForegroundWithoutPostProcessing\r\n );\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 const layers = this.scene.layers;\r\n\r\n for (const layer of layers) {\r\n layer._rebuild();\r\n }\r\n }\r\n\r\n /**\r\n * Disposes the component and the associated resources.\r\n */\r\n public dispose(): void {\r\n const layers = this.scene.layers;\r\n\r\n while (layers.length) {\r\n layers[0].dispose();\r\n }\r\n }\r\n\r\n private _draw(predicate: (layer: Layer) => boolean): void {\r\n const layers = this.scene.layers;\r\n\r\n if (layers.length) {\r\n this._engine.setDepthBuffer(false);\r\n for (const layer of layers) {\r\n if (predicate(layer)) {\r\n layer.render();\r\n }\r\n }\r\n this._engine.setDepthBuffer(true);\r\n }\r\n }\r\n\r\n private _drawCameraPredicate(layer: Layer, isBackground: boolean, applyPostProcess: boolean, cameraLayerMask: number): boolean {\r\n return (\r\n !layer.renderOnlyInRenderTargetTextures &&\r\n layer.isBackground === isBackground &&\r\n layer.applyPostProcess === applyPostProcess &&\r\n (layer.layerMask & cameraLayerMask) !== 0\r\n );\r\n }\r\n\r\n private _drawCameraBackground(camera: Camera): void {\r\n this._draw((layer: Layer) => {\r\n return this._drawCameraPredicate(layer, true, true, camera.layerMask);\r\n });\r\n }\r\n\r\n private _drawCameraForegroundWithPostProcessing(camera: Camera): void {\r\n this._draw((layer: Layer) => {\r\n return this._drawCameraPredicate(layer, false, true, camera.layerMask);\r\n });\r\n }\r\n\r\n private _drawCameraForegroundWithoutPostProcessing(camera: Camera): void {\r\n this._draw((layer: Layer) => {\r\n return this._drawCameraPredicate(layer, false, false, camera.layerMask);\r\n });\r\n }\r\n\r\n private _drawRenderTargetPredicate(layer: Layer, isBackground: boolean, applyPostProcess: boolean, cameraLayerMask: number, renderTargetTexture: RenderTargetTexture): boolean {\r\n return (\r\n layer.renderTargetTextures.length > 0 &&\r\n layer.isBackground === isBackground &&\r\n layer.applyPostProcess === applyPostProcess &&\r\n layer.renderTargetTextures.indexOf(renderTargetTexture) > -1 &&\r\n (layer.layerMask & cameraLayerMask) !== 0\r\n );\r\n }\r\n\r\n private _drawRenderTargetBackground(renderTarget: RenderTargetTexture): void {\r\n this._draw((layer: Layer) => {\r\n return this._drawRenderTargetPredicate(layer, true, true, this.scene.activeCamera!.layerMask, renderTarget);\r\n });\r\n }\r\n\r\n private _drawRenderTargetForegroundWithPostProcessing(renderTarget: RenderTargetTexture): void {\r\n this._draw((layer: Layer) => {\r\n return this._drawRenderTargetPredicate(layer, false, true, this.scene.activeCamera!.layerMask, renderTarget);\r\n });\r\n }\r\n\r\n private _drawRenderTargetForegroundWithoutPostProcessing(renderTarget: RenderTargetTexture): void {\r\n this._draw((layer: Layer) => {\r\n return this._drawRenderTargetPredicate(layer, false, false, this.scene.activeCamera!.layerMask, renderTarget);\r\n });\r\n }\r\n\r\n /**\r\n * Adds all the elements from the container to the scene\r\n * @param container the container holding the elements\r\n */\r\n public addFromContainer(container: AbstractScene): void {\r\n if (!container.layers) {\r\n return;\r\n }\r\n container.layers.forEach((layer) => {\r\n this.scene.layers.push(layer);\r\n });\r\n }\r\n\r\n /**\r\n * Removes all the elements in the container from the scene\r\n * @param container contains the elements to remove\r\n * @param dispose if the removed element should be disposed (default: false)\r\n */\r\n public removeFromContainer(container: AbstractScene, dispose = false): void {\r\n if (!container.layers) {\r\n return;\r\n }\r\n container.layers.forEach((layer) => {\r\n const index = this.scene.layers.indexOf(layer);\r\n if (index !== -1) {\r\n this.scene.layers.splice(index, 1);\r\n }\r\n if (dispose) {\r\n layer.dispose();\r\n }\r\n });\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"layerSceneComponent.js","sourceRoot":"","sources":["../../../../dev/core/src/Layers/layerSceneComponent.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Camera } from \"../Cameras/camera\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { Engine } from \"../Engines/engine\";\r\nimport type { ISceneComponent } from \"../sceneComponent\";\r\nimport { SceneComponentConstants } from \"../sceneComponent\";\r\nimport type { Layer } from \"./layer\";\r\nimport type { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport type { AbstractScene } from \"../abstractScene\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\n\r\ndeclare module \"../abstractScene\" {\r\n export interface AbstractScene {\r\n /**\r\n * The list of layers (background and foreground) of the scene\r\n */\r\n layers: Array<Layer>;\r\n }\r\n}\r\n\r\n/**\r\n * Defines the layer scene component responsible to manage any layers\r\n * in a given scene.\r\n */\r\nexport class LayerSceneComponent 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_LAYER;\r\n\r\n /**\r\n * The scene the component belongs to.\r\n */\r\n public scene: Scene;\r\n\r\n private _engine: Engine;\r\n\r\n /**\r\n * Creates a new instance of the component for the given scene\r\n * @param scene Defines the scene to register the component in\r\n */\r\n constructor(scene?: Scene) {\r\n this.scene = scene || <Scene>EngineStore.LastCreatedScene;\r\n if (!this.scene) {\r\n return;\r\n }\r\n this._engine = this.scene.getEngine();\r\n this.scene.layers = [] as Layer[];\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._beforeCameraDrawStage.registerStep(SceneComponentConstants.STEP_BEFORECAMERADRAW_LAYER, this, this._drawCameraBackground);\r\n this.scene._afterCameraDrawStage.registerStep(SceneComponentConstants.STEP_AFTERCAMERADRAW_LAYER, this, this._drawCameraForegroundWithPostProcessing);\r\n this.scene._afterCameraPostProcessStage.registerStep(SceneComponentConstants.STEP_AFTERCAMERAPOSTPROCESS_LAYER, this, this._drawCameraForegroundWithoutPostProcessing);\r\n\r\n this.scene._beforeRenderTargetDrawStage.registerStep(SceneComponentConstants.STEP_BEFORERENDERTARGETDRAW_LAYER, this, this._drawRenderTargetBackground);\r\n this.scene._afterRenderTargetDrawStage.registerStep(SceneComponentConstants.STEP_AFTERRENDERTARGETDRAW_LAYER, this, this._drawRenderTargetForegroundWithPostProcessing);\r\n this.scene._afterRenderTargetPostProcessStage.registerStep(\r\n SceneComponentConstants.STEP_AFTERRENDERTARGETPOSTPROCESS_LAYER,\r\n this,\r\n this._drawRenderTargetForegroundWithoutPostProcessing\r\n );\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 const layers = this.scene.layers;\r\n\r\n for (const layer of layers) {\r\n layer._rebuild();\r\n }\r\n }\r\n\r\n /**\r\n * Disposes the component and the associated resources.\r\n */\r\n public dispose(): void {\r\n const layers = this.scene.layers;\r\n\r\n while (layers.length) {\r\n layers[0].dispose();\r\n }\r\n }\r\n\r\n private _draw(predicate: (layer: Layer) => boolean): void {\r\n const layers = this.scene.layers;\r\n\r\n if (layers.length) {\r\n this._engine.setDepthBuffer(false);\r\n for (const layer of layers) {\r\n if (predicate(layer)) {\r\n layer.render();\r\n }\r\n }\r\n this._engine.setDepthBuffer(true);\r\n }\r\n }\r\n\r\n private _drawCameraPredicate(layer: Layer, isBackground: boolean, applyPostProcess: boolean, cameraLayerMask: number): boolean {\r\n return (\r\n !layer.renderOnlyInRenderTargetTextures &&\r\n layer.isBackground === isBackground &&\r\n layer.applyPostProcess === applyPostProcess &&\r\n (layer.layerMask & cameraLayerMask) !== 0\r\n );\r\n }\r\n\r\n private _drawCameraBackground(camera: Camera): void {\r\n this._draw((layer: Layer) => {\r\n return this._drawCameraPredicate(layer, true, true, camera.layerMask);\r\n });\r\n }\r\n\r\n private _drawCameraForegroundWithPostProcessing(camera: Camera): void {\r\n this._draw((layer: Layer) => {\r\n return this._drawCameraPredicate(layer, false, true, camera.layerMask);\r\n });\r\n }\r\n\r\n private _drawCameraForegroundWithoutPostProcessing(camera: Camera): void {\r\n this._draw((layer: Layer) => {\r\n return this._drawCameraPredicate(layer, false, false, camera.layerMask);\r\n });\r\n }\r\n\r\n private _drawRenderTargetPredicate(layer: Layer, isBackground: boolean, applyPostProcess: boolean, cameraLayerMask: number, renderTargetTexture: RenderTargetTexture): boolean {\r\n return (\r\n layer.renderTargetTextures.length > 0 &&\r\n layer.isBackground === isBackground &&\r\n layer.applyPostProcess === applyPostProcess &&\r\n layer.renderTargetTextures.indexOf(renderTargetTexture) > -1 &&\r\n (layer.layerMask & cameraLayerMask) !== 0\r\n );\r\n }\r\n\r\n private _drawRenderTargetBackground(renderTarget: RenderTargetTexture): void {\r\n this._draw((layer: Layer) => {\r\n return this._drawRenderTargetPredicate(layer, true, true, this.scene.activeCamera!.layerMask, renderTarget);\r\n });\r\n }\r\n\r\n private _drawRenderTargetForegroundWithPostProcessing(renderTarget: RenderTargetTexture): void {\r\n this._draw((layer: Layer) => {\r\n return this._drawRenderTargetPredicate(layer, false, true, this.scene.activeCamera!.layerMask, renderTarget);\r\n });\r\n }\r\n\r\n private _drawRenderTargetForegroundWithoutPostProcessing(renderTarget: RenderTargetTexture): void {\r\n this._draw((layer: Layer) => {\r\n return this._drawRenderTargetPredicate(layer, false, false, this.scene.activeCamera!.layerMask, renderTarget);\r\n });\r\n }\r\n\r\n /**\r\n * Adds all the elements from the container to the scene\r\n * @param container the container holding the elements\r\n */\r\n public addFromContainer(container: AbstractScene): void {\r\n if (!container.layers) {\r\n return;\r\n }\r\n container.layers.forEach((layer) => {\r\n this.scene.layers.push(layer);\r\n });\r\n }\r\n\r\n /**\r\n * Removes all the elements in the container from the scene\r\n * @param container contains the elements to remove\r\n * @param dispose if the removed element should be disposed (default: false)\r\n */\r\n public removeFromContainer(container: AbstractScene, dispose = false): void {\r\n if (!container.layers) {\r\n return;\r\n }\r\n container.layers.forEach((layer) => {\r\n const index = this.scene.layers.indexOf(layer);\r\n if (index !== -1) {\r\n this.scene.layers.splice(index, 1);\r\n }\r\n if (dispose) {\r\n layer.dispose();\r\n }\r\n });\r\n }\r\n}\r\n"]}
@@ -39,7 +39,7 @@ export class LensFlareSystem {
39
39
  /**
40
40
  * List of lens flares used in this system.
41
41
  */
42
- this.lensFlares = new Array();
42
+ this.lensFlares = [];
43
43
  /**
44
44
  * Define a limit from the border the lens flare can be visible.
45
45
  */
@@ -1 +1 @@
1
- {"version":3,"file":"lensFlareSystem.js","sourceRoot":"","sources":["../../../../dev/core/src/LensFlares/lensFlareSystem.ts"],"names":[],"mappings":"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","sourcesContent":["import { Tools } from \"../Misc/tools\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { Scene } from \"../scene\";\r\nimport { Matrix, Vector3 } from \"../Maths/math.vector\";\r\nimport { Scalar } from \"../Maths/math.scalar\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport { Ray } from \"../Culling/ray\";\r\nimport { Material } from \"../Materials/material\";\r\nimport { LensFlare } from \"./lensFlare\";\r\nimport { Constants } from \"../Engines/constants\";\r\n\r\nimport \"../Shaders/lensFlare.fragment\";\r\nimport \"../Shaders/lensFlare.vertex\";\r\nimport { _WarnImport } from \"../Misc/devTools\";\r\nimport type { DataBuffer } from \"../Buffers/dataBuffer\";\r\nimport { Color3 } from \"../Maths/math.color\";\r\nimport type { Viewport } from \"../Maths/math.viewport\";\r\n\r\n/**\r\n * This represents a Lens Flare System or the shiny effect created by the light reflection on the camera lenses.\r\n * It is usually composed of several `lensFlare`.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/environment/lenseFlare\r\n */\r\nexport class LensFlareSystem {\r\n /**\r\n * List of lens flares used in this system.\r\n */\r\n public lensFlares = new Array<LensFlare>();\r\n\r\n /**\r\n * Define a limit from the border the lens flare can be visible.\r\n */\r\n public borderLimit = 300;\r\n\r\n /**\r\n * Define a viewport border we do not want to see the lens flare in.\r\n */\r\n public viewportBorder = 0;\r\n\r\n /**\r\n * Define a predicate which could limit the list of meshes able to occlude the effect.\r\n */\r\n public meshesSelectionPredicate: (mesh: AbstractMesh) => boolean;\r\n\r\n /**\r\n * Restricts the rendering of the effect to only the camera rendering this layer mask.\r\n */\r\n public layerMask: number = 0x0fffffff;\r\n\r\n /** Gets the scene */\r\n public get scene() {\r\n return this._scene;\r\n }\r\n\r\n /**\r\n * Define the id of the lens flare system in the scene.\r\n * (equal to name by default)\r\n */\r\n public id: string;\r\n\r\n private _scene: Scene;\r\n private _emitter: any;\r\n private _vertexBuffers: { [key: string]: Nullable<VertexBuffer> } = {};\r\n private _indexBuffer: Nullable<DataBuffer>;\r\n private _positionX: number;\r\n private _positionY: number;\r\n private _isEnabled = true;\r\n\r\n /**\r\n * @internal\r\n */\r\n public static _SceneComponentInitialization: (scene: Scene) => void = (_) => {\r\n throw _WarnImport(\"LensFlareSystemSceneComponent\");\r\n };\r\n\r\n /**\r\n * Instantiates a lens flare system.\r\n * This represents a Lens Flare System or the shiny effect created by the light reflection on the camera lenses.\r\n * It is usually composed of several `lensFlare`.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/environment/lenseFlare\r\n * @param name Define the name of the lens flare system in the scene\r\n * @param emitter Define the source (the emitter) of the lens flares (it can be a camera, a light or a mesh).\r\n * @param scene Define the scene the lens flare system belongs to\r\n */\r\n constructor(\r\n /**\r\n * Define the name of the lens flare system\r\n */\r\n public name: string,\r\n emitter: any,\r\n scene: Scene\r\n ) {\r\n this._scene = scene || EngineStore.LastCreatedScene;\r\n LensFlareSystem._SceneComponentInitialization(this._scene);\r\n\r\n this._emitter = emitter;\r\n this.id = name;\r\n scene.lensFlareSystems.push(this);\r\n\r\n this.meshesSelectionPredicate = (m) =>\r\n <boolean>(scene.activeCamera && m.material && m.isVisible && m.isEnabled() && m.isBlocker && (m.layerMask & scene.activeCamera.layerMask) != 0);\r\n\r\n const engine = scene.getEngine();\r\n\r\n // VBO\r\n const vertices = [];\r\n vertices.push(1, 1);\r\n vertices.push(-1, 1);\r\n vertices.push(-1, -1);\r\n vertices.push(1, -1);\r\n\r\n this._vertexBuffers[VertexBuffer.PositionKind] = new VertexBuffer(engine, vertices, VertexBuffer.PositionKind, false, false, 2);\r\n\r\n // Indices\r\n this._createIndexBuffer();\r\n }\r\n\r\n private _createIndexBuffer(): void {\r\n const indices = [];\r\n indices.push(0);\r\n indices.push(1);\r\n indices.push(2);\r\n\r\n indices.push(0);\r\n indices.push(2);\r\n indices.push(3);\r\n\r\n this._indexBuffer = this._scene.getEngine().createIndexBuffer(indices);\r\n }\r\n\r\n /**\r\n * Define if the lens flare system is enabled.\r\n */\r\n public get isEnabled(): boolean {\r\n return this._isEnabled;\r\n }\r\n\r\n public set isEnabled(value: boolean) {\r\n this._isEnabled = value;\r\n }\r\n\r\n /**\r\n * Get the scene the effects belongs to.\r\n * @returns the scene holding the lens flare system\r\n */\r\n public getScene(): Scene {\r\n return this._scene;\r\n }\r\n\r\n /**\r\n * Get the emitter of the lens flare system.\r\n * It defines the source of the lens flares (it can be a camera, a light or a mesh).\r\n * @returns the emitter of the lens flare system\r\n */\r\n public getEmitter(): any {\r\n return this._emitter;\r\n }\r\n\r\n /**\r\n * Set the emitter of the lens flare system.\r\n * It defines the source of the lens flares (it can be a camera, a light or a mesh).\r\n * @param newEmitter Define the new emitter of the system\r\n */\r\n public setEmitter(newEmitter: any): void {\r\n this._emitter = newEmitter;\r\n }\r\n\r\n /**\r\n * Get the lens flare system emitter position.\r\n * The emitter defines the source of the lens flares (it can be a camera, a light or a mesh).\r\n * @returns the position\r\n */\r\n public getEmitterPosition(): Vector3 {\r\n return this._emitter.getAbsolutePosition ? this._emitter.getAbsolutePosition() : this._emitter.position;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public computeEffectivePosition(globalViewport: Viewport): boolean {\r\n let position = this.getEmitterPosition();\r\n\r\n position = Vector3.Project(position, Matrix.Identity(), this._scene.getTransformMatrix(), globalViewport);\r\n\r\n this._positionX = position.x;\r\n this._positionY = position.y;\r\n\r\n position = Vector3.TransformCoordinates(this.getEmitterPosition(), this._scene.getViewMatrix());\r\n\r\n if (this.viewportBorder > 0) {\r\n globalViewport.x -= this.viewportBorder;\r\n globalViewport.y -= this.viewportBorder;\r\n globalViewport.width += this.viewportBorder * 2;\r\n globalViewport.height += this.viewportBorder * 2;\r\n position.x += this.viewportBorder;\r\n position.y += this.viewportBorder;\r\n this._positionX += this.viewportBorder;\r\n this._positionY += this.viewportBorder;\r\n }\r\n\r\n const rhs = this._scene.useRightHandedSystem;\r\n const okZ = (position.z > 0 && !rhs) || (position.z < 0 && rhs);\r\n\r\n if (okZ) {\r\n if (this._positionX > globalViewport.x && this._positionX < globalViewport.x + globalViewport.width) {\r\n if (this._positionY > globalViewport.y && this._positionY < globalViewport.y + globalViewport.height) {\r\n return true;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /** @internal */\r\n public _isVisible(): boolean {\r\n if (!this._isEnabled || !this._scene.activeCamera) {\r\n return false;\r\n }\r\n\r\n const emitterPosition = this.getEmitterPosition();\r\n const direction = emitterPosition.subtract(this._scene.activeCamera.globalPosition);\r\n const distance = direction.length();\r\n direction.normalize();\r\n\r\n const ray = new Ray(this._scene.activeCamera.globalPosition, direction);\r\n const pickInfo = this._scene.pickWithRay(ray, this.meshesSelectionPredicate, true);\r\n\r\n return !pickInfo || !pickInfo.hit || pickInfo.distance > distance;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public render(): boolean {\r\n if (!this._scene.activeCamera) {\r\n return false;\r\n }\r\n\r\n const engine = this._scene.getEngine();\r\n const viewport = this._scene.activeCamera.viewport;\r\n const globalViewport = viewport.toGlobal(engine.getRenderWidth(true), engine.getRenderHeight(true));\r\n\r\n // Position\r\n if (!this.computeEffectivePosition(globalViewport)) {\r\n return false;\r\n }\r\n\r\n // Visibility\r\n if (!this._isVisible()) {\r\n return false;\r\n }\r\n\r\n // Intensity\r\n let awayX;\r\n let awayY;\r\n\r\n if (this._positionX < this.borderLimit + globalViewport.x) {\r\n awayX = this.borderLimit + globalViewport.x - this._positionX;\r\n } else if (this._positionX > globalViewport.x + globalViewport.width - this.borderLimit) {\r\n awayX = this._positionX - globalViewport.x - globalViewport.width + this.borderLimit;\r\n } else {\r\n awayX = 0;\r\n }\r\n\r\n if (this._positionY < this.borderLimit + globalViewport.y) {\r\n awayY = this.borderLimit + globalViewport.y - this._positionY;\r\n } else if (this._positionY > globalViewport.y + globalViewport.height - this.borderLimit) {\r\n awayY = this._positionY - globalViewport.y - globalViewport.height + this.borderLimit;\r\n } else {\r\n awayY = 0;\r\n }\r\n\r\n let away = awayX > awayY ? awayX : awayY;\r\n\r\n away -= this.viewportBorder;\r\n\r\n if (away > this.borderLimit) {\r\n away = this.borderLimit;\r\n }\r\n\r\n let intensity = 1.0 - Scalar.Clamp(away / this.borderLimit, 0, 1);\r\n if (intensity < 0) {\r\n return false;\r\n }\r\n\r\n if (intensity > 1.0) {\r\n intensity = 1.0;\r\n }\r\n\r\n if (this.viewportBorder > 0) {\r\n globalViewport.x += this.viewportBorder;\r\n globalViewport.y += this.viewportBorder;\r\n globalViewport.width -= this.viewportBorder * 2;\r\n globalViewport.height -= this.viewportBorder * 2;\r\n this._positionX -= this.viewportBorder;\r\n this._positionY -= this.viewportBorder;\r\n }\r\n\r\n // Position\r\n const centerX = globalViewport.x + globalViewport.width / 2;\r\n const centerY = globalViewport.y + globalViewport.height / 2;\r\n const distX = centerX - this._positionX;\r\n const distY = centerY - this._positionY;\r\n\r\n // Effects\r\n engine.setState(false);\r\n engine.setDepthBuffer(false);\r\n\r\n // Flares\r\n for (let index = 0; index < this.lensFlares.length; index++) {\r\n const flare = this.lensFlares[index];\r\n\r\n if (!flare._drawWrapper.effect!.isReady() || (flare.texture && !flare.texture.isReady())) {\r\n continue;\r\n }\r\n\r\n engine.enableEffect(flare._drawWrapper);\r\n engine.bindBuffers(this._vertexBuffers, this._indexBuffer, flare._drawWrapper.effect!);\r\n\r\n engine.setAlphaMode(flare.alphaMode);\r\n\r\n const x = centerX - distX * flare.position;\r\n const y = centerY - distY * flare.position;\r\n\r\n const cw = flare.size;\r\n const ch = flare.size * engine.getAspectRatio(this._scene.activeCamera, true);\r\n const cx = 2 * (x / (globalViewport.width + globalViewport.x * 2)) - 1.0;\r\n const cy = 1.0 - 2 * (y / (globalViewport.height + globalViewport.y * 2));\r\n\r\n const viewportMatrix = Matrix.FromValues(cw / 2, 0, 0, 0, 0, ch / 2, 0, 0, 0, 0, 1, 0, cx, cy, 0, 1);\r\n\r\n flare._drawWrapper.effect!.setMatrix(\"viewportMatrix\", viewportMatrix);\r\n\r\n // Texture\r\n flare._drawWrapper.effect!.setTexture(\"textureSampler\", flare.texture);\r\n\r\n // Color\r\n flare._drawWrapper.effect!.setFloat4(\"color\", flare.color.r * intensity, flare.color.g * intensity, flare.color.b * intensity, 1.0);\r\n\r\n // Draw order\r\n engine.drawElementsType(Material.TriangleFillMode, 0, 6);\r\n }\r\n\r\n engine.setDepthBuffer(true);\r\n engine.setAlphaMode(Constants.ALPHA_DISABLE);\r\n return true;\r\n }\r\n\r\n /**\r\n * Rebuilds the lens flare system\r\n */\r\n public rebuild(): void {\r\n this._createIndexBuffer();\r\n\r\n for (const key in this._vertexBuffers) {\r\n this._vertexBuffers[key]?._rebuild();\r\n }\r\n }\r\n\r\n /**\r\n * Dispose and release the lens flare with its associated resources.\r\n */\r\n public dispose(): void {\r\n const vertexBuffer = this._vertexBuffers[VertexBuffer.PositionKind];\r\n if (vertexBuffer) {\r\n vertexBuffer.dispose();\r\n this._vertexBuffers[VertexBuffer.PositionKind] = null;\r\n }\r\n\r\n if (this._indexBuffer) {\r\n this._scene.getEngine()._releaseBuffer(this._indexBuffer);\r\n this._indexBuffer = null;\r\n }\r\n\r\n while (this.lensFlares.length) {\r\n this.lensFlares[0].dispose();\r\n }\r\n\r\n // Remove from scene\r\n const index = this._scene.lensFlareSystems.indexOf(this);\r\n this._scene.lensFlareSystems.splice(index, 1);\r\n }\r\n\r\n /**\r\n * Parse a lens flare system from a JSON representation\r\n * @param parsedLensFlareSystem Define the JSON to parse\r\n * @param scene Define the scene the parsed system should be instantiated in\r\n * @param rootUrl Define the rootUrl of the load sequence to easily find a load relative dependencies such as textures\r\n * @returns the parsed system\r\n */\r\n public static Parse(parsedLensFlareSystem: any, scene: Scene, rootUrl: string): LensFlareSystem {\r\n const emitter = scene.getLastEntryById(parsedLensFlareSystem.emitterId);\r\n\r\n const name = parsedLensFlareSystem.name || \"lensFlareSystem#\" + parsedLensFlareSystem.emitterId;\r\n\r\n const lensFlareSystem = new LensFlareSystem(name, emitter, scene);\r\n\r\n lensFlareSystem.id = parsedLensFlareSystem.id || name;\r\n lensFlareSystem.borderLimit = parsedLensFlareSystem.borderLimit;\r\n\r\n for (let index = 0; index < parsedLensFlareSystem.flares.length; index++) {\r\n const parsedFlare = parsedLensFlareSystem.flares[index];\r\n LensFlare.AddFlare(\r\n parsedFlare.size,\r\n parsedFlare.position,\r\n Color3.FromArray(parsedFlare.color),\r\n parsedFlare.textureName ? rootUrl + parsedFlare.textureName : \"\",\r\n lensFlareSystem\r\n );\r\n }\r\n\r\n return lensFlareSystem;\r\n }\r\n\r\n /**\r\n * Serialize the current Lens Flare System into a JSON representation.\r\n * @returns the serialized JSON\r\n */\r\n public serialize(): any {\r\n const serializationObject: any = {};\r\n\r\n serializationObject.id = this.id;\r\n serializationObject.name = this.name;\r\n\r\n serializationObject.emitterId = this.getEmitter().id;\r\n serializationObject.borderLimit = this.borderLimit;\r\n\r\n serializationObject.flares = [];\r\n for (let index = 0; index < this.lensFlares.length; index++) {\r\n const flare = this.lensFlares[index];\r\n\r\n serializationObject.flares.push({\r\n size: flare.size,\r\n position: flare.position,\r\n color: flare.color.asArray(),\r\n textureName: Tools.GetFilename(flare.texture ? flare.texture.name : \"\"),\r\n });\r\n }\r\n\r\n return serializationObject;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"lensFlareSystem.js","sourceRoot":"","sources":["../../../../dev/core/src/LensFlares/lensFlareSystem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAGtC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,+BAA+B,CAAC;AACvC,OAAO,6BAA6B,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAG7C;;;;GAIG;AACH,MAAM,OAAO,eAAe;IA0BxB,qBAAqB;IACrB,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAuBD;;;;;;;;OAQG;IACH;IACI;;OAEG;IACI,IAAY,EACnB,OAAY,EACZ,KAAY;QAFL,SAAI,GAAJ,IAAI,CAAQ;QAhEvB;;WAEG;QACI,eAAU,GAAgB,EAAE,CAAC;QAEpC;;WAEG;QACI,gBAAW,GAAG,GAAG,CAAC;QAEzB;;WAEG;QACI,mBAAc,GAAG,CAAC,CAAC;QAO1B;;WAEG;QACI,cAAS,GAAW,UAAU,CAAC;QAe9B,mBAAc,GAA8C,EAAE,CAAC;QAI/D,eAAU,GAAG,IAAI,CAAC;QA0BtB,IAAI,CAAC,MAAM,GAAG,KAAK,IAAI,WAAW,CAAC,gBAAgB,CAAC;QACpD,eAAe,CAAC,6BAA6B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE3D,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;QACf,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAElC,IAAI,CAAC,wBAAwB,GAAG,CAAC,CAAC,EAAE,EAAE,CACzB,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAEpJ,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAEjC,MAAM;QACN,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACpB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACtB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAErB,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,IAAI,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAEhI,UAAU;QACV,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC9B,CAAC;IAEO,kBAAkB;QACtB,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEhB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEhB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC3E,CAAC;IAED;;OAEG;IACH,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED,IAAW,SAAS,CAAC,KAAc;QAC/B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACI,QAAQ;QACX,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACI,UAAU;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED;;;;OAIG;IACI,UAAU,CAAC,UAAe;QAC7B,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACI,kBAAkB;QACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC5G,CAAC;IAED;;OAEG;IACI,wBAAwB,CAAC,cAAwB;QACpD,IAAI,QAAQ,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAEzC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,EAAE,cAAc,CAAC,CAAC;QAE1G,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC;QAE7B,QAAQ,GAAG,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;QAEhG,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC,EAAE;YACzB,cAAc,CAAC,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC;YACxC,cAAc,CAAC,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC;YACxC,cAAc,CAAC,KAAK,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;YAChD,cAAc,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;YACjD,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC;YAClC,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC;YAClC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,cAAc,CAAC;YACvC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,cAAc,CAAC;SAC1C;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC;QAC7C,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;QAEhE,IAAI,GAAG,EAAE;YACL,IAAI,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC,CAAC,GAAG,cAAc,CAAC,KAAK,EAAE;gBACjG,IAAI,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE;oBAClG,OAAO,IAAI,CAAC;iBACf;aACJ;YACD,OAAO,IAAI,CAAC;SACf;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,gBAAgB;IACT,UAAU;QACb,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;YAC/C,OAAO,KAAK,CAAC;SAChB;QAED,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAClD,MAAM,SAAS,GAAG,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;QACpF,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;QACpC,SAAS,CAAC,SAAS,EAAE,CAAC;QAEtB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;QACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,wBAAwB,EAAE,IAAI,CAAC,CAAC;QAEnF,OAAO,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACtE,CAAC;IAED;;OAEG;IACI,MAAM;QACT,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;YAC3B,OAAO,KAAK,CAAC;SAChB;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC;QACnD,MAAM,cAAc,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;QAEpG,WAAW;QACX,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,cAAc,CAAC,EAAE;YAChD,OAAO,KAAK,CAAC;SAChB;QAED,aAAa;QACb,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;YACpB,OAAO,KAAK,CAAC;SAChB;QAED,YAAY;QACZ,IAAI,KAAK,CAAC;QACV,IAAI,KAAK,CAAC;QAEV,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,GAAG,cAAc,CAAC,CAAC,EAAE;YACvD,KAAK,GAAG,IAAI,CAAC,WAAW,GAAG,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;SACjE;aAAM,IAAI,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC,CAAC,GAAG,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;YACrF,KAAK,GAAG,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC,CAAC,GAAG,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;SACxF;aAAM;YACH,KAAK,GAAG,CAAC,CAAC;SACb;QAED,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,GAAG,cAAc,CAAC,CAAC,EAAE;YACvD,KAAK,GAAG,IAAI,CAAC,WAAW,GAAG,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;SACjE;aAAM,IAAI,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE;YACtF,KAAK,GAAG,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;SACzF;aAAM;YACH,KAAK,GAAG,CAAC,CAAC;SACb;QAED,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QAEzC,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC;QAE5B,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;YACzB,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;SAC3B;QAED,IAAI,SAAS,GAAG,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAClE,IAAI,SAAS,GAAG,CAAC,EAAE;YACf,OAAO,KAAK,CAAC;SAChB;QAED,IAAI,SAAS,GAAG,GAAG,EAAE;YACjB,SAAS,GAAG,GAAG,CAAC;SACnB;QAED,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC,EAAE;YACzB,cAAc,CAAC,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC;YACxC,cAAc,CAAC,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC;YACxC,cAAc,CAAC,KAAK,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;YAChD,cAAc,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;YACjD,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,cAAc,CAAC;YACvC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,cAAc,CAAC;SAC1C;QAED,WAAW;QACX,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,GAAG,cAAc,CAAC,KAAK,GAAG,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC;QACxC,MAAM,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC;QAExC,UAAU;QACV,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACvB,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAE7B,SAAS;QACT,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACzD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAErC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAO,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE;gBACtF,SAAS;aACZ;YAED,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YACxC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC,MAAO,CAAC,CAAC;YAEvF,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAErC,MAAM,CAAC,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC;YAC3C,MAAM,CAAC,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC;YAE3C,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC;YACtB,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;YAC9E,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,GAAG,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YACzE,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,GAAG,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAE1E,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAErG,KAAK,CAAC,YAAY,CAAC,MAAO,CAAC,SAAS,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;YAEvE,UAAU;YACV,KAAK,CAAC,YAAY,CAAC,MAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YAEvE,QAAQ;YACR,KAAK,CAAC,YAAY,CAAC,MAAO,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS,EAAE,GAAG,CAAC,CAAC;YAEpI,aAAa;YACb,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SAC5D;QAED,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,OAAO;;QACV,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,cAAc,EAAE;YACnC,MAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,0CAAE,QAAQ,EAAE,CAAC;SACxC;IACL,CAAC;IAED;;OAEG;IACI,OAAO;QACV,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QACpE,IAAI,YAAY,EAAE;YACd,YAAY,CAAC,OAAO,EAAE,CAAC;YACvB,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;SACzD;QAED,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC1D,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;SAC5B;QAED,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;YAC3B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SAChC;QAED,oBAAoB;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAClD,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,KAAK,CAAC,qBAA0B,EAAE,KAAY,EAAE,OAAe;QACzE,MAAM,OAAO,GAAG,KAAK,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;QAExE,MAAM,IAAI,GAAG,qBAAqB,CAAC,IAAI,IAAI,kBAAkB,GAAG,qBAAqB,CAAC,SAAS,CAAC;QAEhG,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAElE,eAAe,CAAC,EAAE,GAAG,qBAAqB,CAAC,EAAE,IAAI,IAAI,CAAC;QACtD,eAAe,CAAC,WAAW,GAAG,qBAAqB,CAAC,WAAW,CAAC;QAEhE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,qBAAqB,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACtE,MAAM,WAAW,GAAG,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACxD,SAAS,CAAC,QAAQ,CACd,WAAW,CAAC,IAAI,EAChB,WAAW,CAAC,QAAQ,EACpB,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,EACnC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAChE,eAAe,CAClB,CAAC;SACL;QAED,OAAO,eAAe,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACI,SAAS;QACZ,MAAM,mBAAmB,GAAQ,EAAE,CAAC;QAEpC,mBAAmB,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QACjC,mBAAmB,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAErC,mBAAmB,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC;QACrD,mBAAmB,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QAEnD,mBAAmB,CAAC,MAAM,GAAG,EAAE,CAAC;QAChC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACzD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAErC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC;gBAC5B,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE;gBAC5B,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1E,CAAC,CAAC;SACN;QAED,OAAO,mBAAmB,CAAC;IAC/B,CAAC;;AAtXD;;GAEG;AACW,6CAA6B,GAA2B,CAAC,CAAC,EAAE,EAAE;IACxE,MAAM,WAAW,CAAC,+BAA+B,CAAC,CAAC;AACvD,CAAC,AAF0C,CAEzC","sourcesContent":["import { Tools } from \"../Misc/tools\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { Scene } from \"../scene\";\r\nimport { Matrix, Vector3 } from \"../Maths/math.vector\";\r\nimport { Scalar } from \"../Maths/math.scalar\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport { Ray } from \"../Culling/ray\";\r\nimport { Material } from \"../Materials/material\";\r\nimport { LensFlare } from \"./lensFlare\";\r\nimport { Constants } from \"../Engines/constants\";\r\n\r\nimport \"../Shaders/lensFlare.fragment\";\r\nimport \"../Shaders/lensFlare.vertex\";\r\nimport { _WarnImport } from \"../Misc/devTools\";\r\nimport type { DataBuffer } from \"../Buffers/dataBuffer\";\r\nimport { Color3 } from \"../Maths/math.color\";\r\nimport type { Viewport } from \"../Maths/math.viewport\";\r\n\r\n/**\r\n * This represents a Lens Flare System or the shiny effect created by the light reflection on the camera lenses.\r\n * It is usually composed of several `lensFlare`.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/environment/lenseFlare\r\n */\r\nexport class LensFlareSystem {\r\n /**\r\n * List of lens flares used in this system.\r\n */\r\n public lensFlares: LensFlare[] = [];\r\n\r\n /**\r\n * Define a limit from the border the lens flare can be visible.\r\n */\r\n public borderLimit = 300;\r\n\r\n /**\r\n * Define a viewport border we do not want to see the lens flare in.\r\n */\r\n public viewportBorder = 0;\r\n\r\n /**\r\n * Define a predicate which could limit the list of meshes able to occlude the effect.\r\n */\r\n public meshesSelectionPredicate: (mesh: AbstractMesh) => boolean;\r\n\r\n /**\r\n * Restricts the rendering of the effect to only the camera rendering this layer mask.\r\n */\r\n public layerMask: number = 0x0fffffff;\r\n\r\n /** Gets the scene */\r\n public get scene() {\r\n return this._scene;\r\n }\r\n\r\n /**\r\n * Define the id of the lens flare system in the scene.\r\n * (equal to name by default)\r\n */\r\n public id: string;\r\n\r\n private _scene: Scene;\r\n private _emitter: any;\r\n private _vertexBuffers: { [key: string]: Nullable<VertexBuffer> } = {};\r\n private _indexBuffer: Nullable<DataBuffer>;\r\n private _positionX: number;\r\n private _positionY: number;\r\n private _isEnabled = true;\r\n\r\n /**\r\n * @internal\r\n */\r\n public static _SceneComponentInitialization: (scene: Scene) => void = (_) => {\r\n throw _WarnImport(\"LensFlareSystemSceneComponent\");\r\n };\r\n\r\n /**\r\n * Instantiates a lens flare system.\r\n * This represents a Lens Flare System or the shiny effect created by the light reflection on the camera lenses.\r\n * It is usually composed of several `lensFlare`.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/environment/lenseFlare\r\n * @param name Define the name of the lens flare system in the scene\r\n * @param emitter Define the source (the emitter) of the lens flares (it can be a camera, a light or a mesh).\r\n * @param scene Define the scene the lens flare system belongs to\r\n */\r\n constructor(\r\n /**\r\n * Define the name of the lens flare system\r\n */\r\n public name: string,\r\n emitter: any,\r\n scene: Scene\r\n ) {\r\n this._scene = scene || EngineStore.LastCreatedScene;\r\n LensFlareSystem._SceneComponentInitialization(this._scene);\r\n\r\n this._emitter = emitter;\r\n this.id = name;\r\n scene.lensFlareSystems.push(this);\r\n\r\n this.meshesSelectionPredicate = (m) =>\r\n <boolean>(scene.activeCamera && m.material && m.isVisible && m.isEnabled() && m.isBlocker && (m.layerMask & scene.activeCamera.layerMask) != 0);\r\n\r\n const engine = scene.getEngine();\r\n\r\n // VBO\r\n const vertices = [];\r\n vertices.push(1, 1);\r\n vertices.push(-1, 1);\r\n vertices.push(-1, -1);\r\n vertices.push(1, -1);\r\n\r\n this._vertexBuffers[VertexBuffer.PositionKind] = new VertexBuffer(engine, vertices, VertexBuffer.PositionKind, false, false, 2);\r\n\r\n // Indices\r\n this._createIndexBuffer();\r\n }\r\n\r\n private _createIndexBuffer(): void {\r\n const indices = [];\r\n indices.push(0);\r\n indices.push(1);\r\n indices.push(2);\r\n\r\n indices.push(0);\r\n indices.push(2);\r\n indices.push(3);\r\n\r\n this._indexBuffer = this._scene.getEngine().createIndexBuffer(indices);\r\n }\r\n\r\n /**\r\n * Define if the lens flare system is enabled.\r\n */\r\n public get isEnabled(): boolean {\r\n return this._isEnabled;\r\n }\r\n\r\n public set isEnabled(value: boolean) {\r\n this._isEnabled = value;\r\n }\r\n\r\n /**\r\n * Get the scene the effects belongs to.\r\n * @returns the scene holding the lens flare system\r\n */\r\n public getScene(): Scene {\r\n return this._scene;\r\n }\r\n\r\n /**\r\n * Get the emitter of the lens flare system.\r\n * It defines the source of the lens flares (it can be a camera, a light or a mesh).\r\n * @returns the emitter of the lens flare system\r\n */\r\n public getEmitter(): any {\r\n return this._emitter;\r\n }\r\n\r\n /**\r\n * Set the emitter of the lens flare system.\r\n * It defines the source of the lens flares (it can be a camera, a light or a mesh).\r\n * @param newEmitter Define the new emitter of the system\r\n */\r\n public setEmitter(newEmitter: any): void {\r\n this._emitter = newEmitter;\r\n }\r\n\r\n /**\r\n * Get the lens flare system emitter position.\r\n * The emitter defines the source of the lens flares (it can be a camera, a light or a mesh).\r\n * @returns the position\r\n */\r\n public getEmitterPosition(): Vector3 {\r\n return this._emitter.getAbsolutePosition ? this._emitter.getAbsolutePosition() : this._emitter.position;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public computeEffectivePosition(globalViewport: Viewport): boolean {\r\n let position = this.getEmitterPosition();\r\n\r\n position = Vector3.Project(position, Matrix.Identity(), this._scene.getTransformMatrix(), globalViewport);\r\n\r\n this._positionX = position.x;\r\n this._positionY = position.y;\r\n\r\n position = Vector3.TransformCoordinates(this.getEmitterPosition(), this._scene.getViewMatrix());\r\n\r\n if (this.viewportBorder > 0) {\r\n globalViewport.x -= this.viewportBorder;\r\n globalViewport.y -= this.viewportBorder;\r\n globalViewport.width += this.viewportBorder * 2;\r\n globalViewport.height += this.viewportBorder * 2;\r\n position.x += this.viewportBorder;\r\n position.y += this.viewportBorder;\r\n this._positionX += this.viewportBorder;\r\n this._positionY += this.viewportBorder;\r\n }\r\n\r\n const rhs = this._scene.useRightHandedSystem;\r\n const okZ = (position.z > 0 && !rhs) || (position.z < 0 && rhs);\r\n\r\n if (okZ) {\r\n if (this._positionX > globalViewport.x && this._positionX < globalViewport.x + globalViewport.width) {\r\n if (this._positionY > globalViewport.y && this._positionY < globalViewport.y + globalViewport.height) {\r\n return true;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /** @internal */\r\n public _isVisible(): boolean {\r\n if (!this._isEnabled || !this._scene.activeCamera) {\r\n return false;\r\n }\r\n\r\n const emitterPosition = this.getEmitterPosition();\r\n const direction = emitterPosition.subtract(this._scene.activeCamera.globalPosition);\r\n const distance = direction.length();\r\n direction.normalize();\r\n\r\n const ray = new Ray(this._scene.activeCamera.globalPosition, direction);\r\n const pickInfo = this._scene.pickWithRay(ray, this.meshesSelectionPredicate, true);\r\n\r\n return !pickInfo || !pickInfo.hit || pickInfo.distance > distance;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public render(): boolean {\r\n if (!this._scene.activeCamera) {\r\n return false;\r\n }\r\n\r\n const engine = this._scene.getEngine();\r\n const viewport = this._scene.activeCamera.viewport;\r\n const globalViewport = viewport.toGlobal(engine.getRenderWidth(true), engine.getRenderHeight(true));\r\n\r\n // Position\r\n if (!this.computeEffectivePosition(globalViewport)) {\r\n return false;\r\n }\r\n\r\n // Visibility\r\n if (!this._isVisible()) {\r\n return false;\r\n }\r\n\r\n // Intensity\r\n let awayX;\r\n let awayY;\r\n\r\n if (this._positionX < this.borderLimit + globalViewport.x) {\r\n awayX = this.borderLimit + globalViewport.x - this._positionX;\r\n } else if (this._positionX > globalViewport.x + globalViewport.width - this.borderLimit) {\r\n awayX = this._positionX - globalViewport.x - globalViewport.width + this.borderLimit;\r\n } else {\r\n awayX = 0;\r\n }\r\n\r\n if (this._positionY < this.borderLimit + globalViewport.y) {\r\n awayY = this.borderLimit + globalViewport.y - this._positionY;\r\n } else if (this._positionY > globalViewport.y + globalViewport.height - this.borderLimit) {\r\n awayY = this._positionY - globalViewport.y - globalViewport.height + this.borderLimit;\r\n } else {\r\n awayY = 0;\r\n }\r\n\r\n let away = awayX > awayY ? awayX : awayY;\r\n\r\n away -= this.viewportBorder;\r\n\r\n if (away > this.borderLimit) {\r\n away = this.borderLimit;\r\n }\r\n\r\n let intensity = 1.0 - Scalar.Clamp(away / this.borderLimit, 0, 1);\r\n if (intensity < 0) {\r\n return false;\r\n }\r\n\r\n if (intensity > 1.0) {\r\n intensity = 1.0;\r\n }\r\n\r\n if (this.viewportBorder > 0) {\r\n globalViewport.x += this.viewportBorder;\r\n globalViewport.y += this.viewportBorder;\r\n globalViewport.width -= this.viewportBorder * 2;\r\n globalViewport.height -= this.viewportBorder * 2;\r\n this._positionX -= this.viewportBorder;\r\n this._positionY -= this.viewportBorder;\r\n }\r\n\r\n // Position\r\n const centerX = globalViewport.x + globalViewport.width / 2;\r\n const centerY = globalViewport.y + globalViewport.height / 2;\r\n const distX = centerX - this._positionX;\r\n const distY = centerY - this._positionY;\r\n\r\n // Effects\r\n engine.setState(false);\r\n engine.setDepthBuffer(false);\r\n\r\n // Flares\r\n for (let index = 0; index < this.lensFlares.length; index++) {\r\n const flare = this.lensFlares[index];\r\n\r\n if (!flare._drawWrapper.effect!.isReady() || (flare.texture && !flare.texture.isReady())) {\r\n continue;\r\n }\r\n\r\n engine.enableEffect(flare._drawWrapper);\r\n engine.bindBuffers(this._vertexBuffers, this._indexBuffer, flare._drawWrapper.effect!);\r\n\r\n engine.setAlphaMode(flare.alphaMode);\r\n\r\n const x = centerX - distX * flare.position;\r\n const y = centerY - distY * flare.position;\r\n\r\n const cw = flare.size;\r\n const ch = flare.size * engine.getAspectRatio(this._scene.activeCamera, true);\r\n const cx = 2 * (x / (globalViewport.width + globalViewport.x * 2)) - 1.0;\r\n const cy = 1.0 - 2 * (y / (globalViewport.height + globalViewport.y * 2));\r\n\r\n const viewportMatrix = Matrix.FromValues(cw / 2, 0, 0, 0, 0, ch / 2, 0, 0, 0, 0, 1, 0, cx, cy, 0, 1);\r\n\r\n flare._drawWrapper.effect!.setMatrix(\"viewportMatrix\", viewportMatrix);\r\n\r\n // Texture\r\n flare._drawWrapper.effect!.setTexture(\"textureSampler\", flare.texture);\r\n\r\n // Color\r\n flare._drawWrapper.effect!.setFloat4(\"color\", flare.color.r * intensity, flare.color.g * intensity, flare.color.b * intensity, 1.0);\r\n\r\n // Draw order\r\n engine.drawElementsType(Material.TriangleFillMode, 0, 6);\r\n }\r\n\r\n engine.setDepthBuffer(true);\r\n engine.setAlphaMode(Constants.ALPHA_DISABLE);\r\n return true;\r\n }\r\n\r\n /**\r\n * Rebuilds the lens flare system\r\n */\r\n public rebuild(): void {\r\n this._createIndexBuffer();\r\n\r\n for (const key in this._vertexBuffers) {\r\n this._vertexBuffers[key]?._rebuild();\r\n }\r\n }\r\n\r\n /**\r\n * Dispose and release the lens flare with its associated resources.\r\n */\r\n public dispose(): void {\r\n const vertexBuffer = this._vertexBuffers[VertexBuffer.PositionKind];\r\n if (vertexBuffer) {\r\n vertexBuffer.dispose();\r\n this._vertexBuffers[VertexBuffer.PositionKind] = null;\r\n }\r\n\r\n if (this._indexBuffer) {\r\n this._scene.getEngine()._releaseBuffer(this._indexBuffer);\r\n this._indexBuffer = null;\r\n }\r\n\r\n while (this.lensFlares.length) {\r\n this.lensFlares[0].dispose();\r\n }\r\n\r\n // Remove from scene\r\n const index = this._scene.lensFlareSystems.indexOf(this);\r\n this._scene.lensFlareSystems.splice(index, 1);\r\n }\r\n\r\n /**\r\n * Parse a lens flare system from a JSON representation\r\n * @param parsedLensFlareSystem Define the JSON to parse\r\n * @param scene Define the scene the parsed system should be instantiated in\r\n * @param rootUrl Define the rootUrl of the load sequence to easily find a load relative dependencies such as textures\r\n * @returns the parsed system\r\n */\r\n public static Parse(parsedLensFlareSystem: any, scene: Scene, rootUrl: string): LensFlareSystem {\r\n const emitter = scene.getLastEntryById(parsedLensFlareSystem.emitterId);\r\n\r\n const name = parsedLensFlareSystem.name || \"lensFlareSystem#\" + parsedLensFlareSystem.emitterId;\r\n\r\n const lensFlareSystem = new LensFlareSystem(name, emitter, scene);\r\n\r\n lensFlareSystem.id = parsedLensFlareSystem.id || name;\r\n lensFlareSystem.borderLimit = parsedLensFlareSystem.borderLimit;\r\n\r\n for (let index = 0; index < parsedLensFlareSystem.flares.length; index++) {\r\n const parsedFlare = parsedLensFlareSystem.flares[index];\r\n LensFlare.AddFlare(\r\n parsedFlare.size,\r\n parsedFlare.position,\r\n Color3.FromArray(parsedFlare.color),\r\n parsedFlare.textureName ? rootUrl + parsedFlare.textureName : \"\",\r\n lensFlareSystem\r\n );\r\n }\r\n\r\n return lensFlareSystem;\r\n }\r\n\r\n /**\r\n * Serialize the current Lens Flare System into a JSON representation.\r\n * @returns the serialized JSON\r\n */\r\n public serialize(): any {\r\n const serializationObject: any = {};\r\n\r\n serializationObject.id = this.id;\r\n serializationObject.name = this.name;\r\n\r\n serializationObject.emitterId = this.getEmitter().id;\r\n serializationObject.borderLimit = this.borderLimit;\r\n\r\n serializationObject.flares = [];\r\n for (let index = 0; index < this.lensFlares.length; index++) {\r\n const flare = this.lensFlares[index];\r\n\r\n serializationObject.flares.push({\r\n size: flare.size,\r\n position: flare.position,\r\n color: flare.color.asArray(),\r\n textureName: Tools.GetFilename(flare.texture ? flare.texture.name : \"\"),\r\n });\r\n }\r\n\r\n return serializationObject;\r\n }\r\n}\r\n"]}
@@ -7,7 +7,7 @@ AbstractScene.AddParser(SceneComponentConstants.NAME_LENSFLARESYSTEM, (parsedDat
7
7
  // Lens flares
8
8
  if (parsedData.lensFlareSystems !== undefined && parsedData.lensFlareSystems !== null) {
9
9
  if (!container.lensFlareSystems) {
10
- container.lensFlareSystems = new Array();
10
+ container.lensFlareSystems = [];
11
11
  }
12
12
  for (let index = 0, cache = parsedData.lensFlareSystems.length; index < cache; index++) {
13
13
  const parsedLensFlareSystem = parsedData.lensFlareSystems[index];
@@ -60,7 +60,7 @@ export class LensFlareSystemSceneComponent {
60
60
  */
61
61
  this.name = SceneComponentConstants.NAME_LENSFLARESYSTEM;
62
62
  this.scene = scene;
63
- scene.lensFlareSystems = new Array();
63
+ scene.lensFlareSystems = [];
64
64
  }
65
65
  /**
66
66
  * Registers the component in a given scene
@@ -1 +1 @@
1
- {"version":3,"file":"lensFlareSystemSceneComponent.js","sourceRoot":"","sources":["../../../../dev/core/src/LensFlares/lensFlareSystemSceneComponent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAKtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,wCAAwC;AACxC,aAAa,CAAC,SAAS,CAAC,uBAAuB,CAAC,oBAAoB,EAAE,CAAC,UAAe,EAAE,KAAY,EAAE,SAAyB,EAAE,OAAe,EAAE,EAAE;IAChJ,cAAc;IACd,IAAI,UAAU,CAAC,gBAAgB,KAAK,SAAS,IAAI,UAAU,CAAC,gBAAgB,KAAK,IAAI,EAAE;QACnF,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE;YAC7B,SAAS,CAAC,gBAAgB,GAAG,IAAI,KAAK,EAAmB,CAAC;SAC7D;QAED,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,UAAU,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,EAAE,EAAE;YACpF,MAAM,qBAAqB,GAAG,UAAU,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACjE,MAAM,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;YACxE,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACvC;KACJ;AACL,CAAC,CAAC,CAAC;AA+CH,aAAa,CAAC,SAAS,CAAC,wBAAwB,GAAG,UAAU,IAAY;IACrE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QAC/D,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE;YAC5C,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;SACvC;KACJ;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,aAAa,CAAC,SAAS,CAAC,sBAAsB,GAAG,UAAU,EAAU;IACjE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QAC/D,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;YACxC,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;SACvC;KACJ;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,aAAa,CAAC,SAAS,CAAC,sBAAsB,GAAG,UAAU,EAAU;IACjE,OAAO,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;AAC3C,CAAC,CAAC;AAEF,aAAa,CAAC,SAAS,CAAC,qBAAqB,GAAG,UAAU,QAAyB;IAC/E,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACtD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;QACd,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;KAC1C;IACD,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,aAAa,CAAC,SAAS,CAAC,kBAAkB,GAAG,UAAU,kBAAmC;IACtF,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACnD,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,OAAO,6BAA6B;IAWtC;;;OAGG;IACH,YAAY,KAAY;QAdxB;;WAEG;QACa,SAAI,GAAG,uBAAuB,CAAC,oBAAoB,CAAC;QAYhE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,KAAK,CAAC,gBAAgB,GAAG,IAAI,KAAK,EAAmB,CAAC;IAC1D,CAAC;IAED;;OAEG;IACI,QAAQ;QACX,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,YAAY,CAAC,uBAAuB,CAAC,oCAAoC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAClI,CAAC;IAED;;;OAGG;IACI,OAAO;QACV,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACrE,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;SAChD;IACL,CAAC;IAED;;;OAGG;IACI,gBAAgB,CAAC,SAAwB;QAC5C,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE;YAC7B,OAAO;SACV;QACD,SAAS,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACrC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;OAIG;IACI,mBAAmB,CAAC,SAAwB,EAAE,OAAiB;QAClE,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE;YAC7B,OAAO;SACV;QACD,SAAS,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACrC,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YACpC,IAAI,OAAO,EAAE;gBACT,CAAC,CAAC,OAAO,EAAE,CAAC;aACf;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;OAGG;IACI,SAAS,CAAC,mBAAwB;QACrC,cAAc;QACd,mBAAmB,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC1C,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC;QACrD,KAAK,MAAM,eAAe,IAAI,gBAAgB,EAAE;YAC5C,mBAAmB,CAAC,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;SAC1E;IACL,CAAC;IAED;;OAEG;IACI,OAAO;QACV,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC;QACrD,OAAO,gBAAgB,CAAC,MAAM,EAAE;YAC5B,gBAAgB,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SACjC;IACL,CAAC;IAEO,KAAK,CAAC,MAAc;QACxB,cAAc;QACd,IAAI,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE;YAC9B,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC;YACrD,KAAK,CAAC,uBAAuB,CAAC,aAAa,EAAE,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC1E,KAAK,MAAM,eAAe,IAAI,gBAAgB,EAAE;gBAC5C,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;oBACtD,eAAe,CAAC,MAAM,EAAE,CAAC;iBAC5B;aACJ;YACD,KAAK,CAAC,qBAAqB,CAAC,aAAa,EAAE,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;SAC3E;IACL,CAAC;CACJ;AAED,eAAe,CAAC,6BAA6B,GAAG,CAAC,KAAY,EAAE,EAAE;IAC7D,IAAI,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,uBAAuB,CAAC,oBAAoB,CAAkC,CAAC;IACnH,IAAI,CAAC,SAAS,EAAE;QACZ,SAAS,GAAG,IAAI,6BAA6B,CAAC,KAAK,CAAC,CAAC;QACrD,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;KAClC;AACL,CAAC,CAAC","sourcesContent":["import { Tools } from \"../Misc/tools\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { Camera } from \"../Cameras/camera\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { ISceneSerializableComponent } from \"../sceneComponent\";\r\nimport { SceneComponentConstants } from \"../sceneComponent\";\r\nimport { AbstractScene } from \"../abstractScene\";\r\nimport type { AssetContainer } from \"../assetContainer\";\r\nimport { LensFlareSystem } from \"./lensFlareSystem\";\r\n// Adds the parser to the scene parsers.\r\nAbstractScene.AddParser(SceneComponentConstants.NAME_LENSFLARESYSTEM, (parsedData: any, scene: Scene, container: AssetContainer, rootUrl: string) => {\r\n // Lens flares\r\n if (parsedData.lensFlareSystems !== undefined && parsedData.lensFlareSystems !== null) {\r\n if (!container.lensFlareSystems) {\r\n container.lensFlareSystems = new Array<LensFlareSystem>();\r\n }\r\n\r\n for (let index = 0, cache = parsedData.lensFlareSystems.length; index < cache; index++) {\r\n const parsedLensFlareSystem = parsedData.lensFlareSystems[index];\r\n const lf = LensFlareSystem.Parse(parsedLensFlareSystem, scene, rootUrl);\r\n container.lensFlareSystems.push(lf);\r\n }\r\n }\r\n});\r\n\r\ndeclare module \"../abstractScene\" {\r\n export interface AbstractScene {\r\n /**\r\n * The list of lens flare system added to the scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/environment/lenseFlare\r\n */\r\n lensFlareSystems: Array<LensFlareSystem>;\r\n\r\n /**\r\n * Removes the given lens flare system from this scene.\r\n * @param toRemove The lens flare system to remove\r\n * @returns The index of the removed lens flare system\r\n */\r\n removeLensFlareSystem(toRemove: LensFlareSystem): number;\r\n\r\n /**\r\n * Adds the given lens flare system to this scene\r\n * @param newLensFlareSystem The lens flare system to add\r\n */\r\n addLensFlareSystem(newLensFlareSystem: LensFlareSystem): void;\r\n\r\n /**\r\n * Gets a lens flare system using its name\r\n * @param name defines the name to look for\r\n * @returns the lens flare system or null if not found\r\n */\r\n getLensFlareSystemByName(name: string): Nullable<LensFlareSystem>;\r\n\r\n /**\r\n * Gets a lens flare system using its Id\r\n * @param id defines the Id to look for\r\n * @returns the lens flare system or null if not found\r\n * @deprecated Please use getLensFlareSystemById instead\r\n */\r\n getLensFlareSystemByID(id: string): Nullable<LensFlareSystem>;\r\n\r\n /**\r\n * Gets a lens flare system using its Id\r\n * @param id defines the Id to look for\r\n * @returns the lens flare system or null if not found\r\n */\r\n getLensFlareSystemById(id: string): Nullable<LensFlareSystem>;\r\n }\r\n}\r\n\r\nAbstractScene.prototype.getLensFlareSystemByName = function (name: string): Nullable<LensFlareSystem> {\r\n for (let index = 0; index < this.lensFlareSystems.length; index++) {\r\n if (this.lensFlareSystems[index].name === name) {\r\n return this.lensFlareSystems[index];\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\nAbstractScene.prototype.getLensFlareSystemById = function (id: string): Nullable<LensFlareSystem> {\r\n for (let index = 0; index < this.lensFlareSystems.length; index++) {\r\n if (this.lensFlareSystems[index].id === id) {\r\n return this.lensFlareSystems[index];\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\nAbstractScene.prototype.getLensFlareSystemByID = function (id: string): Nullable<LensFlareSystem> {\r\n return this.getLensFlareSystemById(id);\r\n};\r\n\r\nAbstractScene.prototype.removeLensFlareSystem = function (toRemove: LensFlareSystem): number {\r\n const index = this.lensFlareSystems.indexOf(toRemove);\r\n if (index !== -1) {\r\n this.lensFlareSystems.splice(index, 1);\r\n }\r\n return index;\r\n};\r\n\r\nAbstractScene.prototype.addLensFlareSystem = function (newLensFlareSystem: LensFlareSystem): void {\r\n this.lensFlareSystems.push(newLensFlareSystem);\r\n};\r\n\r\n/**\r\n * Defines the lens flare scene component responsible to manage any lens flares\r\n * in a given scene.\r\n */\r\nexport class LensFlareSystemSceneComponent implements ISceneSerializableComponent {\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_LENSFLARESYSTEM;\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 * Creates a new instance of the component for the given scene\r\n * @param scene Defines the scene to register the component in\r\n */\r\n constructor(scene: Scene) {\r\n this.scene = scene;\r\n\r\n scene.lensFlareSystems = new Array<LensFlareSystem>();\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._afterCameraDrawStage.registerStep(SceneComponentConstants.STEP_AFTERCAMERADRAW_LENSFLARESYSTEM, this, this._draw);\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 for (let index = 0; index < this.scene.lensFlareSystems.length; index++) {\r\n this.scene.lensFlareSystems[index].rebuild();\r\n }\r\n }\r\n\r\n /**\r\n * Adds all the elements from the container to the scene\r\n * @param container the container holding the elements\r\n */\r\n public addFromContainer(container: AbstractScene): void {\r\n if (!container.lensFlareSystems) {\r\n return;\r\n }\r\n container.lensFlareSystems.forEach((o) => {\r\n this.scene.addLensFlareSystem(o);\r\n });\r\n }\r\n\r\n /**\r\n * Removes all the elements in the container from the scene\r\n * @param container contains the elements to remove\r\n * @param dispose if the removed element should be disposed (default: false)\r\n */\r\n public removeFromContainer(container: AbstractScene, dispose?: boolean): void {\r\n if (!container.lensFlareSystems) {\r\n return;\r\n }\r\n container.lensFlareSystems.forEach((o) => {\r\n this.scene.removeLensFlareSystem(o);\r\n if (dispose) {\r\n o.dispose();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Serializes the component data to the specified json object\r\n * @param serializationObject The object to serialize to\r\n */\r\n public serialize(serializationObject: any): void {\r\n // Lens flares\r\n serializationObject.lensFlareSystems = [];\r\n const lensFlareSystems = this.scene.lensFlareSystems;\r\n for (const lensFlareSystem of lensFlareSystems) {\r\n serializationObject.lensFlareSystems.push(lensFlareSystem.serialize());\r\n }\r\n }\r\n\r\n /**\r\n * Disposes the component and the associated resources.\r\n */\r\n public dispose(): void {\r\n const lensFlareSystems = this.scene.lensFlareSystems;\r\n while (lensFlareSystems.length) {\r\n lensFlareSystems[0].dispose();\r\n }\r\n }\r\n\r\n private _draw(camera: Camera): void {\r\n // Lens flares\r\n if (this.scene.lensFlaresEnabled) {\r\n const lensFlareSystems = this.scene.lensFlareSystems;\r\n Tools.StartPerformanceCounter(\"Lens flares\", lensFlareSystems.length > 0);\r\n for (const lensFlareSystem of lensFlareSystems) {\r\n if ((camera.layerMask & lensFlareSystem.layerMask) !== 0) {\r\n lensFlareSystem.render();\r\n }\r\n }\r\n Tools.EndPerformanceCounter(\"Lens flares\", lensFlareSystems.length > 0);\r\n }\r\n }\r\n}\r\n\r\nLensFlareSystem._SceneComponentInitialization = (scene: Scene) => {\r\n let component = scene._getComponent(SceneComponentConstants.NAME_LENSFLARESYSTEM) as LensFlareSystemSceneComponent;\r\n if (!component) {\r\n component = new LensFlareSystemSceneComponent(scene);\r\n scene._addComponent(component);\r\n }\r\n};\r\n"]}
1
+ {"version":3,"file":"lensFlareSystemSceneComponent.js","sourceRoot":"","sources":["../../../../dev/core/src/LensFlares/lensFlareSystemSceneComponent.ts"],"names":[],"mappings":"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","sourcesContent":["import { Tools } from \"../Misc/tools\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { Camera } from \"../Cameras/camera\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { ISceneSerializableComponent } from \"../sceneComponent\";\r\nimport { SceneComponentConstants } from \"../sceneComponent\";\r\nimport { AbstractScene } from \"../abstractScene\";\r\nimport type { AssetContainer } from \"../assetContainer\";\r\nimport { LensFlareSystem } from \"./lensFlareSystem\";\r\n// Adds the parser to the scene parsers.\r\nAbstractScene.AddParser(SceneComponentConstants.NAME_LENSFLARESYSTEM, (parsedData: any, scene: Scene, container: AssetContainer, rootUrl: string) => {\r\n // Lens flares\r\n if (parsedData.lensFlareSystems !== undefined && parsedData.lensFlareSystems !== null) {\r\n if (!container.lensFlareSystems) {\r\n container.lensFlareSystems = [] as LensFlareSystem[];\r\n }\r\n\r\n for (let index = 0, cache = parsedData.lensFlareSystems.length; index < cache; index++) {\r\n const parsedLensFlareSystem = parsedData.lensFlareSystems[index];\r\n const lf = LensFlareSystem.Parse(parsedLensFlareSystem, scene, rootUrl);\r\n container.lensFlareSystems.push(lf);\r\n }\r\n }\r\n});\r\n\r\ndeclare module \"../abstractScene\" {\r\n export interface AbstractScene {\r\n /**\r\n * The list of lens flare system added to the scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/environment/lenseFlare\r\n */\r\n lensFlareSystems: Array<LensFlareSystem>;\r\n\r\n /**\r\n * Removes the given lens flare system from this scene.\r\n * @param toRemove The lens flare system to remove\r\n * @returns The index of the removed lens flare system\r\n */\r\n removeLensFlareSystem(toRemove: LensFlareSystem): number;\r\n\r\n /**\r\n * Adds the given lens flare system to this scene\r\n * @param newLensFlareSystem The lens flare system to add\r\n */\r\n addLensFlareSystem(newLensFlareSystem: LensFlareSystem): void;\r\n\r\n /**\r\n * Gets a lens flare system using its name\r\n * @param name defines the name to look for\r\n * @returns the lens flare system or null if not found\r\n */\r\n getLensFlareSystemByName(name: string): Nullable<LensFlareSystem>;\r\n\r\n /**\r\n * Gets a lens flare system using its Id\r\n * @param id defines the Id to look for\r\n * @returns the lens flare system or null if not found\r\n * @deprecated Please use getLensFlareSystemById instead\r\n */\r\n getLensFlareSystemByID(id: string): Nullable<LensFlareSystem>;\r\n\r\n /**\r\n * Gets a lens flare system using its Id\r\n * @param id defines the Id to look for\r\n * @returns the lens flare system or null if not found\r\n */\r\n getLensFlareSystemById(id: string): Nullable<LensFlareSystem>;\r\n }\r\n}\r\n\r\nAbstractScene.prototype.getLensFlareSystemByName = function (name: string): Nullable<LensFlareSystem> {\r\n for (let index = 0; index < this.lensFlareSystems.length; index++) {\r\n if (this.lensFlareSystems[index].name === name) {\r\n return this.lensFlareSystems[index];\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\nAbstractScene.prototype.getLensFlareSystemById = function (id: string): Nullable<LensFlareSystem> {\r\n for (let index = 0; index < this.lensFlareSystems.length; index++) {\r\n if (this.lensFlareSystems[index].id === id) {\r\n return this.lensFlareSystems[index];\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\nAbstractScene.prototype.getLensFlareSystemByID = function (id: string): Nullable<LensFlareSystem> {\r\n return this.getLensFlareSystemById(id);\r\n};\r\n\r\nAbstractScene.prototype.removeLensFlareSystem = function (toRemove: LensFlareSystem): number {\r\n const index = this.lensFlareSystems.indexOf(toRemove);\r\n if (index !== -1) {\r\n this.lensFlareSystems.splice(index, 1);\r\n }\r\n return index;\r\n};\r\n\r\nAbstractScene.prototype.addLensFlareSystem = function (newLensFlareSystem: LensFlareSystem): void {\r\n this.lensFlareSystems.push(newLensFlareSystem);\r\n};\r\n\r\n/**\r\n * Defines the lens flare scene component responsible to manage any lens flares\r\n * in a given scene.\r\n */\r\nexport class LensFlareSystemSceneComponent implements ISceneSerializableComponent {\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_LENSFLARESYSTEM;\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 * Creates a new instance of the component for the given scene\r\n * @param scene Defines the scene to register the component in\r\n */\r\n constructor(scene: Scene) {\r\n this.scene = scene;\r\n\r\n scene.lensFlareSystems = [] as LensFlareSystem[];\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._afterCameraDrawStage.registerStep(SceneComponentConstants.STEP_AFTERCAMERADRAW_LENSFLARESYSTEM, this, this._draw);\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 for (let index = 0; index < this.scene.lensFlareSystems.length; index++) {\r\n this.scene.lensFlareSystems[index].rebuild();\r\n }\r\n }\r\n\r\n /**\r\n * Adds all the elements from the container to the scene\r\n * @param container the container holding the elements\r\n */\r\n public addFromContainer(container: AbstractScene): void {\r\n if (!container.lensFlareSystems) {\r\n return;\r\n }\r\n container.lensFlareSystems.forEach((o) => {\r\n this.scene.addLensFlareSystem(o);\r\n });\r\n }\r\n\r\n /**\r\n * Removes all the elements in the container from the scene\r\n * @param container contains the elements to remove\r\n * @param dispose if the removed element should be disposed (default: false)\r\n */\r\n public removeFromContainer(container: AbstractScene, dispose?: boolean): void {\r\n if (!container.lensFlareSystems) {\r\n return;\r\n }\r\n container.lensFlareSystems.forEach((o) => {\r\n this.scene.removeLensFlareSystem(o);\r\n if (dispose) {\r\n o.dispose();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Serializes the component data to the specified json object\r\n * @param serializationObject The object to serialize to\r\n */\r\n public serialize(serializationObject: any): void {\r\n // Lens flares\r\n serializationObject.lensFlareSystems = [];\r\n const lensFlareSystems = this.scene.lensFlareSystems;\r\n for (const lensFlareSystem of lensFlareSystems) {\r\n serializationObject.lensFlareSystems.push(lensFlareSystem.serialize());\r\n }\r\n }\r\n\r\n /**\r\n * Disposes the component and the associated resources.\r\n */\r\n public dispose(): void {\r\n const lensFlareSystems = this.scene.lensFlareSystems;\r\n while (lensFlareSystems.length) {\r\n lensFlareSystems[0].dispose();\r\n }\r\n }\r\n\r\n private _draw(camera: Camera): void {\r\n // Lens flares\r\n if (this.scene.lensFlaresEnabled) {\r\n const lensFlareSystems = this.scene.lensFlareSystems;\r\n Tools.StartPerformanceCounter(\"Lens flares\", lensFlareSystems.length > 0);\r\n for (const lensFlareSystem of lensFlareSystems) {\r\n if ((camera.layerMask & lensFlareSystem.layerMask) !== 0) {\r\n lensFlareSystem.render();\r\n }\r\n }\r\n Tools.EndPerformanceCounter(\"Lens flares\", lensFlareSystems.length > 0);\r\n }\r\n }\r\n}\r\n\r\nLensFlareSystem._SceneComponentInitialization = (scene: Scene) => {\r\n let component = scene._getComponent(SceneComponentConstants.NAME_LENSFLARESYSTEM) as LensFlareSystemSceneComponent;\r\n if (!component) {\r\n component = new LensFlareSystemSceneComponent(scene);\r\n scene._addComponent(component);\r\n }\r\n};\r\n"]}
@@ -936,7 +936,7 @@ export class ShadowGenerator {
936
936
  }
937
937
  return;
938
938
  }
939
- const subMeshes = new Array();
939
+ const subMeshes = [];
940
940
  for (const mesh of renderList) {
941
941
  subMeshes.push(...mesh.subMeshes);
942
942
  }