@babylonjs/core 8.15.1 → 8.16.0

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 (153) hide show
  1. package/Animations/animationGroup.d.ts +3 -1
  2. package/Animations/animationGroup.js +3 -2
  3. package/Animations/animationGroup.js.map +1 -1
  4. package/AudioV2/webAudio/components/webAudioParameterComponent.d.ts +8 -0
  5. package/AudioV2/webAudio/components/webAudioParameterComponent.js +36 -3
  6. package/AudioV2/webAudio/components/webAudioParameterComponent.js.map +1 -1
  7. package/AudioV2/webAudio/subNodes/spatialWebAudioSubNode.js +10 -0
  8. package/AudioV2/webAudio/subNodes/spatialWebAudioSubNode.js.map +1 -1
  9. package/AudioV2/webAudio/subProperties/spatialWebAudioListener.js +11 -0
  10. package/AudioV2/webAudio/subProperties/spatialWebAudioListener.js.map +1 -1
  11. package/AudioV2/webAudio/webAudioEngine.d.ts +7 -0
  12. package/AudioV2/webAudio/webAudioEngine.js +45 -0
  13. package/AudioV2/webAudio/webAudioEngine.js.map +1 -1
  14. package/Behaviors/Cameras/framingBehavior.js +3 -3
  15. package/Behaviors/Cameras/framingBehavior.js.map +1 -1
  16. package/Debug/directionalLightFrustumViewer.d.ts +6 -0
  17. package/Debug/directionalLightFrustumViewer.js +39 -1
  18. package/Debug/directionalLightFrustumViewer.js.map +1 -1
  19. package/Engines/AbstractEngine/abstractEngine.alpha.d.ts +2 -1
  20. package/Engines/AbstractEngine/abstractEngine.alpha.js +9 -9
  21. package/Engines/AbstractEngine/abstractEngine.alpha.js.map +1 -1
  22. package/Engines/AbstractEngine/abstractEngine.states.d.ts +4 -104
  23. package/Engines/AbstractEngine/abstractEngine.states.js +4 -70
  24. package/Engines/AbstractEngine/abstractEngine.states.js.map +1 -1
  25. package/Engines/AbstractEngine/abstractEngine.stencil.d.ts +147 -0
  26. package/Engines/AbstractEngine/abstractEngine.stencil.js +93 -0
  27. package/Engines/AbstractEngine/abstractEngine.stencil.js.map +1 -0
  28. package/Engines/AbstractEngine/index.d.ts +1 -0
  29. package/Engines/AbstractEngine/index.js +1 -0
  30. package/Engines/AbstractEngine/index.js.map +1 -1
  31. package/Engines/Extensions/engine.alpha.d.ts +2 -1
  32. package/Engines/Extensions/engine.alpha.js +7 -78
  33. package/Engines/Extensions/engine.alpha.js.map +1 -1
  34. package/Engines/WebGL/webGL2ShaderProcessors.js +8 -1
  35. package/Engines/WebGL/webGL2ShaderProcessors.js.map +1 -1
  36. package/Engines/WebGPU/Extensions/engine.alpha.d.ts +2 -1
  37. package/Engines/WebGPU/Extensions/engine.alpha.js +12 -82
  38. package/Engines/WebGPU/Extensions/engine.alpha.js.map +1 -1
  39. package/Engines/WebGPU/webgpuCacheRenderPipeline.d.ts +12 -5
  40. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +139 -72
  41. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  42. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +13 -1
  43. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
  44. package/Engines/WebGPU/webgpuStencilStateComposer.d.ts +8 -0
  45. package/Engines/WebGPU/webgpuStencilStateComposer.js +40 -0
  46. package/Engines/WebGPU/webgpuStencilStateComposer.js.map +1 -1
  47. package/Engines/abstractEngine.d.ts +7 -3
  48. package/Engines/abstractEngine.js +12 -5
  49. package/Engines/abstractEngine.js.map +1 -1
  50. package/Engines/constants.d.ts +30 -28
  51. package/Engines/constants.js +30 -28
  52. package/Engines/constants.js.map +1 -1
  53. package/Engines/engine.d.ts +10 -0
  54. package/Engines/engine.js +1 -0
  55. package/Engines/engine.js.map +1 -1
  56. package/Engines/engineCapabilities.d.ts +4 -0
  57. package/Engines/engineCapabilities.js.map +1 -1
  58. package/Engines/nativeEngine.d.ts +2 -1
  59. package/Engines/nativeEngine.js +6 -3
  60. package/Engines/nativeEngine.js.map +1 -1
  61. package/Engines/nullEngine.d.ts +2 -1
  62. package/Engines/nullEngine.js +7 -4
  63. package/Engines/nullEngine.js.map +1 -1
  64. package/Engines/thinEngine.js +16 -3
  65. package/Engines/thinEngine.js.map +1 -1
  66. package/Engines/webgpuEngine.d.ts +1 -0
  67. package/Engines/webgpuEngine.js +6 -4
  68. package/Engines/webgpuEngine.js.map +1 -1
  69. package/FrameGraph/Tasks/PostProcesses/passTask.d.ts +1 -1
  70. package/FrameGraph/Tasks/PostProcesses/passTask.js.map +1 -1
  71. package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +8 -1
  72. package/FrameGraph/Tasks/Rendering/objectRendererTask.js +14 -6
  73. package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
  74. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js +3 -0
  75. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js.map +1 -1
  76. package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js +6 -5
  77. package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js.map +1 -1
  78. package/FrameGraph/Tasks/Texture/clearTextureTask.d.ts +1 -1
  79. package/FrameGraph/Tasks/Texture/clearTextureTask.js +7 -5
  80. package/FrameGraph/Tasks/Texture/clearTextureTask.js.map +1 -1
  81. package/FrameGraph/frameGraph.d.ts +6 -0
  82. package/FrameGraph/frameGraph.js +8 -0
  83. package/FrameGraph/frameGraph.js.map +1 -1
  84. package/FrameGraph/frameGraphContext.d.ts +16 -0
  85. package/FrameGraph/frameGraphContext.js +23 -0
  86. package/FrameGraph/frameGraphContext.js.map +1 -1
  87. package/FrameGraph/frameGraphRenderContext.d.ts +9 -16
  88. package/FrameGraph/frameGraphRenderContext.js +15 -23
  89. package/FrameGraph/frameGraphRenderContext.js.map +1 -1
  90. package/FrameGraph/frameGraphUtils.d.ts +52 -0
  91. package/FrameGraph/frameGraphUtils.js +99 -0
  92. package/FrameGraph/frameGraphUtils.js.map +1 -0
  93. package/FrameGraph/index.d.ts +1 -0
  94. package/FrameGraph/index.js +1 -0
  95. package/FrameGraph/index.js.map +1 -1
  96. package/Loading/Plugins/babylonFileLoader.js +35 -2
  97. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  98. package/Materials/material.d.ts +32 -12
  99. package/Materials/material.js +49 -17
  100. package/Materials/material.js.map +1 -1
  101. package/Materials/materialStencilState.d.ts +24 -0
  102. package/Materials/materialStencilState.js +53 -1
  103. package/Materials/materialStencilState.js.map +1 -1
  104. package/Meshes/geometry.js +1 -1
  105. package/Meshes/geometry.js.map +1 -1
  106. package/Meshes/instancedMesh.d.ts +5 -0
  107. package/Meshes/instancedMesh.js +3 -3
  108. package/Meshes/instancedMesh.js.map +1 -1
  109. package/Meshes/mesh.d.ts +28 -5
  110. package/Meshes/mesh.js +127 -57
  111. package/Meshes/mesh.js.map +1 -1
  112. package/Meshes/thinInstanceMesh.js +4 -0
  113. package/Meshes/thinInstanceMesh.js.map +1 -1
  114. package/Misc/snapshotRenderingHelper.js +2 -1
  115. package/Misc/snapshotRenderingHelper.js.map +1 -1
  116. package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.d.ts +1 -0
  117. package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.js +32 -10
  118. package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.js.map +1 -1
  119. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.d.ts +4 -0
  120. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js +5 -0
  121. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js.map +1 -1
  122. package/PostProcesses/RenderPipeline/postProcessRenderPipelineManager.d.ts +12 -3
  123. package/PostProcesses/RenderPipeline/postProcessRenderPipelineManager.js +22 -1
  124. package/PostProcesses/RenderPipeline/postProcessRenderPipelineManager.js.map +1 -1
  125. package/PostProcesses/thinPassPostProcess.js +7 -3
  126. package/PostProcesses/thinPassPostProcess.js.map +1 -1
  127. package/Rendering/edgesRenderer.js +3 -2
  128. package/Rendering/edgesRenderer.js.map +1 -1
  129. package/Rendering/geometryBufferRenderer.js +1 -1
  130. package/Rendering/geometryBufferRenderer.js.map +1 -1
  131. package/Rendering/outlineRenderer.js +1 -1
  132. package/Rendering/outlineRenderer.js.map +1 -1
  133. package/Shaders/lod.fragment.js +2 -3
  134. package/Shaders/lod.fragment.js.map +1 -1
  135. package/ShadersWGSL/lod.fragment.js +2 -2
  136. package/ShadersWGSL/lod.fragment.js.map +1 -1
  137. package/States/IStencilState.d.ts +6 -2
  138. package/States/IStencilState.js.map +1 -1
  139. package/States/alphaCullingState.d.ts +7 -5
  140. package/States/alphaCullingState.js +144 -33
  141. package/States/alphaCullingState.js.map +1 -1
  142. package/States/stencilState.d.ts +12 -0
  143. package/States/stencilState.js +29 -1
  144. package/States/stencilState.js.map +1 -1
  145. package/States/stencilStateComposer.d.ts +12 -0
  146. package/States/stencilStateComposer.js +48 -2
  147. package/States/stencilStateComposer.js.map +1 -1
  148. package/assetContainer.js +29 -8
  149. package/assetContainer.js.map +1 -1
  150. package/package.json +1 -1
  151. package/scene.d.ts +2 -1
  152. package/scene.js +1 -0
  153. package/scene.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"postProcessRenderPipeline.js","sourceRoot":"","sources":["../../../../../dev/core/src/PostProcesses/RenderPipeline/postProcessRenderPipeline.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../types\";\r\nimport { Tools } from \"../../Misc/tools\";\r\nimport { serialize } from \"../../Misc/decorators\";\r\nimport type { Camera } from \"../../Cameras/camera\";\r\nimport type { AbstractEngine } from \"../../Engines/abstractEngine\";\r\nimport type { PostProcessRenderEffect } from \"./postProcessRenderEffect\";\r\nimport type { IInspectable } from \"../../Misc/iInspectable\";\r\n\r\nimport type { PrePassRenderer } from \"../../Rendering/prePassRenderer\";\r\n\r\n/**\r\n * PostProcessRenderPipeline\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/postProcesses/postProcessRenderPipeline\r\n */\r\nexport class PostProcessRenderPipeline {\r\n protected _renderEffects: { [key: string]: PostProcessRenderEffect };\r\n protected _renderEffectsForIsolatedPass: PostProcessRenderEffect[];\r\n\r\n /**\r\n * List of inspectable custom properties (used by the Inspector)\r\n * @see https://doc.babylonjs.com/toolsAndResources/inspector#extensibility\r\n */\r\n public inspectableCustomProperties: IInspectable[];\r\n\r\n /**\r\n * @internal\r\n */\r\n protected _cameras: Camera[];\r\n\r\n /** @internal */\r\n @serialize()\r\n public _name: string;\r\n\r\n /**\r\n * Gets pipeline name\r\n */\r\n public get name(): string {\r\n return this._name;\r\n }\r\n\r\n /** Gets the list of attached cameras */\r\n public get cameras() {\r\n return this._cameras;\r\n }\r\n\r\n /**\r\n * Gets the active engine\r\n */\r\n public get engine(): AbstractEngine {\r\n return this._engine;\r\n }\r\n\r\n /**\r\n * Initializes a PostProcessRenderPipeline\r\n * @param _engine engine to add the pipeline to\r\n * @param name name of the pipeline\r\n */\r\n constructor(\r\n private _engine: AbstractEngine,\r\n name: string\r\n ) {\r\n this._name = name;\r\n\r\n this._renderEffects = {};\r\n this._renderEffectsForIsolatedPass = new Array<PostProcessRenderEffect>();\r\n\r\n this._cameras = [];\r\n }\r\n\r\n /**\r\n * Gets the class name\r\n * @returns \"PostProcessRenderPipeline\"\r\n */\r\n public getClassName(): string {\r\n return \"PostProcessRenderPipeline\";\r\n }\r\n\r\n /**\r\n * If all the render effects in the pipeline are supported\r\n */\r\n public get isSupported(): boolean {\r\n for (const renderEffectName in this._renderEffects) {\r\n if (Object.prototype.hasOwnProperty.call(this._renderEffects, renderEffectName)) {\r\n if (!this._renderEffects[renderEffectName].isSupported) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Adds an effect to the pipeline\r\n * @param renderEffect the effect to add\r\n */\r\n public addEffect(renderEffect: PostProcessRenderEffect): void {\r\n (<any>this._renderEffects)[renderEffect._name] = renderEffect;\r\n }\r\n\r\n // private\r\n\r\n /** @internal */\r\n public _rebuild() {}\r\n\r\n /** @internal */\r\n public _enableEffect(renderEffectName: string, cameras: Camera): void;\r\n /** @internal */\r\n public _enableEffect(renderEffectName: string, cameras: Camera[]): void;\r\n /**\r\n * @internal\r\n */\r\n public _enableEffect(renderEffectName: string, cameras: any): void {\r\n const renderEffects: PostProcessRenderEffect = (<any>this._renderEffects)[renderEffectName];\r\n\r\n if (!renderEffects) {\r\n return;\r\n }\r\n\r\n renderEffects._enable(Tools.MakeArray(cameras || this._cameras));\r\n }\r\n\r\n /** @internal */\r\n public _disableEffect(renderEffectName: string, cameras: Nullable<Camera[]>): void;\r\n /** @internal */\r\n public _disableEffect(renderEffectName: string, cameras: Nullable<Camera[]>): void;\r\n /**\r\n * @internal\r\n */\r\n public _disableEffect(renderEffectName: string, cameras: Nullable<Camera[]>): void {\r\n const renderEffects: PostProcessRenderEffect = (<any>this._renderEffects)[renderEffectName];\r\n\r\n if (!renderEffects) {\r\n return;\r\n }\r\n\r\n renderEffects._disable(Tools.MakeArray(cameras || this._cameras));\r\n }\r\n\r\n /** @internal */\r\n public _attachCameras(cameras: Camera, unique: boolean): void;\r\n /** @internal */\r\n public _attachCameras(cameras: Camera[], unique: boolean): void;\r\n /**\r\n * @internal\r\n */\r\n public _attachCameras(cameras: any, unique: boolean): void {\r\n const cams = Tools.MakeArray(cameras || this._cameras);\r\n\r\n if (!cams) {\r\n return;\r\n }\r\n\r\n const indicesToDelete = [];\r\n let i: number;\r\n for (i = 0; i < cams.length; i++) {\r\n const camera = cams[i];\r\n if (!camera) {\r\n continue;\r\n }\r\n\r\n if (this._cameras.indexOf(camera) === -1) {\r\n this._cameras.push(camera);\r\n } else if (unique) {\r\n indicesToDelete.push(i);\r\n }\r\n }\r\n\r\n for (i = 0; i < indicesToDelete.length; i++) {\r\n cams.splice(indicesToDelete[i], 1);\r\n }\r\n\r\n for (const renderEffectName in this._renderEffects) {\r\n if (Object.prototype.hasOwnProperty.call(this._renderEffects, renderEffectName)) {\r\n this._renderEffects[renderEffectName]._attachCameras(cams);\r\n }\r\n }\r\n }\r\n\r\n /** @internal */\r\n public _detachCameras(cameras: Camera): void;\r\n /** @internal */\r\n public _detachCameras(cameras: Nullable<Camera[]>): void;\r\n /**\r\n * @internal\r\n */\r\n public _detachCameras(cameras: any): void {\r\n const cams = Tools.MakeArray(cameras || this._cameras);\r\n\r\n if (!cams) {\r\n return;\r\n }\r\n\r\n for (const renderEffectName in this._renderEffects) {\r\n if (Object.prototype.hasOwnProperty.call(this._renderEffects, renderEffectName)) {\r\n this._renderEffects[renderEffectName]._detachCameras(cams);\r\n }\r\n }\r\n\r\n for (let i = 0; i < cams.length; i++) {\r\n this._cameras.splice(this._cameras.indexOf(cams[i]), 1);\r\n }\r\n }\r\n\r\n /** @internal */\r\n public _update(): void {\r\n for (const renderEffectName in this._renderEffects) {\r\n if (Object.prototype.hasOwnProperty.call(this._renderEffects, renderEffectName)) {\r\n this._renderEffects[renderEffectName]._update();\r\n }\r\n }\r\n\r\n for (let i = 0; i < this._cameras.length; i++) {\r\n if (!this._cameras[i]) {\r\n continue;\r\n }\r\n const cameraName = this._cameras[i].name;\r\n if ((<any>this._renderEffectsForIsolatedPass)[cameraName]) {\r\n (<any>this._renderEffectsForIsolatedPass)[cameraName]._update();\r\n }\r\n }\r\n }\r\n\r\n /** @internal */\r\n public _reset(): void {\r\n this._renderEffects = {};\r\n this._renderEffectsForIsolatedPass = new Array<PostProcessRenderEffect>();\r\n }\r\n\r\n protected _enableMSAAOnFirstPostProcess(sampleCount: number): boolean {\r\n if (!this._engine._features.supportMSAA) {\r\n return false;\r\n }\r\n\r\n // Set samples of the very first post process to 4 to enable native anti-aliasing in browsers that support webGL 2.0 (See: https://github.com/BabylonJS/Babylon.js/issues/3754)\r\n const effectKeys = Object.keys(this._renderEffects);\r\n if (effectKeys.length > 0) {\r\n const postProcesses = this._renderEffects[effectKeys[0]].getPostProcesses();\r\n if (postProcesses) {\r\n postProcesses[0].samples = sampleCount;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Ensures that all post processes in the pipeline are the correct size according to the\r\n * the viewport's required size\r\n */\r\n protected _adaptPostProcessesToViewPort(): void {\r\n const effectKeys = Object.keys(this._renderEffects);\r\n for (const effectKey of effectKeys) {\r\n const postProcesses = this._renderEffects[effectKey].getPostProcesses();\r\n if (postProcesses) {\r\n for (const postProcess of postProcesses) {\r\n postProcess.adaptScaleToCurrentViewport = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets the required values to the prepass renderer.\r\n * @param prePassRenderer defines the prepass renderer to setup.\r\n * @returns true if the pre pass is needed.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public setPrePassRenderer(prePassRenderer: PrePassRenderer): boolean {\r\n // Do Nothing by default\r\n return false;\r\n }\r\n\r\n /**\r\n * Disposes of the pipeline\r\n */\r\n public dispose() {\r\n // Must be implemented by children\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"postProcessRenderPipeline.js","sourceRoot":"","sources":["../../../../../dev/core/src/PostProcesses/RenderPipeline/postProcessRenderPipeline.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../types\";\r\nimport { Tools } from \"../../Misc/tools\";\r\nimport { serialize } from \"../../Misc/decorators\";\r\nimport { UniqueIdGenerator } from \"core/Misc/uniqueIdGenerator\";\r\nimport type { Camera } from \"../../Cameras/camera\";\r\nimport type { AbstractEngine } from \"../../Engines/abstractEngine\";\r\nimport type { PostProcessRenderEffect } from \"./postProcessRenderEffect\";\r\nimport type { IInspectable } from \"../../Misc/iInspectable\";\r\n\r\nimport type { PrePassRenderer } from \"../../Rendering/prePassRenderer\";\r\n\r\n/**\r\n * PostProcessRenderPipeline\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/postProcesses/postProcessRenderPipeline\r\n */\r\nexport class PostProcessRenderPipeline {\r\n protected _renderEffects: { [key: string]: PostProcessRenderEffect };\r\n protected _renderEffectsForIsolatedPass: PostProcessRenderEffect[];\r\n\r\n /**\r\n * List of inspectable custom properties (used by the Inspector)\r\n * @see https://doc.babylonjs.com/toolsAndResources/inspector#extensibility\r\n */\r\n public inspectableCustomProperties: IInspectable[];\r\n\r\n /**\r\n * @internal\r\n */\r\n protected _cameras: Camera[];\r\n\r\n /** @internal */\r\n @serialize()\r\n public _name: string;\r\n\r\n /**\r\n * Gets pipeline name\r\n */\r\n public get name(): string {\r\n return this._name;\r\n }\r\n\r\n /**\r\n * Gets the unique id of the post process rendering pipeline\r\n */\r\n public readonly uniqueId = UniqueIdGenerator.UniqueId;\r\n\r\n /** Gets the list of attached cameras */\r\n public get cameras() {\r\n return this._cameras;\r\n }\r\n\r\n /**\r\n * Gets the active engine\r\n */\r\n public get engine(): AbstractEngine {\r\n return this._engine;\r\n }\r\n\r\n /**\r\n * Initializes a PostProcessRenderPipeline\r\n * @param _engine engine to add the pipeline to\r\n * @param name name of the pipeline\r\n */\r\n constructor(\r\n private _engine: AbstractEngine,\r\n name: string\r\n ) {\r\n this._name = name;\r\n\r\n this._renderEffects = {};\r\n this._renderEffectsForIsolatedPass = new Array<PostProcessRenderEffect>();\r\n\r\n this._cameras = [];\r\n }\r\n\r\n /**\r\n * Gets the class name\r\n * @returns \"PostProcessRenderPipeline\"\r\n */\r\n public getClassName(): string {\r\n return \"PostProcessRenderPipeline\";\r\n }\r\n\r\n /**\r\n * If all the render effects in the pipeline are supported\r\n */\r\n public get isSupported(): boolean {\r\n for (const renderEffectName in this._renderEffects) {\r\n if (Object.prototype.hasOwnProperty.call(this._renderEffects, renderEffectName)) {\r\n if (!this._renderEffects[renderEffectName].isSupported) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Adds an effect to the pipeline\r\n * @param renderEffect the effect to add\r\n */\r\n public addEffect(renderEffect: PostProcessRenderEffect): void {\r\n (<any>this._renderEffects)[renderEffect._name] = renderEffect;\r\n }\r\n\r\n // private\r\n\r\n /** @internal */\r\n public _rebuild() {}\r\n\r\n /** @internal */\r\n public _enableEffect(renderEffectName: string, cameras: Camera): void;\r\n /** @internal */\r\n public _enableEffect(renderEffectName: string, cameras: Camera[]): void;\r\n /**\r\n * @internal\r\n */\r\n public _enableEffect(renderEffectName: string, cameras: any): void {\r\n const renderEffects: PostProcessRenderEffect = (<any>this._renderEffects)[renderEffectName];\r\n\r\n if (!renderEffects) {\r\n return;\r\n }\r\n\r\n renderEffects._enable(Tools.MakeArray(cameras || this._cameras));\r\n }\r\n\r\n /** @internal */\r\n public _disableEffect(renderEffectName: string, cameras: Nullable<Camera[]>): void;\r\n /** @internal */\r\n public _disableEffect(renderEffectName: string, cameras: Nullable<Camera[]>): void;\r\n /**\r\n * @internal\r\n */\r\n public _disableEffect(renderEffectName: string, cameras: Nullable<Camera[]>): void {\r\n const renderEffects: PostProcessRenderEffect = (<any>this._renderEffects)[renderEffectName];\r\n\r\n if (!renderEffects) {\r\n return;\r\n }\r\n\r\n renderEffects._disable(Tools.MakeArray(cameras || this._cameras));\r\n }\r\n\r\n /** @internal */\r\n public _attachCameras(cameras: Camera, unique: boolean): void;\r\n /** @internal */\r\n public _attachCameras(cameras: Camera[], unique: boolean): void;\r\n /**\r\n * @internal\r\n */\r\n public _attachCameras(cameras: any, unique: boolean): void {\r\n const cams = Tools.MakeArray(cameras || this._cameras);\r\n\r\n if (!cams) {\r\n return;\r\n }\r\n\r\n const indicesToDelete = [];\r\n let i: number;\r\n for (i = 0; i < cams.length; i++) {\r\n const camera = cams[i];\r\n if (!camera) {\r\n continue;\r\n }\r\n\r\n if (this._cameras.indexOf(camera) === -1) {\r\n this._cameras.push(camera);\r\n } else if (unique) {\r\n indicesToDelete.push(i);\r\n }\r\n }\r\n\r\n for (i = 0; i < indicesToDelete.length; i++) {\r\n cams.splice(indicesToDelete[i], 1);\r\n }\r\n\r\n for (const renderEffectName in this._renderEffects) {\r\n if (Object.prototype.hasOwnProperty.call(this._renderEffects, renderEffectName)) {\r\n this._renderEffects[renderEffectName]._attachCameras(cams);\r\n }\r\n }\r\n }\r\n\r\n /** @internal */\r\n public _detachCameras(cameras: Camera): void;\r\n /** @internal */\r\n public _detachCameras(cameras: Nullable<Camera[]>): void;\r\n /**\r\n * @internal\r\n */\r\n public _detachCameras(cameras: any): void {\r\n const cams = Tools.MakeArray(cameras || this._cameras);\r\n\r\n if (!cams) {\r\n return;\r\n }\r\n\r\n for (const renderEffectName in this._renderEffects) {\r\n if (Object.prototype.hasOwnProperty.call(this._renderEffects, renderEffectName)) {\r\n this._renderEffects[renderEffectName]._detachCameras(cams);\r\n }\r\n }\r\n\r\n for (let i = 0; i < cams.length; i++) {\r\n this._cameras.splice(this._cameras.indexOf(cams[i]), 1);\r\n }\r\n }\r\n\r\n /** @internal */\r\n public _update(): void {\r\n for (const renderEffectName in this._renderEffects) {\r\n if (Object.prototype.hasOwnProperty.call(this._renderEffects, renderEffectName)) {\r\n this._renderEffects[renderEffectName]._update();\r\n }\r\n }\r\n\r\n for (let i = 0; i < this._cameras.length; i++) {\r\n if (!this._cameras[i]) {\r\n continue;\r\n }\r\n const cameraName = this._cameras[i].name;\r\n if ((<any>this._renderEffectsForIsolatedPass)[cameraName]) {\r\n (<any>this._renderEffectsForIsolatedPass)[cameraName]._update();\r\n }\r\n }\r\n }\r\n\r\n /** @internal */\r\n public _reset(): void {\r\n this._renderEffects = {};\r\n this._renderEffectsForIsolatedPass = new Array<PostProcessRenderEffect>();\r\n }\r\n\r\n protected _enableMSAAOnFirstPostProcess(sampleCount: number): boolean {\r\n if (!this._engine._features.supportMSAA) {\r\n return false;\r\n }\r\n\r\n // Set samples of the very first post process to 4 to enable native anti-aliasing in browsers that support webGL 2.0 (See: https://github.com/BabylonJS/Babylon.js/issues/3754)\r\n const effectKeys = Object.keys(this._renderEffects);\r\n if (effectKeys.length > 0) {\r\n const postProcesses = this._renderEffects[effectKeys[0]].getPostProcesses();\r\n if (postProcesses) {\r\n postProcesses[0].samples = sampleCount;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Ensures that all post processes in the pipeline are the correct size according to the\r\n * the viewport's required size\r\n */\r\n protected _adaptPostProcessesToViewPort(): void {\r\n const effectKeys = Object.keys(this._renderEffects);\r\n for (const effectKey of effectKeys) {\r\n const postProcesses = this._renderEffects[effectKey].getPostProcesses();\r\n if (postProcesses) {\r\n for (const postProcess of postProcesses) {\r\n postProcess.adaptScaleToCurrentViewport = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets the required values to the prepass renderer.\r\n * @param prePassRenderer defines the prepass renderer to setup.\r\n * @returns true if the pre pass is needed.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public setPrePassRenderer(prePassRenderer: PrePassRenderer): boolean {\r\n // Do Nothing by default\r\n return false;\r\n }\r\n\r\n /**\r\n * Disposes of the pipeline\r\n */\r\n public dispose() {\r\n // Must be implemented by children\r\n }\r\n}\r\n"]}
@@ -1,16 +1,25 @@
1
- import type { Camera } from "../../Cameras/camera.js";
2
- import type { PostProcessRenderPipeline } from "./postProcessRenderPipeline.js";
1
+ import type { Camera, IReadonlyObservable, PostProcessRenderPipeline } from "../../index.js";
3
2
  /**
4
3
  * PostProcessRenderPipelineManager class
5
4
  * @see https://doc.babylonjs.com/features/featuresDeepDive/postProcesses/postProcessRenderPipeline
6
5
  */
7
6
  export declare class PostProcessRenderPipelineManager {
8
- private _renderPipelines;
7
+ private readonly _renderPipelines;
8
+ private readonly _onNewPipelineAddedObservable;
9
+ private readonly _onPipelineRemovedObservable;
9
10
  /**
10
11
  * Initializes a PostProcessRenderPipelineManager
11
12
  * @see https://doc.babylonjs.com/features/featuresDeepDive/postProcesses/postProcessRenderPipeline
12
13
  */
13
14
  constructor();
15
+ /**
16
+ * An event triggered when a pipeline is added to the manager
17
+ */
18
+ get onNewPipelineAddedObservable(): IReadonlyObservable<PostProcessRenderPipeline>;
19
+ /**
20
+ * An event triggered when a pipeline is removed from the manager
21
+ */
22
+ get onPipelineRemovedObservable(): IReadonlyObservable<PostProcessRenderPipeline>;
14
23
  /**
15
24
  * Gets the list of supported render pipelines
16
25
  */
@@ -1,3 +1,4 @@
1
+ import { Observable } from "../../Misc/observable.js";
1
2
  /**
2
3
  * PostProcessRenderPipelineManager class
3
4
  * @see https://doc.babylonjs.com/features/featuresDeepDive/postProcesses/postProcessRenderPipeline
@@ -9,6 +10,20 @@ export class PostProcessRenderPipelineManager {
9
10
  */
10
11
  constructor() {
11
12
  this._renderPipelines = {};
13
+ this._onNewPipelineAddedObservable = new Observable();
14
+ this._onPipelineRemovedObservable = new Observable();
15
+ }
16
+ /**
17
+ * An event triggered when a pipeline is added to the manager
18
+ */
19
+ get onNewPipelineAddedObservable() {
20
+ return this._onNewPipelineAddedObservable;
21
+ }
22
+ /**
23
+ * An event triggered when a pipeline is removed from the manager
24
+ */
25
+ get onPipelineRemovedObservable() {
26
+ return this._onPipelineRemovedObservable;
12
27
  }
13
28
  /**
14
29
  * Gets the list of supported render pipelines
@@ -30,14 +45,20 @@ export class PostProcessRenderPipelineManager {
30
45
  * @param renderPipeline The pipeline to add
31
46
  */
32
47
  addPipeline(renderPipeline) {
48
+ this.removePipeline(renderPipeline._name);
33
49
  this._renderPipelines[renderPipeline._name] = renderPipeline;
50
+ this._onNewPipelineAddedObservable.notifyObservers(renderPipeline);
34
51
  }
35
52
  /**
36
53
  * Remove the pipeline from the manager
37
54
  * @param renderPipelineName the name of the pipeline to remove
38
55
  */
39
56
  removePipeline(renderPipelineName) {
40
- delete this._renderPipelines[renderPipelineName];
57
+ const pipeline = this._renderPipelines[renderPipelineName];
58
+ if (pipeline) {
59
+ this._onPipelineRemovedObservable.notifyObservers(pipeline);
60
+ delete this._renderPipelines[renderPipelineName];
61
+ }
41
62
  }
42
63
  /**
43
64
  * Attaches a camera to the pipeline
@@ -1 +1 @@
1
- {"version":3,"file":"postProcessRenderPipelineManager.js","sourceRoot":"","sources":["../../../../../dev/core/src/PostProcesses/RenderPipeline/postProcessRenderPipelineManager.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Camera } from \"../../Cameras/camera\";\r\nimport type { PostProcessRenderPipeline } from \"./postProcessRenderPipeline\";\r\n/**\r\n * PostProcessRenderPipelineManager class\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/postProcesses/postProcessRenderPipeline\r\n */\r\nexport class PostProcessRenderPipelineManager {\r\n private _renderPipelines: { [Key: string]: PostProcessRenderPipeline };\r\n\r\n /**\r\n * Initializes a PostProcessRenderPipelineManager\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/postProcesses/postProcessRenderPipeline\r\n */\r\n constructor() {\r\n this._renderPipelines = {};\r\n }\r\n\r\n /**\r\n * Gets the list of supported render pipelines\r\n */\r\n public get supportedPipelines(): PostProcessRenderPipeline[] {\r\n const result = [];\r\n\r\n for (const renderPipelineName in this._renderPipelines) {\r\n if (Object.prototype.hasOwnProperty.call(this._renderPipelines, renderPipelineName)) {\r\n const pipeline = this._renderPipelines[renderPipelineName];\r\n if (pipeline.isSupported) {\r\n result.push(pipeline);\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Adds a pipeline to the manager\r\n * @param renderPipeline The pipeline to add\r\n */\r\n public addPipeline(renderPipeline: PostProcessRenderPipeline): void {\r\n this._renderPipelines[renderPipeline._name] = renderPipeline;\r\n }\r\n\r\n /**\r\n * Remove the pipeline from the manager\r\n * @param renderPipelineName the name of the pipeline to remove\r\n */\r\n public removePipeline(renderPipelineName: string): void {\r\n delete this._renderPipelines[renderPipelineName];\r\n }\r\n\r\n /**\r\n * Attaches a camera to the pipeline\r\n * @param renderPipelineName The name of the pipeline to attach to\r\n * @param cameras the camera to attach\r\n * @param unique if the camera can be attached multiple times to the pipeline\r\n */\r\n public attachCamerasToRenderPipeline(renderPipelineName: string, cameras: Camera[] | Camera, unique: boolean = false): void {\r\n const renderPipeline: PostProcessRenderPipeline = this._renderPipelines[renderPipelineName];\r\n\r\n if (!renderPipeline) {\r\n return;\r\n }\r\n\r\n renderPipeline._attachCameras(cameras as Camera[], unique);\r\n }\r\n\r\n /**\r\n * Detaches a camera from the pipeline\r\n * @param renderPipelineName The name of the pipeline to detach from\r\n * @param cameras the camera to detach\r\n */\r\n public detachCamerasFromRenderPipeline(renderPipelineName: string, cameras: Camera[] | Camera): void {\r\n const renderPipeline: PostProcessRenderPipeline = this._renderPipelines[renderPipelineName];\r\n\r\n if (!renderPipeline) {\r\n return;\r\n }\r\n\r\n renderPipeline._detachCameras(cameras as Camera[]);\r\n }\r\n\r\n /**\r\n * Enables an effect by name on a pipeline\r\n * @param renderPipelineName the name of the pipeline to enable the effect in\r\n * @param renderEffectName the name of the effect to enable\r\n * @param cameras the cameras that the effect should be enabled on\r\n */\r\n public enableEffectInPipeline(renderPipelineName: string, renderEffectName: string, cameras: Camera[] | Camera): void {\r\n const renderPipeline: PostProcessRenderPipeline = this._renderPipelines[renderPipelineName];\r\n\r\n if (!renderPipeline) {\r\n return;\r\n }\r\n\r\n renderPipeline._enableEffect(renderEffectName, cameras as Camera[]);\r\n }\r\n\r\n /**\r\n * Disables an effect by name on a pipeline\r\n * @param renderPipelineName the name of the pipeline to disable the effect in\r\n * @param renderEffectName the name of the effect to disable\r\n * @param cameras the cameras that the effect should be disabled on\r\n */\r\n public disableEffectInPipeline(renderPipelineName: string, renderEffectName: string, cameras: Camera[] | Camera): void {\r\n const renderPipeline: PostProcessRenderPipeline = this._renderPipelines[renderPipelineName];\r\n\r\n if (!renderPipeline) {\r\n return;\r\n }\r\n\r\n renderPipeline._disableEffect(renderEffectName, cameras as Camera[]);\r\n }\r\n\r\n /**\r\n * Updates the state of all contained render pipelines and disposes of any non supported pipelines\r\n */\r\n public update(): void {\r\n for (const renderPipelineName in this._renderPipelines) {\r\n if (Object.prototype.hasOwnProperty.call(this._renderPipelines, renderPipelineName)) {\r\n const pipeline = this._renderPipelines[renderPipelineName];\r\n if (!pipeline.isSupported) {\r\n pipeline.dispose();\r\n delete this._renderPipelines[renderPipelineName];\r\n } else {\r\n pipeline._update();\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** @internal */\r\n public _rebuild(): void {\r\n for (const renderPipelineName in this._renderPipelines) {\r\n if (Object.prototype.hasOwnProperty.call(this._renderPipelines, renderPipelineName)) {\r\n const pipeline = this._renderPipelines[renderPipelineName];\r\n pipeline._rebuild();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Disposes of the manager and pipelines\r\n */\r\n public dispose(): void {\r\n for (const renderPipelineName in this._renderPipelines) {\r\n if (Object.prototype.hasOwnProperty.call(this._renderPipelines, renderPipelineName)) {\r\n const pipeline = this._renderPipelines[renderPipelineName];\r\n pipeline.dispose();\r\n }\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"postProcessRenderPipelineManager.js","sourceRoot":"","sources":["../../../../../dev/core/src/PostProcesses/RenderPipeline/postProcessRenderPipelineManager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD;;;GAGG;AACH,MAAM,OAAO,gCAAgC;IAKzC;;;OAGG;IACH;QARiB,qBAAgB,GAAiD,EAAE,CAAC;QACpE,kCAA6B,GAAG,IAAI,UAAU,EAA6B,CAAC;QAC5E,iCAA4B,GAAG,IAAI,UAAU,EAA6B,CAAC;IAM7E,CAAC;IAEhB;;OAEG;IACH,IAAW,4BAA4B;QACnC,OAAO,IAAI,CAAC,6BAA6B,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,IAAW,2BAA2B;QAClC,OAAO,IAAI,CAAC,4BAA4B,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,IAAW,kBAAkB;QACzB,MAAM,MAAM,GAAG,EAAE,CAAC;QAElB,KAAK,MAAM,kBAAkB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACrD,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,EAAE,CAAC;gBAClF,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;gBAC3D,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;oBACvB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC1B,CAAC;YACL,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;OAGG;IACI,WAAW,CAAC,cAAyC;QACxD,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,cAAc,CAAC;QAC7D,IAAI,CAAC,6BAA6B,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;IACvE,CAAC;IAED;;;OAGG;IACI,cAAc,CAAC,kBAA0B;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;QAC3D,IAAI,QAAQ,EAAE,CAAC;YACX,IAAI,CAAC,4BAA4B,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YAC5D,OAAO,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;QACrD,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACI,6BAA6B,CAAC,kBAA0B,EAAE,OAA0B,EAAE,SAAkB,KAAK;QAChH,MAAM,cAAc,GAA8B,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;QAE5F,IAAI,CAAC,cAAc,EAAE,CAAC;YAClB,OAAO;QACX,CAAC;QAED,cAAc,CAAC,cAAc,CAAC,OAAmB,EAAE,MAAM,CAAC,CAAC;IAC/D,CAAC;IAED;;;;OAIG;IACI,+BAA+B,CAAC,kBAA0B,EAAE,OAA0B;QACzF,MAAM,cAAc,GAA8B,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;QAE5F,IAAI,CAAC,cAAc,EAAE,CAAC;YAClB,OAAO;QACX,CAAC;QAED,cAAc,CAAC,cAAc,CAAC,OAAmB,CAAC,CAAC;IACvD,CAAC;IAED;;;;;OAKG;IACI,sBAAsB,CAAC,kBAA0B,EAAE,gBAAwB,EAAE,OAA0B;QAC1G,MAAM,cAAc,GAA8B,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;QAE5F,IAAI,CAAC,cAAc,EAAE,CAAC;YAClB,OAAO;QACX,CAAC;QAED,cAAc,CAAC,aAAa,CAAC,gBAAgB,EAAE,OAAmB,CAAC,CAAC;IACxE,CAAC;IAED;;;;;OAKG;IACI,uBAAuB,CAAC,kBAA0B,EAAE,gBAAwB,EAAE,OAA0B;QAC3G,MAAM,cAAc,GAA8B,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;QAE5F,IAAI,CAAC,cAAc,EAAE,CAAC;YAClB,OAAO;QACX,CAAC;QAED,cAAc,CAAC,cAAc,CAAC,gBAAgB,EAAE,OAAmB,CAAC,CAAC;IACzE,CAAC;IAED;;OAEG;IACI,MAAM;QACT,KAAK,MAAM,kBAAkB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACrD,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,EAAE,CAAC;gBAClF,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;gBAC3D,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;oBACxB,QAAQ,CAAC,OAAO,EAAE,CAAC;oBACnB,OAAO,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;gBACrD,CAAC;qBAAM,CAAC;oBACJ,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACvB,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED,gBAAgB;IACT,QAAQ;QACX,KAAK,MAAM,kBAAkB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACrD,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,EAAE,CAAC;gBAClF,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;gBAC3D,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACxB,CAAC;QACL,CAAC;IACL,CAAC;IAED;;OAEG;IACI,OAAO;QACV,KAAK,MAAM,kBAAkB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACrD,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,EAAE,CAAC;gBAClF,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;gBAC3D,QAAQ,CAAC,OAAO,EAAE,CAAC;YACvB,CAAC;QACL,CAAC;IACL,CAAC;CACJ","sourcesContent":["import type { Camera, IReadonlyObservable, PostProcessRenderPipeline } from \"core/index\";\r\n\r\nimport { Observable } from \"../../Misc/observable\";\r\n\r\n/**\r\n * PostProcessRenderPipelineManager class\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/postProcesses/postProcessRenderPipeline\r\n */\r\nexport class PostProcessRenderPipelineManager {\r\n private readonly _renderPipelines: { [Key: string]: PostProcessRenderPipeline } = {};\r\n private readonly _onNewPipelineAddedObservable = new Observable<PostProcessRenderPipeline>();\r\n private readonly _onPipelineRemovedObservable = new Observable<PostProcessRenderPipeline>();\r\n\r\n /**\r\n * Initializes a PostProcessRenderPipelineManager\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/postProcesses/postProcessRenderPipeline\r\n */\r\n constructor() {}\r\n\r\n /**\r\n * An event triggered when a pipeline is added to the manager\r\n */\r\n public get onNewPipelineAddedObservable(): IReadonlyObservable<PostProcessRenderPipeline> {\r\n return this._onNewPipelineAddedObservable;\r\n }\r\n\r\n /**\r\n * An event triggered when a pipeline is removed from the manager\r\n */\r\n public get onPipelineRemovedObservable(): IReadonlyObservable<PostProcessRenderPipeline> {\r\n return this._onPipelineRemovedObservable;\r\n }\r\n\r\n /**\r\n * Gets the list of supported render pipelines\r\n */\r\n public get supportedPipelines(): PostProcessRenderPipeline[] {\r\n const result = [];\r\n\r\n for (const renderPipelineName in this._renderPipelines) {\r\n if (Object.prototype.hasOwnProperty.call(this._renderPipelines, renderPipelineName)) {\r\n const pipeline = this._renderPipelines[renderPipelineName];\r\n if (pipeline.isSupported) {\r\n result.push(pipeline);\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Adds a pipeline to the manager\r\n * @param renderPipeline The pipeline to add\r\n */\r\n public addPipeline(renderPipeline: PostProcessRenderPipeline): void {\r\n this.removePipeline(renderPipeline._name);\r\n this._renderPipelines[renderPipeline._name] = renderPipeline;\r\n this._onNewPipelineAddedObservable.notifyObservers(renderPipeline);\r\n }\r\n\r\n /**\r\n * Remove the pipeline from the manager\r\n * @param renderPipelineName the name of the pipeline to remove\r\n */\r\n public removePipeline(renderPipelineName: string): void {\r\n const pipeline = this._renderPipelines[renderPipelineName];\r\n if (pipeline) {\r\n this._onPipelineRemovedObservable.notifyObservers(pipeline);\r\n delete this._renderPipelines[renderPipelineName];\r\n }\r\n }\r\n\r\n /**\r\n * Attaches a camera to the pipeline\r\n * @param renderPipelineName The name of the pipeline to attach to\r\n * @param cameras the camera to attach\r\n * @param unique if the camera can be attached multiple times to the pipeline\r\n */\r\n public attachCamerasToRenderPipeline(renderPipelineName: string, cameras: Camera[] | Camera, unique: boolean = false): void {\r\n const renderPipeline: PostProcessRenderPipeline = this._renderPipelines[renderPipelineName];\r\n\r\n if (!renderPipeline) {\r\n return;\r\n }\r\n\r\n renderPipeline._attachCameras(cameras as Camera[], unique);\r\n }\r\n\r\n /**\r\n * Detaches a camera from the pipeline\r\n * @param renderPipelineName The name of the pipeline to detach from\r\n * @param cameras the camera to detach\r\n */\r\n public detachCamerasFromRenderPipeline(renderPipelineName: string, cameras: Camera[] | Camera): void {\r\n const renderPipeline: PostProcessRenderPipeline = this._renderPipelines[renderPipelineName];\r\n\r\n if (!renderPipeline) {\r\n return;\r\n }\r\n\r\n renderPipeline._detachCameras(cameras as Camera[]);\r\n }\r\n\r\n /**\r\n * Enables an effect by name on a pipeline\r\n * @param renderPipelineName the name of the pipeline to enable the effect in\r\n * @param renderEffectName the name of the effect to enable\r\n * @param cameras the cameras that the effect should be enabled on\r\n */\r\n public enableEffectInPipeline(renderPipelineName: string, renderEffectName: string, cameras: Camera[] | Camera): void {\r\n const renderPipeline: PostProcessRenderPipeline = this._renderPipelines[renderPipelineName];\r\n\r\n if (!renderPipeline) {\r\n return;\r\n }\r\n\r\n renderPipeline._enableEffect(renderEffectName, cameras as Camera[]);\r\n }\r\n\r\n /**\r\n * Disables an effect by name on a pipeline\r\n * @param renderPipelineName the name of the pipeline to disable the effect in\r\n * @param renderEffectName the name of the effect to disable\r\n * @param cameras the cameras that the effect should be disabled on\r\n */\r\n public disableEffectInPipeline(renderPipelineName: string, renderEffectName: string, cameras: Camera[] | Camera): void {\r\n const renderPipeline: PostProcessRenderPipeline = this._renderPipelines[renderPipelineName];\r\n\r\n if (!renderPipeline) {\r\n return;\r\n }\r\n\r\n renderPipeline._disableEffect(renderEffectName, cameras as Camera[]);\r\n }\r\n\r\n /**\r\n * Updates the state of all contained render pipelines and disposes of any non supported pipelines\r\n */\r\n public update(): void {\r\n for (const renderPipelineName in this._renderPipelines) {\r\n if (Object.prototype.hasOwnProperty.call(this._renderPipelines, renderPipelineName)) {\r\n const pipeline = this._renderPipelines[renderPipelineName];\r\n if (!pipeline.isSupported) {\r\n pipeline.dispose();\r\n delete this._renderPipelines[renderPipelineName];\r\n } else {\r\n pipeline._update();\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** @internal */\r\n public _rebuild(): void {\r\n for (const renderPipelineName in this._renderPipelines) {\r\n if (Object.prototype.hasOwnProperty.call(this._renderPipelines, renderPipelineName)) {\r\n const pipeline = this._renderPipelines[renderPipelineName];\r\n pipeline._rebuild();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Disposes of the manager and pipelines\r\n */\r\n public dispose(): void {\r\n for (const renderPipelineName in this._renderPipelines) {\r\n if (Object.prototype.hasOwnProperty.call(this._renderPipelines, renderPipelineName)) {\r\n const pipeline = this._renderPipelines[renderPipelineName];\r\n pipeline.dispose();\r\n }\r\n }\r\n }\r\n}\r\n"]}
@@ -21,14 +21,18 @@ export class ThinPassPostProcess extends EffectWrapper {
21
21
  * @param options Options to configure the effect
22
22
  */
23
23
  constructor(name, engine = null, options) {
24
- super({
25
- ...options,
24
+ const localOptions = {
26
25
  name,
27
26
  engine: engine || Engine.LastCreatedEngine,
28
27
  useShaderStore: true,
29
28
  useAsPostProcess: true,
30
29
  fragmentShader: ThinPassPostProcess.FragmentUrl,
31
- });
30
+ ...options,
31
+ };
32
+ if (!localOptions.engine) {
33
+ localOptions.engine = Engine.LastCreatedEngine;
34
+ }
35
+ super(localOptions);
32
36
  }
33
37
  }
34
38
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"thinPassPostProcess.js","sourceRoot":"","sources":["../../../../dev/core/src/PostProcesses/thinPassPostProcess.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable, EffectWrapperCreationOptions, AbstractEngine } from \"core/index\";\r\nimport { EffectWrapper } from \"core/Materials/effectRenderer\";\r\nimport { Engine } from \"../Engines/engine\";\r\n\r\n/**\r\n * PassPostProcess which produces an output the same as it's input\r\n */\r\nexport class ThinPassPostProcess extends EffectWrapper {\r\n /**\r\n * The fragment shader url\r\n */\r\n public static readonly FragmentUrl = \"pass\";\r\n\r\n protected override _gatherImports(useWebGPU: boolean, list: Promise<any>[]) {\r\n if (useWebGPU) {\r\n this._webGPUReady = true;\r\n list.push(Promise.all([import(\"../ShadersWGSL/pass.fragment\")]));\r\n } else {\r\n list.push(Promise.all([import(\"../Shaders/pass.fragment\")]));\r\n }\r\n\r\n super._gatherImports(useWebGPU, list);\r\n }\r\n\r\n /**\r\n * Constructs a new pass post process\r\n * @param name Name of the effect\r\n * @param engine Engine to use to render the effect. If not provided, the last created engine will be used\r\n * @param options Options to configure the effect\r\n */\r\n constructor(name: string, engine: Nullable<AbstractEngine> = null, options?: EffectWrapperCreationOptions) {\r\n super({\r\n ...options,\r\n name,\r\n engine: engine || Engine.LastCreatedEngine!,\r\n useShaderStore: true,\r\n useAsPostProcess: true,\r\n fragmentShader: ThinPassPostProcess.FragmentUrl,\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * PassCubePostProcess which produces an output the same as it's input (which must be a cube texture)\r\n */\r\nexport class ThinPassCubePostProcess extends EffectWrapper {\r\n /**\r\n * The fragment shader url\r\n */\r\n public static readonly FragmentUrl = \"passCube\";\r\n\r\n protected override _gatherImports(useWebGPU: boolean, list: Promise<any>[]) {\r\n if (useWebGPU) {\r\n this._webGPUReady = true;\r\n list.push(Promise.all([import(\"../ShadersWGSL/passCube.fragment\")]));\r\n } else {\r\n list.push(Promise.all([import(\"../Shaders/passCube.fragment\")]));\r\n }\r\n\r\n super._gatherImports(useWebGPU, list);\r\n }\r\n\r\n /**\r\n * Creates the PassCubePostProcess\r\n * @param name Name of the effect\r\n * @param engine Engine to use to render the effect. If not provided, the last created engine will be used\r\n * @param options Options to configure the effect\r\n */\r\n constructor(name: string, engine: Nullable<AbstractEngine> = null, options?: EffectWrapperCreationOptions) {\r\n super({\r\n ...options,\r\n name,\r\n engine: engine || Engine.LastCreatedEngine!,\r\n useShaderStore: true,\r\n useAsPostProcess: true,\r\n fragmentShader: ThinPassCubePostProcess.FragmentUrl,\r\n defines: \"#define POSITIVEX\",\r\n });\r\n }\r\n\r\n private _face = 0;\r\n\r\n /**\r\n * Gets or sets the cube face to display.\r\n * * 0 is +X\r\n * * 1 is -X\r\n * * 2 is +Y\r\n * * 3 is -Y\r\n * * 4 is +Z\r\n * * 5 is -Z\r\n */\r\n public get face(): number {\r\n return this._face;\r\n }\r\n\r\n public set face(value: number) {\r\n if (value < 0 || value > 5) {\r\n return;\r\n }\r\n\r\n this._face = value;\r\n switch (this._face) {\r\n case 0:\r\n this.updateEffect(\"#define POSITIVEX\");\r\n break;\r\n case 1:\r\n this.updateEffect(\"#define NEGATIVEX\");\r\n break;\r\n case 2:\r\n this.updateEffect(\"#define POSITIVEY\");\r\n break;\r\n case 3:\r\n this.updateEffect(\"#define NEGATIVEY\");\r\n break;\r\n case 4:\r\n this.updateEffect(\"#define POSITIVEZ\");\r\n break;\r\n case 5:\r\n this.updateEffect(\"#define NEGATIVEZ\");\r\n break;\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"thinPassPostProcess.js","sourceRoot":"","sources":["../../../../dev/core/src/PostProcesses/thinPassPostProcess.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,uCAAsC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,aAAa;IAM/B,cAAc,CAAC,SAAkB,EAAE,IAAoB;QACtE,IAAI,SAAS,EAAE,CAAC;YACZ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,CAAC;QAED,KAAK,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;OAKG;IACH,YAAY,IAAY,EAAE,SAAmC,IAAI,EAAE,OAAsC;QACrG,MAAM,YAAY,GAAiC;YAC/C,IAAI;YACJ,MAAM,EAAE,MAAM,IAAI,MAAM,CAAC,iBAAkB;YAC3C,cAAc,EAAE,IAAI;YACpB,gBAAgB,EAAE,IAAI;YACtB,cAAc,EAAE,mBAAmB,CAAC,WAAW;YAC/C,GAAG,OAAO;SACb,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;YACvB,YAAY,CAAC,MAAM,GAAG,MAAM,CAAC,iBAAkB,CAAC;QACpD,CAAC;QAED,KAAK,CAAC,YAAY,CAAC,CAAC;IACxB,CAAC;;AArCD;;GAEG;AACoB,+BAAW,GAAG,MAAM,CAAC;AAqChD;;GAEG;AACH,MAAM,OAAO,uBAAwB,SAAQ,aAAa;IAMnC,cAAc,CAAC,SAAkB,EAAE,IAAoB;QACtE,IAAI,SAAS,EAAE,CAAC;YACZ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC;QAED,KAAK,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;OAKG;IACH,YAAY,IAAY,EAAE,SAAmC,IAAI,EAAE,OAAsC;QACrG,KAAK,CAAC;YACF,GAAG,OAAO;YACV,IAAI;YACJ,MAAM,EAAE,MAAM,IAAI,MAAM,CAAC,iBAAkB;YAC3C,cAAc,EAAE,IAAI;YACpB,gBAAgB,EAAE,IAAI;YACtB,cAAc,EAAE,uBAAuB,CAAC,WAAW;YACnD,OAAO,EAAE,mBAAmB;SAC/B,CAAC,CAAC;QAGC,UAAK,GAAG,CAAC,CAAC;IAFlB,CAAC;IAID;;;;;;;;OAQG;IACH,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,IAAW,IAAI,CAAC,KAAa;QACzB,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO;QACX,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;YACjB,KAAK,CAAC;gBACF,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;gBACvC,MAAM;YACV,KAAK,CAAC;gBACF,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;gBACvC,MAAM;YACV,KAAK,CAAC;gBACF,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;gBACvC,MAAM;YACV,KAAK,CAAC;gBACF,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;gBACvC,MAAM;YACV,KAAK,CAAC;gBACF,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;gBACvC,MAAM;YACV,KAAK,CAAC;gBACF,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;gBACvC,MAAM;QACd,CAAC;IACL,CAAC;;AA3ED;;GAEG;AACoB,mCAAW,GAAG,UAAU,AAAb,CAAc","sourcesContent":["import type { Nullable, EffectWrapperCreationOptions, AbstractEngine } from \"core/index\";\r\nimport { EffectWrapper } from \"core/Materials/effectRenderer\";\r\nimport { Engine } from \"../Engines/engine\";\r\n\r\n/**\r\n * PassPostProcess which produces an output the same as it's input\r\n */\r\nexport class ThinPassPostProcess extends EffectWrapper {\r\n /**\r\n * The fragment shader url\r\n */\r\n public static readonly FragmentUrl = \"pass\";\r\n\r\n protected override _gatherImports(useWebGPU: boolean, list: Promise<any>[]) {\r\n if (useWebGPU) {\r\n this._webGPUReady = true;\r\n list.push(Promise.all([import(\"../ShadersWGSL/pass.fragment\")]));\r\n } else {\r\n list.push(Promise.all([import(\"../Shaders/pass.fragment\")]));\r\n }\r\n\r\n super._gatherImports(useWebGPU, list);\r\n }\r\n\r\n /**\r\n * Constructs a new pass post process\r\n * @param name Name of the effect\r\n * @param engine Engine to use to render the effect. If not provided, the last created engine will be used\r\n * @param options Options to configure the effect\r\n */\r\n constructor(name: string, engine: Nullable<AbstractEngine> = null, options?: EffectWrapperCreationOptions) {\r\n const localOptions: EffectWrapperCreationOptions = {\r\n name,\r\n engine: engine || Engine.LastCreatedEngine!,\r\n useShaderStore: true,\r\n useAsPostProcess: true,\r\n fragmentShader: ThinPassPostProcess.FragmentUrl,\r\n ...options,\r\n };\r\n\r\n if (!localOptions.engine) {\r\n localOptions.engine = Engine.LastCreatedEngine!;\r\n }\r\n\r\n super(localOptions);\r\n }\r\n}\r\n\r\n/**\r\n * PassCubePostProcess which produces an output the same as it's input (which must be a cube texture)\r\n */\r\nexport class ThinPassCubePostProcess extends EffectWrapper {\r\n /**\r\n * The fragment shader url\r\n */\r\n public static readonly FragmentUrl = \"passCube\";\r\n\r\n protected override _gatherImports(useWebGPU: boolean, list: Promise<any>[]) {\r\n if (useWebGPU) {\r\n this._webGPUReady = true;\r\n list.push(Promise.all([import(\"../ShadersWGSL/passCube.fragment\")]));\r\n } else {\r\n list.push(Promise.all([import(\"../Shaders/passCube.fragment\")]));\r\n }\r\n\r\n super._gatherImports(useWebGPU, list);\r\n }\r\n\r\n /**\r\n * Creates the PassCubePostProcess\r\n * @param name Name of the effect\r\n * @param engine Engine to use to render the effect. If not provided, the last created engine will be used\r\n * @param options Options to configure the effect\r\n */\r\n constructor(name: string, engine: Nullable<AbstractEngine> = null, options?: EffectWrapperCreationOptions) {\r\n super({\r\n ...options,\r\n name,\r\n engine: engine || Engine.LastCreatedEngine!,\r\n useShaderStore: true,\r\n useAsPostProcess: true,\r\n fragmentShader: ThinPassCubePostProcess.FragmentUrl,\r\n defines: \"#define POSITIVEX\",\r\n });\r\n }\r\n\r\n private _face = 0;\r\n\r\n /**\r\n * Gets or sets the cube face to display.\r\n * * 0 is +X\r\n * * 1 is -X\r\n * * 2 is +Y\r\n * * 3 is -Y\r\n * * 4 is +Z\r\n * * 5 is -Z\r\n */\r\n public get face(): number {\r\n return this._face;\r\n }\r\n\r\n public set face(value: number) {\r\n if (value < 0 || value > 5) {\r\n return;\r\n }\r\n\r\n this._face = value;\r\n switch (this._face) {\r\n case 0:\r\n this.updateEffect(\"#define POSITIVEX\");\r\n break;\r\n case 1:\r\n this.updateEffect(\"#define NEGATIVEX\");\r\n break;\r\n case 2:\r\n this.updateEffect(\"#define POSITIVEY\");\r\n break;\r\n case 3:\r\n this.updateEffect(\"#define NEGATIVEY\");\r\n break;\r\n case 4:\r\n this.updateEffect(\"#define POSITIVEZ\");\r\n break;\r\n case 5:\r\n this.updateEffect(\"#define NEGATIVEZ\");\r\n break;\r\n }\r\n }\r\n}\r\n"]}
@@ -658,7 +658,8 @@ export class EdgesRenderer {
658
658
  this._buffersForInstances["world2"] = this._source.getVertexBuffer("world2");
659
659
  this._buffersForInstances["world3"] = this._source.getVertexBuffer("world3");
660
660
  if (hasInstances) {
661
- const instanceStorage = this._source._instanceDataStorage;
661
+ const instanceStorage = this._source._getInstanceDataStorage();
662
+ const isFrozen = this._source._instanceDataStorage.isFrozen;
662
663
  instanceCount = this.customInstances.length;
663
664
  if (!instanceStorage.instancesData) {
664
665
  if (!this._source.getScene()._activeMeshesFrozen) {
@@ -666,7 +667,7 @@ export class EdgesRenderer {
666
667
  }
667
668
  return;
668
669
  }
669
- if (!instanceStorage.isFrozen) {
670
+ if (!isFrozen) {
670
671
  let offset = 0;
671
672
  for (let i = 0; i < instanceCount; ++i) {
672
673
  this.customInstances.data[i].copyToArray(instanceStorage.instancesData, offset);