UNPKG

@babylonjs/viewer

Version:

The Babylon Viewer aims to simplify a specific but common Babylon.js use case: loading, viewing, and interacting with a 3D model.

197 lines (193 loc) 7.34 kB
import { G as SceneComponentConstants, F as Scene } from './index-FzOfPXLV.esm.js'; /** * PostProcessRenderPipelineManager class * @see https://doc.babylonjs.com/features/featuresDeepDive/postProcesses/postProcessRenderPipeline */ class PostProcessRenderPipelineManager { /** * Initializes a PostProcessRenderPipelineManager * @see https://doc.babylonjs.com/features/featuresDeepDive/postProcesses/postProcessRenderPipeline */ constructor() { this._renderPipelines = {}; } /** * Gets the list of supported render pipelines */ get supportedPipelines() { const result = []; for (const renderPipelineName in this._renderPipelines) { if (Object.prototype.hasOwnProperty.call(this._renderPipelines, renderPipelineName)) { const pipeline = this._renderPipelines[renderPipelineName]; if (pipeline.isSupported) { result.push(pipeline); } } } return result; } /** * Adds a pipeline to the manager * @param renderPipeline The pipeline to add */ addPipeline(renderPipeline) { this._renderPipelines[renderPipeline._name] = renderPipeline; } /** * Remove the pipeline from the manager * @param renderPipelineName the name of the pipeline to remove */ removePipeline(renderPipelineName) { delete this._renderPipelines[renderPipelineName]; } /** * Attaches a camera to the pipeline * @param renderPipelineName The name of the pipeline to attach to * @param cameras the camera to attach * @param unique if the camera can be attached multiple times to the pipeline */ attachCamerasToRenderPipeline(renderPipelineName, cameras, unique = false) { const renderPipeline = this._renderPipelines[renderPipelineName]; if (!renderPipeline) { return; } renderPipeline._attachCameras(cameras, unique); } /** * Detaches a camera from the pipeline * @param renderPipelineName The name of the pipeline to detach from * @param cameras the camera to detach */ detachCamerasFromRenderPipeline(renderPipelineName, cameras) { const renderPipeline = this._renderPipelines[renderPipelineName]; if (!renderPipeline) { return; } renderPipeline._detachCameras(cameras); } /** * Enables an effect by name on a pipeline * @param renderPipelineName the name of the pipeline to enable the effect in * @param renderEffectName the name of the effect to enable * @param cameras the cameras that the effect should be enabled on */ enableEffectInPipeline(renderPipelineName, renderEffectName, cameras) { const renderPipeline = this._renderPipelines[renderPipelineName]; if (!renderPipeline) { return; } renderPipeline._enableEffect(renderEffectName, cameras); } /** * Disables an effect by name on a pipeline * @param renderPipelineName the name of the pipeline to disable the effect in * @param renderEffectName the name of the effect to disable * @param cameras the cameras that the effect should be disabled on */ disableEffectInPipeline(renderPipelineName, renderEffectName, cameras) { const renderPipeline = this._renderPipelines[renderPipelineName]; if (!renderPipeline) { return; } renderPipeline._disableEffect(renderEffectName, cameras); } /** * Updates the state of all contained render pipelines and disposes of any non supported pipelines */ update() { for (const renderPipelineName in this._renderPipelines) { if (Object.prototype.hasOwnProperty.call(this._renderPipelines, renderPipelineName)) { const pipeline = this._renderPipelines[renderPipelineName]; if (!pipeline.isSupported) { pipeline.dispose(); delete this._renderPipelines[renderPipelineName]; } else { pipeline._update(); } } } } /** @internal */ _rebuild() { for (const renderPipelineName in this._renderPipelines) { if (Object.prototype.hasOwnProperty.call(this._renderPipelines, renderPipelineName)) { const pipeline = this._renderPipelines[renderPipelineName]; pipeline._rebuild(); } } } /** * Disposes of the manager and pipelines */ dispose() { for (const renderPipelineName in this._renderPipelines) { if (Object.prototype.hasOwnProperty.call(this._renderPipelines, renderPipelineName)) { const pipeline = this._renderPipelines[renderPipelineName]; pipeline.dispose(); } } } } Object.defineProperty(Scene.prototype, "postProcessRenderPipelineManager", { get: function () { if (!this._postProcessRenderPipelineManager) { // Register the G Buffer component to the scene. let component = this._getComponent(SceneComponentConstants.NAME_POSTPROCESSRENDERPIPELINEMANAGER); if (!component) { component = new PostProcessRenderPipelineManagerSceneComponent(this); this._addComponent(component); } this._postProcessRenderPipelineManager = new PostProcessRenderPipelineManager(); } return this._postProcessRenderPipelineManager; }, enumerable: true, configurable: true, }); /** * Defines the Render Pipeline scene component responsible to rendering pipelines */ class PostProcessRenderPipelineManagerSceneComponent { /** * Creates a new instance of the component for the given scene * @param scene Defines the scene to register the component in */ constructor(scene) { /** * The component name helpful to identify the component in the list of scene components. */ this.name = SceneComponentConstants.NAME_POSTPROCESSRENDERPIPELINEMANAGER; this.scene = scene; } /** * Registers the component in a given scene */ register() { this.scene._gatherRenderTargetsStage.registerStep(SceneComponentConstants.STEP_GATHERRENDERTARGETS_POSTPROCESSRENDERPIPELINEMANAGER, this, this._gatherRenderTargets); } /** * Rebuilds the elements related to this component in case of * context lost for instance. */ rebuild() { if (this.scene._postProcessRenderPipelineManager) { this.scene._postProcessRenderPipelineManager._rebuild(); } } /** * Disposes the component and the associated resources */ dispose() { if (this.scene._postProcessRenderPipelineManager) { this.scene._postProcessRenderPipelineManager.dispose(); } } _gatherRenderTargets() { if (this.scene._postProcessRenderPipelineManager) { this.scene._postProcessRenderPipelineManager.update(); } } } export { PostProcessRenderPipelineManagerSceneComponent }; //# sourceMappingURL=postProcessRenderPipelineManagerSceneComponent-Cw0a97m5.esm.js.map