@onerjs/core 8.46.2 → 8.46.3

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.
@@ -30,7 +30,7 @@ export class ShaderStore {
30
30
  /**
31
31
  * Gets or sets the relative url used to load shaders if using the engine in non-minified mode
32
32
  */
33
- ShaderStore.ShadersRepository = "../Shaders/";
33
+ ShaderStore.ShadersRepository = "src/Shaders/";
34
34
  /**
35
35
  * Store of each shader (The can be looked up using effect.key)
36
36
  */
@@ -42,7 +42,7 @@ ShaderStore.IncludesShadersStore = {};
42
42
  /**
43
43
  * Gets or sets the relative url used to load shaders (WGSL) if using the engine in non-minified mode
44
44
  */
45
- ShaderStore.ShadersRepositoryWGSL = "../ShadersWGSL/";
45
+ ShaderStore.ShadersRepositoryWGSL = "src/ShadersWGSL/";
46
46
  /**
47
47
  * Store of each shader (WGSL)
48
48
  */
@@ -1 +1 @@
1
- {"version":3,"file":"shaderStore.js","sourceRoot":"","sources":["../../../../dev/core/src/Engines/shaderStore.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAO,WAAW;IA2BpB;;;;OAIG;IACI,MAAM,CAAC,oBAAoB,CAAC,cAAc,8BAAsB;QACnE,OAAO,cAAc,gCAAwB,CAAC,CAAC,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC,WAAW,CAAC,qBAAqB,CAAC;IACtH,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,eAAe,CAAC,cAAc,8BAAsB;QAC9D,OAAO,cAAc,gCAAwB,CAAC,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,gBAAgB,CAAC;IAC5G,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,uBAAuB,CAAC,cAAc,8BAAsB;QACtE,OAAO,cAAc,gCAAwB,CAAC,CAAC,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAAC,WAAW,CAAC,wBAAwB,CAAC;IAC5H,CAAC;;AAnDD;;GAEG;AACW,6BAAiB,GAAG,aAAa,CAAC;AAChD;;GAEG;AACW,wBAAY,GAA8B,EAAE,CAAC;AAC3D;;GAEG;AACW,gCAAoB,GAA8B,EAAE,CAAC;AAEnE;;GAEG;AACW,iCAAqB,GAAG,iBAAiB,CAAC;AACxD;;GAEG;AACW,4BAAgB,GAA8B,EAAE,CAAC;AAC/D;;GAEG;AACW,oCAAwB,GAA8B,EAAE,CAAC","sourcesContent":["import { ShaderLanguage } from \"../Materials/shaderLanguage\";\r\n\r\n/**\r\n * Defines the shader related stores and directory\r\n */\r\nexport class ShaderStore {\r\n /**\r\n * Gets or sets the relative url used to load shaders if using the engine in non-minified mode\r\n */\r\n public static ShadersRepository = \"../Shaders/\";\r\n /**\r\n * Store of each shader (The can be looked up using effect.key)\r\n */\r\n public static ShadersStore: { [key: string]: string } = {};\r\n /**\r\n * Store of each included file for a shader (The can be looked up using effect.key)\r\n */\r\n public static IncludesShadersStore: { [key: string]: string } = {};\r\n\r\n /**\r\n * Gets or sets the relative url used to load shaders (WGSL) if using the engine in non-minified mode\r\n */\r\n public static ShadersRepositoryWGSL = \"../ShadersWGSL/\";\r\n /**\r\n * Store of each shader (WGSL)\r\n */\r\n public static ShadersStoreWGSL: { [key: string]: string } = {};\r\n /**\r\n * Store of each included file for a shader (WGSL)\r\n */\r\n public static IncludesShadersStoreWGSL: { [key: string]: string } = {};\r\n\r\n /**\r\n * Gets the shaders repository path for a given shader language\r\n * @param shaderLanguage the shader language\r\n * @returns the path to the shaders repository\r\n */\r\n public static GetShadersRepository(shaderLanguage = ShaderLanguage.GLSL): string {\r\n return shaderLanguage === ShaderLanguage.GLSL ? ShaderStore.ShadersRepository : ShaderStore.ShadersRepositoryWGSL;\r\n }\r\n\r\n /**\r\n * Gets the shaders store of a given shader language\r\n * @param shaderLanguage the shader language\r\n * @returns the shaders store\r\n */\r\n public static GetShadersStore(shaderLanguage = ShaderLanguage.GLSL): { [key: string]: string } {\r\n return shaderLanguage === ShaderLanguage.GLSL ? ShaderStore.ShadersStore : ShaderStore.ShadersStoreWGSL;\r\n }\r\n\r\n /**\r\n * Gets the include shaders store of a given shader language\r\n * @param shaderLanguage the shader language\r\n * @returns the include shaders store\r\n */\r\n public static GetIncludesShadersStore(shaderLanguage = ShaderLanguage.GLSL): { [key: string]: string } {\r\n return shaderLanguage === ShaderLanguage.GLSL ? ShaderStore.IncludesShadersStore : ShaderStore.IncludesShadersStoreWGSL;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"shaderStore.js","sourceRoot":"","sources":["../../../../dev/core/src/Engines/shaderStore.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAO,WAAW;IA2BpB;;;;OAIG;IACI,MAAM,CAAC,oBAAoB,CAAC,cAAc,8BAAsB;QACnE,OAAO,cAAc,gCAAwB,CAAC,CAAC,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC,WAAW,CAAC,qBAAqB,CAAC;IACtH,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,eAAe,CAAC,cAAc,8BAAsB;QAC9D,OAAO,cAAc,gCAAwB,CAAC,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,gBAAgB,CAAC;IAC5G,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,uBAAuB,CAAC,cAAc,8BAAsB;QACtE,OAAO,cAAc,gCAAwB,CAAC,CAAC,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAAC,WAAW,CAAC,wBAAwB,CAAC;IAC5H,CAAC;;AAnDD;;GAEG;AACW,6BAAiB,GAAG,cAAc,CAAC;AACjD;;GAEG;AACW,wBAAY,GAA8B,EAAE,CAAC;AAC3D;;GAEG;AACW,gCAAoB,GAA8B,EAAE,CAAC;AAEnE;;GAEG;AACW,iCAAqB,GAAG,kBAAkB,CAAC;AACzD;;GAEG;AACW,4BAAgB,GAA8B,EAAE,CAAC;AAC/D;;GAEG;AACW,oCAAwB,GAA8B,EAAE,CAAC","sourcesContent":["import { ShaderLanguage } from \"../Materials/shaderLanguage\";\r\n\r\n/**\r\n * Defines the shader related stores and directory\r\n */\r\nexport class ShaderStore {\r\n /**\r\n * Gets or sets the relative url used to load shaders if using the engine in non-minified mode\r\n */\r\n public static ShadersRepository = \"src/Shaders/\";\r\n /**\r\n * Store of each shader (The can be looked up using effect.key)\r\n */\r\n public static ShadersStore: { [key: string]: string } = {};\r\n /**\r\n * Store of each included file for a shader (The can be looked up using effect.key)\r\n */\r\n public static IncludesShadersStore: { [key: string]: string } = {};\r\n\r\n /**\r\n * Gets or sets the relative url used to load shaders (WGSL) if using the engine in non-minified mode\r\n */\r\n public static ShadersRepositoryWGSL = \"src/ShadersWGSL/\";\r\n /**\r\n * Store of each shader (WGSL)\r\n */\r\n public static ShadersStoreWGSL: { [key: string]: string } = {};\r\n /**\r\n * Store of each included file for a shader (WGSL)\r\n */\r\n public static IncludesShadersStoreWGSL: { [key: string]: string } = {};\r\n\r\n /**\r\n * Gets the shaders repository path for a given shader language\r\n * @param shaderLanguage the shader language\r\n * @returns the path to the shaders repository\r\n */\r\n public static GetShadersRepository(shaderLanguage = ShaderLanguage.GLSL): string {\r\n return shaderLanguage === ShaderLanguage.GLSL ? ShaderStore.ShadersRepository : ShaderStore.ShadersRepositoryWGSL;\r\n }\r\n\r\n /**\r\n * Gets the shaders store of a given shader language\r\n * @param shaderLanguage the shader language\r\n * @returns the shaders store\r\n */\r\n public static GetShadersStore(shaderLanguage = ShaderLanguage.GLSL): { [key: string]: string } {\r\n return shaderLanguage === ShaderLanguage.GLSL ? ShaderStore.ShadersStore : ShaderStore.ShadersStoreWGSL;\r\n }\r\n\r\n /**\r\n * Gets the include shaders store of a given shader language\r\n * @param shaderLanguage the shader language\r\n * @returns the include shaders store\r\n */\r\n public static GetIncludesShadersStore(shaderLanguage = ShaderLanguage.GLSL): { [key: string]: string } {\r\n return shaderLanguage === ShaderLanguage.GLSL ? ShaderStore.IncludesShadersStore : ShaderStore.IncludesShadersStoreWGSL;\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"thinHighlightLayer.js","sourceRoot":"","sources":["../../../../dev/core/src/Layers/thinHighlightLayer.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n type Observer,\r\n type Nullable,\r\n type Scene,\r\n type SubMesh,\r\n type AbstractMesh,\r\n type Mesh,\r\n type Effect,\r\n type IThinEffectLayerOptions,\r\n type Color3,\r\n type EffectWrapper,\r\n} from \"core/index\";\r\nimport { Vector2 } from \"../Maths/math.vector\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport { Material } from \"../Materials/material\";\r\nimport { ThinPassPostProcess } from \"../PostProcesses/thinPassPostProcess\";\r\nimport { ThinEffectLayer, ThinGlowBlurPostProcess } from \"./thinEffectLayer\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { Color4 } from \"../Maths/math.color\";\r\nimport { ShaderLanguage } from \"../Materials/shaderLanguage\";\r\nimport { ThinBlurPostProcess } from \"../PostProcesses/thinBlurPostProcess\";\r\n\r\ninterface IBlurPostProcess extends EffectWrapper {\r\n kernel: number;\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 IThinHighlightLayerOptions extends IThinEffectLayerOptions {\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 * Should we display highlight as a solid stroke? Default: false\r\n */\r\n isStroke?: boolean;\r\n\r\n /**\r\n * Use the GLSL code generation for the shader (even on WebGPU). Default is false\r\n */\r\n forceGLSL?: boolean;\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 * @internal\r\n */\r\nexport class ThinHighlightLayer extends ThinEffectLayer {\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 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 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 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 public get blurVerticalSize(): number {\r\n return this._verticalBlurPostprocess.kernel;\r\n }\r\n\r\n private _instanceGlowingMeshStencilReference = ThinHighlightLayer.GlowingMeshStencilReference++;\r\n\r\n /** @internal */\r\n public override _options: Required<IThinHighlightLayerOptions>;\r\n\r\n private _downSamplePostprocess: ThinPassPostProcess;\r\n private _horizontalBlurPostprocess: IBlurPostProcess;\r\n private _verticalBlurPostprocess: IBlurPostProcess;\r\n\r\n /** @internal */\r\n public _meshes: Nullable<{ [id: string]: Nullable<IHighlightLayerMesh> }> = {};\r\n /** @internal */\r\n public _excludedMeshes: Nullable<{ [id: string]: Nullable<IHighlightLayerExcludedMesh> }> = {};\r\n\r\n /** @internal */\r\n public _mainObjectRendererRenderPassId = -1;\r\n\r\n /**\r\n * Gets the stencil reference value used for the meshes rendered by the highlight layer.\r\n */\r\n public get stencilReference(): number {\r\n return this._instanceGlowingMeshStencilReference << (8 - this.numStencilBits);\r\n }\r\n\r\n /**\r\n * Number of stencil bits used by the highlight layer (default: 8).\r\n * The layer uses the numStencilBits highest bits of the stencil buffer.\r\n */\r\n public numStencilBits = 8;\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 * @param dontCheckIfReady Specifies if the layer should disable checking whether all the post processes are ready (default: false). To save performance, this should be set to true and you should call `isReady` manually before rendering to the layer.\r\n */\r\n constructor(name: string, scene?: Scene, options?: Partial<IThinHighlightLayerOptions>, dontCheckIfReady = false) {\r\n super(name, scene, options !== undefined ? !!options.forceGLSL : false);\r\n\r\n this.neutralColor = ThinHighlightLayer.NeutralColor;\r\n\r\n // Adapt options\r\n this._options = {\r\n mainTextureRatio: 0.5,\r\n blurTextureSizeRatio: 0.5,\r\n mainTextureFixedSize: 0,\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 forceGLSL: false,\r\n mainTextureType: Constants.TEXTURETYPE_UNSIGNED_BYTE,\r\n mainTextureFormat: Constants.TEXTUREFORMAT_RGBA,\r\n isStroke: false,\r\n ...options,\r\n };\r\n\r\n // Initialize the layer\r\n this._init(this._options);\r\n\r\n // Do not render as long as no meshes have been added\r\n this._shouldRender = false;\r\n\r\n if (dontCheckIfReady) {\r\n // When dontCheckIfReady is true, we are in the new ThinXXX layer mode, so we must call _createTextureAndPostProcesses ourselves (it is called by EffectLayer otherwise)\r\n this._createTextureAndPostProcesses();\r\n }\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 protected override async _importShadersAsync() {\r\n if (this._shaderLanguage === ShaderLanguage.WGSL) {\r\n await Promise.all([\r\n import(\"../ShadersWGSL/glowMapMerge.fragment\"),\r\n import(\"../ShadersWGSL/glowMapMerge.vertex\"),\r\n import(\"../ShadersWGSL/glowBlurPostProcess.fragment\"),\r\n ]);\r\n } else {\r\n await Promise.all([import(\"../Shaders/glowMapMerge.fragment\"), import(\"../Shaders/glowMapMerge.vertex\"), import(\"../Shaders/glowBlurPostProcess.fragment\")]);\r\n }\r\n\r\n await super._importShadersAsync();\r\n }\r\n\r\n public override getEffectName(): string {\r\n return ThinHighlightLayer.EffectName;\r\n }\r\n\r\n public override _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 public override _createMergeEffect(): Effect {\r\n return this._engine.createEffect(\r\n \"glowMapMerge\",\r\n [VertexBuffer.PositionKind],\r\n [\"offset\"],\r\n [\"textureSampler\"],\r\n this._options.isStroke ? \"#define STROKE \\n\" : undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n this._shaderLanguage,\r\n this._shadersLoaded\r\n ? undefined\r\n : async () => {\r\n await this._importShadersAsync();\r\n this._shadersLoaded = true;\r\n }\r\n );\r\n }\r\n\r\n public override _createTextureAndPostProcesses(): void {\r\n if (this._options.alphaBlendingMode === Constants.ALPHA_COMBINE) {\r\n this._downSamplePostprocess = new ThinPassPostProcess(\"HighlightLayerPPP\", this._scene.getEngine());\r\n this._horizontalBlurPostprocess = new ThinGlowBlurPostProcess(\"HighlightLayerHBP\", this._scene.getEngine(), new Vector2(1.0, 0), this._options.blurHorizontalSize);\r\n this._verticalBlurPostprocess = new ThinGlowBlurPostProcess(\"HighlightLayerVBP\", this._scene.getEngine(), new Vector2(0, 1.0), this._options.blurVerticalSize);\r\n this._postProcesses = [this._downSamplePostprocess, this._horizontalBlurPostprocess, this._verticalBlurPostprocess];\r\n } else {\r\n this._horizontalBlurPostprocess = new ThinBlurPostProcess(\"HighlightLayerHBP\", this._scene.getEngine(), new Vector2(1.0, 0), this._options.blurHorizontalSize / 2);\r\n this._verticalBlurPostprocess = new ThinBlurPostProcess(\"HighlightLayerVBP\", this._scene.getEngine(), new Vector2(0, 1.0), this._options.blurVerticalSize / 2);\r\n this._postProcesses = [this._horizontalBlurPostprocess, this._verticalBlurPostprocess];\r\n }\r\n }\r\n\r\n public override needStencil(): boolean {\r\n return true;\r\n }\r\n\r\n public override 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<any> = 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._isSubMeshReady(subMesh, useInstances, emissiveTexture);\r\n }\r\n\r\n public override _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 public override _internalCompose(effect: Effect, renderIndex: number): void {\r\n // Texture\r\n this.bindTexturesForCompose(effect);\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 << (8 - this.numStencilBits));\r\n engine.setStencilFunctionMask(255 - ((1 << (8 - this.numStencilBits)) - 1));\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 public override _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 public override shouldRender(): boolean {\r\n return this._meshes && super.shouldRender() ? true : false;\r\n }\r\n\r\n public override _shouldRenderMesh(mesh: Mesh): boolean {\r\n if (this._excludedMeshes && this._excludedMeshes[mesh.uniqueId]) {\r\n return false;\r\n }\r\n\r\n return super.hasMesh(mesh);\r\n }\r\n\r\n public override _addCustomEffectDefines(defines: string[]): void {\r\n defines.push(\"#define HIGHLIGHT\");\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 if (this._mainObjectRendererRenderPassId !== -1 && this._mainObjectRendererRenderPassId !== this._engine.currentRenderPassId) {\r\n return;\r\n }\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 if (this._mainObjectRendererRenderPassId !== -1 && this._mainObjectRendererRenderPassId !== this._engine.currentRenderPassId) {\r\n return;\r\n }\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 public override hasMesh(mesh: AbstractMesh): boolean {\r\n if (!this._meshes || !super.hasMesh(mesh)) {\r\n return false;\r\n }\r\n\r\n return !!this._meshes[mesh.uniqueId];\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._mainObjectRendererRenderPassId !== -1 && this._mainObjectRendererRenderPassId !== this._engine.currentRenderPassId) {\r\n return;\r\n }\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()\r\n .getEngine()\r\n .setStencilFunctionReference(this._instanceGlowingMeshStencilReference << (8 - this.numStencilBits));\r\n }\r\n }\r\n }),\r\n observerDefault: mesh.onAfterRenderObservable.add((mesh: Mesh) => {\r\n if (this._mainObjectRendererRenderPassId !== -1 && this._mainObjectRendererRenderPassId !== this._engine.currentRenderPassId) {\r\n return;\r\n }\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 private _defaultStencilReference(mesh: Mesh) {\r\n mesh.getScene()\r\n .getEngine()\r\n .setStencilFunctionReference(ThinHighlightLayer.NormalMeshStencilReference << (8 - this.numStencilBits));\r\n }\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 public override 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"]}
1
+ {"version":3,"file":"thinHighlightLayer.js","sourceRoot":"","sources":["../../../../dev/core/src/Layers/thinHighlightLayer.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n type Observer,\r\n type Nullable,\r\n type Scene,\r\n type SubMesh,\r\n type AbstractMesh,\r\n type Mesh,\r\n type Effect,\r\n type IThinEffectLayerOptions,\r\n type Color3,\r\n type EffectWrapper,\r\n} from \"core/index\";\r\nimport { Vector2 } from \"../Maths/math.vector\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport { Material } from \"../Materials/material\";\r\nimport { ThinPassPostProcess } from \"../PostProcesses/thinPassPostProcess\";\r\nimport { ThinEffectLayer, ThinGlowBlurPostProcess } from \"./thinEffectLayer\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { Color4 } from \"../Maths/math.color\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { ThinBlurPostProcess } from \"core/PostProcesses/thinBlurPostProcess\";\r\n\r\ninterface IBlurPostProcess extends EffectWrapper {\r\n kernel: number;\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 IThinHighlightLayerOptions extends IThinEffectLayerOptions {\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 * Should we display highlight as a solid stroke? Default: false\r\n */\r\n isStroke?: boolean;\r\n\r\n /**\r\n * Use the GLSL code generation for the shader (even on WebGPU). Default is false\r\n */\r\n forceGLSL?: boolean;\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 * @internal\r\n */\r\nexport class ThinHighlightLayer extends ThinEffectLayer {\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 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 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 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 public get blurVerticalSize(): number {\r\n return this._verticalBlurPostprocess.kernel;\r\n }\r\n\r\n private _instanceGlowingMeshStencilReference = ThinHighlightLayer.GlowingMeshStencilReference++;\r\n\r\n /** @internal */\r\n public override _options: Required<IThinHighlightLayerOptions>;\r\n\r\n private _downSamplePostprocess: ThinPassPostProcess;\r\n private _horizontalBlurPostprocess: IBlurPostProcess;\r\n private _verticalBlurPostprocess: IBlurPostProcess;\r\n\r\n /** @internal */\r\n public _meshes: Nullable<{ [id: string]: Nullable<IHighlightLayerMesh> }> = {};\r\n /** @internal */\r\n public _excludedMeshes: Nullable<{ [id: string]: Nullable<IHighlightLayerExcludedMesh> }> = {};\r\n\r\n /** @internal */\r\n public _mainObjectRendererRenderPassId = -1;\r\n\r\n /**\r\n * Gets the stencil reference value used for the meshes rendered by the highlight layer.\r\n */\r\n public get stencilReference(): number {\r\n return this._instanceGlowingMeshStencilReference << (8 - this.numStencilBits);\r\n }\r\n\r\n /**\r\n * Number of stencil bits used by the highlight layer (default: 8).\r\n * The layer uses the numStencilBits highest bits of the stencil buffer.\r\n */\r\n public numStencilBits = 8;\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 * @param dontCheckIfReady Specifies if the layer should disable checking whether all the post processes are ready (default: false). To save performance, this should be set to true and you should call `isReady` manually before rendering to the layer.\r\n */\r\n constructor(name: string, scene?: Scene, options?: Partial<IThinHighlightLayerOptions>, dontCheckIfReady = false) {\r\n super(name, scene, options !== undefined ? !!options.forceGLSL : false);\r\n\r\n this.neutralColor = ThinHighlightLayer.NeutralColor;\r\n\r\n // Adapt options\r\n this._options = {\r\n mainTextureRatio: 0.5,\r\n blurTextureSizeRatio: 0.5,\r\n mainTextureFixedSize: 0,\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 forceGLSL: false,\r\n mainTextureType: Constants.TEXTURETYPE_UNSIGNED_BYTE,\r\n mainTextureFormat: Constants.TEXTUREFORMAT_RGBA,\r\n isStroke: false,\r\n ...options,\r\n };\r\n\r\n // Initialize the layer\r\n this._init(this._options);\r\n\r\n // Do not render as long as no meshes have been added\r\n this._shouldRender = false;\r\n\r\n if (dontCheckIfReady) {\r\n // When dontCheckIfReady is true, we are in the new ThinXXX layer mode, so we must call _createTextureAndPostProcesses ourselves (it is called by EffectLayer otherwise)\r\n this._createTextureAndPostProcesses();\r\n }\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 protected override async _importShadersAsync() {\r\n if (this._shaderLanguage === ShaderLanguage.WGSL) {\r\n await Promise.all([\r\n import(\"../ShadersWGSL/glowMapMerge.fragment\"),\r\n import(\"../ShadersWGSL/glowMapMerge.vertex\"),\r\n import(\"../ShadersWGSL/glowBlurPostProcess.fragment\"),\r\n ]);\r\n } else {\r\n await Promise.all([import(\"../Shaders/glowMapMerge.fragment\"), import(\"../Shaders/glowMapMerge.vertex\"), import(\"../Shaders/glowBlurPostProcess.fragment\")]);\r\n }\r\n\r\n await super._importShadersAsync();\r\n }\r\n\r\n public override getEffectName(): string {\r\n return ThinHighlightLayer.EffectName;\r\n }\r\n\r\n public override _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 public override _createMergeEffect(): Effect {\r\n return this._engine.createEffect(\r\n \"glowMapMerge\",\r\n [VertexBuffer.PositionKind],\r\n [\"offset\"],\r\n [\"textureSampler\"],\r\n this._options.isStroke ? \"#define STROKE \\n\" : undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n this._shaderLanguage,\r\n this._shadersLoaded\r\n ? undefined\r\n : async () => {\r\n await this._importShadersAsync();\r\n this._shadersLoaded = true;\r\n }\r\n );\r\n }\r\n\r\n public override _createTextureAndPostProcesses(): void {\r\n if (this._options.alphaBlendingMode === Constants.ALPHA_COMBINE) {\r\n this._downSamplePostprocess = new ThinPassPostProcess(\"HighlightLayerPPP\", this._scene.getEngine());\r\n this._horizontalBlurPostprocess = new ThinGlowBlurPostProcess(\"HighlightLayerHBP\", this._scene.getEngine(), new Vector2(1.0, 0), this._options.blurHorizontalSize);\r\n this._verticalBlurPostprocess = new ThinGlowBlurPostProcess(\"HighlightLayerVBP\", this._scene.getEngine(), new Vector2(0, 1.0), this._options.blurVerticalSize);\r\n this._postProcesses = [this._downSamplePostprocess, this._horizontalBlurPostprocess, this._verticalBlurPostprocess];\r\n } else {\r\n this._horizontalBlurPostprocess = new ThinBlurPostProcess(\"HighlightLayerHBP\", this._scene.getEngine(), new Vector2(1.0, 0), this._options.blurHorizontalSize / 2);\r\n this._verticalBlurPostprocess = new ThinBlurPostProcess(\"HighlightLayerVBP\", this._scene.getEngine(), new Vector2(0, 1.0), this._options.blurVerticalSize / 2);\r\n this._postProcesses = [this._horizontalBlurPostprocess, this._verticalBlurPostprocess];\r\n }\r\n }\r\n\r\n public override needStencil(): boolean {\r\n return true;\r\n }\r\n\r\n public override 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<any> = 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._isSubMeshReady(subMesh, useInstances, emissiveTexture);\r\n }\r\n\r\n public override _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 public override _internalCompose(effect: Effect, renderIndex: number): void {\r\n // Texture\r\n this.bindTexturesForCompose(effect);\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 << (8 - this.numStencilBits));\r\n engine.setStencilFunctionMask(255 - ((1 << (8 - this.numStencilBits)) - 1));\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 public override _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 public override shouldRender(): boolean {\r\n return this._meshes && super.shouldRender() ? true : false;\r\n }\r\n\r\n public override _shouldRenderMesh(mesh: Mesh): boolean {\r\n if (this._excludedMeshes && this._excludedMeshes[mesh.uniqueId]) {\r\n return false;\r\n }\r\n\r\n return super.hasMesh(mesh);\r\n }\r\n\r\n public override _addCustomEffectDefines(defines: string[]): void {\r\n defines.push(\"#define HIGHLIGHT\");\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 if (this._mainObjectRendererRenderPassId !== -1 && this._mainObjectRendererRenderPassId !== this._engine.currentRenderPassId) {\r\n return;\r\n }\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 if (this._mainObjectRendererRenderPassId !== -1 && this._mainObjectRendererRenderPassId !== this._engine.currentRenderPassId) {\r\n return;\r\n }\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 public override hasMesh(mesh: AbstractMesh): boolean {\r\n if (!this._meshes || !super.hasMesh(mesh)) {\r\n return false;\r\n }\r\n\r\n return !!this._meshes[mesh.uniqueId];\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._mainObjectRendererRenderPassId !== -1 && this._mainObjectRendererRenderPassId !== this._engine.currentRenderPassId) {\r\n return;\r\n }\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()\r\n .getEngine()\r\n .setStencilFunctionReference(this._instanceGlowingMeshStencilReference << (8 - this.numStencilBits));\r\n }\r\n }\r\n }),\r\n observerDefault: mesh.onAfterRenderObservable.add((mesh: Mesh) => {\r\n if (this._mainObjectRendererRenderPassId !== -1 && this._mainObjectRendererRenderPassId !== this._engine.currentRenderPassId) {\r\n return;\r\n }\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 private _defaultStencilReference(mesh: Mesh) {\r\n mesh.getScene()\r\n .getEngine()\r\n .setStencilFunctionReference(ThinHighlightLayer.NormalMeshStencilReference << (8 - this.numStencilBits));\r\n }\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 public override 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"]}
@@ -355,7 +355,10 @@ export class ThinSelectionOutlineLayer extends ThinEffectLayer {
355
355
  if (!this._shouldRenderMesh(renderingMesh)) {
356
356
  return;
357
357
  }
358
- const hardwareInstancedRendering = batch.hardwareInstancedRendering[subMesh._id] || renderingMesh.hasThinInstances || !!renderingMesh._userInstancedBuffersStorage;
358
+ const hardwareInstancedRendering = batch.hardwareInstancedRendering[subMesh._id] ||
359
+ renderingMesh.hasThinInstances ||
360
+ (!!renderingMesh._userInstancedBuffersStorage &&
361
+ ThinSelectionOutlineLayer.InstanceSelectionIdAttributeName in renderingMesh._userInstancedBuffersStorage.vertexBuffers);
359
362
  this._setEmissiveTextureAndColor(renderingMesh, subMesh, material);
360
363
  this.onBeforeRenderMeshToEffect.notifyObservers(ownerMesh);
361
364
  // selection outline layer is not compatible with custom materials
@@ -432,7 +435,15 @@ export class ThinSelectionOutlineLayer extends ThinEffectLayer {
432
435
  // Clip planes
433
436
  BindClipPlane(effect, material, scene);
434
437
  // Selection ID
435
- const selectionId = this._meshUniqueIdToSelectionId[renderingMesh.uniqueId];
438
+ let selectionId = this._meshUniqueIdToSelectionId[renderingMesh.uniqueId];
439
+ // When using LOD, the rendering mesh is the LOD mesh, not the source mesh.
440
+ // Look up the selection ID from the master (source) mesh.
441
+ if (selectionId === undefined && renderingMesh._masterMesh) {
442
+ selectionId = this._meshUniqueIdToSelectionId[renderingMesh._masterMesh.uniqueId];
443
+ if (selectionId === undefined) {
444
+ selectionId = renderingMesh._masterMesh.instancedBuffers?.[ThinSelectionOutlineLayer.InstanceSelectionIdAttributeName];
445
+ }
446
+ }
436
447
  if (!renderingMesh.hasInstances && !renderingMesh.hasThinInstances && !renderingMesh.isAnInstance && selectionId !== undefined) {
437
448
  effect.setFloat("selectionId", selectionId);
438
449
  }
@@ -477,7 +488,9 @@ export class ThinSelectionOutlineLayer extends ThinEffectLayer {
477
488
  }
478
489
  /** @internal */
479
490
  _shouldRenderMesh(mesh) {
480
- return this.hasMesh(mesh);
491
+ // Use the base class check (renderingGroupId) rather than this.hasMesh,
492
+ // because LOD meshes won't be in _selection but still need to render.
493
+ return super.hasMesh(mesh);
481
494
  }
482
495
  /** @internal */
483
496
  _addCustomEffectDefines(defines) {
@@ -491,8 +504,10 @@ export class ThinSelectionOutlineLayer extends ThinEffectLayer {
491
504
  * @returns true if the mesh will be used
492
505
  */
493
506
  hasMesh(mesh) {
494
- // we control selection as RTT render list
495
- return super.hasMesh(mesh);
507
+ if (!super.hasMesh(mesh) || !this._selection) {
508
+ return false;
509
+ }
510
+ return this._selection.indexOf(mesh) !== -1;
496
511
  }
497
512
  /** @internal */
498
513
  _useMeshMaterial(_mesh) {
@@ -1 +1 @@
1
- {"version":3,"file":"thinSelectionOutlineLayer.js","sourceRoot":"","sources":["../../../../dev/core/src/Layers/thinSelectionOutlineLayer.ts"],"names":[],"mappings":"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","sourcesContent":["import { VertexBuffer } from \"../Buffers/buffer\";\nimport { Camera } from \"../Cameras/camera\";\nimport { Constants } from \"../Engines/constants\";\nimport { type ThinEngine } from \"../Engines/thinEngine\";\nimport { AddClipPlaneUniforms, BindClipPlane, PrepareStringDefinesForClipPlanes } from \"../Materials/clipPlaneMaterialHelper\";\nimport { type Effect, type IEffectCreationOptions } from \"../Materials/effect\";\nimport { EffectFallbacks } from \"../Materials/effectFallbacks\";\nimport { Material } from \"../Materials/material\";\nimport { BindBonesParameters, BindMorphTargetParameters, PrepareDefinesAndAttributesForMorphTargets, PushAttributesForInstances } from \"../Materials/materialHelper.functions\";\nimport { ShaderLanguage } from \"../Materials/shaderLanguage\";\nimport { type BaseTexture } from \"../Materials/Textures/baseTexture\";\nimport { Color3, Color4 } from \"../Maths/math.color\";\nimport { type AbstractMesh } from \"../Meshes/abstractMesh\";\nimport { type InstancedMesh } from \"../Meshes/instancedMesh\";\nimport { type Mesh } from \"../Meshes/mesh\";\nimport { type SubMesh } from \"../Meshes/subMesh\";\nimport { type Scene } from \"../scene\";\nimport { type Nullable } from \"../types\";\nimport { type IThinEffectLayerOptions, ThinEffectLayer } from \"./thinEffectLayer\";\n\n/**\n * Selection outline layer options. This helps customizing the behaviour\n * of the selection outline layer.\n */\nexport interface IThinSelectionOutlineLayerOptions extends IThinEffectLayerOptions {\n /**\n * Use the GLSL code generation for the shader (even on WebGPU). Default is false\n */\n forceGLSL?: boolean;\n\n /**\n * Specifies whether the depth stored is the Z coordinate in camera space.\n */\n storeCameraSpaceZ?: boolean;\n\n /**\n * Outline method to use (default: Constants.OUTLINELAYER_SAMPLING_TRIDIRECTIONAL)\n *\n * @see {@link Constants.OUTLINELAYER_SAMPLING_TRIDIRECTIONAL}\n */\n outlineMethod?: number;\n}\n\n/**\n * @internal\n */\nexport class ThinSelectionOutlineLayer extends ThinEffectLayer {\n /**\n * Effect Name of the layer.\n */\n public static readonly EffectName = \"SelectionOutlineLayer\";\n\n /**\n * Name of the instance selection ID attribute\n * @internal\n */\n public static readonly InstanceSelectionIdAttributeName = \"instanceSelectionId\";\n\n /**\n * The outline color\n */\n public outlineColor: Color3 = new Color3(1, 0.5, 0);\n\n /**\n * The thickness of the edges\n */\n public outlineThickness: number = 2.0;\n\n /**\n * The strength of the occlusion effect (default: 0.8)\n */\n public occlusionStrength: number = 0.8;\n\n /**\n * The occlusion threshold (default: 0.0001)\n */\n public occlusionThreshold: number = 0.0001;\n\n /**\n * The width of the source texture\n */\n public textureWidth: number = 0;\n\n /**\n * The height of the source texture\n */\n public textureHeight: number = 0;\n\n /** @internal */\n public override _options: Required<IThinSelectionOutlineLayerOptions>;\n\n /** @internal */\n public readonly _meshUniqueIdToSelectionId: number[] = [];\n /** @internal */\n public _selection: Nullable<AbstractMesh[]> = [];\n private _nextSelectionId = 1;\n\n /**\n * Instantiates a new selection outline Layer and references it to the scene..\n * @param name The name of the layer\n * @param scene The scene to use the layer in\n * @param options Sets of none mandatory options to use with the layer (see IThinSelectionOutlineLayerOptions for more information)\n * @param dontCheckIfReady Specifies if the layer should disable checking whether all the post processes are ready (default: false). To save performance, this should be set to true and you should call `isReady` manually before rendering to the layer.\n */\n public constructor(name: string, scene?: Scene, options?: Partial<IThinSelectionOutlineLayerOptions>, dontCheckIfReady = false) {\n super(name, scene, options !== undefined ? !!options.forceGLSL : false);\n\n // Adapt options\n this._options = {\n mainTextureRatio: 1.0,\n mainTextureFixedSize: 0,\n alphaBlendingMode: Constants.ALPHA_COMBINE,\n camera: null,\n renderingGroupId: -1,\n forceGLSL: false,\n mainTextureType: Constants.TEXTURETYPE_FLOAT,\n mainTextureFormat: Constants.TEXTUREFORMAT_RG,\n storeCameraSpaceZ: false,\n outlineMethod: Constants.OUTLINELAYER_SAMPLING_TRIDIRECTIONAL,\n ...options,\n };\n\n // Fall back to a supported mask texture type if the device doesn't support rendering to float framebuffers\n // or linear filtering of float textures (e.g. OES_texture_float_linear missing on some iOS versions)\n if (this._options.mainTextureType === Constants.TEXTURETYPE_FLOAT && !(this._engine.getCaps().textureFloatRender && this._engine.getCaps().textureFloatLinearFiltering)) {\n this._options.mainTextureType = Constants.TEXTURETYPE_HALF_FLOAT;\n }\n if (\n this._options.mainTextureType === Constants.TEXTURETYPE_HALF_FLOAT &&\n !(this._engine.getCaps().textureHalfFloatRender && this._engine.getCaps().textureHalfFloatLinearFiltering)\n ) {\n this._options.mainTextureType = Constants.TEXTURETYPE_UNSIGNED_BYTE;\n }\n\n // When using an 8-bit render target, we cannot reliably store camera-space Z in the mask texture:\n // depth would be clamped/quantized, breaking occlusion comparisons. In that case, force-disable\n // storeCameraSpaceZ so the layer falls back to the supported behavior.\n if (this._options.storeCameraSpaceZ && this._options.mainTextureType === Constants.TEXTURETYPE_UNSIGNED_BYTE) {\n this._options.storeCameraSpaceZ = false;\n }\n // set clear color\n this.neutralColor = new Color4(0.0, this._options.storeCameraSpaceZ ? 0.0 : 1.0, 0.0, 1.0);\n\n // Initialize the layer\n this._init(this._options);\n\n // Do not render as long as no meshes have been added\n this._shouldRender = false;\n\n if (dontCheckIfReady) {\n // When dontCheckIfReady is true, we are in the new ThinXXX layer mode, so we must call _createTextureAndPostProcesses ourselves (it is called by EffectLayer otherwise)\n this._createTextureAndPostProcesses();\n }\n }\n\n /**\n * Gets the class name of the effect layer\n * @returns the string with the class name of the effect layer\n */\n public getClassName(): string {\n return \"SelectionOutlineLayer\";\n }\n\n private _isDef(val: any) {\n return val !== void 0 && val !== null;\n }\n\n /** @internal */\n public override _internalIsSubMeshReady(subMesh: SubMesh, useInstances: boolean, _emissiveTexture: Nullable<BaseTexture>): boolean {\n const engine = this._scene.getEngine();\n const mesh = subMesh.getMesh();\n\n const renderingMaterial = mesh._internalAbstractMeshDataInfo._materialForRenderPass?.[engine.currentRenderPassId];\n\n if (renderingMaterial) {\n return renderingMaterial.isReadyForSubMesh(mesh, subMesh, useInstances);\n }\n\n const material = subMesh.getMaterial();\n\n if (!material) {\n return false;\n }\n\n // selection outline layer is not compatible with custom materials\n // if (this._useMeshMaterial(subMesh.getRenderingMesh())) {\n // return material.isReadyForSubMesh(subMesh.getMesh(), subMesh, useInstances);\n // }\n\n const defines: string[] = [];\n\n const attribs = [VertexBuffer.PositionKind];\n\n let uv1 = false;\n let uv2 = false;\n const color = false;\n\n // Alpha test\n if (material.needAlphaTestingForMesh(mesh)) {\n defines.push(\"#define ALPHATEST\");\n if (mesh.isVerticesDataPresent(VertexBuffer.UVKind)) {\n attribs.push(VertexBuffer.UVKind);\n defines.push(\"#define UV1\");\n uv1 = true;\n }\n if (mesh.isVerticesDataPresent(VertexBuffer.UV2Kind)) {\n attribs.push(VertexBuffer.UV2Kind);\n defines.push(\"#define UV2\");\n uv2 = true;\n }\n }\n\n // Bones\n const fallbacks = new EffectFallbacks();\n if (mesh.useBones && mesh.computeBonesUsingShaders) {\n attribs.push(VertexBuffer.MatricesIndicesKind);\n attribs.push(VertexBuffer.MatricesWeightsKind);\n if (mesh.numBoneInfluencers > 4) {\n attribs.push(VertexBuffer.MatricesIndicesExtraKind);\n attribs.push(VertexBuffer.MatricesWeightsExtraKind);\n }\n\n defines.push(\"#define NUM_BONE_INFLUENCERS \" + mesh.numBoneInfluencers);\n\n const skeleton = mesh.skeleton;\n if (skeleton && skeleton.isUsingTextureForMatrices) {\n defines.push(\"#define BONETEXTURE\");\n } else {\n defines.push(\"#define BonesPerMesh \" + (skeleton ? skeleton.bones.length + 1 : 0));\n }\n\n if (mesh.numBoneInfluencers > 0) {\n fallbacks.addCPUSkinningFallback(0, mesh);\n }\n } else {\n defines.push(\"#define NUM_BONE_INFLUENCERS 0\");\n }\n\n // Morph targets\n const numMorphInfluencers = mesh.morphTargetManager\n ? PrepareDefinesAndAttributesForMorphTargets(\n mesh.morphTargetManager,\n defines,\n attribs,\n mesh,\n true, // usePositionMorph\n false, // useNormalMorph\n false, // useTangentMorph\n uv1, // useUVMorph\n uv2, // useUV2Morph\n color // useColorMorph\n )\n : 0;\n\n // Instances\n if (useInstances) {\n defines.push(\"#define INSTANCES\");\n PushAttributesForInstances(attribs);\n if (subMesh.getRenderingMesh().hasThinInstances) {\n defines.push(\"#define THIN_INSTANCES\");\n }\n }\n\n // Baked vertex animations\n const bvaManager = mesh.bakedVertexAnimationManager;\n if (bvaManager && bvaManager.isEnabled) {\n defines.push(\"#define BAKED_VERTEX_ANIMATION_TEXTURE\");\n if (useInstances) {\n attribs.push(\"bakedVertexAnimationSettingsInstanced\");\n }\n }\n\n // ClipPlanes\n PrepareStringDefinesForClipPlanes(material, this._scene, defines);\n\n // Selection ID\n if (useInstances) {\n attribs.push(ThinSelectionOutlineLayer.InstanceSelectionIdAttributeName);\n }\n\n this._addCustomEffectDefines(defines);\n\n // Get correct effect\n const drawWrapper = subMesh._getDrawWrapper(undefined, true)!;\n const cachedDefines = drawWrapper.defines as string;\n const join = defines.join(\"\\n\");\n if (cachedDefines !== join) {\n const uniforms = [\n \"world\",\n \"mBones\",\n \"viewProjection\",\n \"view\",\n \"morphTargetInfluences\",\n \"morphTargetCount\",\n \"boneTextureInfo\",\n \"diffuseMatrix\",\n \"morphTargetTextureInfo\",\n \"morphTargetTextureIndices\",\n \"bakedVertexAnimationSettings\",\n \"bakedVertexAnimationTextureSizeInverted\",\n \"bakedVertexAnimationTime\",\n \"bakedVertexAnimationTexture\",\n \"depthValues\",\n \"selectionId\",\n ];\n\n AddClipPlaneUniforms(uniforms);\n\n drawWrapper.setEffect(\n this._engine.createEffect(\n \"selection\",\n <IEffectCreationOptions>{\n attributes: attribs,\n uniformsNames: uniforms,\n uniformBuffersNames: [],\n samplers: [\"diffuseSampler\", \"boneSampler\", \"morphTargets\", \"bakedVertexAnimationTexture\"],\n defines: join,\n fallbacks: fallbacks,\n onCompiled: null,\n onError: null,\n indexParameters: { maxSimultaneousMorphTargets: numMorphInfluencers },\n shaderLanguage: this._shaderLanguage,\n extraInitializationsAsync: this._shadersLoaded\n ? undefined\n : async () => {\n await this._importShadersAsync();\n this._shadersLoaded = true;\n },\n },\n this._engine\n ),\n join\n );\n }\n\n const effectIsReady = drawWrapper.effect!.isReady();\n\n return effectIsReady && (this._dontCheckIfReady || (!this._dontCheckIfReady && this.isLayerReady()));\n }\n\n protected override async _importShadersAsync(): Promise<void> {\n if (this._shaderLanguage === ShaderLanguage.WGSL) {\n await Promise.all([\n import(\"../ShadersWGSL/selection.vertex\"),\n import(\"../ShadersWGSL/selection.fragment\"),\n import(\"../ShadersWGSL/glowMapMerge.vertex\"),\n import(\"../ShadersWGSL/selectionOutline.fragment\"),\n ]);\n } else {\n await Promise.all([\n import(\"../Shaders/selection.vertex\"),\n import(\"../Shaders/selection.fragment\"),\n import(\"../Shaders/glowMapMerge.vertex\"),\n import(\"../Shaders/selectionOutline.fragment\"),\n ]);\n }\n\n await super._importShadersAsync();\n }\n\n /**\n * Get the effect name of the layer.\n * @returns The effect name\n */\n public override getEffectName(): string {\n return ThinSelectionOutlineLayer.EffectName;\n }\n\n /** @internal */\n public override _createMergeEffect(): Effect {\n const defines: string[] = [];\n switch (this._options.outlineMethod) {\n case Constants.OUTLINELAYER_SAMPLING_TRIDIRECTIONAL:\n defines.push(\"#define OUTLINELAYER_SAMPLING_TRIDIRECTIONAL\");\n break;\n case Constants.OUTLINELAYER_SAMPLING_OCTADIRECTIONAL:\n defines.push(\"#define OUTLINELAYER_SAMPLING_OCTADIRECTIONAL\");\n break;\n }\n const join = defines.join(\"\\n\");\n\n return this._engine.createEffect(\n {\n // glowMapMerge vertex is just a basic vertex shader for drawing a quad. so we reuse it here\n vertex: \"glowMapMerge\",\n // selection outline fragment does computation of outline with alpha channel for blending\n fragment: \"selectionOutline\",\n },\n <IEffectCreationOptions>{\n attributes: [VertexBuffer.PositionKind],\n uniformsNames: [\"screenSize\", \"outlineColor\", \"outlineThickness\", \"occlusionStrength\", \"occlusionThreshold\"],\n samplers: [\"maskSampler\", \"depthSampler\"],\n defines: join,\n fallbacks: null,\n onCompiled: null,\n onError: null,\n shaderLanguage: this._shaderLanguage,\n extraInitializationsAsync: this._shadersLoaded\n ? undefined\n : async () => {\n await this._importShadersAsync();\n this._shadersLoaded = true;\n },\n },\n this._engine\n );\n }\n\n /** @internal */\n public override _createTextureAndPostProcesses(): void {\n // we don't need to create a texture for this layer. since all computation is done in the merge effect\n }\n\n /**\n * Checks for the readiness of the element composing the layer.\n * @param subMesh the mesh to check for\n * @param useInstances specify whether or not to use instances to render the mesh\n * @returns true if ready otherwise, false\n */\n public override isReady(subMesh: SubMesh, useInstances: boolean): boolean {\n const material = subMesh.getMaterial();\n const mesh = subMesh.getRenderingMesh();\n\n if (!material || !mesh || !this._selection) {\n return false;\n }\n\n return super._isSubMeshReady(subMesh, useInstances, null);\n }\n\n /** @internal */\n public override _canRenderMesh(_mesh: AbstractMesh, _material: Material): boolean {\n return true;\n }\n\n protected override _renderSubMesh(subMesh: SubMesh, enableAlphaMode: boolean = false): void {\n if (!this._internalShouldRender()) {\n return;\n }\n\n const material = subMesh.getMaterial();\n const ownerMesh = subMesh.getMesh();\n const replacementMesh = subMesh.getReplacementMesh();\n const renderingMesh = subMesh.getRenderingMesh();\n const effectiveMesh = subMesh.getEffectiveMesh();\n const scene = this._scene;\n const engine = scene.getEngine();\n\n effectiveMesh._internalAbstractMeshDataInfo._isActiveIntermediate = false;\n\n if (!material) {\n return;\n }\n\n // Do not block in blend mode.\n if (!this._canRenderMesh(renderingMesh, material)) {\n return;\n }\n\n // Culling\n let sideOrientation = material._getEffectiveOrientation(renderingMesh);\n const mainDeterminant = effectiveMesh._getWorldMatrixDeterminant();\n if (mainDeterminant < 0) {\n sideOrientation = sideOrientation === Material.ClockWiseSideOrientation ? Material.CounterClockWiseSideOrientation : Material.ClockWiseSideOrientation;\n }\n\n const reverse = sideOrientation === Material.ClockWiseSideOrientation;\n engine.setState(material.backFaceCulling, material.zOffset, undefined, reverse, material.cullBackFaces, undefined, material.zOffsetUnits);\n\n // Managing instances\n const batch = renderingMesh._getInstancesRenderList(subMesh._id, !!replacementMesh);\n if (batch.mustReturn) {\n return;\n }\n\n // Early Exit per mesh\n if (!this._shouldRenderMesh(renderingMesh)) {\n return;\n }\n\n const hardwareInstancedRendering = batch.hardwareInstancedRendering[subMesh._id] || renderingMesh.hasThinInstances || !!renderingMesh._userInstancedBuffersStorage;\n\n this._setEmissiveTextureAndColor(renderingMesh, subMesh, material);\n\n this.onBeforeRenderMeshToEffect.notifyObservers(ownerMesh);\n\n // selection outline layer is not compatible with custom materials\n // if (this._useMeshMaterial(renderingMesh)) {\n // subMesh.getMaterial()!._glowModeEnabled = true;\n // renderingMesh.render(subMesh, enableAlphaMode, replacementMesh || undefined);\n // subMesh.getMaterial()!._glowModeEnabled = false;\n // } else\n if (this._isSubMeshReady(subMesh, hardwareInstancedRendering, this._emissiveTextureAndColor.texture)) {\n const renderingMaterial = effectiveMesh._internalAbstractMeshDataInfo._materialForRenderPass?.[engine.currentRenderPassId];\n\n let drawWrapper = subMesh._getDrawWrapper();\n if (!drawWrapper && renderingMaterial) {\n drawWrapper = renderingMaterial._getDrawWrapper();\n }\n\n if (!drawWrapper) {\n return;\n }\n\n const effect = drawWrapper.effect!;\n\n engine.enableEffect(drawWrapper);\n if (!hardwareInstancedRendering) {\n renderingMesh._bind(subMesh, effect, material.fillMode);\n }\n\n if (!renderingMaterial) {\n effect.setMatrix(\"viewProjection\", scene.getTransformMatrix());\n if (this._options.storeCameraSpaceZ) {\n effect.setMatrix(\"view\", scene.getViewMatrix());\n } else {\n const camera = this.camera || scene.activeCamera;\n if (camera) {\n const cameraIsOrtho = camera.mode === Camera.ORTHOGRAPHIC_CAMERA;\n\n let minZ: number, maxZ: number;\n\n if (cameraIsOrtho) {\n minZ = !engine.useReverseDepthBuffer && engine.isNDCHalfZRange ? 0 : 1;\n maxZ = engine.useReverseDepthBuffer && engine.isNDCHalfZRange ? 0 : 1;\n } else {\n minZ = engine.useReverseDepthBuffer && engine.isNDCHalfZRange ? camera.minZ : engine.isNDCHalfZRange ? 0 : camera.minZ;\n maxZ = engine.useReverseDepthBuffer && engine.isNDCHalfZRange ? 0 : camera.maxZ;\n }\n\n effect.setFloat2(\"depthValues\", minZ, minZ + maxZ);\n }\n }\n effect.setMatrix(\"world\", effectiveMesh.getWorldMatrix());\n } else {\n renderingMaterial.bindForSubMesh(effectiveMesh.getWorldMatrix(), effectiveMesh as Mesh, subMesh);\n }\n\n if (!renderingMaterial) {\n // Alpha test\n if (material && material.needAlphaTestingForMesh(effectiveMesh)) {\n const alphaTexture = material.getAlphaTestTexture();\n if (alphaTexture) {\n effect.setTexture(\"diffuseSampler\", alphaTexture);\n effect.setMatrix(\"diffuseMatrix\", alphaTexture.getTextureMatrix());\n }\n }\n\n // Bones\n BindBonesParameters(renderingMesh, effect);\n\n // Morph targets\n BindMorphTargetParameters(renderingMesh, effect);\n if (renderingMesh.morphTargetManager && renderingMesh.morphTargetManager.isUsingTextureForTargets) {\n renderingMesh.morphTargetManager._bind(effect);\n }\n\n // Baked vertex animations\n const bvaManager = subMesh.getMesh().bakedVertexAnimationManager;\n if (bvaManager && bvaManager.isEnabled) {\n bvaManager.bind(effect, hardwareInstancedRendering);\n }\n\n // Alpha mode\n if (enableAlphaMode) {\n engine.setAlphaMode(material.alphaMode);\n }\n\n // Clip planes\n BindClipPlane(effect, material, scene);\n\n // Selection ID\n const selectionId = this._meshUniqueIdToSelectionId[renderingMesh.uniqueId];\n if (!renderingMesh.hasInstances && !renderingMesh.hasThinInstances && !renderingMesh.isAnInstance && selectionId !== undefined) {\n effect.setFloat(\"selectionId\", selectionId);\n }\n }\n\n // Draw\n renderingMesh._processRendering(effectiveMesh, subMesh, effect, material.fillMode, batch, hardwareInstancedRendering, (isInstance, world) =>\n effect.setMatrix(\"world\", world)\n );\n } else {\n // Need to reset refresh rate of the main map\n this._objectRenderer.resetRefreshCounter();\n }\n\n this.onAfterRenderMeshToEffect.notifyObservers(ownerMesh);\n }\n\n /** @internal */\n public override _internalCompose(effect: Effect, _renderIndex: number): void {\n // Texture\n this.bindTexturesForCompose(effect);\n effect.setFloat2(\"screenSize\", this.textureWidth, this.textureHeight);\n effect.setColor3(\"outlineColor\", this.outlineColor);\n effect.setFloat(\"outlineThickness\", this.outlineThickness);\n effect.setFloat(\"occlusionStrength\", this.occlusionStrength);\n effect.setFloat(\"occlusionThreshold\", this.occlusionThreshold);\n\n // Cache\n const engine = this._engine;\n const previousStencilBuffer = engine.getStencilBuffer();\n\n // Draw order\n engine.setStencilBuffer(false);\n\n engine.drawElementsType(Material.TriangleFillMode, 0, 6);\n\n // Draw order\n engine.setStencilBuffer(previousStencilBuffer);\n }\n\n /** @internal */\n public override _setEmissiveTextureAndColor(_mesh: Mesh, _subMesh: SubMesh, _material: Material): void {\n // we don't use emissive texture or color for this layer\n }\n\n /**\n * Returns true if the layer contains information to display, otherwise false.\n * @returns true if the glow layer should be rendered\n */\n public override shouldRender(): boolean {\n return this._selection && super.shouldRender() ? true : false;\n }\n\n /** @internal */\n public override _shouldRenderMesh(mesh: Mesh): boolean {\n return this.hasMesh(mesh);\n }\n\n /** @internal */\n public override _addCustomEffectDefines(defines: string[]): void {\n if (this._options.storeCameraSpaceZ) {\n defines.push(\"#define STORE_CAMERASPACE_Z\");\n }\n }\n\n /**\n * Determine if a given mesh will be used in the current effect.\n * @param mesh mesh to test\n * @returns true if the mesh will be used\n */\n public override hasMesh(mesh: AbstractMesh): boolean {\n // we control selection as RTT render list\n return super.hasMesh(mesh);\n }\n\n /** @internal */\n public override _useMeshMaterial(_mesh: AbstractMesh): boolean {\n return false;\n }\n\n private _clearMeshSelection(mesh: Mesh): void {\n if (mesh._userInstancedBuffersStorage) {\n const kind = ThinSelectionOutlineLayer.InstanceSelectionIdAttributeName;\n\n // Dispose per-pass VBOs for this layer's own render passes only (WebGPU)\n if (mesh._userInstancedBuffersStorage.renderPasses) {\n for (const passId of this._objectRenderer.renderPassIds) {\n const passVBOs = mesh._userInstancedBuffersStorage.renderPasses[passId];\n if (passVBOs?.[kind]) {\n passVBOs[kind]!.dispose();\n delete passVBOs[kind];\n }\n }\n }\n\n mesh._userInstancedBuffersStorage.vertexBuffers[kind]?.dispose();\n\n const vao = mesh._userInstancedBuffersStorage.vertexArrayObjects?.[kind];\n if (vao) {\n // invalidate VAO is very important to keep sync between VAO and vertex buffers\n (this._engine as ThinEngine).releaseVertexArrayObject(vao);\n delete mesh._userInstancedBuffersStorage.vertexArrayObjects![kind];\n }\n\n delete mesh._userInstancedBuffersStorage.data[kind];\n delete mesh._userInstancedBuffersStorage.vertexBuffers[kind];\n delete mesh._userInstancedBuffersStorage.strides[kind];\n delete mesh._userInstancedBuffersStorage.sizes[kind];\n\n if (Object.keys(mesh._userInstancedBuffersStorage.vertexBuffers).length === 0) {\n mesh._userInstancedBuffersStorage = undefined!;\n }\n }\n if (this._isDef(mesh.instancedBuffers?.[ThinSelectionOutlineLayer.InstanceSelectionIdAttributeName])) {\n delete mesh.instancedBuffers[ThinSelectionOutlineLayer.InstanceSelectionIdAttributeName];\n }\n if (this._selection) {\n const index = this._selection.indexOf(mesh);\n if (~index) {\n this._selection.splice(index, 1);\n }\n }\n }\n\n /**\n * Remove all the meshes currently referenced in the selection outline layer\n */\n public clearSelection(): void {\n if (!this._selection) {\n return;\n }\n\n for (let index = 0; index < this._selection.length; ++index) {\n const mesh = this._selection[index] as Mesh;\n this._clearMeshSelection(mesh);\n if (this._isDef(mesh.instancedBuffers?.[ThinSelectionOutlineLayer.InstanceSelectionIdAttributeName])) {\n delete mesh.instancedBuffers[ThinSelectionOutlineLayer.InstanceSelectionIdAttributeName];\n }\n }\n this._selection.length = 0;\n this._meshUniqueIdToSelectionId.length = 0;\n\n this._nextSelectionId = 1;\n\n this._shouldRender = false;\n }\n\n /**\n * Adds mesh or group of mesh to the current selection\n *\n * If a group of meshes is provided, they will outline as a single unit\n * @param meshOrGroup Meshes to add to the selection\n */\n public addSelection(meshOrGroup: AbstractMesh | AbstractMesh[]): void {\n if (!this._selection) {\n return;\n }\n\n const nextId = this._nextSelectionId;\n\n const group = Array.isArray(meshOrGroup) ? meshOrGroup : [meshOrGroup];\n if (group.length === 0) {\n return;\n }\n\n for (let meshIndex = 0; meshIndex < group.length; ++meshIndex) {\n const mesh = group[meshIndex];\n\n this._selection.push(mesh); // add to render list\n\n if (mesh.hasInstances || mesh.isAnInstance) {\n const sourceMesh = (mesh as InstancedMesh).sourceMesh ?? (mesh as Mesh);\n\n if (!this._isDef(sourceMesh.instancedBuffers?.[ThinSelectionOutlineLayer.InstanceSelectionIdAttributeName])) {\n sourceMesh.registerInstancedBuffer(ThinSelectionOutlineLayer.InstanceSelectionIdAttributeName, 1);\n }\n\n mesh.instancedBuffers[ThinSelectionOutlineLayer.InstanceSelectionIdAttributeName] = nextId;\n } else if (mesh.hasThinInstances) {\n const thinInstanceCount = (mesh as Mesh).thinInstanceCount;\n const selectionIdData = new Float32Array(thinInstanceCount);\n for (let i = 0; i < thinInstanceCount; i++) {\n selectionIdData[i] = nextId;\n }\n (mesh as Mesh).thinInstanceSetBuffer(ThinSelectionOutlineLayer.InstanceSelectionIdAttributeName, selectionIdData, 1);\n } else {\n this._meshUniqueIdToSelectionId[mesh.uniqueId] = nextId;\n }\n }\n this._nextSelectionId += 1;\n\n this._shouldRender = true;\n }\n\n /**\n * Adds mesh or group of mesh to the current selection\n * @param meshOrGroup Meshes to remove from the selection\n */\n\n public removeSelection(meshOrGroup: AbstractMesh | AbstractMesh[]) {\n if (!this._selection) {\n return;\n }\n const group = Array.isArray(meshOrGroup) ? meshOrGroup : [meshOrGroup];\n if (group.length === 0) {\n return;\n }\n for (let i = 0; i < group.length; i++) {\n const mesh = group[i] as Mesh;\n this._clearMeshSelection(mesh);\n delete this._meshUniqueIdToSelectionId[mesh.uniqueId];\n }\n if (!this._selection || !this._selection.length) {\n this._meshUniqueIdToSelectionId.length = 0;\n\n this._nextSelectionId = 1;\n\n this._shouldRender = false;\n }\n }\n\n /**\n * Free any resources and references associated to a mesh.\n * Internal use\n * @param mesh The mesh to free.\n * @internal\n */\n public _disposeMesh(mesh: Mesh): void {\n const selection = this._selection;\n if (!selection) {\n return;\n }\n\n const index = selection.indexOf(mesh);\n if (index !== -1) {\n selection.splice(index, 1);\n\n if (mesh.hasInstances) {\n mesh.removeVerticesData(ThinSelectionOutlineLayer.InstanceSelectionIdAttributeName);\n } else if (mesh.hasThinInstances) {\n (mesh as Mesh).thinInstanceSetBuffer(ThinSelectionOutlineLayer.InstanceSelectionIdAttributeName, null);\n }\n\n if (selection.length === 0) {\n this._shouldRender = false;\n }\n }\n }\n\n /**\n * Dispose the effect layer and free resources.\n */\n public override dispose(): void {\n this.clearSelection();\n this._selection = null;\n\n super.dispose();\n }\n}\n"]}
1
+ {"version":3,"file":"thinSelectionOutlineLayer.js","sourceRoot":"","sources":["../../../../dev/core/src/Layers/thinSelectionOutlineLayer.ts"],"names":[],"mappings":"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","sourcesContent":["import { VertexBuffer } from \"../Buffers/buffer\";\nimport { Camera } from \"../Cameras/camera\";\nimport { Constants } from \"../Engines/constants\";\nimport { type ThinEngine } from \"../Engines/thinEngine\";\nimport { AddClipPlaneUniforms, BindClipPlane, PrepareStringDefinesForClipPlanes } from \"../Materials/clipPlaneMaterialHelper\";\nimport { type Effect, type IEffectCreationOptions } from \"../Materials/effect\";\nimport { EffectFallbacks } from \"../Materials/effectFallbacks\";\nimport { Material } from \"../Materials/material\";\nimport { BindBonesParameters, BindMorphTargetParameters, PrepareDefinesAndAttributesForMorphTargets, PushAttributesForInstances } from \"../Materials/materialHelper.functions\";\nimport { ShaderLanguage } from \"../Materials/shaderLanguage\";\nimport { type BaseTexture } from \"../Materials/Textures/baseTexture\";\nimport { Color3, Color4 } from \"../Maths/math.color\";\nimport { type AbstractMesh } from \"../Meshes/abstractMesh\";\nimport { type InstancedMesh } from \"../Meshes/instancedMesh\";\nimport { type Mesh } from \"../Meshes/mesh\";\nimport { type SubMesh } from \"../Meshes/subMesh\";\nimport { type Scene } from \"../scene\";\nimport { type Nullable } from \"../types\";\nimport { type IThinEffectLayerOptions, ThinEffectLayer } from \"./thinEffectLayer\";\n\n/**\n * Selection outline layer options. This helps customizing the behaviour\n * of the selection outline layer.\n */\nexport interface IThinSelectionOutlineLayerOptions extends IThinEffectLayerOptions {\n /**\n * Use the GLSL code generation for the shader (even on WebGPU). Default is false\n */\n forceGLSL?: boolean;\n\n /**\n * Specifies whether the depth stored is the Z coordinate in camera space.\n */\n storeCameraSpaceZ?: boolean;\n\n /**\n * Outline method to use (default: Constants.OUTLINELAYER_SAMPLING_TRIDIRECTIONAL)\n *\n * @see {@link Constants.OUTLINELAYER_SAMPLING_TRIDIRECTIONAL}\n */\n outlineMethod?: number;\n}\n\n/**\n * @internal\n */\nexport class ThinSelectionOutlineLayer extends ThinEffectLayer {\n /**\n * Effect Name of the layer.\n */\n public static readonly EffectName = \"SelectionOutlineLayer\";\n\n /**\n * Name of the instance selection ID attribute\n * @internal\n */\n public static readonly InstanceSelectionIdAttributeName = \"instanceSelectionId\";\n\n /**\n * The outline color\n */\n public outlineColor: Color3 = new Color3(1, 0.5, 0);\n\n /**\n * The thickness of the edges\n */\n public outlineThickness: number = 2.0;\n\n /**\n * The strength of the occlusion effect (default: 0.8)\n */\n public occlusionStrength: number = 0.8;\n\n /**\n * The occlusion threshold (default: 0.0001)\n */\n public occlusionThreshold: number = 0.0001;\n\n /**\n * The width of the source texture\n */\n public textureWidth: number = 0;\n\n /**\n * The height of the source texture\n */\n public textureHeight: number = 0;\n\n /** @internal */\n public override _options: Required<IThinSelectionOutlineLayerOptions>;\n\n /** @internal */\n public readonly _meshUniqueIdToSelectionId: number[] = [];\n /** @internal */\n public _selection: Nullable<AbstractMesh[]> = [];\n private _nextSelectionId = 1;\n\n /**\n * Instantiates a new selection outline Layer and references it to the scene..\n * @param name The name of the layer\n * @param scene The scene to use the layer in\n * @param options Sets of none mandatory options to use with the layer (see IThinSelectionOutlineLayerOptions for more information)\n * @param dontCheckIfReady Specifies if the layer should disable checking whether all the post processes are ready (default: false). To save performance, this should be set to true and you should call `isReady` manually before rendering to the layer.\n */\n public constructor(name: string, scene?: Scene, options?: Partial<IThinSelectionOutlineLayerOptions>, dontCheckIfReady = false) {\n super(name, scene, options !== undefined ? !!options.forceGLSL : false);\n\n // Adapt options\n this._options = {\n mainTextureRatio: 1.0,\n mainTextureFixedSize: 0,\n alphaBlendingMode: Constants.ALPHA_COMBINE,\n camera: null,\n renderingGroupId: -1,\n forceGLSL: false,\n mainTextureType: Constants.TEXTURETYPE_FLOAT,\n mainTextureFormat: Constants.TEXTUREFORMAT_RG,\n storeCameraSpaceZ: false,\n outlineMethod: Constants.OUTLINELAYER_SAMPLING_TRIDIRECTIONAL,\n ...options,\n };\n\n // Fall back to a supported mask texture type if the device doesn't support rendering to float framebuffers\n // or linear filtering of float textures (e.g. OES_texture_float_linear missing on some iOS versions)\n if (this._options.mainTextureType === Constants.TEXTURETYPE_FLOAT && !(this._engine.getCaps().textureFloatRender && this._engine.getCaps().textureFloatLinearFiltering)) {\n this._options.mainTextureType = Constants.TEXTURETYPE_HALF_FLOAT;\n }\n if (\n this._options.mainTextureType === Constants.TEXTURETYPE_HALF_FLOAT &&\n !(this._engine.getCaps().textureHalfFloatRender && this._engine.getCaps().textureHalfFloatLinearFiltering)\n ) {\n this._options.mainTextureType = Constants.TEXTURETYPE_UNSIGNED_BYTE;\n }\n\n // When using an 8-bit render target, we cannot reliably store camera-space Z in the mask texture:\n // depth would be clamped/quantized, breaking occlusion comparisons. In that case, force-disable\n // storeCameraSpaceZ so the layer falls back to the supported behavior.\n if (this._options.storeCameraSpaceZ && this._options.mainTextureType === Constants.TEXTURETYPE_UNSIGNED_BYTE) {\n this._options.storeCameraSpaceZ = false;\n }\n // set clear color\n this.neutralColor = new Color4(0.0, this._options.storeCameraSpaceZ ? 0.0 : 1.0, 0.0, 1.0);\n\n // Initialize the layer\n this._init(this._options);\n\n // Do not render as long as no meshes have been added\n this._shouldRender = false;\n\n if (dontCheckIfReady) {\n // When dontCheckIfReady is true, we are in the new ThinXXX layer mode, so we must call _createTextureAndPostProcesses ourselves (it is called by EffectLayer otherwise)\n this._createTextureAndPostProcesses();\n }\n }\n\n /**\n * Gets the class name of the effect layer\n * @returns the string with the class name of the effect layer\n */\n public getClassName(): string {\n return \"SelectionOutlineLayer\";\n }\n\n private _isDef(val: any) {\n return val !== void 0 && val !== null;\n }\n\n /** @internal */\n public override _internalIsSubMeshReady(subMesh: SubMesh, useInstances: boolean, _emissiveTexture: Nullable<BaseTexture>): boolean {\n const engine = this._scene.getEngine();\n const mesh = subMesh.getMesh();\n\n const renderingMaterial = mesh._internalAbstractMeshDataInfo._materialForRenderPass?.[engine.currentRenderPassId];\n\n if (renderingMaterial) {\n return renderingMaterial.isReadyForSubMesh(mesh, subMesh, useInstances);\n }\n\n const material = subMesh.getMaterial();\n\n if (!material) {\n return false;\n }\n\n // selection outline layer is not compatible with custom materials\n // if (this._useMeshMaterial(subMesh.getRenderingMesh())) {\n // return material.isReadyForSubMesh(subMesh.getMesh(), subMesh, useInstances);\n // }\n\n const defines: string[] = [];\n\n const attribs = [VertexBuffer.PositionKind];\n\n let uv1 = false;\n let uv2 = false;\n const color = false;\n\n // Alpha test\n if (material.needAlphaTestingForMesh(mesh)) {\n defines.push(\"#define ALPHATEST\");\n if (mesh.isVerticesDataPresent(VertexBuffer.UVKind)) {\n attribs.push(VertexBuffer.UVKind);\n defines.push(\"#define UV1\");\n uv1 = true;\n }\n if (mesh.isVerticesDataPresent(VertexBuffer.UV2Kind)) {\n attribs.push(VertexBuffer.UV2Kind);\n defines.push(\"#define UV2\");\n uv2 = true;\n }\n }\n\n // Bones\n const fallbacks = new EffectFallbacks();\n if (mesh.useBones && mesh.computeBonesUsingShaders) {\n attribs.push(VertexBuffer.MatricesIndicesKind);\n attribs.push(VertexBuffer.MatricesWeightsKind);\n if (mesh.numBoneInfluencers > 4) {\n attribs.push(VertexBuffer.MatricesIndicesExtraKind);\n attribs.push(VertexBuffer.MatricesWeightsExtraKind);\n }\n\n defines.push(\"#define NUM_BONE_INFLUENCERS \" + mesh.numBoneInfluencers);\n\n const skeleton = mesh.skeleton;\n if (skeleton && skeleton.isUsingTextureForMatrices) {\n defines.push(\"#define BONETEXTURE\");\n } else {\n defines.push(\"#define BonesPerMesh \" + (skeleton ? skeleton.bones.length + 1 : 0));\n }\n\n if (mesh.numBoneInfluencers > 0) {\n fallbacks.addCPUSkinningFallback(0, mesh);\n }\n } else {\n defines.push(\"#define NUM_BONE_INFLUENCERS 0\");\n }\n\n // Morph targets\n const numMorphInfluencers = mesh.morphTargetManager\n ? PrepareDefinesAndAttributesForMorphTargets(\n mesh.morphTargetManager,\n defines,\n attribs,\n mesh,\n true, // usePositionMorph\n false, // useNormalMorph\n false, // useTangentMorph\n uv1, // useUVMorph\n uv2, // useUV2Morph\n color // useColorMorph\n )\n : 0;\n\n // Instances\n if (useInstances) {\n defines.push(\"#define INSTANCES\");\n PushAttributesForInstances(attribs);\n if (subMesh.getRenderingMesh().hasThinInstances) {\n defines.push(\"#define THIN_INSTANCES\");\n }\n }\n\n // Baked vertex animations\n const bvaManager = mesh.bakedVertexAnimationManager;\n if (bvaManager && bvaManager.isEnabled) {\n defines.push(\"#define BAKED_VERTEX_ANIMATION_TEXTURE\");\n if (useInstances) {\n attribs.push(\"bakedVertexAnimationSettingsInstanced\");\n }\n }\n\n // ClipPlanes\n PrepareStringDefinesForClipPlanes(material, this._scene, defines);\n\n // Selection ID\n if (useInstances) {\n attribs.push(ThinSelectionOutlineLayer.InstanceSelectionIdAttributeName);\n }\n\n this._addCustomEffectDefines(defines);\n\n // Get correct effect\n const drawWrapper = subMesh._getDrawWrapper(undefined, true)!;\n const cachedDefines = drawWrapper.defines as string;\n const join = defines.join(\"\\n\");\n if (cachedDefines !== join) {\n const uniforms = [\n \"world\",\n \"mBones\",\n \"viewProjection\",\n \"view\",\n \"morphTargetInfluences\",\n \"morphTargetCount\",\n \"boneTextureInfo\",\n \"diffuseMatrix\",\n \"morphTargetTextureInfo\",\n \"morphTargetTextureIndices\",\n \"bakedVertexAnimationSettings\",\n \"bakedVertexAnimationTextureSizeInverted\",\n \"bakedVertexAnimationTime\",\n \"bakedVertexAnimationTexture\",\n \"depthValues\",\n \"selectionId\",\n ];\n\n AddClipPlaneUniforms(uniforms);\n\n drawWrapper.setEffect(\n this._engine.createEffect(\n \"selection\",\n <IEffectCreationOptions>{\n attributes: attribs,\n uniformsNames: uniforms,\n uniformBuffersNames: [],\n samplers: [\"diffuseSampler\", \"boneSampler\", \"morphTargets\", \"bakedVertexAnimationTexture\"],\n defines: join,\n fallbacks: fallbacks,\n onCompiled: null,\n onError: null,\n indexParameters: { maxSimultaneousMorphTargets: numMorphInfluencers },\n shaderLanguage: this._shaderLanguage,\n extraInitializationsAsync: this._shadersLoaded\n ? undefined\n : async () => {\n await this._importShadersAsync();\n this._shadersLoaded = true;\n },\n },\n this._engine\n ),\n join\n );\n }\n\n const effectIsReady = drawWrapper.effect!.isReady();\n\n return effectIsReady && (this._dontCheckIfReady || (!this._dontCheckIfReady && this.isLayerReady()));\n }\n\n protected override async _importShadersAsync(): Promise<void> {\n if (this._shaderLanguage === ShaderLanguage.WGSL) {\n await Promise.all([\n import(\"../ShadersWGSL/selection.vertex\"),\n import(\"../ShadersWGSL/selection.fragment\"),\n import(\"../ShadersWGSL/glowMapMerge.vertex\"),\n import(\"../ShadersWGSL/selectionOutline.fragment\"),\n ]);\n } else {\n await Promise.all([\n import(\"../Shaders/selection.vertex\"),\n import(\"../Shaders/selection.fragment\"),\n import(\"../Shaders/glowMapMerge.vertex\"),\n import(\"../Shaders/selectionOutline.fragment\"),\n ]);\n }\n\n await super._importShadersAsync();\n }\n\n /**\n * Get the effect name of the layer.\n * @returns The effect name\n */\n public override getEffectName(): string {\n return ThinSelectionOutlineLayer.EffectName;\n }\n\n /** @internal */\n public override _createMergeEffect(): Effect {\n const defines: string[] = [];\n switch (this._options.outlineMethod) {\n case Constants.OUTLINELAYER_SAMPLING_TRIDIRECTIONAL:\n defines.push(\"#define OUTLINELAYER_SAMPLING_TRIDIRECTIONAL\");\n break;\n case Constants.OUTLINELAYER_SAMPLING_OCTADIRECTIONAL:\n defines.push(\"#define OUTLINELAYER_SAMPLING_OCTADIRECTIONAL\");\n break;\n }\n const join = defines.join(\"\\n\");\n\n return this._engine.createEffect(\n {\n // glowMapMerge vertex is just a basic vertex shader for drawing a quad. so we reuse it here\n vertex: \"glowMapMerge\",\n // selection outline fragment does computation of outline with alpha channel for blending\n fragment: \"selectionOutline\",\n },\n <IEffectCreationOptions>{\n attributes: [VertexBuffer.PositionKind],\n uniformsNames: [\"screenSize\", \"outlineColor\", \"outlineThickness\", \"occlusionStrength\", \"occlusionThreshold\"],\n samplers: [\"maskSampler\", \"depthSampler\"],\n defines: join,\n fallbacks: null,\n onCompiled: null,\n onError: null,\n shaderLanguage: this._shaderLanguage,\n extraInitializationsAsync: this._shadersLoaded\n ? undefined\n : async () => {\n await this._importShadersAsync();\n this._shadersLoaded = true;\n },\n },\n this._engine\n );\n }\n\n /** @internal */\n public override _createTextureAndPostProcesses(): void {\n // we don't need to create a texture for this layer. since all computation is done in the merge effect\n }\n\n /**\n * Checks for the readiness of the element composing the layer.\n * @param subMesh the mesh to check for\n * @param useInstances specify whether or not to use instances to render the mesh\n * @returns true if ready otherwise, false\n */\n public override isReady(subMesh: SubMesh, useInstances: boolean): boolean {\n const material = subMesh.getMaterial();\n const mesh = subMesh.getRenderingMesh();\n\n if (!material || !mesh || !this._selection) {\n return false;\n }\n\n return super._isSubMeshReady(subMesh, useInstances, null);\n }\n\n /** @internal */\n public override _canRenderMesh(_mesh: AbstractMesh, _material: Material): boolean {\n return true;\n }\n\n protected override _renderSubMesh(subMesh: SubMesh, enableAlphaMode: boolean = false): void {\n if (!this._internalShouldRender()) {\n return;\n }\n\n const material = subMesh.getMaterial();\n const ownerMesh = subMesh.getMesh();\n const replacementMesh = subMesh.getReplacementMesh();\n const renderingMesh = subMesh.getRenderingMesh();\n const effectiveMesh = subMesh.getEffectiveMesh();\n const scene = this._scene;\n const engine = scene.getEngine();\n\n effectiveMesh._internalAbstractMeshDataInfo._isActiveIntermediate = false;\n\n if (!material) {\n return;\n }\n\n // Do not block in blend mode.\n if (!this._canRenderMesh(renderingMesh, material)) {\n return;\n }\n\n // Culling\n let sideOrientation = material._getEffectiveOrientation(renderingMesh);\n const mainDeterminant = effectiveMesh._getWorldMatrixDeterminant();\n if (mainDeterminant < 0) {\n sideOrientation = sideOrientation === Material.ClockWiseSideOrientation ? Material.CounterClockWiseSideOrientation : Material.ClockWiseSideOrientation;\n }\n\n const reverse = sideOrientation === Material.ClockWiseSideOrientation;\n engine.setState(material.backFaceCulling, material.zOffset, undefined, reverse, material.cullBackFaces, undefined, material.zOffsetUnits);\n\n // Managing instances\n const batch = renderingMesh._getInstancesRenderList(subMesh._id, !!replacementMesh);\n if (batch.mustReturn) {\n return;\n }\n\n // Early Exit per mesh\n if (!this._shouldRenderMesh(renderingMesh)) {\n return;\n }\n\n const hardwareInstancedRendering =\n batch.hardwareInstancedRendering[subMesh._id] ||\n renderingMesh.hasThinInstances ||\n (!!renderingMesh._userInstancedBuffersStorage &&\n ThinSelectionOutlineLayer.InstanceSelectionIdAttributeName in renderingMesh._userInstancedBuffersStorage.vertexBuffers);\n\n this._setEmissiveTextureAndColor(renderingMesh, subMesh, material);\n\n this.onBeforeRenderMeshToEffect.notifyObservers(ownerMesh);\n\n // selection outline layer is not compatible with custom materials\n // if (this._useMeshMaterial(renderingMesh)) {\n // subMesh.getMaterial()!._glowModeEnabled = true;\n // renderingMesh.render(subMesh, enableAlphaMode, replacementMesh || undefined);\n // subMesh.getMaterial()!._glowModeEnabled = false;\n // } else\n if (this._isSubMeshReady(subMesh, hardwareInstancedRendering, this._emissiveTextureAndColor.texture)) {\n const renderingMaterial = effectiveMesh._internalAbstractMeshDataInfo._materialForRenderPass?.[engine.currentRenderPassId];\n\n let drawWrapper = subMesh._getDrawWrapper();\n if (!drawWrapper && renderingMaterial) {\n drawWrapper = renderingMaterial._getDrawWrapper();\n }\n\n if (!drawWrapper) {\n return;\n }\n\n const effect = drawWrapper.effect!;\n\n engine.enableEffect(drawWrapper);\n if (!hardwareInstancedRendering) {\n renderingMesh._bind(subMesh, effect, material.fillMode);\n }\n\n if (!renderingMaterial) {\n effect.setMatrix(\"viewProjection\", scene.getTransformMatrix());\n if (this._options.storeCameraSpaceZ) {\n effect.setMatrix(\"view\", scene.getViewMatrix());\n } else {\n const camera = this.camera || scene.activeCamera;\n if (camera) {\n const cameraIsOrtho = camera.mode === Camera.ORTHOGRAPHIC_CAMERA;\n\n let minZ: number, maxZ: number;\n\n if (cameraIsOrtho) {\n minZ = !engine.useReverseDepthBuffer && engine.isNDCHalfZRange ? 0 : 1;\n maxZ = engine.useReverseDepthBuffer && engine.isNDCHalfZRange ? 0 : 1;\n } else {\n minZ = engine.useReverseDepthBuffer && engine.isNDCHalfZRange ? camera.minZ : engine.isNDCHalfZRange ? 0 : camera.minZ;\n maxZ = engine.useReverseDepthBuffer && engine.isNDCHalfZRange ? 0 : camera.maxZ;\n }\n\n effect.setFloat2(\"depthValues\", minZ, minZ + maxZ);\n }\n }\n effect.setMatrix(\"world\", effectiveMesh.getWorldMatrix());\n } else {\n renderingMaterial.bindForSubMesh(effectiveMesh.getWorldMatrix(), effectiveMesh as Mesh, subMesh);\n }\n\n if (!renderingMaterial) {\n // Alpha test\n if (material && material.needAlphaTestingForMesh(effectiveMesh)) {\n const alphaTexture = material.getAlphaTestTexture();\n if (alphaTexture) {\n effect.setTexture(\"diffuseSampler\", alphaTexture);\n effect.setMatrix(\"diffuseMatrix\", alphaTexture.getTextureMatrix());\n }\n }\n\n // Bones\n BindBonesParameters(renderingMesh, effect);\n\n // Morph targets\n BindMorphTargetParameters(renderingMesh, effect);\n if (renderingMesh.morphTargetManager && renderingMesh.morphTargetManager.isUsingTextureForTargets) {\n renderingMesh.morphTargetManager._bind(effect);\n }\n\n // Baked vertex animations\n const bvaManager = subMesh.getMesh().bakedVertexAnimationManager;\n if (bvaManager && bvaManager.isEnabled) {\n bvaManager.bind(effect, hardwareInstancedRendering);\n }\n\n // Alpha mode\n if (enableAlphaMode) {\n engine.setAlphaMode(material.alphaMode);\n }\n\n // Clip planes\n BindClipPlane(effect, material, scene);\n\n // Selection ID\n let selectionId = this._meshUniqueIdToSelectionId[renderingMesh.uniqueId];\n // When using LOD, the rendering mesh is the LOD mesh, not the source mesh.\n // Look up the selection ID from the master (source) mesh.\n if (selectionId === undefined && renderingMesh._masterMesh) {\n selectionId = this._meshUniqueIdToSelectionId[renderingMesh._masterMesh.uniqueId];\n if (selectionId === undefined) {\n selectionId = renderingMesh._masterMesh.instancedBuffers?.[ThinSelectionOutlineLayer.InstanceSelectionIdAttributeName];\n }\n }\n if (!renderingMesh.hasInstances && !renderingMesh.hasThinInstances && !renderingMesh.isAnInstance && selectionId !== undefined) {\n effect.setFloat(\"selectionId\", selectionId);\n }\n }\n\n // Draw\n renderingMesh._processRendering(effectiveMesh, subMesh, effect, material.fillMode, batch, hardwareInstancedRendering, (isInstance, world) =>\n effect.setMatrix(\"world\", world)\n );\n } else {\n // Need to reset refresh rate of the main map\n this._objectRenderer.resetRefreshCounter();\n }\n\n this.onAfterRenderMeshToEffect.notifyObservers(ownerMesh);\n }\n\n /** @internal */\n public override _internalCompose(effect: Effect, _renderIndex: number): void {\n // Texture\n this.bindTexturesForCompose(effect);\n effect.setFloat2(\"screenSize\", this.textureWidth, this.textureHeight);\n effect.setColor3(\"outlineColor\", this.outlineColor);\n effect.setFloat(\"outlineThickness\", this.outlineThickness);\n effect.setFloat(\"occlusionStrength\", this.occlusionStrength);\n effect.setFloat(\"occlusionThreshold\", this.occlusionThreshold);\n\n // Cache\n const engine = this._engine;\n const previousStencilBuffer = engine.getStencilBuffer();\n\n // Draw order\n engine.setStencilBuffer(false);\n\n engine.drawElementsType(Material.TriangleFillMode, 0, 6);\n\n // Draw order\n engine.setStencilBuffer(previousStencilBuffer);\n }\n\n /** @internal */\n public override _setEmissiveTextureAndColor(_mesh: Mesh, _subMesh: SubMesh, _material: Material): void {\n // we don't use emissive texture or color for this layer\n }\n\n /**\n * Returns true if the layer contains information to display, otherwise false.\n * @returns true if the glow layer should be rendered\n */\n public override shouldRender(): boolean {\n return this._selection && super.shouldRender() ? true : false;\n }\n\n /** @internal */\n public override _shouldRenderMesh(mesh: Mesh): boolean {\n // Use the base class check (renderingGroupId) rather than this.hasMesh,\n // because LOD meshes won't be in _selection but still need to render.\n return super.hasMesh(mesh);\n }\n\n /** @internal */\n public override _addCustomEffectDefines(defines: string[]): void {\n if (this._options.storeCameraSpaceZ) {\n defines.push(\"#define STORE_CAMERASPACE_Z\");\n }\n }\n\n /**\n * Determine if a given mesh will be used in the current effect.\n * @param mesh mesh to test\n * @returns true if the mesh will be used\n */\n public override hasMesh(mesh: AbstractMesh): boolean {\n if (!super.hasMesh(mesh) || !this._selection) {\n return false;\n }\n return this._selection.indexOf(mesh) !== -1;\n }\n\n /** @internal */\n public override _useMeshMaterial(_mesh: AbstractMesh): boolean {\n return false;\n }\n\n private _clearMeshSelection(mesh: Mesh): void {\n if (mesh._userInstancedBuffersStorage) {\n const kind = ThinSelectionOutlineLayer.InstanceSelectionIdAttributeName;\n\n // Dispose per-pass VBOs for this layer's own render passes only (WebGPU)\n if (mesh._userInstancedBuffersStorage.renderPasses) {\n for (const passId of this._objectRenderer.renderPassIds) {\n const passVBOs = mesh._userInstancedBuffersStorage.renderPasses[passId];\n if (passVBOs?.[kind]) {\n passVBOs[kind]!.dispose();\n delete passVBOs[kind];\n }\n }\n }\n\n mesh._userInstancedBuffersStorage.vertexBuffers[kind]?.dispose();\n\n const vao = mesh._userInstancedBuffersStorage.vertexArrayObjects?.[kind];\n if (vao) {\n // invalidate VAO is very important to keep sync between VAO and vertex buffers\n (this._engine as ThinEngine).releaseVertexArrayObject(vao);\n delete mesh._userInstancedBuffersStorage.vertexArrayObjects![kind];\n }\n\n delete mesh._userInstancedBuffersStorage.data[kind];\n delete mesh._userInstancedBuffersStorage.vertexBuffers[kind];\n delete mesh._userInstancedBuffersStorage.strides[kind];\n delete mesh._userInstancedBuffersStorage.sizes[kind];\n\n if (Object.keys(mesh._userInstancedBuffersStorage.vertexBuffers).length === 0) {\n mesh._userInstancedBuffersStorage = undefined!;\n }\n }\n if (this._isDef(mesh.instancedBuffers?.[ThinSelectionOutlineLayer.InstanceSelectionIdAttributeName])) {\n delete mesh.instancedBuffers[ThinSelectionOutlineLayer.InstanceSelectionIdAttributeName];\n }\n if (this._selection) {\n const index = this._selection.indexOf(mesh);\n if (~index) {\n this._selection.splice(index, 1);\n }\n }\n }\n\n /**\n * Remove all the meshes currently referenced in the selection outline layer\n */\n public clearSelection(): void {\n if (!this._selection) {\n return;\n }\n\n for (let index = 0; index < this._selection.length; ++index) {\n const mesh = this._selection[index] as Mesh;\n this._clearMeshSelection(mesh);\n if (this._isDef(mesh.instancedBuffers?.[ThinSelectionOutlineLayer.InstanceSelectionIdAttributeName])) {\n delete mesh.instancedBuffers[ThinSelectionOutlineLayer.InstanceSelectionIdAttributeName];\n }\n }\n this._selection.length = 0;\n this._meshUniqueIdToSelectionId.length = 0;\n\n this._nextSelectionId = 1;\n\n this._shouldRender = false;\n }\n\n /**\n * Adds mesh or group of mesh to the current selection\n *\n * If a group of meshes is provided, they will outline as a single unit\n * @param meshOrGroup Meshes to add to the selection\n */\n public addSelection(meshOrGroup: AbstractMesh | AbstractMesh[]): void {\n if (!this._selection) {\n return;\n }\n\n const nextId = this._nextSelectionId;\n\n const group = Array.isArray(meshOrGroup) ? meshOrGroup : [meshOrGroup];\n if (group.length === 0) {\n return;\n }\n\n for (let meshIndex = 0; meshIndex < group.length; ++meshIndex) {\n const mesh = group[meshIndex];\n\n this._selection.push(mesh); // add to render list\n\n if (mesh.hasInstances || mesh.isAnInstance) {\n const sourceMesh = (mesh as InstancedMesh).sourceMesh ?? (mesh as Mesh);\n\n if (!this._isDef(sourceMesh.instancedBuffers?.[ThinSelectionOutlineLayer.InstanceSelectionIdAttributeName])) {\n sourceMesh.registerInstancedBuffer(ThinSelectionOutlineLayer.InstanceSelectionIdAttributeName, 1);\n }\n\n mesh.instancedBuffers[ThinSelectionOutlineLayer.InstanceSelectionIdAttributeName] = nextId;\n } else if (mesh.hasThinInstances) {\n const thinInstanceCount = (mesh as Mesh).thinInstanceCount;\n const selectionIdData = new Float32Array(thinInstanceCount);\n for (let i = 0; i < thinInstanceCount; i++) {\n selectionIdData[i] = nextId;\n }\n (mesh as Mesh).thinInstanceSetBuffer(ThinSelectionOutlineLayer.InstanceSelectionIdAttributeName, selectionIdData, 1);\n } else {\n this._meshUniqueIdToSelectionId[mesh.uniqueId] = nextId;\n }\n }\n this._nextSelectionId += 1;\n\n this._shouldRender = true;\n }\n\n /**\n * Adds mesh or group of mesh to the current selection\n * @param meshOrGroup Meshes to remove from the selection\n */\n\n public removeSelection(meshOrGroup: AbstractMesh | AbstractMesh[]) {\n if (!this._selection) {\n return;\n }\n const group = Array.isArray(meshOrGroup) ? meshOrGroup : [meshOrGroup];\n if (group.length === 0) {\n return;\n }\n for (let i = 0; i < group.length; i++) {\n const mesh = group[i] as Mesh;\n this._clearMeshSelection(mesh);\n delete this._meshUniqueIdToSelectionId[mesh.uniqueId];\n }\n if (!this._selection || !this._selection.length) {\n this._meshUniqueIdToSelectionId.length = 0;\n\n this._nextSelectionId = 1;\n\n this._shouldRender = false;\n }\n }\n\n /**\n * Free any resources and references associated to a mesh.\n * Internal use\n * @param mesh The mesh to free.\n * @internal\n */\n public _disposeMesh(mesh: Mesh): void {\n const selection = this._selection;\n if (!selection) {\n return;\n }\n\n const index = selection.indexOf(mesh);\n if (index !== -1) {\n selection.splice(index, 1);\n\n if (mesh.hasInstances) {\n mesh.removeVerticesData(ThinSelectionOutlineLayer.InstanceSelectionIdAttributeName);\n } else if (mesh.hasThinInstances) {\n (mesh as Mesh).thinInstanceSetBuffer(ThinSelectionOutlineLayer.InstanceSelectionIdAttributeName, null);\n }\n\n if (selection.length === 0) {\n this._shouldRender = false;\n }\n }\n }\n\n /**\n * Dispose the effect layer and free resources.\n */\n public override dispose(): void {\n this.clearSelection();\n this._selection = null;\n\n super.dispose();\n }\n}\n"]}
@@ -824,6 +824,9 @@ __decorate([
824
824
  __decorate([
825
825
  serialize()
826
826
  ], BaseTexture.prototype, "is2DArray", null);
827
+ __decorate([
828
+ serialize()
829
+ ], BaseTexture.prototype, "gammaSpace", null);
827
830
  __decorate([
828
831
  serialize()
829
832
  ], BaseTexture.prototype, "currentGammaSpace", null);