@onerjs/core 8.42.2 → 8.42.4

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 (162) hide show
  1. package/Animations/animatorAvatar.d.ts +31 -16
  2. package/Animations/animatorAvatar.js +138 -86
  3. package/Animations/animatorAvatar.js.map +1 -1
  4. package/AudioV2/abstractAudio/abstractSound.js +3 -4
  5. package/AudioV2/abstractAudio/abstractSound.js.map +1 -1
  6. package/AudioV2/abstractAudio/audioBus.js +3 -0
  7. package/AudioV2/abstractAudio/audioBus.js.map +1 -1
  8. package/AudioV2/abstractAudio/streamingSoundInstance.d.ts +1 -1
  9. package/AudioV2/abstractAudio/streamingSoundInstance.js +2 -2
  10. package/AudioV2/abstractAudio/streamingSoundInstance.js.map +1 -1
  11. package/AudioV2/webAudio/components/spatialWebAudioUpdaterComponent.d.ts +4 -1
  12. package/AudioV2/webAudio/components/spatialWebAudioUpdaterComponent.js +5 -2
  13. package/AudioV2/webAudio/components/spatialWebAudioUpdaterComponent.js.map +1 -1
  14. package/AudioV2/webAudio/webAudioStaticSound.js +3 -3
  15. package/AudioV2/webAudio/webAudioStaticSound.js.map +1 -1
  16. package/AudioV2/webAudio/webAudioStreamingSound.js +2 -4
  17. package/AudioV2/webAudio/webAudioStreamingSound.js.map +1 -1
  18. package/Behaviors/Meshes/pointerDragBehavior.d.ts +6 -1
  19. package/Behaviors/Meshes/pointerDragBehavior.js +4 -0
  20. package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
  21. package/Cameras/Inputs/geospatialCameraKeyboardInput.js +6 -3
  22. package/Cameras/Inputs/geospatialCameraKeyboardInput.js.map +1 -1
  23. package/Cameras/geospatialCamera.d.ts +4 -2
  24. package/Cameras/geospatialCamera.js +10 -8
  25. package/Cameras/geospatialCamera.js.map +1 -1
  26. package/Cameras/geospatialCameraMovement.d.ts +11 -1
  27. package/Cameras/geospatialCameraMovement.js +26 -6
  28. package/Cameras/geospatialCameraMovement.js.map +1 -1
  29. package/Debug/physicsViewer.d.ts +1 -0
  30. package/Debug/physicsViewer.js +1 -0
  31. package/Debug/physicsViewer.js.map +1 -1
  32. package/Engines/WebGPU/webgpuBufferManager.js +3 -1
  33. package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
  34. package/Engines/abstractEngine.js +2 -2
  35. package/Engines/abstractEngine.js.map +1 -1
  36. package/Engines/nullEngine.js +4 -0
  37. package/Engines/nullEngine.js.map +1 -1
  38. package/Engines/webgpuEngine.js +2 -2
  39. package/Engines/webgpuEngine.js.map +1 -1
  40. package/Gizmos/axisDragGizmo.d.ts +1 -1
  41. package/Gizmos/axisDragGizmo.js +13 -5
  42. package/Gizmos/axisDragGizmo.js.map +1 -1
  43. package/Gizmos/gizmo.js +8 -2
  44. package/Gizmos/gizmo.js.map +1 -1
  45. package/Gizmos/planeDragGizmo.js +10 -3
  46. package/Gizmos/planeDragGizmo.js.map +1 -1
  47. package/Gizmos/planeRotationGizmo.js +10 -0
  48. package/Gizmos/planeRotationGizmo.js.map +1 -1
  49. package/Layers/highlightLayer.d.ts +14 -0
  50. package/Layers/highlightLayer.js +20 -0
  51. package/Layers/highlightLayer.js.map +1 -1
  52. package/Layers/selectionOutlineLayer.d.ts +1 -0
  53. package/Layers/selectionOutlineLayer.js +1 -0
  54. package/Layers/selectionOutlineLayer.js.map +1 -1
  55. package/Layers/thinEffectLayer.js +25 -1
  56. package/Layers/thinEffectLayer.js.map +1 -1
  57. package/Layers/thinHighlightLayer.d.ts +9 -0
  58. package/Layers/thinHighlightLayer.js +19 -3
  59. package/Layers/thinHighlightLayer.js.map +1 -1
  60. package/Lights/Clustered/clusteredLightContainer.js +4 -0
  61. package/Lights/Clustered/clusteredLightContainer.js.map +1 -1
  62. package/Loading/Plugins/babylonFileLoader.d.ts +2 -0
  63. package/Loading/Plugins/babylonFileLoader.js +2 -0
  64. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  65. package/Materials/Node/Blocks/Dual/depthSourceBlock.d.ts +1 -0
  66. package/Materials/Node/Blocks/Dual/depthSourceBlock.js +1 -0
  67. package/Materials/Node/Blocks/Dual/depthSourceBlock.js.map +1 -1
  68. package/Materials/Node/Blocks/Dual/sceneDepthBlock.d.ts +1 -0
  69. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js +1 -0
  70. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
  71. package/Materials/Node/Blocks/Teleport/teleportOutBlock.js +10 -4
  72. package/Materials/Node/Blocks/Teleport/teleportOutBlock.js.map +1 -1
  73. package/Materials/Textures/renderTargetTexture.js +6 -4
  74. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  75. package/Materials/effect.functions.js +29 -21
  76. package/Materials/effect.functions.js.map +1 -1
  77. package/Meshes/abstractMesh.d.ts +9 -0
  78. package/Meshes/abstractMesh.js +16 -0
  79. package/Meshes/abstractMesh.js.map +1 -1
  80. package/Meshes/mesh.js +2 -0
  81. package/Meshes/mesh.js.map +1 -1
  82. package/Meshes/subMesh.d.ts +2 -1
  83. package/Meshes/subMesh.js +3 -2
  84. package/Meshes/subMesh.js.map +1 -1
  85. package/Meshes/thinInstanceMesh.d.ts +7 -3
  86. package/Meshes/thinInstanceMesh.js +15 -3
  87. package/Meshes/thinInstanceMesh.js.map +1 -1
  88. package/Misc/snapshotRenderingHelper.d.ts +5 -3
  89. package/Misc/snapshotRenderingHelper.js +9 -5
  90. package/Misc/snapshotRenderingHelper.js.map +1 -1
  91. package/Particles/EmitterTypes/coneParticleEmitter.js +3 -3
  92. package/Particles/EmitterTypes/coneParticleEmitter.js.map +1 -1
  93. package/Particles/EmitterTypes/sphereParticleEmitter.js +2 -2
  94. package/Particles/EmitterTypes/sphereParticleEmitter.js.map +1 -1
  95. package/Particles/Node/Blocks/index.d.ts +0 -2
  96. package/Particles/Node/Blocks/index.js +0 -2
  97. package/Particles/Node/Blocks/index.js.map +1 -1
  98. package/Particles/Node/Blocks/particleNumberMathBlock.js +16 -0
  99. package/Particles/Node/Blocks/particleNumberMathBlock.js.map +1 -1
  100. package/Particles/Node/Blocks/systemBlock.d.ts +0 -4
  101. package/Particles/Node/Blocks/systemBlock.js +1 -32
  102. package/Particles/Node/Blocks/systemBlock.js.map +1 -1
  103. package/Particles/Node/nodeParticleSystemSet.helper.js +2 -89
  104. package/Particles/Node/nodeParticleSystemSet.helper.js.map +1 -1
  105. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.d.ts +1 -0
  106. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js +1 -0
  107. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js.map +1 -1
  108. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.d.ts +1 -0
  109. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js +1 -0
  110. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js.map +1 -1
  111. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.d.ts +6 -0
  112. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +8 -0
  113. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
  114. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.d.ts +1 -0
  115. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js +1 -0
  116. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
  117. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.d.ts +6 -0
  118. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js +8 -0
  119. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js.map +1 -1
  120. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.d.ts +1 -0
  121. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js +1 -0
  122. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
  123. package/PostProcesses/screenSpaceReflectionPostProcess.d.ts +1 -0
  124. package/PostProcesses/screenSpaceReflectionPostProcess.js +1 -0
  125. package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
  126. package/Rendering/GlobalIllumination/giRSMManager.d.ts +1 -0
  127. package/Rendering/GlobalIllumination/giRSMManager.js +1 -0
  128. package/Rendering/GlobalIllumination/giRSMManager.js.map +1 -1
  129. package/Rendering/IBLShadows/iblShadowsAccumulationPass.js +7 -3
  130. package/Rendering/IBLShadows/iblShadowsAccumulationPass.js.map +1 -1
  131. package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.js +3 -1
  132. package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.js.map +1 -1
  133. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js +3 -1
  134. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js.map +1 -1
  135. package/Rendering/geometryBufferRenderer.js +3 -0
  136. package/Rendering/geometryBufferRenderer.js.map +1 -1
  137. package/Rendering/prePassRenderer.d.ts +1 -0
  138. package/Rendering/prePassRenderer.js +1 -0
  139. package/Rendering/prePassRenderer.js.map +1 -1
  140. package/Shaders/gpuUpdateParticles.vertex.js +1 -1
  141. package/Shaders/gpuUpdateParticles.vertex.js.map +1 -1
  142. package/ShadersWGSL/ShadersInclude/depthPrePass.js +4 -1
  143. package/ShadersWGSL/ShadersInclude/depthPrePass.js.map +1 -1
  144. package/ShadersWGSL/background.fragment.js +1 -1
  145. package/ShadersWGSL/background.fragment.js.map +1 -1
  146. package/ShadersWGSL/default.fragment.js +1 -1
  147. package/ShadersWGSL/default.fragment.js.map +1 -1
  148. package/ShadersWGSL/gpuUpdateParticles.compute.js +1 -1
  149. package/ShadersWGSL/gpuUpdateParticles.compute.js.map +1 -1
  150. package/XR/features/WebXRControllerPhysics.d.ts +1 -0
  151. package/XR/features/WebXRControllerPhysics.js +1 -0
  152. package/XR/features/WebXRControllerPhysics.js.map +1 -1
  153. package/XR/features/WebXRHandTracking.d.ts +1 -0
  154. package/XR/features/WebXRHandTracking.js +1 -0
  155. package/XR/features/WebXRHandTracking.js.map +1 -1
  156. package/package.json +1 -1
  157. package/Particles/Node/Blocks/Update/updateRemapBlock.d.ts +0 -39
  158. package/Particles/Node/Blocks/Update/updateRemapBlock.js +0 -93
  159. package/Particles/Node/Blocks/Update/updateRemapBlock.js.map +0 -1
  160. package/Particles/Node/Blocks/particleFresnelBlock.d.ts +0 -34
  161. package/Particles/Node/Blocks/particleFresnelBlock.js +0 -74
  162. package/Particles/Node/Blocks/particleFresnelBlock.js.map +0 -1
@@ -5,6 +5,7 @@ import type { NodeMaterialConnectionPoint } from "../../nodeMaterialBlockConnect
5
5
  import type { Scene } from "../../../../scene.js";
6
6
  import type { Effect } from "../../../effect.js";
7
7
  import type { NodeMaterial } from "../../nodeMaterial.js";
8
+ import "../../../../Rendering/depthRendererSceneComponent.js";
8
9
  /**
9
10
  * Block used to retrieve the depth (zbuffer) of the scene
10
11
  * @since 5.0.0
@@ -5,6 +5,7 @@ import { NodeMaterialBlockTargets } from "../../Enums/nodeMaterialBlockTargets.j
5
5
  import { RegisterClass } from "../../../../Misc/typeStore.js";
6
6
  import { editableInPropertyPage } from "../../../../Decorators/nodeDecorator.js";
7
7
 
8
+ import "../../../../Rendering/depthRendererSceneComponent.js";
8
9
  /**
9
10
  * Block used to retrieve the depth (zbuffer) of the scene
10
11
  * @since 5.0.0
@@ -1 +1 @@
1
- {"version":3,"file":"sceneDepthBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Dual/sceneDepthBlock.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,qCAAqC,EAAE,MAAM,mDAAmD,CAAC;AAE1G,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAGhF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAG3D,OAAO,EAAE,sBAAsB,EAA0B,MAAM,sCAAsC,CAAC;AAKtG,OAAO,EAAE,SAAS,EAAE,yCAA+B;AAEnD;;;GAGG;AACH,MAAM,OAAO,eAAgB,SAAQ,iBAAiB;IA0DlD;;;OAGG;IACH,YAAmB,IAAY;QAC3B,KAAK,CAAC,IAAI,EAAE,wBAAwB,CAAC,iBAAiB,CAAC,CAAC;QA1D5D;;WAEG;QAmBI,sBAAiB,GAAG,KAAK,CAAC;QAEjC;;WAEG;QAkBI,sBAAiB,GAAG,KAAK,CAAC;QAEjC;;WAEG;QAII,oBAAe,GAAG,KAAK,CAAC;QAS3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,qCAAqC,CAAC,UAAU,EAAE,KAAK,EAAE,wBAAwB,CAAC,iBAAiB,CAAC,CAAC;QAE9H,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,qCAAqC,CAAC,KAAK,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAE5G,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,0CAA0C,CACtD,qCAAqC,CAAC,OAAO,GAAG,qCAAqC,CAAC,OAAO,GAAG,qCAAqC,CAAC,OAAO,CAChJ,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,iBAAiB,GAAG,KAAK,CAAC;IAC9C,CAAC;IAED;;;OAGG;IACa,YAAY;QACxB,OAAO,iBAAiB,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,IAAW,EAAE;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACa,UAAU,CAAC,KAA6B;QACpD,KAAK,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;IACjD,CAAC;IAED,oBAAoB;IACpB,IAAoB,MAAM;QACtB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;YACvB,OAAO,wBAAwB,CAAC,iBAAiB,CAAC;QACtD,CAAC;QAED,IAAI,IAAI,CAAC,EAAE,CAAC,WAAY,CAAC,OAAO,EAAE,CAAC;YAC/B,OAAO,wBAAwB,CAAC,iBAAiB,CAAC;QACtD,CAAC;QAED,OAAO,wBAAwB,CAAC,QAAQ,CAAC;IAC7C,CAAC;IAEO,WAAW,CAAC,KAAY;QAC5B,MAAM,aAAa,GAAG,KAAK,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAE5I,OAAO,aAAa,CAAC,WAAW,EAAE,CAAC;IACvC,CAAC;IAED;;;;OAIG;IACa,IAAI,CAAC,MAAc,EAAE,YAA0B;QAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE1D,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;IAEO,iBAAiB,CAAC,KAA6B;QACnD,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC;QAExB,IAAI,OAAO,CAAC,cAAe,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YAC7C,MAAM,iBAAiB,GAAG,OAAO,CAAC,cAAe,CAAC,UAAwB,CAAC;YAE3E,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC;gBACjC,KAAK,CAAC,sBAAsB,CACxB,OAAO,CAAC,sBAAsB,EAC9B,OAAO,CAAC,IAAI,KAAK,qCAAqC,CAAC,OAAO;oBAC1D,CAAC,CAAC,qCAAqC,CAAC,OAAO;oBAC/C,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,qCAAqC,CAAC,OAAO;wBAC9D,CAAC,CAAC,qCAAqC,CAAC,OAAO;wBAC/C,CAAC,CAAC,qCAAqC,CAAC,OAAO,CACxD,CAAC;YACN,CAAC;QACL,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,OAAO,GAAG,OAAO,CAAC,sBAAsB,CAAC;QAE5D,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,WAAW,EAAE,qCAAqC,CAAC,OAAO,CAAC,CAAC;QAE9F,KAAK,CAAC,iBAAiB,IAAI,GAAG,IAAI,CAAC,WAAW,MAAM,OAAO,CAAC,sBAAsB,QAAQ,CAAC;QAE3F,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,yBAAyB,CAAC,EAAE,CAAC;YAC1D,OAAO;QACX,CAAC;QAED,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAEpC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;gBACtB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YAChD,CAAC;QACL,CAAC;IACL,CAAC;IAEO,iBAAiB,CAAC,KAA6B,EAAE,UAAU,GAAG,KAAK;QACvE,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC;QAExB,IAAI,UAAU,EAAE,CAAC;YACb,IAAI,KAAK,CAAC,MAAM,KAAK,wBAAwB,CAAC,QAAQ,EAAE,CAAC;gBACrD,OAAO;YACX,CAAC;YACD,MAAM,eAAe,GACjB,KAAK,CAAC,cAAc,gCAAwB;gBACxC,CAAC,CAAC,aAAa,IAAI,CAAC,YAAY,GAAG;gBACnC,CAAC,CAAC,sBAAsB,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,iBAAiB,GAAG,CAAC;YAEzG,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,gCAAwB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;YAE7E,KAAK,CAAC,iBAAiB,IAAI,GAAG,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,EAAE,qCAAqC,CAAC,OAAO,CAAC,MAAM,eAAe,IAAI,OAAO,CAAC,sBAAsB,MAAM,UAAU,MAAM,CAAC;YACxM,OAAO;QACX,CAAC;QAED,MAAM,eAAe,GACjB,KAAK,CAAC,cAAc,gCAAwB;YACxC,CAAC,CAAC,aAAa,IAAI,CAAC,YAAY,GAAG;YACnC,CAAC,CAAC,iBAAiB,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,iBAAiB,GAAG,CAAC;QAEpG,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,KAAK,wBAAwB,CAAC,QAAQ,EAAE,CAAC;YAClE,KAAK,CAAC,iBAAiB,IAAI,GAAG,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,EAAE,qCAAqC,CAAC,OAAO,CAAC,MAAM,eAAe,IAAI,OAAO,CAAC,sBAAsB,SAAS,CAAC;YAC3L,OAAO;QACX,CAAC;QAED,KAAK,CAAC,iBAAiB,IAAI,GAAG,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,EAAE,qCAAqC,CAAC,OAAO,CAAC,MAAM,eAAe,IAAI,IAAI,CAAC,WAAW,MAAM,CAAC;IAC9K,CAAC;IAEO,YAAY,CAAC,KAA6B,EAAE,MAAmC,EAAE,OAAe,EAAE,UAAU,GAAG,KAAK;QACxH,IAAI,UAAU,EAAE,CAAC;YACb,IAAI,KAAK,CAAC,MAAM,KAAK,wBAAwB,CAAC,QAAQ,EAAE,CAAC;gBACrD,OAAO;YACX,CAAC;YAED,KAAK,CAAC,iBAAiB,IAAI,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,gBAAgB,IAAI,OAAO,KAAK,CAAC;YACtG,OAAO;QACX,CAAC;QAED,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,KAAK,wBAAwB,CAAC,QAAQ,EAAE,CAAC;YAClE,KAAK,CAAC,iBAAiB,IAAI,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,gBAAgB,IAAI,OAAO,KAAK,CAAC;YACtG,OAAO;QACX,CAAC;QAED,KAAK,CAAC,iBAAiB,IAAI,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,gBAAgB,IAAI,OAAO,KAAK,CAAC;IAC1G,CAAC;IAEkB,WAAW,CAAC,KAA6B;QACxD,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEzB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC;QACtE,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;QAEtE,IAAI,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACpD,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,wBAAwB,CAAC,QAAQ,EAAE,CAAC;YACrD,SAAS;YACT,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACxC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAC9B,OAAO;QACX,CAAC;QAED,WAAW;QACX,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,2BAA2B,CAAC,EAAE,CAAC;YAC5D,OAAO;QACX,CAAC;QAED,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAExC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAE9B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;gBACtB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;YAC1C,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;OAGG;IACa,SAAS;QACrB,MAAM,mBAAmB,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAE9C,mBAAmB,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAC/D,mBAAmB,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAC/D,mBAAmB,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QAE3D,OAAO,mBAAmB,CAAC;IAC/B,CAAC;IAED;;;;;OAKG;IACa,YAAY,CAAC,mBAAwB,EAAE,KAAY,EAAE,OAAe;QAChF,KAAK,CAAC,YAAY,CAAC,mBAAmB,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAExD,IAAI,CAAC,iBAAiB,GAAG,mBAAmB,CAAC,iBAAiB,CAAC;QAC/D,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,mBAAmB,CAAC,iBAAiB,CAAC;QACjE,IAAI,CAAC,eAAe,GAAG,mBAAmB,CAAC,eAAe,CAAC;IAC/D,CAAC;CACJ;AApQU;IAlBN,sBAAsB,CAAC,sBAAsB,0CAAkC,UAAU,EAAE;QACxF,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE;YACP,sBAAsB,EAAE,IAAI;YAC5B,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBACvB,MAAM,eAAe,GAAG,KAAwB,CAAC;gBACjD,IAAI,MAAM,GAAG,KAAK,CAAC;gBACnB,IAAI,eAAe,CAAC,iBAAiB,EAAE,CAAC;oBACpC,eAAe,CAAC,iBAAiB,GAAG,KAAK,CAAC;oBAC1C,MAAM,GAAG,IAAI,CAAC;gBAClB,CAAC;gBACD,IAAI,KAAK,EAAE,CAAC;oBACR,KAAK,CAAC,oBAAoB,EAAE,CAAC;gBACjC,CAAC;gBACD,OAAO,MAAM,CAAC;YAClB,CAAC;SACJ;KACJ,CAAC;0DAC+B;AAsB1B;IAjBN,sBAAsB,CAAC,sBAAsB,0CAAkC,UAAU,EAAE;QACxF,SAAS,EAAE;YACP,sBAAsB,EAAE,IAAI;YAC5B,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBACvB,MAAM,eAAe,GAAG,KAAwB,CAAC;gBACjD,IAAI,MAAM,GAAG,KAAK,CAAC;gBACnB,IAAI,eAAe,CAAC,iBAAiB,EAAE,CAAC;oBACpC,eAAe,CAAC,iBAAiB,GAAG,KAAK,CAAC;oBAC1C,MAAM,GAAG,IAAI,CAAC;gBAClB,CAAC;gBACD,IAAI,KAAK,EAAE,CAAC;oBACR,KAAK,CAAC,oBAAoB,EAAE,CAAC;gBACjC,CAAC;gBACD,OAAO,MAAM,CAAC;YAClB,CAAC;SACJ;KACJ,CAAC;0DAC+B;AAQ1B;IAHN,sBAAsB,CAAC,qBAAqB,0CAAkC,UAAU,EAAE;QACvF,SAAS,EAAE,EAAE,sBAAsB,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,oBAAoB,EAAE,EAAE;KAClG,CAAC;wDAC6B;AAwOnC,aAAa,CAAC,yBAAyB,EAAE,eAAe,CAAC,CAAC","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport type { BaseTexture } from \"../../../Textures/baseTexture\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport type { InputBlock } from \"../Input/inputBlock\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport type { Effect } from \"../../../effect\";\r\n\r\nimport type { NodeMaterial } from \"../../nodeMaterial\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { Constants } from \"core/Engines/constants\";\r\n\r\n/**\r\n * Block used to retrieve the depth (zbuffer) of the scene\r\n * @since 5.0.0\r\n */\r\nexport class SceneDepthBlock extends NodeMaterialBlock {\r\n private _samplerName: string;\r\n private _mainUVName: string;\r\n private _tempTextureRead: string;\r\n\r\n /**\r\n * Defines if the depth renderer should be setup in non linear mode\r\n */\r\n @editableInPropertyPage(\"Use non linear depth\", PropertyTypeForEdition.Boolean, \"ADVANCED\", {\r\n embedded: true,\r\n notifiers: {\r\n activatePreviewCommand: true,\r\n callback: (scene, block) => {\r\n const sceneDepthBlock = block as SceneDepthBlock;\r\n let retVal = false;\r\n if (sceneDepthBlock.useNonLinearDepth) {\r\n sceneDepthBlock.storeCameraSpaceZ = false;\r\n retVal = true;\r\n }\r\n if (scene) {\r\n scene.disableDepthRenderer();\r\n }\r\n return retVal;\r\n },\r\n },\r\n })\r\n public useNonLinearDepth = false;\r\n\r\n /**\r\n * Defines if the depth renderer should be setup in camera space Z mode (if set, useNonLinearDepth has no effect)\r\n */\r\n @editableInPropertyPage(\"Store Camera space Z\", PropertyTypeForEdition.Boolean, \"ADVANCED\", {\r\n notifiers: {\r\n activatePreviewCommand: true,\r\n callback: (scene, block) => {\r\n const sceneDepthBlock = block as SceneDepthBlock;\r\n let retVal = false;\r\n if (sceneDepthBlock.storeCameraSpaceZ) {\r\n sceneDepthBlock.useNonLinearDepth = false;\r\n retVal = true;\r\n }\r\n if (scene) {\r\n scene.disableDepthRenderer();\r\n }\r\n return retVal;\r\n },\r\n },\r\n })\r\n public storeCameraSpaceZ = false;\r\n\r\n /**\r\n * Defines if the depth renderer should be setup in full 32 bits float mode\r\n */\r\n @editableInPropertyPage(\"Force 32 bits float\", PropertyTypeForEdition.Boolean, \"ADVANCED\", {\r\n notifiers: { activatePreviewCommand: true, callback: (scene) => scene?.disableDepthRenderer() },\r\n })\r\n public force32itsFloat = false;\r\n\r\n /**\r\n * Create a new SceneDepthBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.VertexAndFragment);\r\n\r\n this._isUnique = true;\r\n\r\n this.registerInput(\"uv\", NodeMaterialBlockConnectionPointTypes.AutoDetect, false, NodeMaterialBlockTargets.VertexAndFragment);\r\n\r\n this.registerOutput(\"depth\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Neutral);\r\n\r\n this._inputs[0].addExcludedConnectionPointFromAllowedTypes(\r\n NodeMaterialBlockConnectionPointTypes.Vector2 | NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4\r\n );\r\n\r\n this._inputs[0]._prioritizeVertex = false;\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"SceneDepthBlock\";\r\n }\r\n\r\n /**\r\n * Gets the uv input component\r\n */\r\n public get uv(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the depth output component\r\n */\r\n public get depth(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Initialize the block and prepare the context for build\r\n * @param state defines the state that will be used for the build\r\n */\r\n public override initialize(state: NodeMaterialBuildState) {\r\n state._excludeVariableName(\"textureSampler\");\r\n }\r\n\r\n /** {@inheritDoc} */\r\n public override get target() {\r\n if (!this.uv.isConnected) {\r\n return NodeMaterialBlockTargets.VertexAndFragment;\r\n }\r\n\r\n if (this.uv.sourceBlock!.isInput) {\r\n return NodeMaterialBlockTargets.VertexAndFragment;\r\n }\r\n\r\n return NodeMaterialBlockTargets.Fragment;\r\n }\r\n\r\n private _getTexture(scene: Scene): BaseTexture {\r\n const depthRenderer = scene.enableDepthRenderer(undefined, this.useNonLinearDepth, this.force32itsFloat, undefined, this.storeCameraSpaceZ);\r\n\r\n return depthRenderer.getDepthMap();\r\n }\r\n\r\n /**\r\n * Bind data to effect\r\n * @param effect - the effect to bind to\r\n * @param nodeMaterial - the node material\r\n */\r\n public override bind(effect: Effect, nodeMaterial: NodeMaterial) {\r\n const texture = this._getTexture(nodeMaterial.getScene());\r\n\r\n effect.setTexture(this._samplerName, texture);\r\n }\r\n\r\n private _injectVertexCode(state: NodeMaterialBuildState) {\r\n const uvInput = this.uv;\r\n\r\n if (uvInput.connectedPoint!.ownerBlock.isInput) {\r\n const uvInputOwnerBlock = uvInput.connectedPoint!.ownerBlock as InputBlock;\r\n\r\n if (!uvInputOwnerBlock.isAttribute) {\r\n state._emitUniformFromString(\r\n uvInput.associatedVariableName,\r\n uvInput.type === NodeMaterialBlockConnectionPointTypes.Vector3\r\n ? NodeMaterialBlockConnectionPointTypes.Vector3\r\n : uvInput.type === NodeMaterialBlockConnectionPointTypes.Vector4\r\n ? NodeMaterialBlockConnectionPointTypes.Vector4\r\n : NodeMaterialBlockConnectionPointTypes.Vector2\r\n );\r\n }\r\n }\r\n\r\n this._mainUVName = \"vMain\" + uvInput.associatedVariableName;\r\n\r\n state._emitVaryingFromString(this._mainUVName, NodeMaterialBlockConnectionPointTypes.Vector2);\r\n\r\n state.compilationString += `${this._mainUVName} = ${uvInput.associatedVariableName}.xy;\\n`;\r\n\r\n if (!this._outputs.some((o) => o.isConnectedInVertexShader)) {\r\n return;\r\n }\r\n\r\n this._writeTextureRead(state, true);\r\n\r\n for (const output of this._outputs) {\r\n if (output.hasEndpoints) {\r\n this._writeOutput(state, output, \"r\", true);\r\n }\r\n }\r\n }\r\n\r\n private _writeTextureRead(state: NodeMaterialBuildState, vertexMode = false) {\r\n const uvInput = this.uv;\r\n\r\n if (vertexMode) {\r\n if (state.target === NodeMaterialBlockTargets.Fragment) {\r\n return;\r\n }\r\n const textureReadFunc =\r\n state.shaderLanguage === ShaderLanguage.GLSL\r\n ? `texture2D(${this._samplerName},`\r\n : `textureSampleLevel(${this._samplerName}, ${this._samplerName + Constants.AUTOSAMPLERSUFFIX},`;\r\n\r\n const complement = state.shaderLanguage === ShaderLanguage.GLSL ? \"\" : \", 0\";\r\n\r\n state.compilationString += `${state._declareLocalVar(this._tempTextureRead, NodeMaterialBlockConnectionPointTypes.Vector4)}= ${textureReadFunc} ${uvInput.associatedVariableName}.xy${complement});\\n`;\r\n return;\r\n }\r\n\r\n const textureReadFunc =\r\n state.shaderLanguage === ShaderLanguage.GLSL\r\n ? `texture2D(${this._samplerName},`\r\n : `textureSample(${this._samplerName}, ${this._samplerName + Constants.AUTOSAMPLERSUFFIX},`;\r\n\r\n if (this.uv.ownerBlock.target === NodeMaterialBlockTargets.Fragment) {\r\n state.compilationString += `${state._declareLocalVar(this._tempTextureRead, NodeMaterialBlockConnectionPointTypes.Vector4)} = ${textureReadFunc} ${uvInput.associatedVariableName}.xy);\\n`;\r\n return;\r\n }\r\n\r\n state.compilationString += `${state._declareLocalVar(this._tempTextureRead, NodeMaterialBlockConnectionPointTypes.Vector4)} = ${textureReadFunc} ${this._mainUVName});\\n`;\r\n }\r\n\r\n private _writeOutput(state: NodeMaterialBuildState, output: NodeMaterialConnectionPoint, swizzle: string, vertexMode = false) {\r\n if (vertexMode) {\r\n if (state.target === NodeMaterialBlockTargets.Fragment) {\r\n return;\r\n }\r\n\r\n state.compilationString += `${state._declareOutput(output)} = ${this._tempTextureRead}.${swizzle};\\n`;\r\n return;\r\n }\r\n\r\n if (this.uv.ownerBlock.target === NodeMaterialBlockTargets.Fragment) {\r\n state.compilationString += `${state._declareOutput(output)} = ${this._tempTextureRead}.${swizzle};\\n`;\r\n return;\r\n }\r\n\r\n state.compilationString += `${state._declareOutput(output)} = ${this._tempTextureRead}.${swizzle};\\n`;\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n this._samplerName = state._getFreeVariableName(this.name + \"Sampler\");\r\n this._tempTextureRead = state._getFreeVariableName(\"tempTextureRead\");\r\n\r\n if (state.sharedData.bindableBlocks.indexOf(this) < 0) {\r\n state.sharedData.bindableBlocks.push(this);\r\n }\r\n\r\n if (state.target !== NodeMaterialBlockTargets.Fragment) {\r\n // Vertex\r\n state._emit2DSampler(this._samplerName);\r\n this._injectVertexCode(state);\r\n return;\r\n }\r\n\r\n // Fragment\r\n if (!this._outputs.some((o) => o.isConnectedInFragmentShader)) {\r\n return;\r\n }\r\n\r\n state._emit2DSampler(this._samplerName);\r\n\r\n this._writeTextureRead(state);\r\n\r\n for (const output of this._outputs) {\r\n if (output.hasEndpoints) {\r\n this._writeOutput(state, output, \"r\");\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Serializes the block\r\n * @returns the serialized object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.useNonLinearDepth = this.useNonLinearDepth;\r\n serializationObject.storeCameraSpaceZ = this.storeCameraSpaceZ;\r\n serializationObject.force32itsFloat = this.force32itsFloat;\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Deserializes the block\r\n * @param serializationObject - the serialization object\r\n * @param scene - the scene\r\n * @param rootUrl - the root url\r\n */\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.useNonLinearDepth = serializationObject.useNonLinearDepth;\r\n this.storeCameraSpaceZ = !!serializationObject.storeCameraSpaceZ;\r\n this.force32itsFloat = serializationObject.force32itsFloat;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.SceneDepthBlock\", SceneDepthBlock);\r\n"]}
1
+ {"version":3,"file":"sceneDepthBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Dual/sceneDepthBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport type { BaseTexture } from \"../../../Textures/baseTexture\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport type { InputBlock } from \"../Input/inputBlock\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport type { Effect } from \"../../../effect\";\r\n\r\nimport type { NodeMaterial } from \"../../nodeMaterial\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { Constants } from \"core/Engines/constants\";\r\n\r\nimport \"../../../../Rendering/depthRendererSceneComponent\";\r\n\r\n/**\r\n * Block used to retrieve the depth (zbuffer) of the scene\r\n * @since 5.0.0\r\n */\r\nexport class SceneDepthBlock extends NodeMaterialBlock {\r\n private _samplerName: string;\r\n private _mainUVName: string;\r\n private _tempTextureRead: string;\r\n\r\n /**\r\n * Defines if the depth renderer should be setup in non linear mode\r\n */\r\n @editableInPropertyPage(\"Use non linear depth\", PropertyTypeForEdition.Boolean, \"ADVANCED\", {\r\n embedded: true,\r\n notifiers: {\r\n activatePreviewCommand: true,\r\n callback: (scene, block) => {\r\n const sceneDepthBlock = block as SceneDepthBlock;\r\n let retVal = false;\r\n if (sceneDepthBlock.useNonLinearDepth) {\r\n sceneDepthBlock.storeCameraSpaceZ = false;\r\n retVal = true;\r\n }\r\n if (scene) {\r\n scene.disableDepthRenderer();\r\n }\r\n return retVal;\r\n },\r\n },\r\n })\r\n public useNonLinearDepth = false;\r\n\r\n /**\r\n * Defines if the depth renderer should be setup in camera space Z mode (if set, useNonLinearDepth has no effect)\r\n */\r\n @editableInPropertyPage(\"Store Camera space Z\", PropertyTypeForEdition.Boolean, \"ADVANCED\", {\r\n notifiers: {\r\n activatePreviewCommand: true,\r\n callback: (scene, block) => {\r\n const sceneDepthBlock = block as SceneDepthBlock;\r\n let retVal = false;\r\n if (sceneDepthBlock.storeCameraSpaceZ) {\r\n sceneDepthBlock.useNonLinearDepth = false;\r\n retVal = true;\r\n }\r\n if (scene) {\r\n scene.disableDepthRenderer();\r\n }\r\n return retVal;\r\n },\r\n },\r\n })\r\n public storeCameraSpaceZ = false;\r\n\r\n /**\r\n * Defines if the depth renderer should be setup in full 32 bits float mode\r\n */\r\n @editableInPropertyPage(\"Force 32 bits float\", PropertyTypeForEdition.Boolean, \"ADVANCED\", {\r\n notifiers: { activatePreviewCommand: true, callback: (scene) => scene?.disableDepthRenderer() },\r\n })\r\n public force32itsFloat = false;\r\n\r\n /**\r\n * Create a new SceneDepthBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.VertexAndFragment);\r\n\r\n this._isUnique = true;\r\n\r\n this.registerInput(\"uv\", NodeMaterialBlockConnectionPointTypes.AutoDetect, false, NodeMaterialBlockTargets.VertexAndFragment);\r\n\r\n this.registerOutput(\"depth\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Neutral);\r\n\r\n this._inputs[0].addExcludedConnectionPointFromAllowedTypes(\r\n NodeMaterialBlockConnectionPointTypes.Vector2 | NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4\r\n );\r\n\r\n this._inputs[0]._prioritizeVertex = false;\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"SceneDepthBlock\";\r\n }\r\n\r\n /**\r\n * Gets the uv input component\r\n */\r\n public get uv(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the depth output component\r\n */\r\n public get depth(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Initialize the block and prepare the context for build\r\n * @param state defines the state that will be used for the build\r\n */\r\n public override initialize(state: NodeMaterialBuildState) {\r\n state._excludeVariableName(\"textureSampler\");\r\n }\r\n\r\n /** {@inheritDoc} */\r\n public override get target() {\r\n if (!this.uv.isConnected) {\r\n return NodeMaterialBlockTargets.VertexAndFragment;\r\n }\r\n\r\n if (this.uv.sourceBlock!.isInput) {\r\n return NodeMaterialBlockTargets.VertexAndFragment;\r\n }\r\n\r\n return NodeMaterialBlockTargets.Fragment;\r\n }\r\n\r\n private _getTexture(scene: Scene): BaseTexture {\r\n const depthRenderer = scene.enableDepthRenderer(undefined, this.useNonLinearDepth, this.force32itsFloat, undefined, this.storeCameraSpaceZ);\r\n\r\n return depthRenderer.getDepthMap();\r\n }\r\n\r\n /**\r\n * Bind data to effect\r\n * @param effect - the effect to bind to\r\n * @param nodeMaterial - the node material\r\n */\r\n public override bind(effect: Effect, nodeMaterial: NodeMaterial) {\r\n const texture = this._getTexture(nodeMaterial.getScene());\r\n\r\n effect.setTexture(this._samplerName, texture);\r\n }\r\n\r\n private _injectVertexCode(state: NodeMaterialBuildState) {\r\n const uvInput = this.uv;\r\n\r\n if (uvInput.connectedPoint!.ownerBlock.isInput) {\r\n const uvInputOwnerBlock = uvInput.connectedPoint!.ownerBlock as InputBlock;\r\n\r\n if (!uvInputOwnerBlock.isAttribute) {\r\n state._emitUniformFromString(\r\n uvInput.associatedVariableName,\r\n uvInput.type === NodeMaterialBlockConnectionPointTypes.Vector3\r\n ? NodeMaterialBlockConnectionPointTypes.Vector3\r\n : uvInput.type === NodeMaterialBlockConnectionPointTypes.Vector4\r\n ? NodeMaterialBlockConnectionPointTypes.Vector4\r\n : NodeMaterialBlockConnectionPointTypes.Vector2\r\n );\r\n }\r\n }\r\n\r\n this._mainUVName = \"vMain\" + uvInput.associatedVariableName;\r\n\r\n state._emitVaryingFromString(this._mainUVName, NodeMaterialBlockConnectionPointTypes.Vector2);\r\n\r\n state.compilationString += `${this._mainUVName} = ${uvInput.associatedVariableName}.xy;\\n`;\r\n\r\n if (!this._outputs.some((o) => o.isConnectedInVertexShader)) {\r\n return;\r\n }\r\n\r\n this._writeTextureRead(state, true);\r\n\r\n for (const output of this._outputs) {\r\n if (output.hasEndpoints) {\r\n this._writeOutput(state, output, \"r\", true);\r\n }\r\n }\r\n }\r\n\r\n private _writeTextureRead(state: NodeMaterialBuildState, vertexMode = false) {\r\n const uvInput = this.uv;\r\n\r\n if (vertexMode) {\r\n if (state.target === NodeMaterialBlockTargets.Fragment) {\r\n return;\r\n }\r\n const textureReadFunc =\r\n state.shaderLanguage === ShaderLanguage.GLSL\r\n ? `texture2D(${this._samplerName},`\r\n : `textureSampleLevel(${this._samplerName}, ${this._samplerName + Constants.AUTOSAMPLERSUFFIX},`;\r\n\r\n const complement = state.shaderLanguage === ShaderLanguage.GLSL ? \"\" : \", 0\";\r\n\r\n state.compilationString += `${state._declareLocalVar(this._tempTextureRead, NodeMaterialBlockConnectionPointTypes.Vector4)}= ${textureReadFunc} ${uvInput.associatedVariableName}.xy${complement});\\n`;\r\n return;\r\n }\r\n\r\n const textureReadFunc =\r\n state.shaderLanguage === ShaderLanguage.GLSL\r\n ? `texture2D(${this._samplerName},`\r\n : `textureSample(${this._samplerName}, ${this._samplerName + Constants.AUTOSAMPLERSUFFIX},`;\r\n\r\n if (this.uv.ownerBlock.target === NodeMaterialBlockTargets.Fragment) {\r\n state.compilationString += `${state._declareLocalVar(this._tempTextureRead, NodeMaterialBlockConnectionPointTypes.Vector4)} = ${textureReadFunc} ${uvInput.associatedVariableName}.xy);\\n`;\r\n return;\r\n }\r\n\r\n state.compilationString += `${state._declareLocalVar(this._tempTextureRead, NodeMaterialBlockConnectionPointTypes.Vector4)} = ${textureReadFunc} ${this._mainUVName});\\n`;\r\n }\r\n\r\n private _writeOutput(state: NodeMaterialBuildState, output: NodeMaterialConnectionPoint, swizzle: string, vertexMode = false) {\r\n if (vertexMode) {\r\n if (state.target === NodeMaterialBlockTargets.Fragment) {\r\n return;\r\n }\r\n\r\n state.compilationString += `${state._declareOutput(output)} = ${this._tempTextureRead}.${swizzle};\\n`;\r\n return;\r\n }\r\n\r\n if (this.uv.ownerBlock.target === NodeMaterialBlockTargets.Fragment) {\r\n state.compilationString += `${state._declareOutput(output)} = ${this._tempTextureRead}.${swizzle};\\n`;\r\n return;\r\n }\r\n\r\n state.compilationString += `${state._declareOutput(output)} = ${this._tempTextureRead}.${swizzle};\\n`;\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n this._samplerName = state._getFreeVariableName(this.name + \"Sampler\");\r\n this._tempTextureRead = state._getFreeVariableName(\"tempTextureRead\");\r\n\r\n if (state.sharedData.bindableBlocks.indexOf(this) < 0) {\r\n state.sharedData.bindableBlocks.push(this);\r\n }\r\n\r\n if (state.target !== NodeMaterialBlockTargets.Fragment) {\r\n // Vertex\r\n state._emit2DSampler(this._samplerName);\r\n this._injectVertexCode(state);\r\n return;\r\n }\r\n\r\n // Fragment\r\n if (!this._outputs.some((o) => o.isConnectedInFragmentShader)) {\r\n return;\r\n }\r\n\r\n state._emit2DSampler(this._samplerName);\r\n\r\n this._writeTextureRead(state);\r\n\r\n for (const output of this._outputs) {\r\n if (output.hasEndpoints) {\r\n this._writeOutput(state, output, \"r\");\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Serializes the block\r\n * @returns the serialized object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.useNonLinearDepth = this.useNonLinearDepth;\r\n serializationObject.storeCameraSpaceZ = this.storeCameraSpaceZ;\r\n serializationObject.force32itsFloat = this.force32itsFloat;\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Deserializes the block\r\n * @param serializationObject - the serialization object\r\n * @param scene - the scene\r\n * @param rootUrl - the root url\r\n */\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.useNonLinearDepth = serializationObject.useNonLinearDepth;\r\n this.storeCameraSpaceZ = !!serializationObject.storeCameraSpaceZ;\r\n this.force32itsFloat = serializationObject.force32itsFloat;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.SceneDepthBlock\", SceneDepthBlock);\r\n"]}
@@ -69,10 +69,16 @@ export class NodeMaterialTeleportOutBlock extends NodeMaterialBlock {
69
69
  state.compilationString += state._declareOutput(this.output) + ` = ${this.entryPoint.input.associatedVariableName};\n`;
70
70
  if (this.entryPoint.endpoints.length > 1) {
71
71
  // Check if all the endpoints are in the same shader stage
72
- const firstTarget = this.entryPoint.endpoints[0].output.isConnectedInVertexShader;
73
- for (let i = 1; i < this.entryPoint.endpoints.length; i++) {
74
- if (this.entryPoint.endpoints[i].output.isConnectedInVertexShader !== firstTarget) {
75
- state.sharedData.raiseBuildError(`TeleportInBlock "${this.entryPoint.name}" cannot have outputs in different shader stages. All the outputs must be in the same shader stage (vertex or fragment but not both).`);
72
+ const firstConnected = this.entryPoint.endpoints.find((e) => e.output.isConnected);
73
+ if (firstConnected) {
74
+ const firstTarget = firstConnected.output.isConnectedInVertexShader;
75
+ for (const endpoint of this.entryPoint.endpoints) {
76
+ if (endpoint === firstConnected) {
77
+ continue;
78
+ }
79
+ if (endpoint.output.isConnected && endpoint.output.isConnectedInVertexShader !== firstTarget) {
80
+ state.sharedData.raiseBuildError(`TeleportInBlock "${this.entryPoint.name}" cannot have outputs in different shader stages. All the outputs must be in the same shader stage (vertex or fragment but not both).`);
81
+ }
76
82
  }
77
83
  }
78
84
  }
@@ -1 +1 @@
1
- {"version":3,"file":"teleportOutBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Teleport/teleportOutBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../../../types\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport type { NodeMaterialTeleportInBlock } from \"./teleportInBlock\";\r\nimport { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\n\r\n/**\r\n * Defines a block used to receive a value from a teleport entry point\r\n */\r\nexport class NodeMaterialTeleportOutBlock extends NodeMaterialBlock {\r\n /** @internal */\r\n public _entryPoint: Nullable<NodeMaterialTeleportInBlock> = null;\r\n /** @internal */\r\n public _tempEntryPointUniqueId: Nullable<number> = null;\r\n\r\n /**\r\n * Create a new TeleportOutBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Neutral);\r\n\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.BasedOnInput);\r\n }\r\n\r\n /**\r\n * Gets the entry point\r\n */\r\n public get entryPoint() {\r\n return this._entryPoint;\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"NodeMaterialTeleportOutBlock\";\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get output(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets or sets the target of the block\r\n */\r\n public override get target() {\r\n return this._entryPoint ? this._entryPoint.target : this._target;\r\n }\r\n\r\n public override set target(value: NodeMaterialBlockTargets) {\r\n if ((this._target & value) !== 0) {\r\n return;\r\n }\r\n this._target = value;\r\n }\r\n\r\n /** Detach from entry point */\r\n public detach() {\r\n if (!this._entryPoint) {\r\n return;\r\n }\r\n\r\n this._entryPoint.detachFromEndpoint(this);\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n if (!this.entryPoint) {\r\n return;\r\n }\r\n\r\n if (this.entryPoint.isConnectedToUniform) {\r\n // We skip the build if the entry point is connected to a uniform\r\n this.output.associatedVariableName = this.entryPoint.input.associatedVariableName;\r\n return;\r\n }\r\n\r\n state.compilationString += state._declareOutput(this.output) + ` = ${this.entryPoint.input.associatedVariableName};\\n`;\r\n\r\n if (this.entryPoint.endpoints.length > 1) {\r\n // Check if all the endpoints are in the same shader stage\r\n const firstTarget = this.entryPoint.endpoints[0].output.isConnectedInVertexShader;\r\n for (let i = 1; i < this.entryPoint.endpoints.length; i++) {\r\n if (this.entryPoint.endpoints[i].output.isConnectedInVertexShader !== firstTarget) {\r\n state.sharedData.raiseBuildError(\r\n `TeleportInBlock \"${this.entryPoint.name}\" cannot have outputs in different shader stages. All the outputs must be in the same shader stage (vertex or fragment but not both).`\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Clone the current block to a new identical block\r\n * @param scene defines the hosting scene\r\n * @param rootUrl defines the root URL to use to load textures and relative dependencies\r\n * @returns a copy of the current block\r\n */\r\n public override clone(scene: Scene, rootUrl: string = \"\") {\r\n const clone = super.clone(scene, rootUrl);\r\n\r\n if (this.entryPoint) {\r\n this.entryPoint.attachToEndpoint(clone as NodeMaterialTeleportOutBlock);\r\n }\r\n\r\n return clone;\r\n }\r\n\r\n protected override _customBuildStep(state: NodeMaterialBuildState, activeBlocks: NodeMaterialBlock[]): void {\r\n if (this.entryPoint) {\r\n this.entryPoint.build(state, activeBlocks);\r\n }\r\n }\r\n\r\n /**\r\n * Dumps the code for the block\r\n * @param uniqueNames - the unique names\r\n * @param alreadyDumped - the already dumped blocks\r\n * @returns the code string\r\n */\r\n public override _dumpCode(uniqueNames: string[], alreadyDumped: NodeMaterialBlock[]) {\r\n let codeString: string = \"\";\r\n if (this.entryPoint) {\r\n if (alreadyDumped.indexOf(this.entryPoint) === -1) {\r\n codeString += this.entryPoint._dumpCode(uniqueNames, alreadyDumped);\r\n }\r\n }\r\n\r\n return codeString + super._dumpCode(uniqueNames, alreadyDumped);\r\n }\r\n\r\n /**\r\n * Dumps the code for output connections\r\n * @param alreadyDumped - the already dumped blocks\r\n * @returns the code string\r\n */\r\n public override _dumpCodeForOutputConnections(alreadyDumped: NodeMaterialBlock[]) {\r\n let codeString = super._dumpCodeForOutputConnections(alreadyDumped);\r\n\r\n if (this.entryPoint) {\r\n codeString += this.entryPoint._dumpCodeForOutputConnections(alreadyDumped);\r\n }\r\n\r\n return codeString;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode();\r\n\r\n if (this.entryPoint) {\r\n codeString += `${this.entryPoint._codeVariableName}.attachToEndpoint(${this._codeVariableName});\\n`;\r\n }\r\n return codeString;\r\n }\r\n\r\n /**\r\n * Serializes this block in a JSON representation\r\n * @returns the serialized block object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.entryPoint = this.entryPoint?.uniqueId ?? \"\";\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Deserializes the block\r\n * @param serializationObject - the serialization object\r\n * @param scene - the scene\r\n * @param rootUrl - the root URL\r\n */\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this._tempEntryPointUniqueId = serializationObject.entryPoint;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.NodeMaterialTeleportOutBlock\", NodeMaterialTeleportOutBlock);\r\n"]}
1
+ {"version":3,"file":"teleportOutBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Teleport/teleportOutBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../../../types\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport type { NodeMaterialTeleportInBlock } from \"./teleportInBlock\";\r\nimport { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\n\r\n/**\r\n * Defines a block used to receive a value from a teleport entry point\r\n */\r\nexport class NodeMaterialTeleportOutBlock extends NodeMaterialBlock {\r\n /** @internal */\r\n public _entryPoint: Nullable<NodeMaterialTeleportInBlock> = null;\r\n /** @internal */\r\n public _tempEntryPointUniqueId: Nullable<number> = null;\r\n\r\n /**\r\n * Create a new TeleportOutBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Neutral);\r\n\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.BasedOnInput);\r\n }\r\n\r\n /**\r\n * Gets the entry point\r\n */\r\n public get entryPoint() {\r\n return this._entryPoint;\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"NodeMaterialTeleportOutBlock\";\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get output(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets or sets the target of the block\r\n */\r\n public override get target() {\r\n return this._entryPoint ? this._entryPoint.target : this._target;\r\n }\r\n\r\n public override set target(value: NodeMaterialBlockTargets) {\r\n if ((this._target & value) !== 0) {\r\n return;\r\n }\r\n this._target = value;\r\n }\r\n\r\n /** Detach from entry point */\r\n public detach() {\r\n if (!this._entryPoint) {\r\n return;\r\n }\r\n\r\n this._entryPoint.detachFromEndpoint(this);\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n if (!this.entryPoint) {\r\n return;\r\n }\r\n\r\n if (this.entryPoint.isConnectedToUniform) {\r\n // We skip the build if the entry point is connected to a uniform\r\n this.output.associatedVariableName = this.entryPoint.input.associatedVariableName;\r\n return;\r\n }\r\n\r\n state.compilationString += state._declareOutput(this.output) + ` = ${this.entryPoint.input.associatedVariableName};\\n`;\r\n\r\n if (this.entryPoint.endpoints.length > 1) {\r\n // Check if all the endpoints are in the same shader stage\r\n const firstConnected = this.entryPoint.endpoints.find((e) => e.output.isConnected);\r\n if (firstConnected) {\r\n const firstTarget = firstConnected.output.isConnectedInVertexShader;\r\n for (const endpoint of this.entryPoint.endpoints) {\r\n if (endpoint === firstConnected) {\r\n continue;\r\n }\r\n if (endpoint.output.isConnected && endpoint.output.isConnectedInVertexShader !== firstTarget) {\r\n state.sharedData.raiseBuildError(\r\n `TeleportInBlock \"${this.entryPoint.name}\" cannot have outputs in different shader stages. All the outputs must be in the same shader stage (vertex or fragment but not both).`\r\n );\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Clone the current block to a new identical block\r\n * @param scene defines the hosting scene\r\n * @param rootUrl defines the root URL to use to load textures and relative dependencies\r\n * @returns a copy of the current block\r\n */\r\n public override clone(scene: Scene, rootUrl: string = \"\") {\r\n const clone = super.clone(scene, rootUrl);\r\n\r\n if (this.entryPoint) {\r\n this.entryPoint.attachToEndpoint(clone as NodeMaterialTeleportOutBlock);\r\n }\r\n\r\n return clone;\r\n }\r\n\r\n protected override _customBuildStep(state: NodeMaterialBuildState, activeBlocks: NodeMaterialBlock[]): void {\r\n if (this.entryPoint) {\r\n this.entryPoint.build(state, activeBlocks);\r\n }\r\n }\r\n\r\n /**\r\n * Dumps the code for the block\r\n * @param uniqueNames - the unique names\r\n * @param alreadyDumped - the already dumped blocks\r\n * @returns the code string\r\n */\r\n public override _dumpCode(uniqueNames: string[], alreadyDumped: NodeMaterialBlock[]) {\r\n let codeString: string = \"\";\r\n if (this.entryPoint) {\r\n if (alreadyDumped.indexOf(this.entryPoint) === -1) {\r\n codeString += this.entryPoint._dumpCode(uniqueNames, alreadyDumped);\r\n }\r\n }\r\n\r\n return codeString + super._dumpCode(uniqueNames, alreadyDumped);\r\n }\r\n\r\n /**\r\n * Dumps the code for output connections\r\n * @param alreadyDumped - the already dumped blocks\r\n * @returns the code string\r\n */\r\n public override _dumpCodeForOutputConnections(alreadyDumped: NodeMaterialBlock[]) {\r\n let codeString = super._dumpCodeForOutputConnections(alreadyDumped);\r\n\r\n if (this.entryPoint) {\r\n codeString += this.entryPoint._dumpCodeForOutputConnections(alreadyDumped);\r\n }\r\n\r\n return codeString;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode();\r\n\r\n if (this.entryPoint) {\r\n codeString += `${this.entryPoint._codeVariableName}.attachToEndpoint(${this._codeVariableName});\\n`;\r\n }\r\n return codeString;\r\n }\r\n\r\n /**\r\n * Serializes this block in a JSON representation\r\n * @returns the serialized block object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.entryPoint = this.entryPoint?.uniqueId ?? \"\";\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Deserializes the block\r\n * @param serializationObject - the serialization object\r\n * @param scene - the scene\r\n * @param rootUrl - the root URL\r\n */\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this._tempEntryPointUniqueId = serializationObject.entryPoint;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.NodeMaterialTeleportOutBlock\", NodeMaterialTeleportOutBlock);\r\n"]}
@@ -389,9 +389,11 @@ export class RenderTargetTexture extends Texture {
389
389
  enableClusteredLights,
390
390
  });
391
391
  this._onBeforeRenderingManagerRenderObserver = this._objectRenderer.onBeforeRenderingManagerRenderObservable.add(() => {
392
+ // One of the actions below can dispose this RTT, so capture the scene first.
393
+ const scene = this._scene;
392
394
  // Before clear
393
395
  if (!this._disableEngineStages) {
394
- for (const step of this._scene._beforeRenderTargetClearStage) {
396
+ for (const step of scene._beforeRenderTargetClearStage) {
395
397
  step.action(this, this._currentFaceIndex, this._currentLayer);
396
398
  }
397
399
  }
@@ -400,14 +402,14 @@ export class RenderTargetTexture extends Texture {
400
402
  this.onClearObservable.notifyObservers(engine);
401
403
  }
402
404
  else if (!this.skipInitialClear) {
403
- engine.clear(this.clearColor || this._scene.clearColor, true, true, true);
405
+ engine.clear(this.clearColor ?? scene.clearColor, true, true, true);
404
406
  }
405
407
  if (!this._doNotChangeAspectRatio) {
406
- this._scene.updateTransformMatrix(true);
408
+ scene.updateTransformMatrix(true);
407
409
  }
408
410
  // Before Camera Draw
409
411
  if (!this._disableEngineStages) {
410
- for (const step of this._scene._beforeRenderTargetDrawStage) {
412
+ for (const step of scene._beforeRenderTargetDrawStage) {
411
413
  step.action(this, this._currentFaceIndex, this._currentLayer);
412
414
  }
413
415
  }