@babylonjs/core 6.26.0 → 6.27.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.
- package/Behaviors/Meshes/attachToBoxBehavior.js.map +1 -1
- package/Cameras/Inputs/flyCameraMouseInput.js.map +1 -1
- package/Cameras/VR/vrExperienceHelper.js.map +1 -1
- package/Collisions/intersectionInfo.js.map +1 -1
- package/Engines/Processors/Expressions/Operators/shaderDefineArithmeticOperator.js.map +1 -1
- package/Engines/Processors/Expressions/Operators/shaderDefineIsDefinedOperator.js.map +1 -1
- package/Engines/WebGPU/webgpuBundleList.js.map +1 -1
- package/Engines/thinEngine.js +2 -2
- package/Engines/thinEngine.js.map +1 -1
- package/FlowGraph/Blocks/Data/flowGraphBinaryOperationBlock.d.ts +3 -4
- package/FlowGraph/Blocks/Data/flowGraphBinaryOperationBlock.js +5 -6
- package/FlowGraph/Blocks/Data/flowGraphBinaryOperationBlock.js.map +1 -1
- package/FlowGraph/Blocks/Data/flowGraphCachedOperationBlock.d.ts +22 -0
- package/FlowGraph/Blocks/Data/flowGraphCachedOperationBlock.js +26 -0
- package/FlowGraph/Blocks/Data/flowGraphCachedOperationBlock.js.map +1 -0
- package/FlowGraph/Blocks/Data/flowGraphConstantOperationBlock.d.ts +3 -5
- package/FlowGraph/Blocks/Data/flowGraphConstantOperationBlock.js +5 -6
- package/FlowGraph/Blocks/Data/flowGraphConstantOperationBlock.js.map +1 -1
- package/FlowGraph/Blocks/Data/flowGraphUnaryOperationBlock.d.ts +3 -4
- package/FlowGraph/Blocks/Data/flowGraphUnaryOperationBlock.js +5 -6
- package/FlowGraph/Blocks/Data/flowGraphUnaryOperationBlock.js.map +1 -1
- package/FlowGraph/flowGraphConnection.d.ts +1 -1
- package/FlowGraph/flowGraphConnection.js +2 -1
- package/FlowGraph/flowGraphConnection.js.map +1 -1
- package/FlowGraph/flowGraphContext.d.ts +10 -0
- package/FlowGraph/flowGraphContext.js +14 -0
- package/FlowGraph/flowGraphContext.js.map +1 -1
- package/FlowGraph/flowGraphDataConnection.js.map +1 -1
- package/FlowGraph/flowGraphRichTypes.js.map +1 -1
- package/FlowGraph/flowGraphSignalConnection.js +1 -0
- package/FlowGraph/flowGraphSignalConnection.js.map +1 -1
- package/Layers/highlightLayer.js.map +1 -1
- package/Loading/loadingScreen.js.map +1 -1
- package/Materials/Background/backgroundMaterial.d.ts +16 -0
- package/Materials/Background/backgroundMaterial.js +44 -0
- package/Materials/Background/backgroundMaterial.js.map +1 -1
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +0 -1
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.js +6 -2
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Meshes/GreasedLine/greasedLineBaseMesh.js.map +1 -1
- package/Meshes/GreasedLine/greasedLineMesh.js.map +1 -1
- package/Meshes/GreasedLine/greasedLineRibbonMesh.js.map +1 -1
- package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.d.ts +10 -1
- package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.js +27 -5
- package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.js.map +1 -1
- package/Meshes/Node/Blocks/mergeGeometryBlock.js +16 -4
- package/Meshes/Node/Blocks/mergeGeometryBlock.js.map +1 -1
- package/Meshes/Node/Interfaces/nodeGeometryExecutionContext.d.ts +5 -0
- package/Meshes/Node/Interfaces/nodeGeometryExecutionContext.js.map +1 -1
- package/Meshes/Node/nodeGeometryBuildState.js +3 -0
- package/Meshes/Node/nodeGeometryBuildState.js.map +1 -1
- package/Meshes/csg.js.map +1 -1
- package/Meshes/geodesicMesh.js.map +1 -1
- package/Meshes/meshSimplification.js.map +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollector.js.map +1 -1
- package/Misc/fileTools.js.map +1 -1
- package/Physics/physicsHelper.js.map +1 -1
- package/Physics/v1/Plugins/ammoJSPlugin.js.map +1 -1
- package/Physics/v1/Plugins/cannonJSPlugin.js.map +1 -1
- package/Physics/v1/Plugins/oimoJSPlugin.js.map +1 -1
- package/Physics/v1/physicsEngine.js.map +1 -1
- package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
- package/Physics/v2/physicsEngine.js.map +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js.map +1 -1
- package/PostProcesses/bloomEffect.js.map +1 -1
- package/Rendering/boundingBoxRenderer.js +6 -2
- package/Rendering/boundingBoxRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/backgroundFragmentDeclaration.js +3 -0
- package/Shaders/ShadersInclude/backgroundFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/backgroundUboDeclaration.js +1 -8
- package/Shaders/ShadersInclude/backgroundUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/helperFunctions.js +1 -1
- package/Shaders/ShadersInclude/helperFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrHelperFunctions.js +1 -3
- package/Shaders/ShadersInclude/pbrHelperFunctions.js.map +1 -1
- package/Shaders/background.fragment.js +11 -1
- package/Shaders/background.fragment.js.map +1 -1
- package/Shaders/default.fragment.js +0 -1
- package/Shaders/default.fragment.js.map +1 -1
- package/XR/features/WebXRAnchorSystem.js.map +1 -1
- package/XR/features/WebXRControllerPhysics.js.map +1 -1
- package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
- package/XR/features/WebXRControllerTeleportation.js.map +1 -1
- package/XR/features/WebXRDepthSensing.js.map +1 -1
- package/XR/features/WebXRLayers.js.map +1 -1
- package/XR/features/WebXRMeshDetector.js.map +1 -1
- package/XR/features/WebXRNearInteraction.js.map +1 -1
- package/XR/features/WebXRPlaneDetector.js.map +1 -1
- package/XR/features/WebXRSpaceWarp.js.map +1 -1
- package/XR/native/nativeXRRenderTarget.js.map +1 -1
- package/XR/webXRCamera.js.map +1 -1
- package/XR/webXRManagedOutputCanvas.js.map +1 -1
- package/XR/webXRRenderTargetTextureProvider.js.map +1 -1
- package/XR/webXRWebGLLayer.js.map +1 -1
- package/assetContainer.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"highlightLayer.js","sourceRoot":"","sources":["../../../../dev/core/src/Layers/highlightLayer.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\r\nimport { serialize, SerializationHelper } from \"../Misc/decorators\";\r\nimport type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { Camera } from \"../Cameras/camera\";\r\nimport type { Scene } from \"../scene\";\r\nimport { Vector2 } from \"../Maths/math.vector\";\r\nimport { Engine } from \"../Engines/engine\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport type { SubMesh } from \"../Meshes/subMesh\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport type { Effect } from \"../Materials/effect\";\r\nimport { Material } from \"../Materials/material\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport type { PostProcessOptions } from \"../PostProcesses/postProcess\";\r\nimport { PostProcess } from \"../PostProcesses/postProcess\";\r\nimport { PassPostProcess } from \"../PostProcesses/passPostProcess\";\r\nimport { BlurPostProcess } from \"../PostProcesses/blurPostProcess\";\r\nimport { EffectLayer } from \"./effectLayer\";\r\nimport { AbstractScene } from \"../abstractScene\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { RegisterClass } from \"../Misc/typeStore\";\r\nimport { Color4, Color3 } from \"../Maths/math.color\";\r\n\r\nimport \"../Shaders/glowMapMerge.fragment\";\r\nimport \"../Shaders/glowMapMerge.vertex\";\r\nimport \"../Shaders/glowBlurPostProcess.fragment\";\r\nimport \"../Layers/effectLayerSceneComponent\";\r\n\r\ndeclare module \"../abstractScene\" {\r\n export interface AbstractScene {\r\n /**\r\n * Return a the first highlight layer of the scene with a given name.\r\n * @param name The name of the highlight layer to look for.\r\n * @returns The highlight layer if found otherwise null.\r\n */\r\n getHighlightLayerByName(name: string): Nullable<HighlightLayer>;\r\n }\r\n}\r\n\r\nAbstractScene.prototype.getHighlightLayerByName = function (name: string): Nullable<HighlightLayer> {\r\n for (let index = 0; index < this.effectLayers?.length; index++) {\r\n if (this.effectLayers[index].name === name && this.effectLayers[index].getEffectName() === HighlightLayer.EffectName) {\r\n return (<any>this.effectLayers[index]) as HighlightLayer;\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Special Glow Blur post process only blurring the alpha channel\r\n * It enforces keeping the most luminous color in the color channel.\r\n */\r\nclass GlowBlurPostProcess extends PostProcess {\r\n constructor(\r\n name: string,\r\n public direction: Vector2,\r\n public kernel: number,\r\n options: number | PostProcessOptions,\r\n camera: Nullable<Camera>,\r\n samplingMode: number = Texture.BILINEAR_SAMPLINGMODE,\r\n engine?: Engine,\r\n reusable?: boolean\r\n ) {\r\n super(name, \"glowBlurPostProcess\", [\"screenSize\", \"direction\", \"blurWidth\"], null, options, camera, samplingMode, engine, reusable);\r\n\r\n this.onApplyObservable.add((effect: Effect) => {\r\n effect.setFloat2(\"screenSize\", this.width, this.height);\r\n effect.setVector2(\"direction\", this.direction);\r\n effect.setFloat(\"blurWidth\", this.kernel);\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Highlight layer options. This helps customizing the behaviour\r\n * of the highlight layer.\r\n */\r\nexport interface IHighlightLayerOptions {\r\n /**\r\n * Multiplication factor apply to the canvas size to compute the render target size\r\n * used to generated the glowing objects (the smaller the faster). Default: 0.5\r\n */\r\n mainTextureRatio: number;\r\n\r\n /**\r\n * Enforces a fixed size texture to ensure resize independent blur. Default: undefined\r\n */\r\n mainTextureFixedSize?: number;\r\n\r\n /**\r\n * Multiplication factor apply to the main texture size in the first step of the blur to reduce the size\r\n * of the picture to blur (the smaller the faster). Default: 0.5\r\n */\r\n blurTextureSizeRatio: number;\r\n\r\n /**\r\n * How big in texel of the blur texture is the vertical blur. Default: 1\r\n */\r\n blurVerticalSize: number;\r\n\r\n /**\r\n * How big in texel of the blur texture is the horizontal blur. Default: 1\r\n */\r\n blurHorizontalSize: number;\r\n\r\n /**\r\n * Alpha blending mode used to apply the blur. Default: ALPHA_COMBINE\r\n */\r\n alphaBlendingMode: number;\r\n\r\n /**\r\n * The camera attached to the layer. Default: null\r\n */\r\n camera: Nullable<Camera>;\r\n\r\n /**\r\n * Should we display highlight as a solid stroke? Default: false\r\n */\r\n isStroke?: boolean;\r\n\r\n /**\r\n * The rendering group to draw the layer in. Default: -1\r\n */\r\n renderingGroupId: number;\r\n\r\n /**\r\n * The type of the main texture. Default: TEXTURETYPE_UNSIGNED_INT\r\n */\r\n mainTextureType: number;\r\n}\r\n\r\n/**\r\n * Storage interface grouping all the information required for glowing a mesh.\r\n */\r\ninterface IHighlightLayerMesh {\r\n /**\r\n * The glowy mesh\r\n */\r\n mesh: Mesh;\r\n /**\r\n * The color of the glow\r\n */\r\n color: Color3;\r\n /**\r\n * The mesh render callback use to insert stencil information\r\n */\r\n observerHighlight: Nullable<Observer<Mesh>>;\r\n /**\r\n * The mesh render callback use to come to the default behavior\r\n */\r\n observerDefault: Nullable<Observer<Mesh>>;\r\n /**\r\n * If it exists, the emissive color of the material will be used to generate the glow.\r\n * Else it falls back to the current color.\r\n */\r\n glowEmissiveOnly: boolean;\r\n}\r\n\r\n/**\r\n * Storage interface grouping all the information required for an excluded mesh.\r\n */\r\ninterface IHighlightLayerExcludedMesh {\r\n /**\r\n * The glowy mesh\r\n */\r\n mesh: Mesh;\r\n /**\r\n * The mesh render callback use to prevent stencil use\r\n */\r\n beforeBind: Nullable<Observer<Mesh>>;\r\n /**\r\n * The mesh render callback use to restore previous stencil use\r\n */\r\n afterRender: Nullable<Observer<Mesh>>;\r\n /**\r\n * Current stencil state of the engine\r\n */\r\n stencilState: boolean;\r\n}\r\n\r\n/**\r\n * The highlight layer Helps adding a glow effect around a mesh.\r\n *\r\n * Once instantiated in a scene, simply use the addMesh or removeMesh method to add or remove\r\n * glowy meshes to your scene.\r\n *\r\n * !!! THIS REQUIRES AN ACTIVE STENCIL BUFFER ON THE CANVAS !!!\r\n */\r\nexport class HighlightLayer extends EffectLayer {\r\n /**\r\n * Effect Name of the highlight layer.\r\n */\r\n public static readonly EffectName = \"HighlightLayer\";\r\n\r\n /**\r\n * The neutral color used during the preparation of the glow effect.\r\n * This is black by default as the blend operation is a blend operation.\r\n */\r\n public static NeutralColor: Color4 = new Color4(0, 0, 0, 0);\r\n\r\n /**\r\n * Stencil value used for glowing meshes.\r\n */\r\n public static GlowingMeshStencilReference = 0x02;\r\n\r\n /**\r\n * Stencil value used for the other meshes in the scene.\r\n */\r\n public static NormalMeshStencilReference = 0x01;\r\n\r\n /**\r\n * Specifies whether or not the inner glow is ACTIVE in the layer.\r\n */\r\n @serialize()\r\n public innerGlow: boolean = true;\r\n\r\n /**\r\n * Specifies whether or not the outer glow is ACTIVE in the layer.\r\n */\r\n @serialize()\r\n public outerGlow: boolean = true;\r\n\r\n /**\r\n * Specifies the horizontal size of the blur.\r\n */\r\n public set blurHorizontalSize(value: number) {\r\n this._horizontalBlurPostprocess.kernel = value;\r\n this._options.blurHorizontalSize = value;\r\n }\r\n\r\n /**\r\n * Specifies the vertical size of the blur.\r\n */\r\n public set blurVerticalSize(value: number) {\r\n this._verticalBlurPostprocess.kernel = value;\r\n this._options.blurVerticalSize = value;\r\n }\r\n\r\n /**\r\n * Gets the horizontal size of the blur.\r\n */\r\n @serialize()\r\n public get blurHorizontalSize(): number {\r\n return this._horizontalBlurPostprocess.kernel;\r\n }\r\n\r\n /**\r\n * Gets the vertical size of the blur.\r\n */\r\n @serialize()\r\n public get blurVerticalSize(): number {\r\n return this._verticalBlurPostprocess.kernel;\r\n }\r\n\r\n /**\r\n * An event triggered when the highlight layer is being blurred.\r\n */\r\n public onBeforeBlurObservable = new Observable<HighlightLayer>();\r\n\r\n /**\r\n * An event triggered when the highlight layer has been blurred.\r\n */\r\n public onAfterBlurObservable = new Observable<HighlightLayer>();\r\n\r\n private _instanceGlowingMeshStencilReference = HighlightLayer.GlowingMeshStencilReference++;\r\n\r\n @serialize(\"options\")\r\n private _options: IHighlightLayerOptions;\r\n private _downSamplePostprocess: PassPostProcess;\r\n private _horizontalBlurPostprocess: GlowBlurPostProcess;\r\n private _verticalBlurPostprocess: GlowBlurPostProcess;\r\n private _blurTexture: RenderTargetTexture;\r\n\r\n private _meshes: Nullable<{ [id: string]: Nullable<IHighlightLayerMesh> }> = {};\r\n private _excludedMeshes: Nullable<{ [id: string]: Nullable<IHighlightLayerExcludedMesh> }> = {};\r\n\r\n /**\r\n * Instantiates a new highlight Layer and references it to the scene..\r\n * @param name The name of the layer\r\n * @param scene The scene to use the layer in\r\n * @param options Sets of none mandatory options to use with the layer (see IHighlightLayerOptions for more information)\r\n */\r\n constructor(public name: string, scene?: Scene, options?: Partial<IHighlightLayerOptions>) {\r\n super(name, scene);\r\n this.neutralColor = HighlightLayer.NeutralColor;\r\n\r\n // Warn on stencil\r\n if (!this._engine.isStencilEnable) {\r\n Logger.Warn(\"Rendering the Highlight Layer requires the stencil to be active on the canvas. var engine = new Engine(canvas, antialias, { stencil: true }\");\r\n }\r\n\r\n // Adapt options\r\n this._options = {\r\n mainTextureRatio: 0.5,\r\n blurTextureSizeRatio: 0.5,\r\n blurHorizontalSize: 1.0,\r\n blurVerticalSize: 1.0,\r\n alphaBlendingMode: Constants.ALPHA_COMBINE,\r\n camera: null,\r\n renderingGroupId: -1,\r\n mainTextureType: Constants.TEXTURETYPE_UNSIGNED_INT,\r\n ...options,\r\n };\r\n\r\n // Initialize the layer\r\n this._init({\r\n alphaBlendingMode: this._options.alphaBlendingMode,\r\n camera: this._options.camera,\r\n mainTextureFixedSize: this._options.mainTextureFixedSize,\r\n mainTextureRatio: this._options.mainTextureRatio,\r\n renderingGroupId: this._options.renderingGroupId,\r\n mainTextureType: this._options.mainTextureType,\r\n });\r\n\r\n // Do not render as long as no meshes have been added\r\n this._shouldRender = false;\r\n }\r\n\r\n /**\r\n * Get the effect name of the layer.\r\n * @returns The effect name\r\n */\r\n public getEffectName(): string {\r\n return HighlightLayer.EffectName;\r\n }\r\n\r\n protected _numInternalDraws(): number {\r\n return 2; // we need two rendering, one for the inner glow and the other for the outer glow\r\n }\r\n\r\n /**\r\n * Create the merge effect. This is the shader use to blit the information back\r\n * to the main canvas at the end of the scene rendering.\r\n */\r\n protected _createMergeEffect(): Effect {\r\n // Effect\r\n return this._engine.createEffect(\"glowMapMerge\", [VertexBuffer.PositionKind], [\"offset\"], [\"textureSampler\"], this._options.isStroke ? \"#define STROKE \\n\" : undefined);\r\n }\r\n\r\n /**\r\n * Creates the render target textures and post processes used in the highlight layer.\r\n */\r\n protected _createTextureAndPostProcesses(): void {\r\n let blurTextureWidth = this._mainTextureDesiredSize.width * this._options.blurTextureSizeRatio;\r\n let blurTextureHeight = this._mainTextureDesiredSize.height * this._options.blurTextureSizeRatio;\r\n blurTextureWidth = this._engine.needPOTTextures ? Engine.GetExponentOfTwo(blurTextureWidth, this._maxSize) : blurTextureWidth;\r\n blurTextureHeight = this._engine.needPOTTextures ? Engine.GetExponentOfTwo(blurTextureHeight, this._maxSize) : blurTextureHeight;\r\n\r\n let textureType = 0;\r\n if (this._engine.getCaps().textureHalfFloatRender) {\r\n textureType = Constants.TEXTURETYPE_HALF_FLOAT;\r\n } else {\r\n textureType = Constants.TEXTURETYPE_UNSIGNED_INT;\r\n }\r\n\r\n this._blurTexture = new RenderTargetTexture(\r\n \"HighlightLayerBlurRTT\",\r\n {\r\n width: blurTextureWidth,\r\n height: blurTextureHeight,\r\n },\r\n this._scene,\r\n false,\r\n true,\r\n textureType\r\n );\r\n this._blurTexture.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n this._blurTexture.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n this._blurTexture.anisotropicFilteringLevel = 16;\r\n this._blurTexture.updateSamplingMode(Texture.TRILINEAR_SAMPLINGMODE);\r\n this._blurTexture.renderParticles = false;\r\n this._blurTexture.ignoreCameraViewport = true;\r\n\r\n this._textures = [this._blurTexture];\r\n\r\n if (this._options.alphaBlendingMode === Constants.ALPHA_COMBINE) {\r\n this._downSamplePostprocess = new PassPostProcess(\r\n \"HighlightLayerPPP\",\r\n this._options.blurTextureSizeRatio,\r\n null,\r\n Texture.BILINEAR_SAMPLINGMODE,\r\n this._scene.getEngine()\r\n );\r\n this._downSamplePostprocess.externalTextureSamplerBinding = true;\r\n this._downSamplePostprocess.onApplyObservable.add((effect) => {\r\n effect.setTexture(\"textureSampler\", this._mainTexture);\r\n });\r\n\r\n this._horizontalBlurPostprocess = new GlowBlurPostProcess(\r\n \"HighlightLayerHBP\",\r\n new Vector2(1.0, 0),\r\n this._options.blurHorizontalSize,\r\n 1,\r\n null,\r\n Texture.BILINEAR_SAMPLINGMODE,\r\n this._scene.getEngine()\r\n );\r\n this._horizontalBlurPostprocess.onApplyObservable.add((effect) => {\r\n effect.setFloat2(\"screenSize\", blurTextureWidth, blurTextureHeight);\r\n });\r\n\r\n this._verticalBlurPostprocess = new GlowBlurPostProcess(\r\n \"HighlightLayerVBP\",\r\n new Vector2(0, 1.0),\r\n this._options.blurVerticalSize,\r\n 1,\r\n null,\r\n Texture.BILINEAR_SAMPLINGMODE,\r\n this._scene.getEngine()\r\n );\r\n this._verticalBlurPostprocess.onApplyObservable.add((effect) => {\r\n effect.setFloat2(\"screenSize\", blurTextureWidth, blurTextureHeight);\r\n });\r\n\r\n this._postProcesses = [this._downSamplePostprocess, this._horizontalBlurPostprocess, this._verticalBlurPostprocess];\r\n } else {\r\n this._horizontalBlurPostprocess = new BlurPostProcess(\r\n \"HighlightLayerHBP\",\r\n new Vector2(1.0, 0),\r\n this._options.blurHorizontalSize / 2,\r\n {\r\n width: blurTextureWidth,\r\n height: blurTextureHeight,\r\n },\r\n null,\r\n Texture.BILINEAR_SAMPLINGMODE,\r\n this._scene.getEngine(),\r\n false,\r\n textureType\r\n );\r\n this._horizontalBlurPostprocess.width = blurTextureWidth;\r\n this._horizontalBlurPostprocess.height = blurTextureHeight;\r\n this._horizontalBlurPostprocess.externalTextureSamplerBinding = true;\r\n this._horizontalBlurPostprocess.onApplyObservable.add((effect) => {\r\n effect.setTexture(\"textureSampler\", this._mainTexture);\r\n });\r\n\r\n this._verticalBlurPostprocess = new BlurPostProcess(\r\n \"HighlightLayerVBP\",\r\n new Vector2(0, 1.0),\r\n this._options.blurVerticalSize / 2,\r\n {\r\n width: blurTextureWidth,\r\n height: blurTextureHeight,\r\n },\r\n null,\r\n Texture.BILINEAR_SAMPLINGMODE,\r\n this._scene.getEngine(),\r\n false,\r\n textureType\r\n );\r\n\r\n this._postProcesses = [this._horizontalBlurPostprocess, this._verticalBlurPostprocess];\r\n }\r\n\r\n this._mainTexture.onAfterUnbindObservable.add(() => {\r\n this.onBeforeBlurObservable.notifyObservers(this);\r\n\r\n const internalTexture = this._blurTexture.renderTarget;\r\n if (internalTexture) {\r\n this._scene.postProcessManager.directRender(this._postProcesses, internalTexture, true);\r\n this._engine.unBindFramebuffer(internalTexture, true);\r\n }\r\n\r\n this.onAfterBlurObservable.notifyObservers(this);\r\n });\r\n\r\n // Prevent autoClear.\r\n this._postProcesses.map((pp) => {\r\n pp.autoClear = false;\r\n });\r\n }\r\n\r\n /**\r\n * Returns whether or not the layer needs stencil enabled during the mesh rendering.\r\n */\r\n public needStencil(): boolean {\r\n return true;\r\n }\r\n\r\n /**\r\n * Checks for the readiness of the element composing the layer.\r\n * @param subMesh the mesh to check for\r\n * @param useInstances specify whether or not to use instances to render the mesh\r\n * @returns true if ready otherwise, false\r\n */\r\n public isReady(subMesh: SubMesh, useInstances: boolean): boolean {\r\n const material = subMesh.getMaterial();\r\n const mesh = subMesh.getRenderingMesh();\r\n\r\n if (!material || !mesh || !this._meshes) {\r\n return false;\r\n }\r\n\r\n let emissiveTexture: Nullable<Texture> = null;\r\n const highlightLayerMesh = this._meshes[mesh.uniqueId];\r\n\r\n if (highlightLayerMesh && highlightLayerMesh.glowEmissiveOnly && material) {\r\n emissiveTexture = (<any>material).emissiveTexture;\r\n }\r\n return super._isReady(subMesh, useInstances, emissiveTexture);\r\n }\r\n\r\n /**\r\n * Implementation specific of rendering the generating effect on the main canvas.\r\n * @param effect The effect used to render through\r\n * @param renderIndex\r\n */\r\n protected _internalRender(effect: Effect, renderIndex: number): void {\r\n // Texture\r\n effect.setTexture(\"textureSampler\", this._blurTexture);\r\n\r\n // Cache\r\n const engine = this._engine;\r\n engine.cacheStencilState();\r\n\r\n // Stencil operations\r\n engine.setStencilOperationPass(Constants.REPLACE);\r\n engine.setStencilOperationFail(Constants.KEEP);\r\n engine.setStencilOperationDepthFail(Constants.KEEP);\r\n\r\n // Draw order\r\n engine.setStencilMask(0x00);\r\n engine.setStencilBuffer(true);\r\n engine.setStencilFunctionReference(this._instanceGlowingMeshStencilReference);\r\n\r\n // 2 passes inner outer\r\n if (this.outerGlow && renderIndex === 0) {\r\n // the outer glow is rendered the first time _internalRender is called, so when renderIndex == 0 (and only if outerGlow is enabled)\r\n effect.setFloat(\"offset\", 0);\r\n engine.setStencilFunction(Constants.NOTEQUAL);\r\n engine.drawElementsType(Material.TriangleFillMode, 0, 6);\r\n }\r\n if (this.innerGlow && renderIndex === 1) {\r\n // the inner glow is rendered the second time _internalRender is called, so when renderIndex == 1 (and only if innerGlow is enabled)\r\n effect.setFloat(\"offset\", 1);\r\n engine.setStencilFunction(Constants.EQUAL);\r\n engine.drawElementsType(Material.TriangleFillMode, 0, 6);\r\n }\r\n\r\n // Restore Cache\r\n engine.restoreStencilState();\r\n }\r\n\r\n /**\r\n * Returns true if the layer contains information to display, otherwise false.\r\n */\r\n public shouldRender(): boolean {\r\n if (super.shouldRender()) {\r\n return this._meshes ? true : false;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Returns true if the mesh should render, otherwise false.\r\n * @param mesh The mesh to render\r\n * @returns true if it should render otherwise false\r\n */\r\n protected _shouldRenderMesh(mesh: Mesh): boolean {\r\n // Excluded Mesh\r\n if (this._excludedMeshes && this._excludedMeshes[mesh.uniqueId]) {\r\n return false;\r\n }\r\n\r\n if (!super.hasMesh(mesh)) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Returns true if the mesh can be rendered, otherwise false.\r\n * @param mesh The mesh to render\r\n * @param material The material used on the mesh\r\n * @returns true if it can be rendered otherwise false\r\n */\r\n protected _canRenderMesh(mesh: AbstractMesh, material: Material): boolean {\r\n // all meshes can be rendered in the highlight layer, even transparent ones\r\n return true;\r\n }\r\n\r\n /**\r\n * Adds specific effects defines.\r\n * @param defines The defines to add specifics to.\r\n */\r\n protected _addCustomEffectDefines(defines: string[]): void {\r\n defines.push(\"#define HIGHLIGHT\");\r\n }\r\n\r\n /**\r\n * Sets the required values for both the emissive texture and and the main color.\r\n * @param mesh\r\n * @param subMesh\r\n * @param material\r\n */\r\n protected _setEmissiveTextureAndColor(mesh: Mesh, subMesh: SubMesh, material: Material): void {\r\n const highlightLayerMesh = this._meshes![mesh.uniqueId];\r\n if (highlightLayerMesh) {\r\n this._emissiveTextureAndColor.color.set(highlightLayerMesh.color.r, highlightLayerMesh.color.g, highlightLayerMesh.color.b, 1.0);\r\n } else {\r\n this._emissiveTextureAndColor.color.set(this.neutralColor.r, this.neutralColor.g, this.neutralColor.b, this.neutralColor.a);\r\n }\r\n\r\n if (highlightLayerMesh && highlightLayerMesh.glowEmissiveOnly && material) {\r\n this._emissiveTextureAndColor.texture = (<any>material).emissiveTexture;\r\n this._emissiveTextureAndColor.color.set(1.0, 1.0, 1.0, 1.0);\r\n } else {\r\n this._emissiveTextureAndColor.texture = null;\r\n }\r\n }\r\n\r\n /**\r\n * Add a mesh in the exclusion list to prevent it to impact or being impacted by the highlight layer.\r\n * @param mesh The mesh to exclude from the highlight layer\r\n */\r\n public addExcludedMesh(mesh: Mesh) {\r\n if (!this._excludedMeshes) {\r\n return;\r\n }\r\n\r\n const meshExcluded = this._excludedMeshes[mesh.uniqueId];\r\n if (!meshExcluded) {\r\n const obj: IHighlightLayerExcludedMesh = {\r\n mesh: mesh,\r\n beforeBind: null,\r\n afterRender: null,\r\n stencilState: false,\r\n };\r\n\r\n obj.beforeBind = mesh.onBeforeBindObservable.add((mesh: Mesh) => {\r\n obj.stencilState = mesh.getEngine().getStencilBuffer();\r\n mesh.getEngine().setStencilBuffer(false);\r\n });\r\n\r\n obj.afterRender = mesh.onAfterRenderObservable.add((mesh: Mesh) => {\r\n mesh.getEngine().setStencilBuffer(obj.stencilState);\r\n });\r\n\r\n this._excludedMeshes[mesh.uniqueId] = obj;\r\n }\r\n }\r\n\r\n /**\r\n * Remove a mesh from the exclusion list to let it impact or being impacted by the highlight layer.\r\n * @param mesh The mesh to highlight\r\n */\r\n public removeExcludedMesh(mesh: Mesh) {\r\n if (!this._excludedMeshes) {\r\n return;\r\n }\r\n\r\n const meshExcluded = this._excludedMeshes[mesh.uniqueId];\r\n if (meshExcluded) {\r\n if (meshExcluded.beforeBind) {\r\n mesh.onBeforeBindObservable.remove(meshExcluded.beforeBind);\r\n }\r\n\r\n if (meshExcluded.afterRender) {\r\n mesh.onAfterRenderObservable.remove(meshExcluded.afterRender);\r\n }\r\n }\r\n\r\n this._excludedMeshes[mesh.uniqueId] = null;\r\n }\r\n\r\n /**\r\n * Determine if a given mesh will be highlighted by the current HighlightLayer\r\n * @param mesh mesh to test\r\n * @returns true if the mesh will be highlighted by the current HighlightLayer\r\n */\r\n public hasMesh(mesh: AbstractMesh): boolean {\r\n if (!this._meshes) {\r\n return false;\r\n }\r\n\r\n if (!super.hasMesh(mesh)) {\r\n return false;\r\n }\r\n\r\n return this._meshes[mesh.uniqueId] !== undefined && this._meshes[mesh.uniqueId] !== null;\r\n }\r\n\r\n /**\r\n * Add a mesh in the highlight layer in order to make it glow with the chosen color.\r\n * @param mesh The mesh to highlight\r\n * @param color The color of the highlight\r\n * @param glowEmissiveOnly Extract the glow from the emissive texture\r\n */\r\n public addMesh(mesh: Mesh, color: Color3, glowEmissiveOnly = false) {\r\n if (!this._meshes) {\r\n return;\r\n }\r\n\r\n const meshHighlight = this._meshes[mesh.uniqueId];\r\n if (meshHighlight) {\r\n meshHighlight.color = color;\r\n } else {\r\n this._meshes[mesh.uniqueId] = {\r\n mesh: mesh,\r\n color: color,\r\n // Lambda required for capture due to Observable this context\r\n observerHighlight: mesh.onBeforeBindObservable.add((mesh: Mesh) => {\r\n if (this.isEnabled) {\r\n if (this._excludedMeshes && this._excludedMeshes[mesh.uniqueId]) {\r\n this._defaultStencilReference(mesh);\r\n } else {\r\n mesh.getScene().getEngine().setStencilFunctionReference(this._instanceGlowingMeshStencilReference);\r\n }\r\n }\r\n }),\r\n observerDefault: mesh.onAfterRenderObservable.add((mesh: Mesh) => {\r\n if (this.isEnabled) {\r\n this._defaultStencilReference(mesh);\r\n }\r\n }),\r\n glowEmissiveOnly: glowEmissiveOnly,\r\n };\r\n\r\n mesh.onDisposeObservable.add(() => {\r\n this._disposeMesh(mesh);\r\n });\r\n }\r\n\r\n this._shouldRender = true;\r\n }\r\n\r\n /**\r\n * Remove a mesh from the highlight layer in order to make it stop glowing.\r\n * @param mesh The mesh to highlight\r\n */\r\n public removeMesh(mesh: Mesh) {\r\n if (!this._meshes) {\r\n return;\r\n }\r\n\r\n const meshHighlight = this._meshes[mesh.uniqueId];\r\n if (meshHighlight) {\r\n if (meshHighlight.observerHighlight) {\r\n mesh.onBeforeBindObservable.remove(meshHighlight.observerHighlight);\r\n }\r\n\r\n if (meshHighlight.observerDefault) {\r\n mesh.onAfterRenderObservable.remove(meshHighlight.observerDefault);\r\n }\r\n delete this._meshes[mesh.uniqueId];\r\n }\r\n\r\n this._shouldRender = false;\r\n for (const meshHighlightToCheck in this._meshes) {\r\n if (this._meshes[meshHighlightToCheck]) {\r\n this._shouldRender = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Remove all the meshes currently referenced in the highlight layer\r\n */\r\n public removeAllMeshes(): void {\r\n if (!this._meshes) {\r\n return;\r\n }\r\n\r\n for (const uniqueId in this._meshes) {\r\n if (Object.prototype.hasOwnProperty.call(this._meshes, uniqueId)) {\r\n const mesh = this._meshes[uniqueId];\r\n if (mesh) {\r\n this.removeMesh(mesh.mesh);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Force the stencil to the normal expected value for none glowing parts\r\n * @param mesh\r\n */\r\n private _defaultStencilReference(mesh: Mesh) {\r\n mesh.getScene().getEngine().setStencilFunctionReference(HighlightLayer.NormalMeshStencilReference);\r\n }\r\n\r\n /**\r\n * Free any resources and references associated to a mesh.\r\n * Internal use\r\n * @param mesh The mesh to free.\r\n * @internal\r\n */\r\n public _disposeMesh(mesh: Mesh): void {\r\n this.removeMesh(mesh);\r\n this.removeExcludedMesh(mesh);\r\n }\r\n\r\n /**\r\n * Dispose the highlight layer and free resources.\r\n */\r\n public dispose(): void {\r\n if (this._meshes) {\r\n // Clean mesh references\r\n for (const id in this._meshes) {\r\n const meshHighlight = this._meshes[id];\r\n if (meshHighlight && meshHighlight.mesh) {\r\n if (meshHighlight.observerHighlight) {\r\n meshHighlight.mesh.onBeforeBindObservable.remove(meshHighlight.observerHighlight);\r\n }\r\n\r\n if (meshHighlight.observerDefault) {\r\n meshHighlight.mesh.onAfterRenderObservable.remove(meshHighlight.observerDefault);\r\n }\r\n }\r\n }\r\n this._meshes = null;\r\n }\r\n\r\n if (this._excludedMeshes) {\r\n for (const id in this._excludedMeshes) {\r\n const meshHighlight = this._excludedMeshes[id];\r\n if (meshHighlight) {\r\n if (meshHighlight.beforeBind) {\r\n meshHighlight.mesh.onBeforeBindObservable.remove(meshHighlight.beforeBind);\r\n }\r\n\r\n if (meshHighlight.afterRender) {\r\n meshHighlight.mesh.onAfterRenderObservable.remove(meshHighlight.afterRender);\r\n }\r\n }\r\n }\r\n this._excludedMeshes = null;\r\n }\r\n\r\n super.dispose();\r\n }\r\n\r\n /**\r\n * Gets the class name of the effect layer\r\n * @returns the string with the class name of the effect layer\r\n */\r\n public getClassName(): string {\r\n return \"HighlightLayer\";\r\n }\r\n\r\n /**\r\n * Serializes this Highlight layer\r\n * @returns a serialized Highlight layer object\r\n */\r\n public serialize(): any {\r\n const serializationObject = SerializationHelper.Serialize(this);\r\n serializationObject.customType = \"BABYLON.HighlightLayer\";\r\n\r\n // Highlighted meshes\r\n serializationObject.meshes = [];\r\n\r\n if (this._meshes) {\r\n for (const m in this._meshes) {\r\n const mesh = this._meshes[m];\r\n\r\n if (mesh) {\r\n serializationObject.meshes.push({\r\n glowEmissiveOnly: mesh.glowEmissiveOnly,\r\n color: mesh.color.asArray(),\r\n meshId: mesh.mesh.id,\r\n });\r\n }\r\n }\r\n }\r\n\r\n // Excluded meshes\r\n serializationObject.excludedMeshes = [];\r\n\r\n if (this._excludedMeshes) {\r\n for (const e in this._excludedMeshes) {\r\n const excludedMesh = this._excludedMeshes[e];\r\n\r\n if (excludedMesh) {\r\n serializationObject.excludedMeshes.push(excludedMesh.mesh.id);\r\n }\r\n }\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Creates a Highlight layer from parsed Highlight layer data\r\n * @param parsedHightlightLayer defines the Highlight layer data\r\n * @param scene defines the current scene\r\n * @param rootUrl defines the root URL containing the Highlight layer information\r\n * @returns a parsed Highlight layer\r\n */\r\n public static Parse(parsedHightlightLayer: any, scene: Scene, rootUrl: string): HighlightLayer {\r\n const hl = SerializationHelper.Parse(() => new HighlightLayer(parsedHightlightLayer.name, scene, parsedHightlightLayer.options), parsedHightlightLayer, scene, rootUrl);\r\n let index;\r\n\r\n // Excluded meshes\r\n for (index = 0; index < parsedHightlightLayer.excludedMeshes.length; index++) {\r\n const mesh = scene.getMeshById(parsedHightlightLayer.excludedMeshes[index]);\r\n if (mesh) {\r\n hl.addExcludedMesh(<Mesh>mesh);\r\n }\r\n }\r\n\r\n // Included meshes\r\n for (index = 0; index < parsedHightlightLayer.meshes.length; index++) {\r\n const highlightedMesh = parsedHightlightLayer.meshes[index];\r\n const mesh = scene.getMeshById(highlightedMesh.meshId);\r\n\r\n if (mesh) {\r\n hl.addMesh(<Mesh>mesh, Color3.FromArray(highlightedMesh.color), highlightedMesh.glowEmissiveOnly);\r\n }\r\n }\r\n\r\n return hl;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.HighlightLayer\", HighlightLayer);\r\n"]}
|
|
1
|
+
{"version":3,"file":"highlightLayer.js","sourceRoot":"","sources":["../../../../dev/core/src/Layers/highlightLayer.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEpE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIhD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAKjD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAEhF,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,kCAAkC,CAAC;AAC1C,OAAO,gCAAgC,CAAC;AACxC,OAAO,yCAAyC,CAAC;AACjD,OAAO,qCAAqC,CAAC;AAa7C,aAAa,CAAC,SAAS,CAAC,uBAAuB,GAAG,UAAU,IAAY;;IACpE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAG,MAAA,IAAI,CAAC,YAAY,0CAAE,MAAM,CAAA,EAAE,KAAK,EAAE,EAAE;QAC5D,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,aAAa,EAAE,KAAK,cAAc,CAAC,UAAU,EAAE;YAClH,OAAa,IAAI,CAAC,YAAY,CAAC,KAAK,CAAoB,CAAC;SAC5D;KACJ;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,mBAAoB,SAAQ,WAAW;IACzC,YACI,IAAY,EACL,SAAkB,EAClB,MAAc,EACrB,OAAoC,EACpC,MAAwB,EACxB,eAAuB,OAAO,CAAC,qBAAqB,EACpD,MAAe,EACf,QAAkB;QAElB,KAAK,CAAC,IAAI,EAAE,qBAAqB,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAR7H,cAAS,GAAT,SAAS,CAAS;QAClB,WAAM,GAAN,MAAM,CAAQ;QASrB,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,MAAc,EAAE,EAAE;YAC1C,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACxD,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/C,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AA6GD;;;;;;;GAOG;AACH,MAAM,OAAO,cAAe,SAAQ,WAAW;IAkC3C;;OAEG;IACH,IAAW,kBAAkB,CAAC,KAAa;QACvC,IAAI,CAAC,0BAA0B,CAAC,MAAM,GAAG,KAAK,CAAC;QAC/C,IAAI,CAAC,QAAQ,CAAC,kBAAkB,GAAG,KAAK,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,IAAW,gBAAgB,CAAC,KAAa;QACrC,IAAI,CAAC,wBAAwB,CAAC,MAAM,GAAG,KAAK,CAAC;QAC7C,IAAI,CAAC,QAAQ,CAAC,gBAAgB,GAAG,KAAK,CAAC;IAC3C,CAAC;IAED;;OAEG;IAEH,IAAW,kBAAkB;QACzB,OAAO,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC;IAClD,CAAC;IAED;;OAEG;IAEH,IAAW,gBAAgB;QACvB,OAAO,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC;IAChD,CAAC;IAwBD;;;;;OAKG;IACH,YACW,IAAY,EACnB,KAAa,EACb,OAAyC;QAEzC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAJZ,SAAI,GAAJ,IAAI,CAAQ;QAzEvB;;WAEG;QAEI,cAAS,GAAY,IAAI,CAAC;QAEjC;;WAEG;QAEI,cAAS,GAAY,IAAI,CAAC;QAkCjC;;WAEG;QACI,2BAAsB,GAAG,IAAI,UAAU,EAAkB,CAAC;QAEjE;;WAEG;QACI,0BAAqB,GAAG,IAAI,UAAU,EAAkB,CAAC;QAExD,yCAAoC,GAAG,cAAc,CAAC,2BAA2B,EAAE,CAAC;QASpF,YAAO,GAA8D,EAAE,CAAC;QACxE,oBAAe,GAAsE,EAAE,CAAC;QAc5F,IAAI,CAAC,YAAY,GAAG,cAAc,CAAC,YAAY,CAAC;QAEhD,kBAAkB;QAClB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;YAC/B,MAAM,CAAC,IAAI,CAAC,6IAA6I,CAAC,CAAC;SAC9J;QAED,gBAAgB;QAChB,IAAI,CAAC,QAAQ,mBACT,gBAAgB,EAAE,GAAG,EACrB,oBAAoB,EAAE,GAAG,EACzB,kBAAkB,EAAE,GAAG,EACvB,gBAAgB,EAAE,GAAG,EACrB,iBAAiB,EAAE,SAAS,CAAC,aAAa,EAC1C,MAAM,EAAE,IAAI,EACZ,gBAAgB,EAAE,CAAC,CAAC,EACpB,eAAe,EAAE,SAAS,CAAC,wBAAwB,IAChD,OAAO,CACb,CAAC;QAEF,uBAAuB;QACvB,IAAI,CAAC,KAAK,CAAC;YACP,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB;YAClD,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;YAC5B,oBAAoB,EAAE,IAAI,CAAC,QAAQ,CAAC,oBAAoB;YACxD,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB;YAChD,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB;YAChD,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe;SACjD,CAAC,CAAC;QAEH,qDAAqD;QACrD,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACI,aAAa;QAChB,OAAO,cAAc,CAAC,UAAU,CAAC;IACrC,CAAC;IAES,iBAAiB;QACvB,OAAO,CAAC,CAAC,CAAC,iFAAiF;IAC/F,CAAC;IAED;;;OAGG;IACO,kBAAkB;QACxB,SAAS;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC5K,CAAC;IAED;;OAEG;IACO,8BAA8B;QACpC,IAAI,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAC/F,IAAI,iBAAiB,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QACjG,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC;QAC9H,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC;QAEjI,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,sBAAsB,EAAE;YAC/C,WAAW,GAAG,SAAS,CAAC,sBAAsB,CAAC;SAClD;aAAM;YACH,WAAW,GAAG,SAAS,CAAC,wBAAwB,CAAC;SACpD;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,mBAAmB,CACvC,uBAAuB,EACvB;YACI,KAAK,EAAE,gBAAgB;YACvB,MAAM,EAAE,iBAAiB;SAC5B,EACD,IAAI,CAAC,MAAM,EACX,KAAK,EACL,IAAI,EACJ,WAAW,CACd,CAAC;QACF,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,OAAO,CAAC,iBAAiB,CAAC;QACpD,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,OAAO,CAAC,iBAAiB,CAAC;QACpD,IAAI,CAAC,YAAY,CAAC,yBAAyB,GAAG,EAAE,CAAC;QACjD,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;QACrE,IAAI,CAAC,YAAY,CAAC,eAAe,GAAG,KAAK,CAAC;QAC1C,IAAI,CAAC,YAAY,CAAC,oBAAoB,GAAG,IAAI,CAAC;QAE9C,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAErC,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,KAAK,SAAS,CAAC,aAAa,EAAE;YAC7D,IAAI,CAAC,sBAAsB,GAAG,IAAI,eAAe,CAC7C,mBAAmB,EACnB,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAClC,IAAI,EACJ,OAAO,CAAC,qBAAqB,EAC7B,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAC1B,CAAC;YACF,IAAI,CAAC,sBAAsB,CAAC,6BAA6B,GAAG,IAAI,CAAC;YACjE,IAAI,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;gBACzD,MAAM,CAAC,UAAU,CAAC,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YAC3D,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,0BAA0B,GAAG,IAAI,mBAAmB,CACrD,mBAAmB,EACnB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EACnB,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAChC,CAAC,EACD,IAAI,EACJ,OAAO,CAAC,qBAAqB,EAC7B,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAC1B,CAAC;YACF,IAAI,CAAC,0BAA0B,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;gBAC7D,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;YACxE,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,wBAAwB,GAAG,IAAI,mBAAmB,CACnD,mBAAmB,EACnB,IAAI,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,EACnB,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAC9B,CAAC,EACD,IAAI,EACJ,OAAO,CAAC,qBAAqB,EAC7B,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAC1B,CAAC;YACF,IAAI,CAAC,wBAAwB,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;gBAC3D,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;YACxE,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,0BAA0B,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;SACvH;aAAM;YACH,IAAI,CAAC,0BAA0B,GAAG,IAAI,eAAe,CACjD,mBAAmB,EACnB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EACnB,IAAI,CAAC,QAAQ,CAAC,kBAAkB,GAAG,CAAC,EACpC;gBACI,KAAK,EAAE,gBAAgB;gBACvB,MAAM,EAAE,iBAAiB;aAC5B,EACD,IAAI,EACJ,OAAO,CAAC,qBAAqB,EAC7B,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EACvB,KAAK,EACL,WAAW,CACd,CAAC;YACF,IAAI,CAAC,0BAA0B,CAAC,KAAK,GAAG,gBAAgB,CAAC;YACzD,IAAI,CAAC,0BAA0B,CAAC,MAAM,GAAG,iBAAiB,CAAC;YAC3D,IAAI,CAAC,0BAA0B,CAAC,6BAA6B,GAAG,IAAI,CAAC;YACrE,IAAI,CAAC,0BAA0B,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;gBAC7D,MAAM,CAAC,UAAU,CAAC,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YAC3D,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,wBAAwB,GAAG,IAAI,eAAe,CAC/C,mBAAmB,EACnB,IAAI,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,EACnB,IAAI,CAAC,QAAQ,CAAC,gBAAgB,GAAG,CAAC,EAClC;gBACI,KAAK,EAAE,gBAAgB;gBACvB,MAAM,EAAE,iBAAiB;aAC5B,EACD,IAAI,EACJ,OAAO,CAAC,qBAAqB,EAC7B,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EACvB,KAAK,EACL,WAAW,CACd,CAAC;YAEF,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,0BAA0B,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;SAC1F;QAED,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,EAAE;YAC/C,IAAI,CAAC,sBAAsB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAElD,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;YACvD,IAAI,eAAe,EAAE;gBACjB,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;gBACxF,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;aACzD;YAED,IAAI,CAAC,qBAAqB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,qBAAqB;QACrB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;YAC3B,EAAE,CAAC,SAAS,GAAG,KAAK,CAAC;QACzB,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACI,WAAW;QACd,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACI,OAAO,CAAC,OAAgB,EAAE,YAAqB;QAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAExC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACrC,OAAO,KAAK,CAAC;SAChB;QAED,IAAI,eAAe,GAAsB,IAAI,CAAC;QAC9C,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEvD,IAAI,kBAAkB,IAAI,kBAAkB,CAAC,gBAAgB,IAAI,QAAQ,EAAE;YACvE,eAAe,GAAS,QAAS,CAAC,eAAe,CAAC;SACrD;QACD,OAAO,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;IAClE,CAAC;IAED;;;;OAIG;IACO,eAAe,CAAC,MAAc,EAAE,WAAmB;QACzD,UAAU;QACV,MAAM,CAAC,UAAU,CAAC,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAEvD,QAAQ;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAE3B,qBAAqB;QACrB,MAAM,CAAC,uBAAuB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,CAAC,uBAAuB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,CAAC,4BAA4B,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAEpD,aAAa;QACb,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,CAAC,2BAA2B,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QAE9E,uBAAuB;QACvB,IAAI,IAAI,CAAC,SAAS,IAAI,WAAW,KAAK,CAAC,EAAE;YACrC,mIAAmI;YACnI,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YAC7B,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAC9C,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SAC5D;QACD,IAAI,IAAI,CAAC,SAAS,IAAI,WAAW,KAAK,CAAC,EAAE;YACrC,oIAAoI;YACpI,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YAC7B,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC3C,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SAC5D;QAED,gBAAgB;QAChB,MAAM,CAAC,mBAAmB,EAAE,CAAC;IACjC,CAAC;IAED;;OAEG;IACI,YAAY;QACf,IAAI,KAAK,CAAC,YAAY,EAAE,EAAE;YACtB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;SACtC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACO,iBAAiB,CAAC,IAAU;QAClC,gBAAgB;QAChB,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;YAC7D,OAAO,KAAK,CAAC;SAChB;QAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACtB,OAAO,KAAK,CAAC;SAChB;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACO,cAAc,CAAC,IAAkB,EAAE,QAAkB;QAC3D,2EAA2E;QAC3E,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;OAGG;IACO,uBAAuB,CAAC,OAAiB;QAC/C,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACtC,CAAC;IAED;;;;;OAKG;IACO,2BAA2B,CAAC,IAAU,EAAE,OAAgB,EAAE,QAAkB;QAClF,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxD,IAAI,kBAAkB,EAAE;YACpB,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SACpI;aAAM;YACH,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;SAC/H;QAED,IAAI,kBAAkB,IAAI,kBAAkB,CAAC,gBAAgB,IAAI,QAAQ,EAAE;YACvE,IAAI,CAAC,wBAAwB,CAAC,OAAO,GAAS,QAAS,CAAC,eAAe,CAAC;YACxE,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;SAC/D;aAAM;YACH,IAAI,CAAC,wBAAwB,CAAC,OAAO,GAAG,IAAI,CAAC;SAChD;IACL,CAAC;IAED;;;OAGG;IACI,eAAe,CAAC,IAAU;QAC7B,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACvB,OAAO;SACV;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzD,IAAI,CAAC,YAAY,EAAE;YACf,MAAM,GAAG,GAAgC;gBACrC,IAAI,EAAE,IAAI;gBACV,UAAU,EAAE,IAAI;gBAChB,WAAW,EAAE,IAAI;gBACjB,YAAY,EAAE,KAAK;aACtB,CAAC;YAEF,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,IAAU,EAAE,EAAE;gBAC5D,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,gBAAgB,EAAE,CAAC;gBACvD,IAAI,CAAC,SAAS,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAC7C,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,IAAU,EAAE,EAAE;gBAC9D,IAAI,CAAC,SAAS,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACxD,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC;SAC7C;IACL,CAAC;IAED;;;OAGG;IACI,kBAAkB,CAAC,IAAU;QAChC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACvB,OAAO;SACV;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzD,IAAI,YAAY,EAAE;YACd,IAAI,YAAY,CAAC,UAAU,EAAE;gBACzB,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;aAC/D;YAED,IAAI,YAAY,CAAC,WAAW,EAAE;gBAC1B,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;aACjE;SACJ;QAED,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;IAC/C,CAAC;IAED;;;;OAIG;IACI,OAAO,CAAC,IAAkB;QAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACf,OAAO,KAAK,CAAC;SAChB;QAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACtB,OAAO,KAAK,CAAC;SAChB;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;IAC7F,CAAC;IAED;;;;;OAKG;IACI,OAAO,CAAC,IAAU,EAAE,KAAa,EAAE,gBAAgB,GAAG,KAAK;QAC9D,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACf,OAAO;SACV;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,aAAa,EAAE;YACf,aAAa,CAAC,KAAK,GAAG,KAAK,CAAC;SAC/B;aAAM;YACH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG;gBAC1B,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,KAAK;gBACZ,6DAA6D;gBAC7D,iBAAiB,EAAE,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,IAAU,EAAE,EAAE;oBAC9D,IAAI,IAAI,CAAC,SAAS,EAAE;wBAChB,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;4BAC7D,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;yBACvC;6BAAM;4BACH,IAAI,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,CAAC,2BAA2B,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;yBACtG;qBACJ;gBACL,CAAC,CAAC;gBACF,eAAe,EAAE,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,IAAU,EAAE,EAAE;oBAC7D,IAAI,IAAI,CAAC,SAAS,EAAE;wBAChB,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;qBACvC;gBACL,CAAC,CAAC;gBACF,gBAAgB,EAAE,gBAAgB;aACrC,CAAC;YAEF,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,EAAE;gBAC9B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAC;SACN;QAED,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACI,UAAU,CAAC,IAAU;QACxB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACf,OAAO;SACV;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,aAAa,EAAE;YACf,IAAI,aAAa,CAAC,iBAAiB,EAAE;gBACjC,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;aACvE;YAED,IAAI,aAAa,CAAC,eAAe,EAAE;gBAC/B,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;aACtE;YACD,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACtC;QAED,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,KAAK,MAAM,oBAAoB,IAAI,IAAI,CAAC,OAAO,EAAE;YAC7C,IAAI,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE;gBACpC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC1B,MAAM;aACT;SACJ;IACL,CAAC;IAED;;OAEG;IACI,eAAe;QAClB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACf,OAAO;SACV;QAED,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;YACjC,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE;gBAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACpC,IAAI,IAAI,EAAE;oBACN,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBAC9B;aACJ;SACJ;IACL,CAAC;IAED;;;OAGG;IACK,wBAAwB,CAAC,IAAU;QACvC,IAAI,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,CAAC,2BAA2B,CAAC,cAAc,CAAC,0BAA0B,CAAC,CAAC;IACvG,CAAC;IAED;;;;;OAKG;IACI,YAAY,CAAC,IAAU;QAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACI,OAAO;QACV,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,wBAAwB;YACxB,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;gBAC3B,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBACvC,IAAI,aAAa,IAAI,aAAa,CAAC,IAAI,EAAE;oBACrC,IAAI,aAAa,CAAC,iBAAiB,EAAE;wBACjC,aAAa,CAAC,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;qBACrF;oBAED,IAAI,aAAa,CAAC,eAAe,EAAE;wBAC/B,aAAa,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;qBACpF;iBACJ;aACJ;YACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;SACvB;QAED,IAAI,IAAI,CAAC,eAAe,EAAE;YACtB,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE;gBACnC,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;gBAC/C,IAAI,aAAa,EAAE;oBACf,IAAI,aAAa,CAAC,UAAU,EAAE;wBAC1B,aAAa,CAAC,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;qBAC9E;oBAED,IAAI,aAAa,CAAC,WAAW,EAAE;wBAC3B,aAAa,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;qBAChF;iBACJ;aACJ;YACD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;SAC/B;QAED,KAAK,CAAC,OAAO,EAAE,CAAC;IACpB,CAAC;IAED;;;OAGG;IACI,YAAY;QACf,OAAO,gBAAgB,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACI,SAAS;QACZ,MAAM,mBAAmB,GAAG,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAChE,mBAAmB,CAAC,UAAU,GAAG,wBAAwB,CAAC;QAE1D,qBAAqB;QACrB,mBAAmB,CAAC,MAAM,GAAG,EAAE,CAAC;QAEhC,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;gBAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAE7B,IAAI,IAAI,EAAE;oBACN,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC;wBAC5B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;wBACvC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;wBAC3B,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;qBACvB,CAAC,CAAC;iBACN;aACJ;SACJ;QAED,kBAAkB;QAClB,mBAAmB,CAAC,cAAc,GAAG,EAAE,CAAC;QAExC,IAAI,IAAI,CAAC,eAAe,EAAE;YACtB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE;gBAClC,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;gBAE7C,IAAI,YAAY,EAAE;oBACd,mBAAmB,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;iBACjE;aACJ;SACJ;QAED,OAAO,mBAAmB,CAAC;IAC/B,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,KAAK,CAAC,qBAA0B,EAAE,KAAY,EAAE,OAAe;QACzE,MAAM,EAAE,GAAG,mBAAmB,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,cAAc,CAAC,qBAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,qBAAqB,CAAC,OAAO,CAAC,EAAE,qBAAqB,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QACxK,IAAI,KAAK,CAAC;QAEV,kBAAkB;QAClB,KAAK,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,qBAAqB,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC1E,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,qBAAqB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;YAC5E,IAAI,IAAI,EAAE;gBACN,EAAE,CAAC,eAAe,CAAO,IAAI,CAAC,CAAC;aAClC;SACJ;QAED,kBAAkB;QAClB,KAAK,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,qBAAqB,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAClE,MAAM,eAAe,GAAG,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5D,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YAEvD,IAAI,IAAI,EAAE;gBACN,EAAE,CAAC,OAAO,CAAO,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC;aACrG;SACJ;QAED,OAAO,EAAE,CAAC;IACd,CAAC;;AA1tBD;;GAEG;AACoB,yBAAU,GAAG,gBAAgB,AAAnB,CAAoB;AAErD;;;GAGG;AACW,2BAAY,GAAW,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,AAAjC,CAAkC;AAE5D;;GAEG;AACW,0CAA2B,GAAG,IAAI,AAAP,CAAQ;AAEjD;;GAEG;AACW,yCAA0B,GAAG,IAAI,AAAP,CAAQ;AAMzC;IADN,SAAS,EAAE;iDACqB;AAM1B;IADN,SAAS,EAAE;iDACqB;AAsBjC;IADC,SAAS,EAAE;wDAGX;AAMD;IADC,SAAS,EAAE;sDAGX;AAeO;IADP,SAAS,CAAC,SAAS,CAAC;gDACoB;AA+oB7C,aAAa,CAAC,wBAAwB,EAAE,cAAc,CAAC,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\r\nimport { serialize, SerializationHelper } from \"../Misc/decorators\";\r\nimport type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { Camera } from \"../Cameras/camera\";\r\nimport type { Scene } from \"../scene\";\r\nimport { Vector2 } from \"../Maths/math.vector\";\r\nimport { Engine } from \"../Engines/engine\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport type { SubMesh } from \"../Meshes/subMesh\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport type { Effect } from \"../Materials/effect\";\r\nimport { Material } from \"../Materials/material\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport type { PostProcessOptions } from \"../PostProcesses/postProcess\";\r\nimport { PostProcess } from \"../PostProcesses/postProcess\";\r\nimport { PassPostProcess } from \"../PostProcesses/passPostProcess\";\r\nimport { BlurPostProcess } from \"../PostProcesses/blurPostProcess\";\r\nimport { EffectLayer } from \"./effectLayer\";\r\nimport { AbstractScene } from \"../abstractScene\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { RegisterClass } from \"../Misc/typeStore\";\r\nimport { Color4, Color3 } from \"../Maths/math.color\";\r\n\r\nimport \"../Shaders/glowMapMerge.fragment\";\r\nimport \"../Shaders/glowMapMerge.vertex\";\r\nimport \"../Shaders/glowBlurPostProcess.fragment\";\r\nimport \"../Layers/effectLayerSceneComponent\";\r\n\r\ndeclare module \"../abstractScene\" {\r\n export interface AbstractScene {\r\n /**\r\n * Return a the first highlight layer of the scene with a given name.\r\n * @param name The name of the highlight layer to look for.\r\n * @returns The highlight layer if found otherwise null.\r\n */\r\n getHighlightLayerByName(name: string): Nullable<HighlightLayer>;\r\n }\r\n}\r\n\r\nAbstractScene.prototype.getHighlightLayerByName = function (name: string): Nullable<HighlightLayer> {\r\n for (let index = 0; index < this.effectLayers?.length; index++) {\r\n if (this.effectLayers[index].name === name && this.effectLayers[index].getEffectName() === HighlightLayer.EffectName) {\r\n return (<any>this.effectLayers[index]) as HighlightLayer;\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Special Glow Blur post process only blurring the alpha channel\r\n * It enforces keeping the most luminous color in the color channel.\r\n */\r\nclass GlowBlurPostProcess extends PostProcess {\r\n constructor(\r\n name: string,\r\n public direction: Vector2,\r\n public kernel: number,\r\n options: number | PostProcessOptions,\r\n camera: Nullable<Camera>,\r\n samplingMode: number = Texture.BILINEAR_SAMPLINGMODE,\r\n engine?: Engine,\r\n reusable?: boolean\r\n ) {\r\n super(name, \"glowBlurPostProcess\", [\"screenSize\", \"direction\", \"blurWidth\"], null, options, camera, samplingMode, engine, reusable);\r\n\r\n this.onApplyObservable.add((effect: Effect) => {\r\n effect.setFloat2(\"screenSize\", this.width, this.height);\r\n effect.setVector2(\"direction\", this.direction);\r\n effect.setFloat(\"blurWidth\", this.kernel);\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Highlight layer options. This helps customizing the behaviour\r\n * of the highlight layer.\r\n */\r\nexport interface IHighlightLayerOptions {\r\n /**\r\n * Multiplication factor apply to the canvas size to compute the render target size\r\n * used to generated the glowing objects (the smaller the faster). Default: 0.5\r\n */\r\n mainTextureRatio: number;\r\n\r\n /**\r\n * Enforces a fixed size texture to ensure resize independent blur. Default: undefined\r\n */\r\n mainTextureFixedSize?: number;\r\n\r\n /**\r\n * Multiplication factor apply to the main texture size in the first step of the blur to reduce the size\r\n * of the picture to blur (the smaller the faster). Default: 0.5\r\n */\r\n blurTextureSizeRatio: number;\r\n\r\n /**\r\n * How big in texel of the blur texture is the vertical blur. Default: 1\r\n */\r\n blurVerticalSize: number;\r\n\r\n /**\r\n * How big in texel of the blur texture is the horizontal blur. Default: 1\r\n */\r\n blurHorizontalSize: number;\r\n\r\n /**\r\n * Alpha blending mode used to apply the blur. Default: ALPHA_COMBINE\r\n */\r\n alphaBlendingMode: number;\r\n\r\n /**\r\n * The camera attached to the layer. Default: null\r\n */\r\n camera: Nullable<Camera>;\r\n\r\n /**\r\n * Should we display highlight as a solid stroke? Default: false\r\n */\r\n isStroke?: boolean;\r\n\r\n /**\r\n * The rendering group to draw the layer in. Default: -1\r\n */\r\n renderingGroupId: number;\r\n\r\n /**\r\n * The type of the main texture. Default: TEXTURETYPE_UNSIGNED_INT\r\n */\r\n mainTextureType: number;\r\n}\r\n\r\n/**\r\n * Storage interface grouping all the information required for glowing a mesh.\r\n */\r\ninterface IHighlightLayerMesh {\r\n /**\r\n * The glowy mesh\r\n */\r\n mesh: Mesh;\r\n /**\r\n * The color of the glow\r\n */\r\n color: Color3;\r\n /**\r\n * The mesh render callback use to insert stencil information\r\n */\r\n observerHighlight: Nullable<Observer<Mesh>>;\r\n /**\r\n * The mesh render callback use to come to the default behavior\r\n */\r\n observerDefault: Nullable<Observer<Mesh>>;\r\n /**\r\n * If it exists, the emissive color of the material will be used to generate the glow.\r\n * Else it falls back to the current color.\r\n */\r\n glowEmissiveOnly: boolean;\r\n}\r\n\r\n/**\r\n * Storage interface grouping all the information required for an excluded mesh.\r\n */\r\ninterface IHighlightLayerExcludedMesh {\r\n /**\r\n * The glowy mesh\r\n */\r\n mesh: Mesh;\r\n /**\r\n * The mesh render callback use to prevent stencil use\r\n */\r\n beforeBind: Nullable<Observer<Mesh>>;\r\n /**\r\n * The mesh render callback use to restore previous stencil use\r\n */\r\n afterRender: Nullable<Observer<Mesh>>;\r\n /**\r\n * Current stencil state of the engine\r\n */\r\n stencilState: boolean;\r\n}\r\n\r\n/**\r\n * The highlight layer Helps adding a glow effect around a mesh.\r\n *\r\n * Once instantiated in a scene, simply use the addMesh or removeMesh method to add or remove\r\n * glowy meshes to your scene.\r\n *\r\n * !!! THIS REQUIRES AN ACTIVE STENCIL BUFFER ON THE CANVAS !!!\r\n */\r\nexport class HighlightLayer extends EffectLayer {\r\n /**\r\n * Effect Name of the highlight layer.\r\n */\r\n public static readonly EffectName = \"HighlightLayer\";\r\n\r\n /**\r\n * The neutral color used during the preparation of the glow effect.\r\n * This is black by default as the blend operation is a blend operation.\r\n */\r\n public static NeutralColor: Color4 = new Color4(0, 0, 0, 0);\r\n\r\n /**\r\n * Stencil value used for glowing meshes.\r\n */\r\n public static GlowingMeshStencilReference = 0x02;\r\n\r\n /**\r\n * Stencil value used for the other meshes in the scene.\r\n */\r\n public static NormalMeshStencilReference = 0x01;\r\n\r\n /**\r\n * Specifies whether or not the inner glow is ACTIVE in the layer.\r\n */\r\n @serialize()\r\n public innerGlow: boolean = true;\r\n\r\n /**\r\n * Specifies whether or not the outer glow is ACTIVE in the layer.\r\n */\r\n @serialize()\r\n public outerGlow: boolean = true;\r\n\r\n /**\r\n * Specifies the horizontal size of the blur.\r\n */\r\n public set blurHorizontalSize(value: number) {\r\n this._horizontalBlurPostprocess.kernel = value;\r\n this._options.blurHorizontalSize = value;\r\n }\r\n\r\n /**\r\n * Specifies the vertical size of the blur.\r\n */\r\n public set blurVerticalSize(value: number) {\r\n this._verticalBlurPostprocess.kernel = value;\r\n this._options.blurVerticalSize = value;\r\n }\r\n\r\n /**\r\n * Gets the horizontal size of the blur.\r\n */\r\n @serialize()\r\n public get blurHorizontalSize(): number {\r\n return this._horizontalBlurPostprocess.kernel;\r\n }\r\n\r\n /**\r\n * Gets the vertical size of the blur.\r\n */\r\n @serialize()\r\n public get blurVerticalSize(): number {\r\n return this._verticalBlurPostprocess.kernel;\r\n }\r\n\r\n /**\r\n * An event triggered when the highlight layer is being blurred.\r\n */\r\n public onBeforeBlurObservable = new Observable<HighlightLayer>();\r\n\r\n /**\r\n * An event triggered when the highlight layer has been blurred.\r\n */\r\n public onAfterBlurObservable = new Observable<HighlightLayer>();\r\n\r\n private _instanceGlowingMeshStencilReference = HighlightLayer.GlowingMeshStencilReference++;\r\n\r\n @serialize(\"options\")\r\n private _options: IHighlightLayerOptions;\r\n private _downSamplePostprocess: PassPostProcess;\r\n private _horizontalBlurPostprocess: GlowBlurPostProcess;\r\n private _verticalBlurPostprocess: GlowBlurPostProcess;\r\n private _blurTexture: RenderTargetTexture;\r\n\r\n private _meshes: Nullable<{ [id: string]: Nullable<IHighlightLayerMesh> }> = {};\r\n private _excludedMeshes: Nullable<{ [id: string]: Nullable<IHighlightLayerExcludedMesh> }> = {};\r\n\r\n /**\r\n * Instantiates a new highlight Layer and references it to the scene..\r\n * @param name The name of the layer\r\n * @param scene The scene to use the layer in\r\n * @param options Sets of none mandatory options to use with the layer (see IHighlightLayerOptions for more information)\r\n */\r\n constructor(\r\n public name: string,\r\n scene?: Scene,\r\n options?: Partial<IHighlightLayerOptions>\r\n ) {\r\n super(name, scene);\r\n this.neutralColor = HighlightLayer.NeutralColor;\r\n\r\n // Warn on stencil\r\n if (!this._engine.isStencilEnable) {\r\n Logger.Warn(\"Rendering the Highlight Layer requires the stencil to be active on the canvas. var engine = new Engine(canvas, antialias, { stencil: true }\");\r\n }\r\n\r\n // Adapt options\r\n this._options = {\r\n mainTextureRatio: 0.5,\r\n blurTextureSizeRatio: 0.5,\r\n blurHorizontalSize: 1.0,\r\n blurVerticalSize: 1.0,\r\n alphaBlendingMode: Constants.ALPHA_COMBINE,\r\n camera: null,\r\n renderingGroupId: -1,\r\n mainTextureType: Constants.TEXTURETYPE_UNSIGNED_INT,\r\n ...options,\r\n };\r\n\r\n // Initialize the layer\r\n this._init({\r\n alphaBlendingMode: this._options.alphaBlendingMode,\r\n camera: this._options.camera,\r\n mainTextureFixedSize: this._options.mainTextureFixedSize,\r\n mainTextureRatio: this._options.mainTextureRatio,\r\n renderingGroupId: this._options.renderingGroupId,\r\n mainTextureType: this._options.mainTextureType,\r\n });\r\n\r\n // Do not render as long as no meshes have been added\r\n this._shouldRender = false;\r\n }\r\n\r\n /**\r\n * Get the effect name of the layer.\r\n * @returns The effect name\r\n */\r\n public getEffectName(): string {\r\n return HighlightLayer.EffectName;\r\n }\r\n\r\n protected _numInternalDraws(): number {\r\n return 2; // we need two rendering, one for the inner glow and the other for the outer glow\r\n }\r\n\r\n /**\r\n * Create the merge effect. This is the shader use to blit the information back\r\n * to the main canvas at the end of the scene rendering.\r\n */\r\n protected _createMergeEffect(): Effect {\r\n // Effect\r\n return this._engine.createEffect(\"glowMapMerge\", [VertexBuffer.PositionKind], [\"offset\"], [\"textureSampler\"], this._options.isStroke ? \"#define STROKE \\n\" : undefined);\r\n }\r\n\r\n /**\r\n * Creates the render target textures and post processes used in the highlight layer.\r\n */\r\n protected _createTextureAndPostProcesses(): void {\r\n let blurTextureWidth = this._mainTextureDesiredSize.width * this._options.blurTextureSizeRatio;\r\n let blurTextureHeight = this._mainTextureDesiredSize.height * this._options.blurTextureSizeRatio;\r\n blurTextureWidth = this._engine.needPOTTextures ? Engine.GetExponentOfTwo(blurTextureWidth, this._maxSize) : blurTextureWidth;\r\n blurTextureHeight = this._engine.needPOTTextures ? Engine.GetExponentOfTwo(blurTextureHeight, this._maxSize) : blurTextureHeight;\r\n\r\n let textureType = 0;\r\n if (this._engine.getCaps().textureHalfFloatRender) {\r\n textureType = Constants.TEXTURETYPE_HALF_FLOAT;\r\n } else {\r\n textureType = Constants.TEXTURETYPE_UNSIGNED_INT;\r\n }\r\n\r\n this._blurTexture = new RenderTargetTexture(\r\n \"HighlightLayerBlurRTT\",\r\n {\r\n width: blurTextureWidth,\r\n height: blurTextureHeight,\r\n },\r\n this._scene,\r\n false,\r\n true,\r\n textureType\r\n );\r\n this._blurTexture.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n this._blurTexture.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n this._blurTexture.anisotropicFilteringLevel = 16;\r\n this._blurTexture.updateSamplingMode(Texture.TRILINEAR_SAMPLINGMODE);\r\n this._blurTexture.renderParticles = false;\r\n this._blurTexture.ignoreCameraViewport = true;\r\n\r\n this._textures = [this._blurTexture];\r\n\r\n if (this._options.alphaBlendingMode === Constants.ALPHA_COMBINE) {\r\n this._downSamplePostprocess = new PassPostProcess(\r\n \"HighlightLayerPPP\",\r\n this._options.blurTextureSizeRatio,\r\n null,\r\n Texture.BILINEAR_SAMPLINGMODE,\r\n this._scene.getEngine()\r\n );\r\n this._downSamplePostprocess.externalTextureSamplerBinding = true;\r\n this._downSamplePostprocess.onApplyObservable.add((effect) => {\r\n effect.setTexture(\"textureSampler\", this._mainTexture);\r\n });\r\n\r\n this._horizontalBlurPostprocess = new GlowBlurPostProcess(\r\n \"HighlightLayerHBP\",\r\n new Vector2(1.0, 0),\r\n this._options.blurHorizontalSize,\r\n 1,\r\n null,\r\n Texture.BILINEAR_SAMPLINGMODE,\r\n this._scene.getEngine()\r\n );\r\n this._horizontalBlurPostprocess.onApplyObservable.add((effect) => {\r\n effect.setFloat2(\"screenSize\", blurTextureWidth, blurTextureHeight);\r\n });\r\n\r\n this._verticalBlurPostprocess = new GlowBlurPostProcess(\r\n \"HighlightLayerVBP\",\r\n new Vector2(0, 1.0),\r\n this._options.blurVerticalSize,\r\n 1,\r\n null,\r\n Texture.BILINEAR_SAMPLINGMODE,\r\n this._scene.getEngine()\r\n );\r\n this._verticalBlurPostprocess.onApplyObservable.add((effect) => {\r\n effect.setFloat2(\"screenSize\", blurTextureWidth, blurTextureHeight);\r\n });\r\n\r\n this._postProcesses = [this._downSamplePostprocess, this._horizontalBlurPostprocess, this._verticalBlurPostprocess];\r\n } else {\r\n this._horizontalBlurPostprocess = new BlurPostProcess(\r\n \"HighlightLayerHBP\",\r\n new Vector2(1.0, 0),\r\n this._options.blurHorizontalSize / 2,\r\n {\r\n width: blurTextureWidth,\r\n height: blurTextureHeight,\r\n },\r\n null,\r\n Texture.BILINEAR_SAMPLINGMODE,\r\n this._scene.getEngine(),\r\n false,\r\n textureType\r\n );\r\n this._horizontalBlurPostprocess.width = blurTextureWidth;\r\n this._horizontalBlurPostprocess.height = blurTextureHeight;\r\n this._horizontalBlurPostprocess.externalTextureSamplerBinding = true;\r\n this._horizontalBlurPostprocess.onApplyObservable.add((effect) => {\r\n effect.setTexture(\"textureSampler\", this._mainTexture);\r\n });\r\n\r\n this._verticalBlurPostprocess = new BlurPostProcess(\r\n \"HighlightLayerVBP\",\r\n new Vector2(0, 1.0),\r\n this._options.blurVerticalSize / 2,\r\n {\r\n width: blurTextureWidth,\r\n height: blurTextureHeight,\r\n },\r\n null,\r\n Texture.BILINEAR_SAMPLINGMODE,\r\n this._scene.getEngine(),\r\n false,\r\n textureType\r\n );\r\n\r\n this._postProcesses = [this._horizontalBlurPostprocess, this._verticalBlurPostprocess];\r\n }\r\n\r\n this._mainTexture.onAfterUnbindObservable.add(() => {\r\n this.onBeforeBlurObservable.notifyObservers(this);\r\n\r\n const internalTexture = this._blurTexture.renderTarget;\r\n if (internalTexture) {\r\n this._scene.postProcessManager.directRender(this._postProcesses, internalTexture, true);\r\n this._engine.unBindFramebuffer(internalTexture, true);\r\n }\r\n\r\n this.onAfterBlurObservable.notifyObservers(this);\r\n });\r\n\r\n // Prevent autoClear.\r\n this._postProcesses.map((pp) => {\r\n pp.autoClear = false;\r\n });\r\n }\r\n\r\n /**\r\n * Returns whether or not the layer needs stencil enabled during the mesh rendering.\r\n */\r\n public needStencil(): boolean {\r\n return true;\r\n }\r\n\r\n /**\r\n * Checks for the readiness of the element composing the layer.\r\n * @param subMesh the mesh to check for\r\n * @param useInstances specify whether or not to use instances to render the mesh\r\n * @returns true if ready otherwise, false\r\n */\r\n public isReady(subMesh: SubMesh, useInstances: boolean): boolean {\r\n const material = subMesh.getMaterial();\r\n const mesh = subMesh.getRenderingMesh();\r\n\r\n if (!material || !mesh || !this._meshes) {\r\n return false;\r\n }\r\n\r\n let emissiveTexture: Nullable<Texture> = null;\r\n const highlightLayerMesh = this._meshes[mesh.uniqueId];\r\n\r\n if (highlightLayerMesh && highlightLayerMesh.glowEmissiveOnly && material) {\r\n emissiveTexture = (<any>material).emissiveTexture;\r\n }\r\n return super._isReady(subMesh, useInstances, emissiveTexture);\r\n }\r\n\r\n /**\r\n * Implementation specific of rendering the generating effect on the main canvas.\r\n * @param effect The effect used to render through\r\n * @param renderIndex\r\n */\r\n protected _internalRender(effect: Effect, renderIndex: number): void {\r\n // Texture\r\n effect.setTexture(\"textureSampler\", this._blurTexture);\r\n\r\n // Cache\r\n const engine = this._engine;\r\n engine.cacheStencilState();\r\n\r\n // Stencil operations\r\n engine.setStencilOperationPass(Constants.REPLACE);\r\n engine.setStencilOperationFail(Constants.KEEP);\r\n engine.setStencilOperationDepthFail(Constants.KEEP);\r\n\r\n // Draw order\r\n engine.setStencilMask(0x00);\r\n engine.setStencilBuffer(true);\r\n engine.setStencilFunctionReference(this._instanceGlowingMeshStencilReference);\r\n\r\n // 2 passes inner outer\r\n if (this.outerGlow && renderIndex === 0) {\r\n // the outer glow is rendered the first time _internalRender is called, so when renderIndex == 0 (and only if outerGlow is enabled)\r\n effect.setFloat(\"offset\", 0);\r\n engine.setStencilFunction(Constants.NOTEQUAL);\r\n engine.drawElementsType(Material.TriangleFillMode, 0, 6);\r\n }\r\n if (this.innerGlow && renderIndex === 1) {\r\n // the inner glow is rendered the second time _internalRender is called, so when renderIndex == 1 (and only if innerGlow is enabled)\r\n effect.setFloat(\"offset\", 1);\r\n engine.setStencilFunction(Constants.EQUAL);\r\n engine.drawElementsType(Material.TriangleFillMode, 0, 6);\r\n }\r\n\r\n // Restore Cache\r\n engine.restoreStencilState();\r\n }\r\n\r\n /**\r\n * Returns true if the layer contains information to display, otherwise false.\r\n */\r\n public shouldRender(): boolean {\r\n if (super.shouldRender()) {\r\n return this._meshes ? true : false;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Returns true if the mesh should render, otherwise false.\r\n * @param mesh The mesh to render\r\n * @returns true if it should render otherwise false\r\n */\r\n protected _shouldRenderMesh(mesh: Mesh): boolean {\r\n // Excluded Mesh\r\n if (this._excludedMeshes && this._excludedMeshes[mesh.uniqueId]) {\r\n return false;\r\n }\r\n\r\n if (!super.hasMesh(mesh)) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Returns true if the mesh can be rendered, otherwise false.\r\n * @param mesh The mesh to render\r\n * @param material The material used on the mesh\r\n * @returns true if it can be rendered otherwise false\r\n */\r\n protected _canRenderMesh(mesh: AbstractMesh, material: Material): boolean {\r\n // all meshes can be rendered in the highlight layer, even transparent ones\r\n return true;\r\n }\r\n\r\n /**\r\n * Adds specific effects defines.\r\n * @param defines The defines to add specifics to.\r\n */\r\n protected _addCustomEffectDefines(defines: string[]): void {\r\n defines.push(\"#define HIGHLIGHT\");\r\n }\r\n\r\n /**\r\n * Sets the required values for both the emissive texture and and the main color.\r\n * @param mesh\r\n * @param subMesh\r\n * @param material\r\n */\r\n protected _setEmissiveTextureAndColor(mesh: Mesh, subMesh: SubMesh, material: Material): void {\r\n const highlightLayerMesh = this._meshes![mesh.uniqueId];\r\n if (highlightLayerMesh) {\r\n this._emissiveTextureAndColor.color.set(highlightLayerMesh.color.r, highlightLayerMesh.color.g, highlightLayerMesh.color.b, 1.0);\r\n } else {\r\n this._emissiveTextureAndColor.color.set(this.neutralColor.r, this.neutralColor.g, this.neutralColor.b, this.neutralColor.a);\r\n }\r\n\r\n if (highlightLayerMesh && highlightLayerMesh.glowEmissiveOnly && material) {\r\n this._emissiveTextureAndColor.texture = (<any>material).emissiveTexture;\r\n this._emissiveTextureAndColor.color.set(1.0, 1.0, 1.0, 1.0);\r\n } else {\r\n this._emissiveTextureAndColor.texture = null;\r\n }\r\n }\r\n\r\n /**\r\n * Add a mesh in the exclusion list to prevent it to impact or being impacted by the highlight layer.\r\n * @param mesh The mesh to exclude from the highlight layer\r\n */\r\n public addExcludedMesh(mesh: Mesh) {\r\n if (!this._excludedMeshes) {\r\n return;\r\n }\r\n\r\n const meshExcluded = this._excludedMeshes[mesh.uniqueId];\r\n if (!meshExcluded) {\r\n const obj: IHighlightLayerExcludedMesh = {\r\n mesh: mesh,\r\n beforeBind: null,\r\n afterRender: null,\r\n stencilState: false,\r\n };\r\n\r\n obj.beforeBind = mesh.onBeforeBindObservable.add((mesh: Mesh) => {\r\n obj.stencilState = mesh.getEngine().getStencilBuffer();\r\n mesh.getEngine().setStencilBuffer(false);\r\n });\r\n\r\n obj.afterRender = mesh.onAfterRenderObservable.add((mesh: Mesh) => {\r\n mesh.getEngine().setStencilBuffer(obj.stencilState);\r\n });\r\n\r\n this._excludedMeshes[mesh.uniqueId] = obj;\r\n }\r\n }\r\n\r\n /**\r\n * Remove a mesh from the exclusion list to let it impact or being impacted by the highlight layer.\r\n * @param mesh The mesh to highlight\r\n */\r\n public removeExcludedMesh(mesh: Mesh) {\r\n if (!this._excludedMeshes) {\r\n return;\r\n }\r\n\r\n const meshExcluded = this._excludedMeshes[mesh.uniqueId];\r\n if (meshExcluded) {\r\n if (meshExcluded.beforeBind) {\r\n mesh.onBeforeBindObservable.remove(meshExcluded.beforeBind);\r\n }\r\n\r\n if (meshExcluded.afterRender) {\r\n mesh.onAfterRenderObservable.remove(meshExcluded.afterRender);\r\n }\r\n }\r\n\r\n this._excludedMeshes[mesh.uniqueId] = null;\r\n }\r\n\r\n /**\r\n * Determine if a given mesh will be highlighted by the current HighlightLayer\r\n * @param mesh mesh to test\r\n * @returns true if the mesh will be highlighted by the current HighlightLayer\r\n */\r\n public hasMesh(mesh: AbstractMesh): boolean {\r\n if (!this._meshes) {\r\n return false;\r\n }\r\n\r\n if (!super.hasMesh(mesh)) {\r\n return false;\r\n }\r\n\r\n return this._meshes[mesh.uniqueId] !== undefined && this._meshes[mesh.uniqueId] !== null;\r\n }\r\n\r\n /**\r\n * Add a mesh in the highlight layer in order to make it glow with the chosen color.\r\n * @param mesh The mesh to highlight\r\n * @param color The color of the highlight\r\n * @param glowEmissiveOnly Extract the glow from the emissive texture\r\n */\r\n public addMesh(mesh: Mesh, color: Color3, glowEmissiveOnly = false) {\r\n if (!this._meshes) {\r\n return;\r\n }\r\n\r\n const meshHighlight = this._meshes[mesh.uniqueId];\r\n if (meshHighlight) {\r\n meshHighlight.color = color;\r\n } else {\r\n this._meshes[mesh.uniqueId] = {\r\n mesh: mesh,\r\n color: color,\r\n // Lambda required for capture due to Observable this context\r\n observerHighlight: mesh.onBeforeBindObservable.add((mesh: Mesh) => {\r\n if (this.isEnabled) {\r\n if (this._excludedMeshes && this._excludedMeshes[mesh.uniqueId]) {\r\n this._defaultStencilReference(mesh);\r\n } else {\r\n mesh.getScene().getEngine().setStencilFunctionReference(this._instanceGlowingMeshStencilReference);\r\n }\r\n }\r\n }),\r\n observerDefault: mesh.onAfterRenderObservable.add((mesh: Mesh) => {\r\n if (this.isEnabled) {\r\n this._defaultStencilReference(mesh);\r\n }\r\n }),\r\n glowEmissiveOnly: glowEmissiveOnly,\r\n };\r\n\r\n mesh.onDisposeObservable.add(() => {\r\n this._disposeMesh(mesh);\r\n });\r\n }\r\n\r\n this._shouldRender = true;\r\n }\r\n\r\n /**\r\n * Remove a mesh from the highlight layer in order to make it stop glowing.\r\n * @param mesh The mesh to highlight\r\n */\r\n public removeMesh(mesh: Mesh) {\r\n if (!this._meshes) {\r\n return;\r\n }\r\n\r\n const meshHighlight = this._meshes[mesh.uniqueId];\r\n if (meshHighlight) {\r\n if (meshHighlight.observerHighlight) {\r\n mesh.onBeforeBindObservable.remove(meshHighlight.observerHighlight);\r\n }\r\n\r\n if (meshHighlight.observerDefault) {\r\n mesh.onAfterRenderObservable.remove(meshHighlight.observerDefault);\r\n }\r\n delete this._meshes[mesh.uniqueId];\r\n }\r\n\r\n this._shouldRender = false;\r\n for (const meshHighlightToCheck in this._meshes) {\r\n if (this._meshes[meshHighlightToCheck]) {\r\n this._shouldRender = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Remove all the meshes currently referenced in the highlight layer\r\n */\r\n public removeAllMeshes(): void {\r\n if (!this._meshes) {\r\n return;\r\n }\r\n\r\n for (const uniqueId in this._meshes) {\r\n if (Object.prototype.hasOwnProperty.call(this._meshes, uniqueId)) {\r\n const mesh = this._meshes[uniqueId];\r\n if (mesh) {\r\n this.removeMesh(mesh.mesh);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Force the stencil to the normal expected value for none glowing parts\r\n * @param mesh\r\n */\r\n private _defaultStencilReference(mesh: Mesh) {\r\n mesh.getScene().getEngine().setStencilFunctionReference(HighlightLayer.NormalMeshStencilReference);\r\n }\r\n\r\n /**\r\n * Free any resources and references associated to a mesh.\r\n * Internal use\r\n * @param mesh The mesh to free.\r\n * @internal\r\n */\r\n public _disposeMesh(mesh: Mesh): void {\r\n this.removeMesh(mesh);\r\n this.removeExcludedMesh(mesh);\r\n }\r\n\r\n /**\r\n * Dispose the highlight layer and free resources.\r\n */\r\n public dispose(): void {\r\n if (this._meshes) {\r\n // Clean mesh references\r\n for (const id in this._meshes) {\r\n const meshHighlight = this._meshes[id];\r\n if (meshHighlight && meshHighlight.mesh) {\r\n if (meshHighlight.observerHighlight) {\r\n meshHighlight.mesh.onBeforeBindObservable.remove(meshHighlight.observerHighlight);\r\n }\r\n\r\n if (meshHighlight.observerDefault) {\r\n meshHighlight.mesh.onAfterRenderObservable.remove(meshHighlight.observerDefault);\r\n }\r\n }\r\n }\r\n this._meshes = null;\r\n }\r\n\r\n if (this._excludedMeshes) {\r\n for (const id in this._excludedMeshes) {\r\n const meshHighlight = this._excludedMeshes[id];\r\n if (meshHighlight) {\r\n if (meshHighlight.beforeBind) {\r\n meshHighlight.mesh.onBeforeBindObservable.remove(meshHighlight.beforeBind);\r\n }\r\n\r\n if (meshHighlight.afterRender) {\r\n meshHighlight.mesh.onAfterRenderObservable.remove(meshHighlight.afterRender);\r\n }\r\n }\r\n }\r\n this._excludedMeshes = null;\r\n }\r\n\r\n super.dispose();\r\n }\r\n\r\n /**\r\n * Gets the class name of the effect layer\r\n * @returns the string with the class name of the effect layer\r\n */\r\n public getClassName(): string {\r\n return \"HighlightLayer\";\r\n }\r\n\r\n /**\r\n * Serializes this Highlight layer\r\n * @returns a serialized Highlight layer object\r\n */\r\n public serialize(): any {\r\n const serializationObject = SerializationHelper.Serialize(this);\r\n serializationObject.customType = \"BABYLON.HighlightLayer\";\r\n\r\n // Highlighted meshes\r\n serializationObject.meshes = [];\r\n\r\n if (this._meshes) {\r\n for (const m in this._meshes) {\r\n const mesh = this._meshes[m];\r\n\r\n if (mesh) {\r\n serializationObject.meshes.push({\r\n glowEmissiveOnly: mesh.glowEmissiveOnly,\r\n color: mesh.color.asArray(),\r\n meshId: mesh.mesh.id,\r\n });\r\n }\r\n }\r\n }\r\n\r\n // Excluded meshes\r\n serializationObject.excludedMeshes = [];\r\n\r\n if (this._excludedMeshes) {\r\n for (const e in this._excludedMeshes) {\r\n const excludedMesh = this._excludedMeshes[e];\r\n\r\n if (excludedMesh) {\r\n serializationObject.excludedMeshes.push(excludedMesh.mesh.id);\r\n }\r\n }\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Creates a Highlight layer from parsed Highlight layer data\r\n * @param parsedHightlightLayer defines the Highlight layer data\r\n * @param scene defines the current scene\r\n * @param rootUrl defines the root URL containing the Highlight layer information\r\n * @returns a parsed Highlight layer\r\n */\r\n public static Parse(parsedHightlightLayer: any, scene: Scene, rootUrl: string): HighlightLayer {\r\n const hl = SerializationHelper.Parse(() => new HighlightLayer(parsedHightlightLayer.name, scene, parsedHightlightLayer.options), parsedHightlightLayer, scene, rootUrl);\r\n let index;\r\n\r\n // Excluded meshes\r\n for (index = 0; index < parsedHightlightLayer.excludedMeshes.length; index++) {\r\n const mesh = scene.getMeshById(parsedHightlightLayer.excludedMeshes[index]);\r\n if (mesh) {\r\n hl.addExcludedMesh(<Mesh>mesh);\r\n }\r\n }\r\n\r\n // Included meshes\r\n for (index = 0; index < parsedHightlightLayer.meshes.length; index++) {\r\n const highlightedMesh = parsedHightlightLayer.meshes[index];\r\n const mesh = scene.getMeshById(highlightedMesh.meshId);\r\n\r\n if (mesh) {\r\n hl.addMesh(<Mesh>mesh, Color3.FromArray(highlightedMesh.color), highlightedMesh.glowEmissiveOnly);\r\n }\r\n }\r\n\r\n return hl;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.HighlightLayer\", HighlightLayer);\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadingScreen.js","sourceRoot":"","sources":["../../../../dev/core/src/Loading/loadingScreen.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAwB3C;;;GAGG;AACH,MAAM,OAAO,oBAAoB;IAW7B;;;;;OAKG;IACH,YAAoB,gBAAmC,EAAU,eAAe,EAAE,EAAU,6BAA6B,OAAO;QAA5G,qBAAgB,GAAhB,gBAAgB,CAAmB;QAAU,iBAAY,GAAZ,YAAY,CAAK;QAAU,+BAA0B,GAA1B,0BAA0B,CAAU;QA+LhI,SAAS;QACD,qBAAgB,GAAG,GAAG,EAAE;YAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,CAAC;YACjE,MAAM,iBAAiB,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC;YAElF,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;gBACnB,OAAO;aACV;YAED,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,GAAG,iBAAiB,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;YACvF,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC;YACrD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,GAAG,IAAI,CAAC;YACnD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC;YACvD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC;QAC7D,CAAC,CAAC;IA7MiI,CAAC;IAEpI;;OAEG;IACI,gBAAgB;QACnB,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,sDAAsD;YACtD,OAAO;SACV;QAED,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAEjD,IAAI,CAAC,WAAW,CAAC,EAAE,GAAG,qBAAqB,CAAC;QAC5C,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;QACrC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,GAAG,mBAAmB,CAAC;QACxD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;QAC9C,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QACxC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,gBAAgB,GAAG,MAAM,CAAC;QACjD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,mBAAmB,GAAG,MAAM,CAAC;QACpD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC;QAC/C,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;QAE7C,eAAe;QACf,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACrD,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;QACjD,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC;QACtC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC;QACvC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;QAC9C,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;QAC1C,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QAC3C,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,GAAG,OAAO,CAAC;QAChD,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC;QAC7C,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC;QAC3C,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC;QAChD,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;QACxC,IAAI,CAAC,eAAe,CAAC,SAAS,GAAG,SAAS,CAAC;QAE3C,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAEnD,yBAAyB;QACzB,IAAI,CAAC,eAAe,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC;QAEnD,uBAAuB;QACvB,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC;QAC9B,MAAM,SAAS,GAAG;;;;;;;kBAOR,CAAC;QACX,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;QAClC,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAElE,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;QAC1C,cAAc;QACd,MAAM,OAAO,GAAG,IAAI,KAAK,EAAE,CAAC;QAC5B,IAAI,CAAC,oBAAoB,CAAC,cAAc,EAAE;YACtC,OAAO,CAAC,GAAG,GAAG,CAAC,UAAU;gBACrB,CAAC,CAAC,kDAAkD;gBACpD,CAAC,CAAC,4lDAA4lD,CAAC;SACtmD;aAAM;YACH,OAAO,CAAC,GAAG,GAAG,oBAAoB,CAAC,cAAc,CAAC;SACrD;QAED,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,uBAAuB,CAAC;QAClD,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;QAEpC,MAAM,qBAAqB,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC5D,qBAAqB,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC;QAC5C,qBAAqB,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC;QAC7C,qBAAqB,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;QAC1C,qBAAqB,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC;QACxC,qBAAqB,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC;QACzC,qBAAqB,CAAC,KAAK,CAAC,SAAS,GAAG,uBAAuB,CAAC;QAChE,qBAAqB,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;QAElD,kBAAkB;QAClB,MAAM,UAAU,GAAG,IAAI,KAAK,EAAE,CAAC;QAE/B,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,EAAE;YACzC,UAAU,CAAC,GAAG,GAAG,CAAC,UAAU;gBACxB,CAAC,CAAC,kDAAkD;gBACpD,CAAC,CAAC,4/CAA4/C,CAAC;SACtgD;aAAM;YACH,UAAU,CAAC,GAAG,GAAG,oBAAoB,CAAC,iBAAiB,CAAC;SAC3D;QAED,UAAU,CAAC,KAAK,CAAC,SAAS,GAAG,6BAA6B,CAAC;QAC3D,UAAU,CAAC,KAAK,CAAC,eAAe,GAAG,6BAA6B,CAAC;QACjE,UAAU,CAAC,KAAK,CAAC,eAAe,GAAG,SAAS,CAAC;QAC7C,UAAU,CAAC,KAAK,CAAC,qBAAqB,GAAG,SAAS,CAAC;QAEnD,IAAI,CAAC,UAAU,EAAE;YACb,MAAM,QAAQ,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;YACpC,MAAM,WAAW,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;YACrC,wBAAwB;YACxB,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC;YACxC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC;YACzC,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,cAAc,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;YACvD,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,cAAc,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;YAEtD,UAAU,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC;YAC9C,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC;YAC/C,UAAU,CAAC,KAAK,CAAC,IAAI,GAAG,cAAc,WAAW,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;YAC7D,UAAU,CAAC,KAAK,CAAC,GAAG,GAAG,cAAc,WAAW,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;SAC/D;QAED,qBAAqB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAE9C,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;QAEpD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAEzD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,0BAA0B,CAAC;QACzE,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE5C,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;IACzC,CAAC;IAED;;OAEG;IACI,aAAa;QAChB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACnB,OAAO;SACV;QAED,MAAM,eAAe,GAAG,GAAG,EAAE;YACzB,IAAI,IAAI,CAAC,eAAe,EAAE;gBACtB,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;gBAC9B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;aAC/B;YACD,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;gBAC1B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;aAC3B;YACD,IAAI,IAAI,CAAC,MAAM,EAAE;gBACb,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACrB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;aACtB;YACD,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAChE,CAAC,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;QACrC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;IACxE,CAAC;IAED;;OAEG;IACH,IAAW,aAAa,CAAC,IAAY;QACjC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAEzB,IAAI,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,eAAe,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC;SACtD;IACL,CAAC;IAED,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,IAAW,wBAAwB;QAC/B,OAAO,IAAI,CAAC,0BAA0B,CAAC;IAC3C,CAAC;IAED,IAAW,wBAAwB,CAAC,KAAa;QAC7C,IAAI,CAAC,0BAA0B,GAAG,KAAK,CAAC;QAExC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACnB,OAAO;SACV;QAED,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,0BAA0B,CAAC;IAC7E,CAAC;;AAzMD,sEAAsE;AACxD,mCAAc,GAAG,EAAE,AAAL,CAAM;AAElC,yEAAyE;AAC3D,sCAAiB,GAAG,EAAE,AAAL,CAAM;AAwNzC,MAAM,CAAC,2BAA2B,GAAG,CAAC,MAAyB,EAAE,EAAE;IAC/D,OAAO,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC,CAAC","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport { Engine } from \"../Engines/engine\";\r\n/**\r\n * Interface used to present a loading screen while loading a scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/customLoadingScreen\r\n */\r\nexport interface ILoadingScreen {\r\n /**\r\n * Function called to display the loading screen\r\n */\r\n displayLoadingUI: () => void;\r\n /**\r\n * Function called to hide the loading screen\r\n */\r\n hideLoadingUI: () => void;\r\n /**\r\n * Gets or sets the color to use for the background\r\n */\r\n loadingUIBackgroundColor: string;\r\n /**\r\n * Gets or sets the text to display while loading\r\n */\r\n loadingUIText: string;\r\n}\r\n\r\n/**\r\n * Class used for the default loading screen\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/customLoadingScreen\r\n */\r\nexport class DefaultLoadingScreen implements ILoadingScreen {\r\n private _loadingDiv: Nullable<HTMLDivElement>;\r\n private _loadingTextDiv: Nullable<HTMLDivElement>;\r\n private _style: Nullable<HTMLStyleElement>;\r\n\r\n /** Gets or sets the logo url to use for the default loading screen */\r\n public static DefaultLogoUrl = \"\";\r\n\r\n /** Gets or sets the spinner url to use for the default loading screen */\r\n public static DefaultSpinnerUrl = \"\";\r\n\r\n /**\r\n * Creates a new default loading screen\r\n * @param _renderingCanvas defines the canvas used to render the scene\r\n * @param _loadingText defines the default text to display\r\n * @param _loadingDivBackgroundColor defines the default background color\r\n */\r\n constructor(private _renderingCanvas: HTMLCanvasElement, private _loadingText = \"\", private _loadingDivBackgroundColor = \"black\") {}\r\n\r\n /**\r\n * Function called to display the loading screen\r\n */\r\n public displayLoadingUI(): void {\r\n if (this._loadingDiv) {\r\n // Do not add a loading screen if there is already one\r\n return;\r\n }\r\n\r\n this._loadingDiv = document.createElement(\"div\");\r\n\r\n this._loadingDiv.id = \"babylonjsLoadingDiv\";\r\n this._loadingDiv.style.opacity = \"0\";\r\n this._loadingDiv.style.transition = \"opacity 1.5s ease\";\r\n this._loadingDiv.style.pointerEvents = \"none\";\r\n this._loadingDiv.style.display = \"grid\";\r\n this._loadingDiv.style.gridTemplateRows = \"100%\";\r\n this._loadingDiv.style.gridTemplateColumns = \"100%\";\r\n this._loadingDiv.style.justifyItems = \"center\";\r\n this._loadingDiv.style.alignItems = \"center\";\r\n\r\n // Loading text\r\n this._loadingTextDiv = document.createElement(\"div\");\r\n this._loadingTextDiv.style.position = \"absolute\";\r\n this._loadingTextDiv.style.left = \"0\";\r\n this._loadingTextDiv.style.top = \"50%\";\r\n this._loadingTextDiv.style.marginTop = \"80px\";\r\n this._loadingTextDiv.style.width = \"100%\";\r\n this._loadingTextDiv.style.height = \"20px\";\r\n this._loadingTextDiv.style.fontFamily = \"Arial\";\r\n this._loadingTextDiv.style.fontSize = \"14px\";\r\n this._loadingTextDiv.style.color = \"white\";\r\n this._loadingTextDiv.style.textAlign = \"center\";\r\n this._loadingTextDiv.style.zIndex = \"1\";\r\n this._loadingTextDiv.innerHTML = \"Loading\";\r\n\r\n this._loadingDiv.appendChild(this._loadingTextDiv);\r\n\r\n //set the predefined text\r\n this._loadingTextDiv.innerHTML = this._loadingText;\r\n\r\n // Generating keyframes\r\n this._style = document.createElement(\"style\");\r\n this._style.type = \"text/css\";\r\n const keyFrames = `@-webkit-keyframes spin1 {\\\r\n 0% { -webkit-transform: rotate(0deg);}\r\n 100% { -webkit-transform: rotate(360deg);}\r\n }\\\r\n @keyframes spin1 {\\\r\n 0% { transform: rotate(0deg);}\r\n 100% { transform: rotate(360deg);}\r\n }`;\r\n this._style.innerHTML = keyFrames;\r\n document.getElementsByTagName(\"head\")[0].appendChild(this._style);\r\n\r\n const svgSupport = !!window.SVGSVGElement;\r\n // Loading img\r\n const imgBack = new Image();\r\n if (!DefaultLoadingScreen.DefaultLogoUrl) {\r\n imgBack.src = !svgSupport\r\n ? \"https://cdn.babylonjs.com/Assets/babylonLogo.png\"\r\n : `data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxODAuMTcgMjA4LjA0Ij48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6I2ZmZjt9LmNscy0ye2ZpbGw6I2UwNjg0Yjt9LmNscy0ze2ZpbGw6I2JiNDY0Yjt9LmNscy00e2ZpbGw6I2UwZGVkODt9LmNscy01e2ZpbGw6I2Q1ZDJjYTt9PC9zdHlsZT48L2RlZnM+PHRpdGxlPkJhYnlsb25Mb2dvPC90aXRsZT48ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIj48ZyBpZD0iUGFnZV9FbGVtZW50cyIgZGF0YS1uYW1lPSJQYWdlIEVsZW1lbnRzIj48cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik05MC4wOSwwLDAsNTJWMTU2bDkwLjA5LDUyLDkwLjA4LTUyVjUyWiIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtMiIgcG9pbnRzPSIxODAuMTcgNTIuMDEgMTUxLjk3IDM1LjczIDEyNC44NSA1MS4zOSAxNTMuMDUgNjcuNjcgMTgwLjE3IDUyLjAxIi8+PHBvbHlnb24gY2xhc3M9ImNscy0yIiBwb2ludHM9IjI3LjEyIDY3LjY3IDExNy4yMSAxNS42NiA5MC4wOCAwIDAgNTIuMDEgMjcuMTIgNjcuNjciLz48cG9seWdvbiBjbGFzcz0iY2xzLTIiIHBvaW50cz0iNjEuODkgMTIwLjMgOTAuMDggMTM2LjU4IDExOC4yOCAxMjAuMyA5MC4wOCAxMDQuMDIgNjEuODkgMTIwLjMiLz48cG9seWdvbiBjbGFzcz0iY2xzLTMiIHBvaW50cz0iMTUzLjA1IDY3LjY3IDE1My4wNSAxNDAuMzcgOTAuMDggMTc2LjcyIDI3LjEyIDE0MC4zNyAyNy4xMiA2Ny42NyAwIDUyLjAxIDAgMTU2LjAzIDkwLjA4IDIwOC4wNCAxODAuMTcgMTU2LjAzIDE4MC4xNyA1Mi4wMSAxNTMuMDUgNjcuNjciLz48cG9seWdvbiBjbGFzcz0iY2xzLTMiIHBvaW50cz0iOTAuMDggNzEuNDYgNjEuODkgODcuNzQgNjEuODkgMTIwLjMgOTAuMDggMTA0LjAyIDExOC4yOCAxMjAuMyAxMTguMjggODcuNzQgOTAuMDggNzEuNDYiLz48cG9seWdvbiBjbGFzcz0iY2xzLTQiIHBvaW50cz0iMTUzLjA1IDY3LjY3IDExOC4yOCA4Ny43NCAxMTguMjggMTIwLjMgOTAuMDggMTM2LjU4IDkwLjA4IDE3Ni43MiAxNTMuMDUgMTQwLjM3IDE1My4wNSA2Ny42NyIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtNSIgcG9pbnRzPSIyNy4xMiA2Ny42NyA2MS44OSA4Ny43NCA2MS44OSAxMjAuMyA5MC4wOCAxMzYuNTggOTAuMDggMTc2LjcyIDI3LjEyIDE0MC4zNyAyNy4xMiA2Ny42NyIvPjwvZz48L2c+PC9zdmc+`;\r\n } else {\r\n imgBack.src = DefaultLoadingScreen.DefaultLogoUrl;\r\n }\r\n\r\n imgBack.style.width = \"150px\";\r\n imgBack.style.gridColumn = \"1\";\r\n imgBack.style.gridRow = \"1\";\r\n imgBack.style.top = \"50%\";\r\n imgBack.style.left = \"50%\";\r\n imgBack.style.transform = \"translate(-50%, -50%)\";\r\n imgBack.style.position = \"absolute\";\r\n\r\n const imageSpinnerContainer = document.createElement(\"div\");\r\n imageSpinnerContainer.style.width = \"300px\";\r\n imageSpinnerContainer.style.gridColumn = \"1\";\r\n imageSpinnerContainer.style.gridRow = \"1\";\r\n imageSpinnerContainer.style.top = \"50%\";\r\n imageSpinnerContainer.style.left = \"50%\";\r\n imageSpinnerContainer.style.transform = \"translate(-50%, -50%)\";\r\n imageSpinnerContainer.style.position = \"absolute\";\r\n\r\n // Loading spinner\r\n const imgSpinner = new Image();\r\n\r\n if (!DefaultLoadingScreen.DefaultSpinnerUrl) {\r\n imgSpinner.src = !svgSupport\r\n ? \"https://cdn.babylonjs.com/Assets/loadingIcon.png\"\r\n : `data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzOTIgMzkyIj48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6I2UwNjg0Yjt9LmNscy0ye2ZpbGw6bm9uZTt9PC9zdHlsZT48L2RlZnM+PHRpdGxlPlNwaW5uZXJJY29uPC90aXRsZT48ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIj48ZyBpZD0iU3Bpbm5lciI+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNNDAuMjEsMTI2LjQzYzMuNy03LjMxLDcuNjctMTQuNDQsMTItMjEuMzJsMy4zNi01LjEsMy41Mi01YzEuMjMtMS42MywyLjQxLTMuMjksMy42NS00LjkxczIuNTMtMy4yMSwzLjgyLTQuNzlBMTg1LjIsMTg1LjIsMCwwLDEsODMuNCw2Ny40M2EyMDgsMjA4LDAsMCwxLDE5LTE1LjY2YzMuMzUtMi40MSw2Ljc0LTQuNzgsMTAuMjUtN3M3LjExLTQuMjgsMTAuNzUtNi4zMmM3LjI5LTQsMTQuNzMtOCwyMi41My0xMS40OSwzLjktMS43Miw3Ljg4LTMuMywxMi00LjY0YTEwNC4yMiwxMDQuMjIsMCwwLDEsMTIuNDQtMy4yMyw2Mi40NCw2Mi40NCwwLDAsMSwxMi43OC0xLjM5QTI1LjkyLDI1LjkyLDAsMCwxLDE5NiwyMS40NGE2LjU1LDYuNTUsMCwwLDEsMi4wNSw5LDYuNjYsNi42NiwwLDAsMS0xLjY0LDEuNzhsLS40MS4yOWEyMi4wNywyMi4wNywwLDAsMS01Ljc4LDMsMzAuNDIsMzAuNDIsMCwwLDEtNS42NywxLjYyLDM3LjgyLDM3LjgyLDAsMCwxLTUuNjkuNzFjLTEsMC0xLjkuMTgtMi44NS4yNmwtMi44NS4yNHEtNS43Mi41MS0xMS40OCwxLjFjLTMuODQuNC03LjcxLjgyLTExLjU4LDEuNGExMTIuMzQsMTEyLjM0LDAsMCwwLTIyLjk0LDUuNjFjLTMuNzIsMS4zNS03LjM0LDMtMTAuOTQsNC42NHMtNy4xNCwzLjUxLTEwLjYsNS41MUExNTEuNiwxNTEuNiwwLDAsMCw2OC41Niw4N0M2Ny4yMyw4OC40OCw2Niw5MCw2NC42NCw5MS41NnMtMi41MSwzLjE1LTMuNzUsNC43M2wtMy41NCw0LjljLTEuMTMsMS42Ni0yLjIzLDMuMzUtMy4zMyw1YTEyNywxMjcsMCwwLDAtMTAuOTMsMjEuNDksMS41OCwxLjU4LDAsMSwxLTMtMS4xNVM0MC4xOSwxMjYuNDcsNDAuMjEsMTI2LjQzWiIvPjxyZWN0IGNsYXNzPSJjbHMtMiIgd2lkdGg9IjM5MiIgaGVpZ2h0PSIzOTIiLz48L2c+PC9nPjwvc3ZnPg==`;\r\n } else {\r\n imgSpinner.src = DefaultLoadingScreen.DefaultSpinnerUrl;\r\n }\r\n\r\n imgSpinner.style.animation = \"spin1 0.75s infinite linear\";\r\n imgSpinner.style.webkitAnimation = \"spin1 0.75s infinite linear\";\r\n imgSpinner.style.transformOrigin = \"50% 50%\";\r\n imgSpinner.style.webkitTransformOrigin = \"50% 50%\";\r\n\r\n if (!svgSupport) {\r\n const logoSize = { w: 16, h: 18.5 };\r\n const loadingSize = { w: 30, h: 30 };\r\n // set styling correctly\r\n imgBack.style.width = `${logoSize.w}vh`;\r\n imgBack.style.height = `${logoSize.h}vh`;\r\n imgBack.style.left = `calc(50% - ${logoSize.w / 2}vh)`;\r\n imgBack.style.top = `calc(50% - ${logoSize.h / 2}vh)`;\r\n\r\n imgSpinner.style.width = `${loadingSize.w}vh`;\r\n imgSpinner.style.height = `${loadingSize.h}vh`;\r\n imgSpinner.style.left = `calc(50% - ${loadingSize.w / 2}vh)`;\r\n imgSpinner.style.top = `calc(50% - ${loadingSize.h / 2}vh)`;\r\n }\r\n\r\n imageSpinnerContainer.appendChild(imgSpinner);\r\n\r\n this._loadingDiv.appendChild(imgBack);\r\n this._loadingDiv.appendChild(imageSpinnerContainer);\r\n\r\n this._resizeLoadingUI();\r\n\r\n window.addEventListener(\"resize\", this._resizeLoadingUI);\r\n\r\n this._loadingDiv.style.backgroundColor = this._loadingDivBackgroundColor;\r\n document.body.appendChild(this._loadingDiv);\r\n\r\n this._loadingDiv.style.opacity = \"1\";\r\n }\r\n\r\n /**\r\n * Function called to hide the loading screen\r\n */\r\n public hideLoadingUI(): void {\r\n if (!this._loadingDiv) {\r\n return;\r\n }\r\n\r\n const onTransitionEnd = () => {\r\n if (this._loadingTextDiv) {\r\n this._loadingTextDiv.remove();\r\n this._loadingTextDiv = null;\r\n }\r\n if (this._loadingDiv) {\r\n this._loadingDiv.remove();\r\n this._loadingDiv = null;\r\n }\r\n if (this._style) {\r\n this._style.remove();\r\n this._style = null;\r\n }\r\n window.removeEventListener(\"resize\", this._resizeLoadingUI);\r\n };\r\n\r\n this._loadingDiv.style.opacity = \"0\";\r\n this._loadingDiv.addEventListener(\"transitionend\", onTransitionEnd);\r\n }\r\n\r\n /**\r\n * Gets or sets the text to display while loading\r\n */\r\n public set loadingUIText(text: string) {\r\n this._loadingText = text;\r\n\r\n if (this._loadingTextDiv) {\r\n this._loadingTextDiv.innerHTML = this._loadingText;\r\n }\r\n }\r\n\r\n public get loadingUIText(): string {\r\n return this._loadingText;\r\n }\r\n\r\n /**\r\n * Gets or sets the color to use for the background\r\n */\r\n public get loadingUIBackgroundColor(): string {\r\n return this._loadingDivBackgroundColor;\r\n }\r\n\r\n public set loadingUIBackgroundColor(color: string) {\r\n this._loadingDivBackgroundColor = color;\r\n\r\n if (!this._loadingDiv) {\r\n return;\r\n }\r\n\r\n this._loadingDiv.style.backgroundColor = this._loadingDivBackgroundColor;\r\n }\r\n\r\n // Resize\r\n private _resizeLoadingUI = () => {\r\n const canvasRect = this._renderingCanvas.getBoundingClientRect();\r\n const canvasPositioning = window.getComputedStyle(this._renderingCanvas).position;\r\n\r\n if (!this._loadingDiv) {\r\n return;\r\n }\r\n\r\n this._loadingDiv.style.position = canvasPositioning === \"fixed\" ? \"fixed\" : \"absolute\";\r\n this._loadingDiv.style.left = canvasRect.left + \"px\";\r\n this._loadingDiv.style.top = canvasRect.top + \"px\";\r\n this._loadingDiv.style.width = canvasRect.width + \"px\";\r\n this._loadingDiv.style.height = canvasRect.height + \"px\";\r\n };\r\n}\r\n\r\nEngine.DefaultLoadingScreenFactory = (canvas: HTMLCanvasElement) => {\r\n return new DefaultLoadingScreen(canvas);\r\n};\r\n"]}
|
|
1
|
+
{"version":3,"file":"loadingScreen.js","sourceRoot":"","sources":["../../../../dev/core/src/Loading/loadingScreen.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport { Engine } from \"../Engines/engine\";\r\n/**\r\n * Interface used to present a loading screen while loading a scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/customLoadingScreen\r\n */\r\nexport interface ILoadingScreen {\r\n /**\r\n * Function called to display the loading screen\r\n */\r\n displayLoadingUI: () => void;\r\n /**\r\n * Function called to hide the loading screen\r\n */\r\n hideLoadingUI: () => void;\r\n /**\r\n * Gets or sets the color to use for the background\r\n */\r\n loadingUIBackgroundColor: string;\r\n /**\r\n * Gets or sets the text to display while loading\r\n */\r\n loadingUIText: string;\r\n}\r\n\r\n/**\r\n * Class used for the default loading screen\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/customLoadingScreen\r\n */\r\nexport class DefaultLoadingScreen implements ILoadingScreen {\r\n private _loadingDiv: Nullable<HTMLDivElement>;\r\n private _loadingTextDiv: Nullable<HTMLDivElement>;\r\n private _style: Nullable<HTMLStyleElement>;\r\n\r\n /** Gets or sets the logo url to use for the default loading screen */\r\n public static DefaultLogoUrl = \"\";\r\n\r\n /** Gets or sets the spinner url to use for the default loading screen */\r\n public static DefaultSpinnerUrl = \"\";\r\n\r\n /**\r\n * Creates a new default loading screen\r\n * @param _renderingCanvas defines the canvas used to render the scene\r\n * @param _loadingText defines the default text to display\r\n * @param _loadingDivBackgroundColor defines the default background color\r\n */\r\n constructor(\r\n private _renderingCanvas: HTMLCanvasElement,\r\n private _loadingText = \"\",\r\n private _loadingDivBackgroundColor = \"black\"\r\n ) {}\r\n\r\n /**\r\n * Function called to display the loading screen\r\n */\r\n public displayLoadingUI(): void {\r\n if (this._loadingDiv) {\r\n // Do not add a loading screen if there is already one\r\n return;\r\n }\r\n\r\n this._loadingDiv = document.createElement(\"div\");\r\n\r\n this._loadingDiv.id = \"babylonjsLoadingDiv\";\r\n this._loadingDiv.style.opacity = \"0\";\r\n this._loadingDiv.style.transition = \"opacity 1.5s ease\";\r\n this._loadingDiv.style.pointerEvents = \"none\";\r\n this._loadingDiv.style.display = \"grid\";\r\n this._loadingDiv.style.gridTemplateRows = \"100%\";\r\n this._loadingDiv.style.gridTemplateColumns = \"100%\";\r\n this._loadingDiv.style.justifyItems = \"center\";\r\n this._loadingDiv.style.alignItems = \"center\";\r\n\r\n // Loading text\r\n this._loadingTextDiv = document.createElement(\"div\");\r\n this._loadingTextDiv.style.position = \"absolute\";\r\n this._loadingTextDiv.style.left = \"0\";\r\n this._loadingTextDiv.style.top = \"50%\";\r\n this._loadingTextDiv.style.marginTop = \"80px\";\r\n this._loadingTextDiv.style.width = \"100%\";\r\n this._loadingTextDiv.style.height = \"20px\";\r\n this._loadingTextDiv.style.fontFamily = \"Arial\";\r\n this._loadingTextDiv.style.fontSize = \"14px\";\r\n this._loadingTextDiv.style.color = \"white\";\r\n this._loadingTextDiv.style.textAlign = \"center\";\r\n this._loadingTextDiv.style.zIndex = \"1\";\r\n this._loadingTextDiv.innerHTML = \"Loading\";\r\n\r\n this._loadingDiv.appendChild(this._loadingTextDiv);\r\n\r\n //set the predefined text\r\n this._loadingTextDiv.innerHTML = this._loadingText;\r\n\r\n // Generating keyframes\r\n this._style = document.createElement(\"style\");\r\n this._style.type = \"text/css\";\r\n const keyFrames = `@-webkit-keyframes spin1 {\\\r\n 0% { -webkit-transform: rotate(0deg);}\r\n 100% { -webkit-transform: rotate(360deg);}\r\n }\\\r\n @keyframes spin1 {\\\r\n 0% { transform: rotate(0deg);}\r\n 100% { transform: rotate(360deg);}\r\n }`;\r\n this._style.innerHTML = keyFrames;\r\n document.getElementsByTagName(\"head\")[0].appendChild(this._style);\r\n\r\n const svgSupport = !!window.SVGSVGElement;\r\n // Loading img\r\n const imgBack = new Image();\r\n if (!DefaultLoadingScreen.DefaultLogoUrl) {\r\n imgBack.src = !svgSupport\r\n ? \"https://cdn.babylonjs.com/Assets/babylonLogo.png\"\r\n : `data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxODAuMTcgMjA4LjA0Ij48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6I2ZmZjt9LmNscy0ye2ZpbGw6I2UwNjg0Yjt9LmNscy0ze2ZpbGw6I2JiNDY0Yjt9LmNscy00e2ZpbGw6I2UwZGVkODt9LmNscy01e2ZpbGw6I2Q1ZDJjYTt9PC9zdHlsZT48L2RlZnM+PHRpdGxlPkJhYnlsb25Mb2dvPC90aXRsZT48ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIj48ZyBpZD0iUGFnZV9FbGVtZW50cyIgZGF0YS1uYW1lPSJQYWdlIEVsZW1lbnRzIj48cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik05MC4wOSwwLDAsNTJWMTU2bDkwLjA5LDUyLDkwLjA4LTUyVjUyWiIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtMiIgcG9pbnRzPSIxODAuMTcgNTIuMDEgMTUxLjk3IDM1LjczIDEyNC44NSA1MS4zOSAxNTMuMDUgNjcuNjcgMTgwLjE3IDUyLjAxIi8+PHBvbHlnb24gY2xhc3M9ImNscy0yIiBwb2ludHM9IjI3LjEyIDY3LjY3IDExNy4yMSAxNS42NiA5MC4wOCAwIDAgNTIuMDEgMjcuMTIgNjcuNjciLz48cG9seWdvbiBjbGFzcz0iY2xzLTIiIHBvaW50cz0iNjEuODkgMTIwLjMgOTAuMDggMTM2LjU4IDExOC4yOCAxMjAuMyA5MC4wOCAxMDQuMDIgNjEuODkgMTIwLjMiLz48cG9seWdvbiBjbGFzcz0iY2xzLTMiIHBvaW50cz0iMTUzLjA1IDY3LjY3IDE1My4wNSAxNDAuMzcgOTAuMDggMTc2LjcyIDI3LjEyIDE0MC4zNyAyNy4xMiA2Ny42NyAwIDUyLjAxIDAgMTU2LjAzIDkwLjA4IDIwOC4wNCAxODAuMTcgMTU2LjAzIDE4MC4xNyA1Mi4wMSAxNTMuMDUgNjcuNjciLz48cG9seWdvbiBjbGFzcz0iY2xzLTMiIHBvaW50cz0iOTAuMDggNzEuNDYgNjEuODkgODcuNzQgNjEuODkgMTIwLjMgOTAuMDggMTA0LjAyIDExOC4yOCAxMjAuMyAxMTguMjggODcuNzQgOTAuMDggNzEuNDYiLz48cG9seWdvbiBjbGFzcz0iY2xzLTQiIHBvaW50cz0iMTUzLjA1IDY3LjY3IDExOC4yOCA4Ny43NCAxMTguMjggMTIwLjMgOTAuMDggMTM2LjU4IDkwLjA4IDE3Ni43MiAxNTMuMDUgMTQwLjM3IDE1My4wNSA2Ny42NyIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtNSIgcG9pbnRzPSIyNy4xMiA2Ny42NyA2MS44OSA4Ny43NCA2MS44OSAxMjAuMyA5MC4wOCAxMzYuNTggOTAuMDggMTc2LjcyIDI3LjEyIDE0MC4zNyAyNy4xMiA2Ny42NyIvPjwvZz48L2c+PC9zdmc+`;\r\n } else {\r\n imgBack.src = DefaultLoadingScreen.DefaultLogoUrl;\r\n }\r\n\r\n imgBack.style.width = \"150px\";\r\n imgBack.style.gridColumn = \"1\";\r\n imgBack.style.gridRow = \"1\";\r\n imgBack.style.top = \"50%\";\r\n imgBack.style.left = \"50%\";\r\n imgBack.style.transform = \"translate(-50%, -50%)\";\r\n imgBack.style.position = \"absolute\";\r\n\r\n const imageSpinnerContainer = document.createElement(\"div\");\r\n imageSpinnerContainer.style.width = \"300px\";\r\n imageSpinnerContainer.style.gridColumn = \"1\";\r\n imageSpinnerContainer.style.gridRow = \"1\";\r\n imageSpinnerContainer.style.top = \"50%\";\r\n imageSpinnerContainer.style.left = \"50%\";\r\n imageSpinnerContainer.style.transform = \"translate(-50%, -50%)\";\r\n imageSpinnerContainer.style.position = \"absolute\";\r\n\r\n // Loading spinner\r\n const imgSpinner = new Image();\r\n\r\n if (!DefaultLoadingScreen.DefaultSpinnerUrl) {\r\n imgSpinner.src = !svgSupport\r\n ? \"https://cdn.babylonjs.com/Assets/loadingIcon.png\"\r\n : `data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzOTIgMzkyIj48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6I2UwNjg0Yjt9LmNscy0ye2ZpbGw6bm9uZTt9PC9zdHlsZT48L2RlZnM+PHRpdGxlPlNwaW5uZXJJY29uPC90aXRsZT48ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIj48ZyBpZD0iU3Bpbm5lciI+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNNDAuMjEsMTI2LjQzYzMuNy03LjMxLDcuNjctMTQuNDQsMTItMjEuMzJsMy4zNi01LjEsMy41Mi01YzEuMjMtMS42MywyLjQxLTMuMjksMy42NS00LjkxczIuNTMtMy4yMSwzLjgyLTQuNzlBMTg1LjIsMTg1LjIsMCwwLDEsODMuNCw2Ny40M2EyMDgsMjA4LDAsMCwxLDE5LTE1LjY2YzMuMzUtMi40MSw2Ljc0LTQuNzgsMTAuMjUtN3M3LjExLTQuMjgsMTAuNzUtNi4zMmM3LjI5LTQsMTQuNzMtOCwyMi41My0xMS40OSwzLjktMS43Miw3Ljg4LTMuMywxMi00LjY0YTEwNC4yMiwxMDQuMjIsMCwwLDEsMTIuNDQtMy4yMyw2Mi40NCw2Mi40NCwwLDAsMSwxMi43OC0xLjM5QTI1LjkyLDI1LjkyLDAsMCwxLDE5NiwyMS40NGE2LjU1LDYuNTUsMCwwLDEsMi4wNSw5LDYuNjYsNi42NiwwLDAsMS0xLjY0LDEuNzhsLS40MS4yOWEyMi4wNywyMi4wNywwLDAsMS01Ljc4LDMsMzAuNDIsMzAuNDIsMCwwLDEtNS42NywxLjYyLDM3LjgyLDM3LjgyLDAsMCwxLTUuNjkuNzFjLTEsMC0xLjkuMTgtMi44NS4yNmwtMi44NS4yNHEtNS43Mi41MS0xMS40OCwxLjFjLTMuODQuNC03LjcxLjgyLTExLjU4LDEuNGExMTIuMzQsMTEyLjM0LDAsMCwwLTIyLjk0LDUuNjFjLTMuNzIsMS4zNS03LjM0LDMtMTAuOTQsNC42NHMtNy4xNCwzLjUxLTEwLjYsNS41MUExNTEuNiwxNTEuNiwwLDAsMCw2OC41Niw4N0M2Ny4yMyw4OC40OCw2Niw5MCw2NC42NCw5MS41NnMtMi41MSwzLjE1LTMuNzUsNC43M2wtMy41NCw0LjljLTEuMTMsMS42Ni0yLjIzLDMuMzUtMy4zMyw1YTEyNywxMjcsMCwwLDAtMTAuOTMsMjEuNDksMS41OCwxLjU4LDAsMSwxLTMtMS4xNVM0MC4xOSwxMjYuNDcsNDAuMjEsMTI2LjQzWiIvPjxyZWN0IGNsYXNzPSJjbHMtMiIgd2lkdGg9IjM5MiIgaGVpZ2h0PSIzOTIiLz48L2c+PC9nPjwvc3ZnPg==`;\r\n } else {\r\n imgSpinner.src = DefaultLoadingScreen.DefaultSpinnerUrl;\r\n }\r\n\r\n imgSpinner.style.animation = \"spin1 0.75s infinite linear\";\r\n imgSpinner.style.webkitAnimation = \"spin1 0.75s infinite linear\";\r\n imgSpinner.style.transformOrigin = \"50% 50%\";\r\n imgSpinner.style.webkitTransformOrigin = \"50% 50%\";\r\n\r\n if (!svgSupport) {\r\n const logoSize = { w: 16, h: 18.5 };\r\n const loadingSize = { w: 30, h: 30 };\r\n // set styling correctly\r\n imgBack.style.width = `${logoSize.w}vh`;\r\n imgBack.style.height = `${logoSize.h}vh`;\r\n imgBack.style.left = `calc(50% - ${logoSize.w / 2}vh)`;\r\n imgBack.style.top = `calc(50% - ${logoSize.h / 2}vh)`;\r\n\r\n imgSpinner.style.width = `${loadingSize.w}vh`;\r\n imgSpinner.style.height = `${loadingSize.h}vh`;\r\n imgSpinner.style.left = `calc(50% - ${loadingSize.w / 2}vh)`;\r\n imgSpinner.style.top = `calc(50% - ${loadingSize.h / 2}vh)`;\r\n }\r\n\r\n imageSpinnerContainer.appendChild(imgSpinner);\r\n\r\n this._loadingDiv.appendChild(imgBack);\r\n this._loadingDiv.appendChild(imageSpinnerContainer);\r\n\r\n this._resizeLoadingUI();\r\n\r\n window.addEventListener(\"resize\", this._resizeLoadingUI);\r\n\r\n this._loadingDiv.style.backgroundColor = this._loadingDivBackgroundColor;\r\n document.body.appendChild(this._loadingDiv);\r\n\r\n this._loadingDiv.style.opacity = \"1\";\r\n }\r\n\r\n /**\r\n * Function called to hide the loading screen\r\n */\r\n public hideLoadingUI(): void {\r\n if (!this._loadingDiv) {\r\n return;\r\n }\r\n\r\n const onTransitionEnd = () => {\r\n if (this._loadingTextDiv) {\r\n this._loadingTextDiv.remove();\r\n this._loadingTextDiv = null;\r\n }\r\n if (this._loadingDiv) {\r\n this._loadingDiv.remove();\r\n this._loadingDiv = null;\r\n }\r\n if (this._style) {\r\n this._style.remove();\r\n this._style = null;\r\n }\r\n window.removeEventListener(\"resize\", this._resizeLoadingUI);\r\n };\r\n\r\n this._loadingDiv.style.opacity = \"0\";\r\n this._loadingDiv.addEventListener(\"transitionend\", onTransitionEnd);\r\n }\r\n\r\n /**\r\n * Gets or sets the text to display while loading\r\n */\r\n public set loadingUIText(text: string) {\r\n this._loadingText = text;\r\n\r\n if (this._loadingTextDiv) {\r\n this._loadingTextDiv.innerHTML = this._loadingText;\r\n }\r\n }\r\n\r\n public get loadingUIText(): string {\r\n return this._loadingText;\r\n }\r\n\r\n /**\r\n * Gets or sets the color to use for the background\r\n */\r\n public get loadingUIBackgroundColor(): string {\r\n return this._loadingDivBackgroundColor;\r\n }\r\n\r\n public set loadingUIBackgroundColor(color: string) {\r\n this._loadingDivBackgroundColor = color;\r\n\r\n if (!this._loadingDiv) {\r\n return;\r\n }\r\n\r\n this._loadingDiv.style.backgroundColor = this._loadingDivBackgroundColor;\r\n }\r\n\r\n // Resize\r\n private _resizeLoadingUI = () => {\r\n const canvasRect = this._renderingCanvas.getBoundingClientRect();\r\n const canvasPositioning = window.getComputedStyle(this._renderingCanvas).position;\r\n\r\n if (!this._loadingDiv) {\r\n return;\r\n }\r\n\r\n this._loadingDiv.style.position = canvasPositioning === \"fixed\" ? \"fixed\" : \"absolute\";\r\n this._loadingDiv.style.left = canvasRect.left + \"px\";\r\n this._loadingDiv.style.top = canvasRect.top + \"px\";\r\n this._loadingDiv.style.width = canvasRect.width + \"px\";\r\n this._loadingDiv.style.height = canvasRect.height + \"px\";\r\n };\r\n}\r\n\r\nEngine.DefaultLoadingScreenFactory = (canvas: HTMLCanvasElement) => {\r\n return new DefaultLoadingScreen(canvas);\r\n};\r\n"]}
|
|
@@ -259,6 +259,22 @@ export declare class BackgroundMaterial extends PushMaterial {
|
|
|
259
259
|
* Setting this flag to true (not done automatically!) will convert it back to RGB.
|
|
260
260
|
*/
|
|
261
261
|
switchToBGR: boolean;
|
|
262
|
+
private _enableGroundProjection;
|
|
263
|
+
/**
|
|
264
|
+
* Enables the ground projection mode on the material.
|
|
265
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/environment/skybox#ground-projection
|
|
266
|
+
*/
|
|
267
|
+
enableGroundProjection: boolean;
|
|
268
|
+
/**
|
|
269
|
+
* Defines the radius of the projected ground if enableGroundProjection is true.
|
|
270
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/environment/skybox#ground-projection
|
|
271
|
+
*/
|
|
272
|
+
projectedGroundRadius: number;
|
|
273
|
+
/**
|
|
274
|
+
* Defines the height of the projected ground if enableGroundProjection is true.
|
|
275
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/environment/skybox#ground-projection
|
|
276
|
+
*/
|
|
277
|
+
projectedGroundHeight: number;
|
|
262
278
|
private _renderTargets;
|
|
263
279
|
private _reflectionControls;
|
|
264
280
|
private _white;
|
|
@@ -90,6 +90,10 @@ class BackgroundMaterialDefines extends MaterialDefines {
|
|
|
90
90
|
* Mainly used to solve a bug in ios10 video tag
|
|
91
91
|
*/
|
|
92
92
|
this.REFLECTIONBGR = false;
|
|
93
|
+
/**
|
|
94
|
+
* True if ground projection has been enabled.
|
|
95
|
+
*/
|
|
96
|
+
this.PROJECTED_GROUND = false;
|
|
93
97
|
this.IMAGEPROCESSING = false;
|
|
94
98
|
this.VIGNETTE = false;
|
|
95
99
|
this.VIGNETTEBLENDMODEMULTIPLY = false;
|
|
@@ -468,6 +472,22 @@ export class BackgroundMaterial extends PushMaterial {
|
|
|
468
472
|
* Setting this flag to true (not done automatically!) will convert it back to RGB.
|
|
469
473
|
*/
|
|
470
474
|
this.switchToBGR = false;
|
|
475
|
+
this._enableGroundProjection = false;
|
|
476
|
+
/**
|
|
477
|
+
* Enables the ground projection mode on the material.
|
|
478
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/environment/skybox#ground-projection
|
|
479
|
+
*/
|
|
480
|
+
this.enableGroundProjection = false;
|
|
481
|
+
/**
|
|
482
|
+
* Defines the radius of the projected ground if enableGroundProjection is true.
|
|
483
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/environment/skybox#ground-projection
|
|
484
|
+
*/
|
|
485
|
+
this.projectedGroundRadius = 1000;
|
|
486
|
+
/**
|
|
487
|
+
* Defines the height of the projected ground if enableGroundProjection is true.
|
|
488
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/environment/skybox#ground-projection
|
|
489
|
+
*/
|
|
490
|
+
this.projectedGroundHeight = 10;
|
|
471
491
|
// Temp values kept as cache in the material.
|
|
472
492
|
this._renderTargets = new SmartArray(16);
|
|
473
493
|
this._reflectionControls = Vector4.Zero();
|
|
@@ -660,6 +680,15 @@ export class BackgroundMaterial extends PushMaterial {
|
|
|
660
680
|
}
|
|
661
681
|
this._imageProcessingConfiguration.prepareDefines(defines);
|
|
662
682
|
}
|
|
683
|
+
if (defines._areMiscDirty) {
|
|
684
|
+
if (defines.REFLECTIONMAP_3D && this._enableGroundProjection) {
|
|
685
|
+
defines.PROJECTED_GROUND = true;
|
|
686
|
+
defines.REFLECTIONMAP_SKYBOX = true;
|
|
687
|
+
}
|
|
688
|
+
else {
|
|
689
|
+
defines.PROJECTED_GROUND = false;
|
|
690
|
+
}
|
|
691
|
+
}
|
|
663
692
|
// Misc.
|
|
664
693
|
MaterialHelper.PrepareDefinesForMisc(mesh, scene, false, this.pointsCloud, this.fogEnabled, this._shouldTurnAlphaTestOn(mesh), defines);
|
|
665
694
|
// Values that need to be evaluated on every frame
|
|
@@ -724,6 +753,7 @@ export class BackgroundMaterial extends PushMaterial {
|
|
|
724
753
|
"vReflectionControl",
|
|
725
754
|
"vDiffuseInfos",
|
|
726
755
|
"diffuseMatrix",
|
|
756
|
+
"projectedGroundInfos",
|
|
727
757
|
];
|
|
728
758
|
addClipPlaneUniforms(uniforms);
|
|
729
759
|
const samplers = ["diffuseSampler", "reflectionSampler", "reflectionSamplerLow", "reflectionSamplerHigh"];
|
|
@@ -813,6 +843,7 @@ export class BackgroundMaterial extends PushMaterial {
|
|
|
813
843
|
this._uniformBuffer.addUniform("alpha", 1);
|
|
814
844
|
this._uniformBuffer.addUniform("vBackgroundCenter", 3);
|
|
815
845
|
this._uniformBuffer.addUniform("vReflectionControl", 4);
|
|
846
|
+
this._uniformBuffer.addUniform("projectedGroundInfos", 2);
|
|
816
847
|
this._uniformBuffer.create();
|
|
817
848
|
}
|
|
818
849
|
/**
|
|
@@ -912,6 +943,9 @@ export class BackgroundMaterial extends PushMaterial {
|
|
|
912
943
|
this._uniformBuffer.updateFloat4("vReflectionControl", this._reflectionControls.x, this._reflectionControls.y, this._reflectionControls.z, this._reflectionControls.w);
|
|
913
944
|
}
|
|
914
945
|
}
|
|
946
|
+
if (defines.PROJECTED_GROUND) {
|
|
947
|
+
this._uniformBuffer.updateFloat2("projectedGroundInfos", this.projectedGroundRadius, this.projectedGroundHeight);
|
|
948
|
+
}
|
|
915
949
|
}
|
|
916
950
|
// Clip plane
|
|
917
951
|
bindClipPlane(this._activeEffect, this, scene);
|
|
@@ -1131,5 +1165,15 @@ __decorate([
|
|
|
1131
1165
|
__decorate([
|
|
1132
1166
|
serializeAsImageProcessingConfiguration()
|
|
1133
1167
|
], BackgroundMaterial.prototype, "_imageProcessingConfiguration", void 0);
|
|
1168
|
+
__decorate([
|
|
1169
|
+
serialize(),
|
|
1170
|
+
expandToProperty("_markAllSubMeshesAsMiscDirty")
|
|
1171
|
+
], BackgroundMaterial.prototype, "enableGroundProjection", void 0);
|
|
1172
|
+
__decorate([
|
|
1173
|
+
serialize()
|
|
1174
|
+
], BackgroundMaterial.prototype, "projectedGroundRadius", void 0);
|
|
1175
|
+
__decorate([
|
|
1176
|
+
serialize()
|
|
1177
|
+
], BackgroundMaterial.prototype, "projectedGroundHeight", void 0);
|
|
1134
1178
|
RegisterClass("BABYLON.BackgroundMaterial", BackgroundMaterial);
|
|
1135
1179
|
//# sourceMappingURL=backgroundMaterial.js.map
|