@babylonjs/core 6.49.0 → 7.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Animations/runtimeAnimation.js +10 -3
- package/Animations/runtimeAnimation.js.map +1 -1
- package/Compute/computeEffect.d.ts +24 -2
- package/Compute/computeEffect.js +5 -9
- package/Compute/computeEffect.js.map +1 -1
- package/Compute/computeShader.d.ts +4 -4
- package/Compute/computeShader.js +1 -1
- package/Compute/computeShader.js.map +1 -1
- package/Engines/Extensions/engine.computeShader.d.ts +7 -2
- package/Engines/Extensions/engine.computeShader.js.map +1 -1
- package/Engines/Extensions/engine.multiRender.js +1 -1
- package/Engines/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/Extensions/engine.renderTarget.js +12 -2
- package/Engines/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.computeShader.js +1 -1
- package/Engines/WebGPU/Extensions/engine.computeShader.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.js +1 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTarget.js +5 -2
- package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/WebGPU/webgpuClearQuad.d.ts +2 -2
- package/Engines/WebGPU/webgpuClearQuad.js +8 -3
- package/Engines/WebGPU/webgpuClearQuad.js.map +1 -1
- package/Engines/WebGPU/webgpuHardwareTexture.js +1 -0
- package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessor.js +15 -0
- package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +4 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureManager.d.ts +1 -1
- package/Engines/WebGPU/webgpuTextureManager.js +6 -6
- package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
- package/Engines/nativeEngine.d.ts +1 -0
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.d.ts +1 -0
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/renderTargetWrapper.d.ts +8 -0
- package/Engines/renderTargetWrapper.js +14 -1
- package/Engines/renderTargetWrapper.js.map +1 -1
- package/Engines/thinEngine.d.ts +6 -7
- package/Engines/thinEngine.js +25 -11
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.d.ts +5 -2
- package/Engines/webgpuEngine.js +19 -8
- package/Engines/webgpuEngine.js.map +1 -1
- package/Materials/Node/Blocks/Dual/textureBlock.js +5 -0
- package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +2 -0
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
- package/Materials/Node/Blocks/addBlock.d.ts +2 -15
- package/Materials/Node/Blocks/addBlock.js +4 -32
- package/Materials/Node/Blocks/addBlock.js.map +1 -1
- package/Materials/Node/Blocks/baseMathBlock.d.ts +26 -0
- package/Materials/Node/Blocks/baseMathBlock.js +84 -0
- package/Materials/Node/Blocks/baseMathBlock.js.map +1 -0
- package/Materials/Node/Blocks/divideBlock.d.ts +2 -15
- package/Materials/Node/Blocks/divideBlock.js +4 -32
- package/Materials/Node/Blocks/divideBlock.js.map +1 -1
- package/Materials/Node/Blocks/multiplyBlock.d.ts +2 -15
- package/Materials/Node/Blocks/multiplyBlock.js +4 -32
- package/Materials/Node/Blocks/multiplyBlock.js.map +1 -1
- package/Materials/Node/Blocks/subtractBlock.d.ts +2 -15
- package/Materials/Node/Blocks/subtractBlock.js +4 -32
- package/Materials/Node/Blocks/subtractBlock.js.map +1 -1
- package/Materials/Node/nodeMaterialBlockConnectionPoint.d.ts +4 -0
- package/Materials/Node/nodeMaterialBlockConnectionPoint.js +7 -0
- package/Materials/Node/nodeMaterialBlockConnectionPoint.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildState.js +1 -1
- package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.d.ts +6 -23
- package/Materials/Textures/renderTargetTexture.js +10 -6
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/Textures/texture.d.ts +5 -2
- package/Materials/Textures/texture.js +10 -5
- package/Materials/Textures/texture.js.map +1 -1
- package/Materials/Textures/textureCreationOptions.d.ts +1 -0
- package/Materials/Textures/textureCreationOptions.js.map +1 -1
- package/Materials/effect.d.ts +37 -2
- package/Materials/effect.js +10 -14
- package/Materials/effect.js.map +1 -1
- package/Materials/shaderMaterial.d.ts +5 -9
- package/Materials/shaderMaterial.js +2 -6
- package/Materials/shaderMaterial.js.map +1 -1
- package/Meshes/Builders/ribbonBuilder.js +32 -28
- package/Meshes/Builders/ribbonBuilder.js.map +1 -1
- package/Meshes/GreasedLine/greasedLineBaseMesh.d.ts +4 -3
- package/Meshes/GreasedLine/greasedLineBaseMesh.js +1 -1
- package/Meshes/GreasedLine/greasedLineBaseMesh.js.map +1 -1
- package/Meshes/GreasedLine/greasedLineMesh.d.ts +0 -2
- package/Meshes/GreasedLine/greasedLineMesh.js +85 -77
- package/Meshes/GreasedLine/greasedLineMesh.js.map +1 -1
- package/Meshes/GreasedLine/greasedLineRibbonMesh.js +9 -3
- package/Meshes/GreasedLine/greasedLineRibbonMesh.js.map +1 -1
- package/Meshes/Node/Blocks/mathBlock.d.ts +6 -0
- package/Meshes/Node/Blocks/mathBlock.js +95 -23
- package/Meshes/Node/Blocks/mathBlock.js.map +1 -1
- package/Meshes/Node/nodeGeometryBlockConnectionPoint.d.ts +4 -0
- package/Meshes/Node/nodeGeometryBlockConnectionPoint.js +7 -0
- package/Meshes/Node/nodeGeometryBlockConnectionPoint.js.map +1 -1
- package/Misc/greasedLineTools.d.ts +6 -0
- package/Misc/greasedLineTools.js +21 -0
- package/Misc/greasedLineTools.js.map +1 -1
- package/Rendering/reflectiveShadowMap.js +1 -1
- package/Rendering/reflectiveShadowMap.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockSubSurface.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
- package/Shaders/ShadersInclude/pbrDebug.js +2 -0
- package/Shaders/ShadersInclude/pbrDebug.js.map +1 -1
- package/ShadersWGSL/clearQuad.fragment.js +11 -0
- package/ShadersWGSL/clearQuad.fragment.js.map +1 -0
- package/ShadersWGSL/clearQuad.vertex.js +22 -0
- package/ShadersWGSL/clearQuad.vertex.js.map +1 -0
- package/node.js +1 -6
- package/node.js.map +1 -1
- package/package.json +1 -1
- package/Shaders/clearQuad.fragment.js +0 -10
- package/Shaders/clearQuad.fragment.js.map +0 -1
- package/Shaders/clearQuad.vertex.js +0 -19
- package/Shaders/clearQuad.vertex.js.map +0 -1
- /package/{Shaders → ShadersWGSL}/clearQuad.fragment.d.ts +0 -0
- /package/{Shaders → ShadersWGSL}/clearQuad.vertex.d.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeMaterialBlockConnectionPoint.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Node/nodeMaterialBlockConnectionPoint.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlockConnectionPointTypes } from \"./Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport { NodeMaterialBlockTargets } from \"./Enums/nodeMaterialBlockTargets\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { InputBlock } from \"./Blocks/Input/inputBlock\";\r\nimport { Observable } from \"../../Misc/observable\";\r\nimport type { NodeMaterialBlock } from \"./nodeMaterialBlock\";\r\n\r\n/**\r\n * Enum used to define the compatibility state between two connection points\r\n */\r\nexport enum NodeMaterialConnectionPointCompatibilityStates {\r\n /** Points are compatibles */\r\n Compatible,\r\n /** Points are incompatible because of their types */\r\n TypeIncompatible,\r\n /** Points are incompatible because of their targets (vertex vs fragment) */\r\n TargetIncompatible,\r\n /** Points are incompatible because they are in the same hierarchy **/\r\n HierarchyIssue,\r\n}\r\n\r\n/**\r\n * Defines the direction of a connection point\r\n */\r\nexport enum NodeMaterialConnectionPointDirection {\r\n /** Input */\r\n Input,\r\n /** Output */\r\n Output,\r\n}\r\n\r\n/**\r\n * Defines a connection point for a block\r\n */\r\nexport class NodeMaterialConnectionPoint {\r\n /**\r\n * Checks if two types are equivalent\r\n * @param type1 type 1 to check\r\n * @param type2 type 2 to check\r\n * @returns true if both types are equivalent, else false\r\n */\r\n public static AreEquivalentTypes(type1: number, type2: number): boolean {\r\n switch (type1) {\r\n case NodeMaterialBlockConnectionPointTypes.Vector3: {\r\n if (type2 === NodeMaterialBlockConnectionPointTypes.Color3) {\r\n return true;\r\n }\r\n break;\r\n }\r\n case NodeMaterialBlockConnectionPointTypes.Vector4: {\r\n if (type2 === NodeMaterialBlockConnectionPointTypes.Color4) {\r\n return true;\r\n }\r\n break;\r\n }\r\n case NodeMaterialBlockConnectionPointTypes.Color3: {\r\n if (type2 === NodeMaterialBlockConnectionPointTypes.Vector3) {\r\n return true;\r\n }\r\n break;\r\n }\r\n case NodeMaterialBlockConnectionPointTypes.Color4: {\r\n if (type2 === NodeMaterialBlockConnectionPointTypes.Vector4) {\r\n return true;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /** @internal */\r\n public _ownerBlock: NodeMaterialBlock;\r\n /** @internal */\r\n public _connectedPoint: Nullable<NodeMaterialConnectionPoint> = null;\r\n\r\n private _endpoints = new Array<NodeMaterialConnectionPoint>();\r\n private _associatedVariableName: string;\r\n private _direction: NodeMaterialConnectionPointDirection;\r\n\r\n /** @internal */\r\n public _typeConnectionSource: Nullable<NodeMaterialConnectionPoint> = null;\r\n\r\n /** @internal */\r\n public _defaultConnectionPointType: Nullable<NodeMaterialBlockConnectionPointTypes> = null;\r\n\r\n /** @internal */\r\n public _linkedConnectionSource: Nullable<NodeMaterialConnectionPoint> = null;\r\n\r\n /** @internal */\r\n public _acceptedConnectionPointType: Nullable<NodeMaterialConnectionPoint> = null;\r\n\r\n private _type = NodeMaterialBlockConnectionPointTypes.Float;\r\n\r\n /** @internal */\r\n public _enforceAssociatedVariableName = false;\r\n\r\n /** Gets the direction of the point */\r\n public get direction() {\r\n return this._direction;\r\n }\r\n\r\n /** Indicates that this connection point needs dual validation before being connected to another point */\r\n public needDualDirectionValidation: boolean = false;\r\n\r\n /**\r\n * Gets or sets the additional types supported by this connection point\r\n */\r\n public acceptedConnectionPointTypes: NodeMaterialBlockConnectionPointTypes[] = [];\r\n\r\n /**\r\n * Gets or sets the additional types excluded by this connection point\r\n */\r\n public excludedConnectionPointTypes: NodeMaterialBlockConnectionPointTypes[] = [];\r\n\r\n /**\r\n * Observable triggered when this point is connected\r\n */\r\n public onConnectionObservable = new Observable<NodeMaterialConnectionPoint>();\r\n\r\n /**\r\n * Gets or sets the associated variable name in the shader\r\n */\r\n public get associatedVariableName(): string {\r\n if (this._ownerBlock.isInput) {\r\n return (this._ownerBlock as InputBlock).associatedVariableName;\r\n }\r\n\r\n if ((!this._enforceAssociatedVariableName || !this._associatedVariableName) && this._connectedPoint) {\r\n return this._connectedPoint.associatedVariableName;\r\n }\r\n\r\n return this._associatedVariableName;\r\n }\r\n\r\n public set associatedVariableName(value: string) {\r\n this._associatedVariableName = value;\r\n }\r\n\r\n /** Get the inner type (ie AutoDetect for instance instead of the inferred one) */\r\n public get innerType() {\r\n if (this._linkedConnectionSource && this._linkedConnectionSource.isConnected) {\r\n return this.type;\r\n }\r\n return this._type;\r\n }\r\n\r\n /**\r\n * Gets or sets the connection point type (default is float)\r\n */\r\n public get type(): NodeMaterialBlockConnectionPointTypes {\r\n if (this._type === NodeMaterialBlockConnectionPointTypes.AutoDetect) {\r\n if (this._ownerBlock.isInput) {\r\n return (this._ownerBlock as InputBlock).type;\r\n }\r\n\r\n if (this._connectedPoint) {\r\n return this._connectedPoint.type;\r\n }\r\n\r\n if (this._linkedConnectionSource && this._linkedConnectionSource.isConnected) {\r\n return this._linkedConnectionSource.type;\r\n }\r\n }\r\n\r\n if (this._type === NodeMaterialBlockConnectionPointTypes.BasedOnInput) {\r\n if (this._typeConnectionSource) {\r\n if (!this._typeConnectionSource.isConnected && this._defaultConnectionPointType) {\r\n return this._defaultConnectionPointType;\r\n }\r\n return this._typeConnectionSource.type;\r\n } else if (this._defaultConnectionPointType) {\r\n return this._defaultConnectionPointType;\r\n }\r\n }\r\n\r\n return this._type;\r\n }\r\n\r\n public set type(value: NodeMaterialBlockConnectionPointTypes) {\r\n this._type = value;\r\n }\r\n\r\n /**\r\n * Gets or sets the connection point name\r\n */\r\n public name: string;\r\n\r\n /**\r\n * Gets or sets the connection point name\r\n */\r\n public displayName: string;\r\n\r\n /**\r\n * Gets or sets a boolean indicating that this connection point can be omitted\r\n */\r\n public isOptional: boolean;\r\n\r\n /**\r\n * Gets or sets a boolean indicating that this connection point is exposed on a frame\r\n */\r\n public isExposedOnFrame: boolean = false;\r\n\r\n /**\r\n * Gets or sets number indicating the position that the port is exposed to on a frame\r\n */\r\n public exposedPortPosition: number = -1;\r\n\r\n /**\r\n * Gets or sets a string indicating that this uniform must be defined under a #ifdef\r\n */\r\n public define: string;\r\n\r\n /** @internal */\r\n public _prioritizeVertex = false;\r\n\r\n private _target: NodeMaterialBlockTargets = NodeMaterialBlockTargets.VertexAndFragment;\r\n\r\n /** Gets or sets the target of that connection point */\r\n public get target(): NodeMaterialBlockTargets {\r\n if (!this._prioritizeVertex || !this._ownerBlock) {\r\n return this._target;\r\n }\r\n\r\n if (this._target !== NodeMaterialBlockTargets.VertexAndFragment) {\r\n return this._target;\r\n }\r\n\r\n if (this._ownerBlock.target === NodeMaterialBlockTargets.Fragment) {\r\n return NodeMaterialBlockTargets.Fragment;\r\n }\r\n\r\n return NodeMaterialBlockTargets.Vertex;\r\n }\r\n\r\n public set target(value: NodeMaterialBlockTargets) {\r\n this._target = value;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that the current point is connected to another NodeMaterialBlock\r\n */\r\n public get isConnected(): boolean {\r\n return this.connectedPoint !== null || this.hasEndpoints;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that the current point is connected to an input block\r\n */\r\n public get isConnectedToInputBlock(): boolean {\r\n return this.connectedPoint !== null && this.connectedPoint.ownerBlock.isInput;\r\n }\r\n\r\n /**\r\n * Gets a the connected input block (if any)\r\n */\r\n public get connectInputBlock(): Nullable<InputBlock> {\r\n if (!this.isConnectedToInputBlock) {\r\n return null;\r\n }\r\n\r\n return this.connectedPoint!.ownerBlock as InputBlock;\r\n }\r\n\r\n /** Get the other side of the connection (if any) */\r\n public get connectedPoint(): Nullable<NodeMaterialConnectionPoint> {\r\n return this._connectedPoint;\r\n }\r\n\r\n /** Get the block that owns this connection point */\r\n public get ownerBlock(): NodeMaterialBlock {\r\n return this._ownerBlock;\r\n }\r\n\r\n /** Get the block connected on the other side of this connection (if any) */\r\n public get sourceBlock(): Nullable<NodeMaterialBlock> {\r\n if (!this._connectedPoint) {\r\n return null;\r\n }\r\n\r\n return this._connectedPoint.ownerBlock;\r\n }\r\n\r\n /** Get the block connected on the endpoints of this connection (if any) */\r\n public get connectedBlocks(): Array<NodeMaterialBlock> {\r\n if (this._endpoints.length === 0) {\r\n return [];\r\n }\r\n\r\n return this._endpoints.map((e) => e.ownerBlock);\r\n }\r\n\r\n /** Gets the list of connected endpoints */\r\n public get endpoints() {\r\n return this._endpoints;\r\n }\r\n\r\n /** Gets a boolean indicating if that output point is connected to at least one input */\r\n public get hasEndpoints(): boolean {\r\n return this._endpoints && this._endpoints.length > 0;\r\n }\r\n\r\n /** Gets a boolean indicating that this connection has a path to the vertex output*/\r\n public get isDirectlyConnectedToVertexOutput(): boolean {\r\n if (!this.hasEndpoints) {\r\n return false;\r\n }\r\n\r\n for (const endpoint of this._endpoints) {\r\n if (endpoint.ownerBlock.target === NodeMaterialBlockTargets.Vertex) {\r\n return true;\r\n }\r\n\r\n if (endpoint.ownerBlock.target === NodeMaterialBlockTargets.Neutral || endpoint.ownerBlock.target === NodeMaterialBlockTargets.VertexAndFragment) {\r\n if (endpoint.ownerBlock.outputs.some((o) => o.isDirectlyConnectedToVertexOutput)) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /** Gets a boolean indicating that this connection will be used in the vertex shader */\r\n public get isConnectedInVertexShader(): boolean {\r\n if (this.target === NodeMaterialBlockTargets.Vertex) {\r\n return true;\r\n }\r\n\r\n if (!this.hasEndpoints) {\r\n return false;\r\n }\r\n\r\n for (const endpoint of this._endpoints) {\r\n if (endpoint.ownerBlock.target === NodeMaterialBlockTargets.Vertex) {\r\n return true;\r\n }\r\n\r\n if (endpoint.target === NodeMaterialBlockTargets.Vertex) {\r\n return true;\r\n }\r\n\r\n if (endpoint.ownerBlock.target === NodeMaterialBlockTargets.Neutral || endpoint.ownerBlock.target === NodeMaterialBlockTargets.VertexAndFragment) {\r\n if (endpoint.ownerBlock.outputs.some((o) => o.isConnectedInVertexShader)) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /** Gets a boolean indicating that this connection will be used in the fragment shader */\r\n public get isConnectedInFragmentShader(): boolean {\r\n if (this.target === NodeMaterialBlockTargets.Fragment) {\r\n return true;\r\n }\r\n\r\n if (!this.hasEndpoints) {\r\n return false;\r\n }\r\n\r\n for (const endpoint of this._endpoints) {\r\n if (endpoint.ownerBlock.target === NodeMaterialBlockTargets.Fragment) {\r\n return true;\r\n }\r\n\r\n if (endpoint.ownerBlock.target === NodeMaterialBlockTargets.Neutral || endpoint.ownerBlock.target === NodeMaterialBlockTargets.VertexAndFragment) {\r\n if (endpoint.ownerBlock.isConnectedInFragmentShader()) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Creates a block suitable to be used as an input for this input point.\r\n * If null is returned, a block based on the point type will be created.\r\n * @returns The returned string parameter is the name of the output point of NodeMaterialBlock (first parameter of the returned array) that can be connected to the input\r\n */\r\n public createCustomInputBlock(): Nullable<[NodeMaterialBlock, string]> {\r\n return null;\r\n }\r\n\r\n /**\r\n * Creates a new connection point\r\n * @param name defines the connection point name\r\n * @param ownerBlock defines the block hosting this connection point\r\n * @param direction defines the direction of the connection point\r\n */\r\n public constructor(name: string, ownerBlock: NodeMaterialBlock, direction: NodeMaterialConnectionPointDirection) {\r\n this._ownerBlock = ownerBlock;\r\n this.name = name;\r\n this._direction = direction;\r\n }\r\n\r\n /**\r\n * Gets the current class name e.g. \"NodeMaterialConnectionPoint\"\r\n * @returns the class name\r\n */\r\n public getClassName(): string {\r\n return \"NodeMaterialConnectionPoint\";\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if the current point can be connected to another point\r\n * @param connectionPoint defines the other connection point\r\n * @returns a boolean\r\n */\r\n public canConnectTo(connectionPoint: NodeMaterialConnectionPoint) {\r\n return this.checkCompatibilityState(connectionPoint) === NodeMaterialConnectionPointCompatibilityStates.Compatible;\r\n }\r\n\r\n /**\r\n * Gets a number indicating if the current point can be connected to another point\r\n * @param connectionPoint defines the other connection point\r\n * @returns a number defining the compatibility state\r\n */\r\n public checkCompatibilityState(connectionPoint: NodeMaterialConnectionPoint): NodeMaterialConnectionPointCompatibilityStates {\r\n const ownerBlock = this._ownerBlock;\r\n const otherBlock = connectionPoint.ownerBlock;\r\n\r\n if (ownerBlock.target === NodeMaterialBlockTargets.Fragment) {\r\n // Let's check we are not going reverse\r\n\r\n if (otherBlock.target === NodeMaterialBlockTargets.Vertex) {\r\n return NodeMaterialConnectionPointCompatibilityStates.TargetIncompatible;\r\n }\r\n\r\n for (const output of otherBlock.outputs) {\r\n if (output.ownerBlock.target != NodeMaterialBlockTargets.Neutral && output.isConnectedInVertexShader) {\r\n return NodeMaterialConnectionPointCompatibilityStates.TargetIncompatible;\r\n }\r\n }\r\n }\r\n\r\n if (this.type !== connectionPoint.type && connectionPoint.innerType !== NodeMaterialBlockConnectionPointTypes.AutoDetect) {\r\n // Equivalents\r\n if (NodeMaterialConnectionPoint.AreEquivalentTypes(this.type, connectionPoint.type)) {\r\n return NodeMaterialConnectionPointCompatibilityStates.Compatible;\r\n }\r\n\r\n // Accepted types\r\n if (\r\n (connectionPoint.acceptedConnectionPointTypes && connectionPoint.acceptedConnectionPointTypes.indexOf(this.type) !== -1) ||\r\n (connectionPoint._acceptedConnectionPointType && NodeMaterialConnectionPoint.AreEquivalentTypes(connectionPoint._acceptedConnectionPointType.type, this.type))\r\n ) {\r\n return NodeMaterialConnectionPointCompatibilityStates.Compatible;\r\n } else {\r\n return NodeMaterialConnectionPointCompatibilityStates.TypeIncompatible;\r\n }\r\n }\r\n\r\n // Excluded\r\n if (connectionPoint.excludedConnectionPointTypes && connectionPoint.excludedConnectionPointTypes.indexOf(this.type) !== -1) {\r\n return NodeMaterialConnectionPointCompatibilityStates.TypeIncompatible;\r\n }\r\n\r\n // Check hierarchy\r\n let targetBlock = otherBlock;\r\n let sourceBlock = ownerBlock;\r\n if (this.direction === NodeMaterialConnectionPointDirection.Input) {\r\n targetBlock = ownerBlock;\r\n sourceBlock = otherBlock;\r\n }\r\n\r\n if (targetBlock.isAnAncestorOf(sourceBlock)) {\r\n return NodeMaterialConnectionPointCompatibilityStates.HierarchyIssue;\r\n }\r\n\r\n return NodeMaterialConnectionPointCompatibilityStates.Compatible;\r\n }\r\n\r\n /**\r\n * Connect this point to another connection point\r\n * @param connectionPoint defines the other connection point\r\n * @param ignoreConstraints defines if the system will ignore connection type constraints (default is false)\r\n * @returns the current connection point\r\n */\r\n public connectTo(connectionPoint: NodeMaterialConnectionPoint, ignoreConstraints = false): NodeMaterialConnectionPoint {\r\n if (!ignoreConstraints && !this.canConnectTo(connectionPoint)) {\r\n // eslint-disable-next-line no-throw-literal\r\n throw \"Cannot connect these two connectors.\";\r\n }\r\n\r\n this._endpoints.push(connectionPoint);\r\n connectionPoint._connectedPoint = this;\r\n\r\n this._enforceAssociatedVariableName = false;\r\n\r\n this.onConnectionObservable.notifyObservers(connectionPoint);\r\n connectionPoint.onConnectionObservable.notifyObservers(this);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Disconnect this point from one of his endpoint\r\n * @param endpoint defines the other connection point\r\n * @returns the current connection point\r\n */\r\n public disconnectFrom(endpoint: NodeMaterialConnectionPoint): NodeMaterialConnectionPoint {\r\n const index = this._endpoints.indexOf(endpoint);\r\n\r\n if (index === -1) {\r\n return this;\r\n }\r\n\r\n this._endpoints.splice(index, 1);\r\n endpoint._connectedPoint = null;\r\n this._enforceAssociatedVariableName = false;\r\n endpoint._enforceAssociatedVariableName = false;\r\n return this;\r\n }\r\n\r\n /**\r\n * Fill the list of excluded connection point types with all types other than those passed in the parameter\r\n * @param mask Types (ORed values of NodeMaterialBlockConnectionPointTypes) that are allowed, and thus will not be pushed to the excluded list\r\n */\r\n public addExcludedConnectionPointFromAllowedTypes(mask: number): void {\r\n let bitmask = 1;\r\n while (bitmask < NodeMaterialBlockConnectionPointTypes.All) {\r\n if (!(mask & bitmask)) {\r\n this.excludedConnectionPointTypes.push(bitmask);\r\n }\r\n bitmask = bitmask << 1;\r\n }\r\n }\r\n\r\n /**\r\n * Serializes this point in a JSON representation\r\n * @param isInput defines if the connection point is an input (default is true)\r\n * @returns the serialized point object\r\n */\r\n public serialize(isInput = true): any {\r\n const serializationObject: any = {};\r\n\r\n serializationObject.name = this.name;\r\n serializationObject.displayName = this.displayName;\r\n\r\n if (isInput && this.connectedPoint) {\r\n serializationObject.inputName = this.name;\r\n serializationObject.targetBlockId = this.connectedPoint.ownerBlock.uniqueId;\r\n serializationObject.targetConnectionName = this.connectedPoint.name;\r\n serializationObject.isExposedOnFrame = true;\r\n serializationObject.exposedPortPosition = this.exposedPortPosition;\r\n }\r\n\r\n if (this.isExposedOnFrame || this.exposedPortPosition >= 0) {\r\n serializationObject.isExposedOnFrame = true;\r\n serializationObject.exposedPortPosition = this.exposedPortPosition;\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Release resources\r\n */\r\n public dispose() {\r\n this.onConnectionObservable.clear();\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"nodeMaterialBlockConnectionPoint.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Node/nodeMaterialBlockConnectionPoint.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlockConnectionPointTypes } from \"./Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport { NodeMaterialBlockTargets } from \"./Enums/nodeMaterialBlockTargets\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { InputBlock } from \"./Blocks/Input/inputBlock\";\r\nimport { Observable } from \"../../Misc/observable\";\r\nimport type { NodeMaterialBlock } from \"./nodeMaterialBlock\";\r\n\r\n/**\r\n * Enum used to define the compatibility state between two connection points\r\n */\r\nexport enum NodeMaterialConnectionPointCompatibilityStates {\r\n /** Points are compatibles */\r\n Compatible,\r\n /** Points are incompatible because of their types */\r\n TypeIncompatible,\r\n /** Points are incompatible because of their targets (vertex vs fragment) */\r\n TargetIncompatible,\r\n /** Points are incompatible because they are in the same hierarchy **/\r\n HierarchyIssue,\r\n}\r\n\r\n/**\r\n * Defines the direction of a connection point\r\n */\r\nexport enum NodeMaterialConnectionPointDirection {\r\n /** Input */\r\n Input,\r\n /** Output */\r\n Output,\r\n}\r\n\r\n/**\r\n * Defines a connection point for a block\r\n */\r\nexport class NodeMaterialConnectionPoint {\r\n /**\r\n * Checks if two types are equivalent\r\n * @param type1 type 1 to check\r\n * @param type2 type 2 to check\r\n * @returns true if both types are equivalent, else false\r\n */\r\n public static AreEquivalentTypes(type1: number, type2: number): boolean {\r\n switch (type1) {\r\n case NodeMaterialBlockConnectionPointTypes.Vector3: {\r\n if (type2 === NodeMaterialBlockConnectionPointTypes.Color3) {\r\n return true;\r\n }\r\n break;\r\n }\r\n case NodeMaterialBlockConnectionPointTypes.Vector4: {\r\n if (type2 === NodeMaterialBlockConnectionPointTypes.Color4) {\r\n return true;\r\n }\r\n break;\r\n }\r\n case NodeMaterialBlockConnectionPointTypes.Color3: {\r\n if (type2 === NodeMaterialBlockConnectionPointTypes.Vector3) {\r\n return true;\r\n }\r\n break;\r\n }\r\n case NodeMaterialBlockConnectionPointTypes.Color4: {\r\n if (type2 === NodeMaterialBlockConnectionPointTypes.Vector4) {\r\n return true;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /** @internal */\r\n public _ownerBlock: NodeMaterialBlock;\r\n /** @internal */\r\n public _connectedPoint: Nullable<NodeMaterialConnectionPoint> = null;\r\n\r\n private _endpoints = new Array<NodeMaterialConnectionPoint>();\r\n private _associatedVariableName: string;\r\n private _direction: NodeMaterialConnectionPointDirection;\r\n\r\n /** @internal */\r\n public _typeConnectionSource: Nullable<NodeMaterialConnectionPoint> = null;\r\n\r\n /** @internal */\r\n public _defaultConnectionPointType: Nullable<NodeMaterialBlockConnectionPointTypes> = null;\r\n\r\n /** @internal */\r\n public _linkedConnectionSource: Nullable<NodeMaterialConnectionPoint> = null;\r\n\r\n /** @internal */\r\n public _acceptedConnectionPointType: Nullable<NodeMaterialConnectionPoint> = null;\r\n\r\n private _type = NodeMaterialBlockConnectionPointTypes.Float;\r\n\r\n /** @internal */\r\n public _enforceAssociatedVariableName = false;\r\n\r\n /** Gets the direction of the point */\r\n public get direction() {\r\n return this._direction;\r\n }\r\n\r\n /** Indicates that this connection point needs dual validation before being connected to another point */\r\n public needDualDirectionValidation: boolean = false;\r\n\r\n /**\r\n * Gets or sets the additional types supported by this connection point\r\n */\r\n public acceptedConnectionPointTypes: NodeMaterialBlockConnectionPointTypes[] = [];\r\n\r\n /**\r\n * Gets or sets the additional types excluded by this connection point\r\n */\r\n public excludedConnectionPointTypes: NodeMaterialBlockConnectionPointTypes[] = [];\r\n\r\n /**\r\n * Observable triggered when this point is connected\r\n */\r\n public onConnectionObservable = new Observable<NodeMaterialConnectionPoint>();\r\n\r\n /**\r\n * Observable triggered when this point is disconnected\r\n */\r\n public onDisconnectionObservable = new Observable<NodeMaterialConnectionPoint>();\r\n\r\n /**\r\n * Gets or sets the associated variable name in the shader\r\n */\r\n public get associatedVariableName(): string {\r\n if (this._ownerBlock.isInput) {\r\n return (this._ownerBlock as InputBlock).associatedVariableName;\r\n }\r\n\r\n if ((!this._enforceAssociatedVariableName || !this._associatedVariableName) && this._connectedPoint) {\r\n return this._connectedPoint.associatedVariableName;\r\n }\r\n\r\n return this._associatedVariableName;\r\n }\r\n\r\n public set associatedVariableName(value: string) {\r\n this._associatedVariableName = value;\r\n }\r\n\r\n /** Get the inner type (ie AutoDetect for instance instead of the inferred one) */\r\n public get innerType() {\r\n if (this._linkedConnectionSource && this._linkedConnectionSource.isConnected) {\r\n return this.type;\r\n }\r\n return this._type;\r\n }\r\n\r\n /**\r\n * Gets or sets the connection point type (default is float)\r\n */\r\n public get type(): NodeMaterialBlockConnectionPointTypes {\r\n if (this._type === NodeMaterialBlockConnectionPointTypes.AutoDetect) {\r\n if (this._ownerBlock.isInput) {\r\n return (this._ownerBlock as InputBlock).type;\r\n }\r\n\r\n if (this._connectedPoint) {\r\n return this._connectedPoint.type;\r\n }\r\n\r\n if (this._linkedConnectionSource && this._linkedConnectionSource.isConnected) {\r\n return this._linkedConnectionSource.type;\r\n }\r\n }\r\n\r\n if (this._type === NodeMaterialBlockConnectionPointTypes.BasedOnInput) {\r\n if (this._typeConnectionSource) {\r\n if (!this._typeConnectionSource.isConnected && this._defaultConnectionPointType) {\r\n return this._defaultConnectionPointType;\r\n }\r\n return this._typeConnectionSource.type;\r\n } else if (this._defaultConnectionPointType) {\r\n return this._defaultConnectionPointType;\r\n }\r\n }\r\n\r\n return this._type;\r\n }\r\n\r\n public set type(value: NodeMaterialBlockConnectionPointTypes) {\r\n this._type = value;\r\n }\r\n\r\n /**\r\n * Gets or sets the connection point name\r\n */\r\n public name: string;\r\n\r\n /**\r\n * Gets or sets the connection point name\r\n */\r\n public displayName: string;\r\n\r\n /**\r\n * Gets or sets a boolean indicating that this connection point can be omitted\r\n */\r\n public isOptional: boolean;\r\n\r\n /**\r\n * Gets or sets a boolean indicating that this connection point is exposed on a frame\r\n */\r\n public isExposedOnFrame: boolean = false;\r\n\r\n /**\r\n * Gets or sets number indicating the position that the port is exposed to on a frame\r\n */\r\n public exposedPortPosition: number = -1;\r\n\r\n /**\r\n * Gets or sets a string indicating that this uniform must be defined under a #ifdef\r\n */\r\n public define: string;\r\n\r\n /** @internal */\r\n public _prioritizeVertex = false;\r\n\r\n private _target: NodeMaterialBlockTargets = NodeMaterialBlockTargets.VertexAndFragment;\r\n\r\n /** Gets or sets the target of that connection point */\r\n public get target(): NodeMaterialBlockTargets {\r\n if (!this._prioritizeVertex || !this._ownerBlock) {\r\n return this._target;\r\n }\r\n\r\n if (this._target !== NodeMaterialBlockTargets.VertexAndFragment) {\r\n return this._target;\r\n }\r\n\r\n if (this._ownerBlock.target === NodeMaterialBlockTargets.Fragment) {\r\n return NodeMaterialBlockTargets.Fragment;\r\n }\r\n\r\n return NodeMaterialBlockTargets.Vertex;\r\n }\r\n\r\n public set target(value: NodeMaterialBlockTargets) {\r\n this._target = value;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that the current point is connected to another NodeMaterialBlock\r\n */\r\n public get isConnected(): boolean {\r\n return this.connectedPoint !== null || this.hasEndpoints;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that the current point is connected to an input block\r\n */\r\n public get isConnectedToInputBlock(): boolean {\r\n return this.connectedPoint !== null && this.connectedPoint.ownerBlock.isInput;\r\n }\r\n\r\n /**\r\n * Gets a the connected input block (if any)\r\n */\r\n public get connectInputBlock(): Nullable<InputBlock> {\r\n if (!this.isConnectedToInputBlock) {\r\n return null;\r\n }\r\n\r\n return this.connectedPoint!.ownerBlock as InputBlock;\r\n }\r\n\r\n /** Get the other side of the connection (if any) */\r\n public get connectedPoint(): Nullable<NodeMaterialConnectionPoint> {\r\n return this._connectedPoint;\r\n }\r\n\r\n /** Get the block that owns this connection point */\r\n public get ownerBlock(): NodeMaterialBlock {\r\n return this._ownerBlock;\r\n }\r\n\r\n /** Get the block connected on the other side of this connection (if any) */\r\n public get sourceBlock(): Nullable<NodeMaterialBlock> {\r\n if (!this._connectedPoint) {\r\n return null;\r\n }\r\n\r\n return this._connectedPoint.ownerBlock;\r\n }\r\n\r\n /** Get the block connected on the endpoints of this connection (if any) */\r\n public get connectedBlocks(): Array<NodeMaterialBlock> {\r\n if (this._endpoints.length === 0) {\r\n return [];\r\n }\r\n\r\n return this._endpoints.map((e) => e.ownerBlock);\r\n }\r\n\r\n /** Gets the list of connected endpoints */\r\n public get endpoints() {\r\n return this._endpoints;\r\n }\r\n\r\n /** Gets a boolean indicating if that output point is connected to at least one input */\r\n public get hasEndpoints(): boolean {\r\n return this._endpoints && this._endpoints.length > 0;\r\n }\r\n\r\n /** Gets a boolean indicating that this connection has a path to the vertex output*/\r\n public get isDirectlyConnectedToVertexOutput(): boolean {\r\n if (!this.hasEndpoints) {\r\n return false;\r\n }\r\n\r\n for (const endpoint of this._endpoints) {\r\n if (endpoint.ownerBlock.target === NodeMaterialBlockTargets.Vertex) {\r\n return true;\r\n }\r\n\r\n if (endpoint.ownerBlock.target === NodeMaterialBlockTargets.Neutral || endpoint.ownerBlock.target === NodeMaterialBlockTargets.VertexAndFragment) {\r\n if (endpoint.ownerBlock.outputs.some((o) => o.isDirectlyConnectedToVertexOutput)) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /** Gets a boolean indicating that this connection will be used in the vertex shader */\r\n public get isConnectedInVertexShader(): boolean {\r\n if (this.target === NodeMaterialBlockTargets.Vertex) {\r\n return true;\r\n }\r\n\r\n if (!this.hasEndpoints) {\r\n return false;\r\n }\r\n\r\n for (const endpoint of this._endpoints) {\r\n if (endpoint.ownerBlock.target === NodeMaterialBlockTargets.Vertex) {\r\n return true;\r\n }\r\n\r\n if (endpoint.target === NodeMaterialBlockTargets.Vertex) {\r\n return true;\r\n }\r\n\r\n if (endpoint.ownerBlock.target === NodeMaterialBlockTargets.Neutral || endpoint.ownerBlock.target === NodeMaterialBlockTargets.VertexAndFragment) {\r\n if (endpoint.ownerBlock.outputs.some((o) => o.isConnectedInVertexShader)) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /** Gets a boolean indicating that this connection will be used in the fragment shader */\r\n public get isConnectedInFragmentShader(): boolean {\r\n if (this.target === NodeMaterialBlockTargets.Fragment) {\r\n return true;\r\n }\r\n\r\n if (!this.hasEndpoints) {\r\n return false;\r\n }\r\n\r\n for (const endpoint of this._endpoints) {\r\n if (endpoint.ownerBlock.target === NodeMaterialBlockTargets.Fragment) {\r\n return true;\r\n }\r\n\r\n if (endpoint.ownerBlock.target === NodeMaterialBlockTargets.Neutral || endpoint.ownerBlock.target === NodeMaterialBlockTargets.VertexAndFragment) {\r\n if (endpoint.ownerBlock.isConnectedInFragmentShader()) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Creates a block suitable to be used as an input for this input point.\r\n * If null is returned, a block based on the point type will be created.\r\n * @returns The returned string parameter is the name of the output point of NodeMaterialBlock (first parameter of the returned array) that can be connected to the input\r\n */\r\n public createCustomInputBlock(): Nullable<[NodeMaterialBlock, string]> {\r\n return null;\r\n }\r\n\r\n /**\r\n * Creates a new connection point\r\n * @param name defines the connection point name\r\n * @param ownerBlock defines the block hosting this connection point\r\n * @param direction defines the direction of the connection point\r\n */\r\n public constructor(name: string, ownerBlock: NodeMaterialBlock, direction: NodeMaterialConnectionPointDirection) {\r\n this._ownerBlock = ownerBlock;\r\n this.name = name;\r\n this._direction = direction;\r\n }\r\n\r\n /**\r\n * Gets the current class name e.g. \"NodeMaterialConnectionPoint\"\r\n * @returns the class name\r\n */\r\n public getClassName(): string {\r\n return \"NodeMaterialConnectionPoint\";\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if the current point can be connected to another point\r\n * @param connectionPoint defines the other connection point\r\n * @returns a boolean\r\n */\r\n public canConnectTo(connectionPoint: NodeMaterialConnectionPoint) {\r\n return this.checkCompatibilityState(connectionPoint) === NodeMaterialConnectionPointCompatibilityStates.Compatible;\r\n }\r\n\r\n /**\r\n * Gets a number indicating if the current point can be connected to another point\r\n * @param connectionPoint defines the other connection point\r\n * @returns a number defining the compatibility state\r\n */\r\n public checkCompatibilityState(connectionPoint: NodeMaterialConnectionPoint): NodeMaterialConnectionPointCompatibilityStates {\r\n const ownerBlock = this._ownerBlock;\r\n const otherBlock = connectionPoint.ownerBlock;\r\n\r\n if (ownerBlock.target === NodeMaterialBlockTargets.Fragment) {\r\n // Let's check we are not going reverse\r\n\r\n if (otherBlock.target === NodeMaterialBlockTargets.Vertex) {\r\n return NodeMaterialConnectionPointCompatibilityStates.TargetIncompatible;\r\n }\r\n\r\n for (const output of otherBlock.outputs) {\r\n if (output.ownerBlock.target != NodeMaterialBlockTargets.Neutral && output.isConnectedInVertexShader) {\r\n return NodeMaterialConnectionPointCompatibilityStates.TargetIncompatible;\r\n }\r\n }\r\n }\r\n\r\n if (this.type !== connectionPoint.type && connectionPoint.innerType !== NodeMaterialBlockConnectionPointTypes.AutoDetect) {\r\n // Equivalents\r\n if (NodeMaterialConnectionPoint.AreEquivalentTypes(this.type, connectionPoint.type)) {\r\n return NodeMaterialConnectionPointCompatibilityStates.Compatible;\r\n }\r\n\r\n // Accepted types\r\n if (\r\n (connectionPoint.acceptedConnectionPointTypes && connectionPoint.acceptedConnectionPointTypes.indexOf(this.type) !== -1) ||\r\n (connectionPoint._acceptedConnectionPointType && NodeMaterialConnectionPoint.AreEquivalentTypes(connectionPoint._acceptedConnectionPointType.type, this.type))\r\n ) {\r\n return NodeMaterialConnectionPointCompatibilityStates.Compatible;\r\n } else {\r\n return NodeMaterialConnectionPointCompatibilityStates.TypeIncompatible;\r\n }\r\n }\r\n\r\n // Excluded\r\n if (connectionPoint.excludedConnectionPointTypes && connectionPoint.excludedConnectionPointTypes.indexOf(this.type) !== -1) {\r\n return NodeMaterialConnectionPointCompatibilityStates.TypeIncompatible;\r\n }\r\n\r\n // Check hierarchy\r\n let targetBlock = otherBlock;\r\n let sourceBlock = ownerBlock;\r\n if (this.direction === NodeMaterialConnectionPointDirection.Input) {\r\n targetBlock = ownerBlock;\r\n sourceBlock = otherBlock;\r\n }\r\n\r\n if (targetBlock.isAnAncestorOf(sourceBlock)) {\r\n return NodeMaterialConnectionPointCompatibilityStates.HierarchyIssue;\r\n }\r\n\r\n return NodeMaterialConnectionPointCompatibilityStates.Compatible;\r\n }\r\n\r\n /**\r\n * Connect this point to another connection point\r\n * @param connectionPoint defines the other connection point\r\n * @param ignoreConstraints defines if the system will ignore connection type constraints (default is false)\r\n * @returns the current connection point\r\n */\r\n public connectTo(connectionPoint: NodeMaterialConnectionPoint, ignoreConstraints = false): NodeMaterialConnectionPoint {\r\n if (!ignoreConstraints && !this.canConnectTo(connectionPoint)) {\r\n // eslint-disable-next-line no-throw-literal\r\n throw \"Cannot connect these two connectors.\";\r\n }\r\n\r\n this._endpoints.push(connectionPoint);\r\n connectionPoint._connectedPoint = this;\r\n\r\n this._enforceAssociatedVariableName = false;\r\n\r\n this.onConnectionObservable.notifyObservers(connectionPoint);\r\n connectionPoint.onConnectionObservable.notifyObservers(this);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Disconnect this point from one of his endpoint\r\n * @param endpoint defines the other connection point\r\n * @returns the current connection point\r\n */\r\n public disconnectFrom(endpoint: NodeMaterialConnectionPoint): NodeMaterialConnectionPoint {\r\n const index = this._endpoints.indexOf(endpoint);\r\n\r\n if (index === -1) {\r\n return this;\r\n }\r\n\r\n this._endpoints.splice(index, 1);\r\n endpoint._connectedPoint = null;\r\n this._enforceAssociatedVariableName = false;\r\n endpoint._enforceAssociatedVariableName = false;\r\n\r\n this.onDisconnectionObservable.notifyObservers(endpoint);\r\n endpoint.onDisconnectionObservable.notifyObservers(this);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Fill the list of excluded connection point types with all types other than those passed in the parameter\r\n * @param mask Types (ORed values of NodeMaterialBlockConnectionPointTypes) that are allowed, and thus will not be pushed to the excluded list\r\n */\r\n public addExcludedConnectionPointFromAllowedTypes(mask: number): void {\r\n let bitmask = 1;\r\n while (bitmask < NodeMaterialBlockConnectionPointTypes.All) {\r\n if (!(mask & bitmask)) {\r\n this.excludedConnectionPointTypes.push(bitmask);\r\n }\r\n bitmask = bitmask << 1;\r\n }\r\n }\r\n\r\n /**\r\n * Serializes this point in a JSON representation\r\n * @param isInput defines if the connection point is an input (default is true)\r\n * @returns the serialized point object\r\n */\r\n public serialize(isInput = true): any {\r\n const serializationObject: any = {};\r\n\r\n serializationObject.name = this.name;\r\n serializationObject.displayName = this.displayName;\r\n\r\n if (isInput && this.connectedPoint) {\r\n serializationObject.inputName = this.name;\r\n serializationObject.targetBlockId = this.connectedPoint.ownerBlock.uniqueId;\r\n serializationObject.targetConnectionName = this.connectedPoint.name;\r\n serializationObject.isExposedOnFrame = true;\r\n serializationObject.exposedPortPosition = this.exposedPortPosition;\r\n }\r\n\r\n if (this.isExposedOnFrame || this.exposedPortPosition >= 0) {\r\n serializationObject.isExposedOnFrame = true;\r\n serializationObject.exposedPortPosition = this.exposedPortPosition;\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Release resources\r\n */\r\n public dispose() {\r\n this.onConnectionObservable.clear();\r\n this.onDisconnectionObservable.clear();\r\n }\r\n}\r\n"]}
|
|
@@ -96,7 +96,7 @@ export class NodeMaterialBuildState {
|
|
|
96
96
|
this.compilationString = `\n${emitComments ? "//Attributes\n" : ""}${this._attributeDeclaration}\n${this.compilationString}`;
|
|
97
97
|
}
|
|
98
98
|
this.compilationString = "precision highp float;\n" + this.compilationString;
|
|
99
|
-
this.compilationString = "#if defined(WEBGL2) ||
|
|
99
|
+
this.compilationString = "#if defined(WEBGL2) || defined(WEBGPU)\nprecision highp sampler2DArray;\n#endif\n" + this.compilationString;
|
|
100
100
|
if (isFragmentMode) {
|
|
101
101
|
this.compilationString =
|
|
102
102
|
"#if defined(PREPASS)\r\n#extension GL_EXT_draw_buffers : require\r\nlayout(location = 0) out highp vec4 glFragData[SCENE_MRT_COUNT];\r\nhighp vec4 gl_FragColor;\r\n#endif\r\n" +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeMaterialBuildState.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Node/nodeMaterialBuildState.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlockConnectionPointTypes } from \"./Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport { NodeMaterialBlockTargets } from \"./Enums/nodeMaterialBlockTargets\";\r\nimport type { NodeMaterialBuildStateSharedData } from \"./nodeMaterialBuildStateSharedData\";\r\nimport { Effect } from \"../effect\";\r\n\r\n/**\r\n * Class used to store node based material build state\r\n */\r\nexport class NodeMaterialBuildState {\r\n /** Gets or sets a boolean indicating if the current state can emit uniform buffers */\r\n public supportUniformBuffers = false;\r\n /**\r\n * Gets the list of emitted attributes\r\n */\r\n public attributes: string[] = [];\r\n /**\r\n * Gets the list of emitted uniforms\r\n */\r\n public uniforms: string[] = [];\r\n /**\r\n * Gets the list of emitted constants\r\n */\r\n public constants: string[] = [];\r\n /**\r\n * Gets the list of emitted samplers\r\n */\r\n public samplers: string[] = [];\r\n /**\r\n * Gets the list of emitted functions\r\n */\r\n public functions: { [key: string]: string } = {};\r\n /**\r\n * Gets the list of emitted extensions\r\n */\r\n public extensions: { [key: string]: string } = {};\r\n /**\r\n * Gets the list of emitted prePass outputs - if using the prepass\r\n */\r\n public prePassOutput: { [key: string]: string } = {};\r\n\r\n /**\r\n * Gets the target of the compilation state\r\n */\r\n public target: NodeMaterialBlockTargets;\r\n /**\r\n * Gets the list of emitted counters\r\n */\r\n public counters: { [key: string]: number } = {};\r\n\r\n /**\r\n * Shared data between multiple NodeMaterialBuildState instances\r\n */\r\n public sharedData: NodeMaterialBuildStateSharedData;\r\n\r\n /** @internal */\r\n public _vertexState: NodeMaterialBuildState;\r\n\r\n /** @internal */\r\n public _attributeDeclaration = \"\";\r\n /** @internal */\r\n public _uniformDeclaration = \"\";\r\n /** @internal */\r\n public _constantDeclaration = \"\";\r\n /** @internal */\r\n public _samplerDeclaration = \"\";\r\n /** @internal */\r\n public _varyingTransfer = \"\";\r\n /** @internal */\r\n public _injectAtEnd = \"\";\r\n\r\n private _repeatableContentAnchorIndex = 0;\r\n /** @internal */\r\n public _builtCompilationString = \"\";\r\n\r\n /**\r\n * Gets the emitted compilation strings\r\n */\r\n public compilationString = \"\";\r\n\r\n /**\r\n * Finalize the compilation strings\r\n * @param state defines the current compilation state\r\n */\r\n public finalize(state: NodeMaterialBuildState) {\r\n const emitComments = state.sharedData.emitComments;\r\n const isFragmentMode = this.target === NodeMaterialBlockTargets.Fragment;\r\n\r\n this.compilationString = `\\n${emitComments ? \"//Entry point\\n\" : \"\"}void main(void) {\\n${this.compilationString}`;\r\n\r\n if (this._constantDeclaration) {\r\n this.compilationString = `\\n${emitComments ? \"//Constants\\n\" : \"\"}${this._constantDeclaration}\\n${this.compilationString}`;\r\n }\r\n\r\n let functionCode = \"\";\r\n for (const functionName in this.functions) {\r\n functionCode += this.functions[functionName] + `\\n`;\r\n }\r\n this.compilationString = `\\n${functionCode}\\n${this.compilationString}`;\r\n\r\n if (!isFragmentMode && this._varyingTransfer) {\r\n this.compilationString = `${this.compilationString}\\n${this._varyingTransfer}`;\r\n }\r\n\r\n if (this._injectAtEnd) {\r\n this.compilationString = `${this.compilationString}\\n${this._injectAtEnd}`;\r\n }\r\n\r\n this.compilationString = `${this.compilationString}\\n}`;\r\n\r\n if (this.sharedData.varyingDeclaration) {\r\n this.compilationString = `\\n${emitComments ? \"//Varyings\\n\" : \"\"}${this.sharedData.varyingDeclaration}\\n${this.compilationString}`;\r\n }\r\n\r\n if (this._samplerDeclaration) {\r\n this.compilationString = `\\n${emitComments ? \"//Samplers\\n\" : \"\"}${this._samplerDeclaration}\\n${this.compilationString}`;\r\n }\r\n\r\n if (this._uniformDeclaration) {\r\n this.compilationString = `\\n${emitComments ? \"//Uniforms\\n\" : \"\"}${this._uniformDeclaration}\\n${this.compilationString}`;\r\n }\r\n\r\n if (this._attributeDeclaration && !isFragmentMode) {\r\n this.compilationString = `\\n${emitComments ? \"//Attributes\\n\" : \"\"}${this._attributeDeclaration}\\n${this.compilationString}`;\r\n }\r\n\r\n this.compilationString = \"precision highp float;\\n\" + this.compilationString;\r\n this.compilationString = \"#if defined(WEBGL2) || defines(WEBGPU)\\nprecision highp sampler2DArray;\\n#endif\\n\" + this.compilationString;\r\n\r\n if (isFragmentMode) {\r\n this.compilationString =\r\n \"#if defined(PREPASS)\\r\\n#extension GL_EXT_draw_buffers : require\\r\\nlayout(location = 0) out highp vec4 glFragData[SCENE_MRT_COUNT];\\r\\nhighp vec4 gl_FragColor;\\r\\n#endif\\r\\n\" +\r\n this.compilationString;\r\n }\r\n\r\n for (const extensionName in this.extensions) {\r\n const extension = this.extensions[extensionName];\r\n this.compilationString = `\\n${extension}\\n${this.compilationString}`;\r\n }\r\n\r\n this._builtCompilationString = this.compilationString;\r\n }\r\n\r\n /** @internal */\r\n public get _repeatableContentAnchor(): string {\r\n return `###___ANCHOR${this._repeatableContentAnchorIndex++}___###`;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _getFreeVariableName(prefix: string): string {\r\n prefix = prefix.replace(/[^a-zA-Z_]+/g, \"\");\r\n\r\n if (this.sharedData.variableNames[prefix] === undefined) {\r\n this.sharedData.variableNames[prefix] = 0;\r\n\r\n // Check reserved words\r\n if (prefix === \"output\" || prefix === \"texture\") {\r\n return prefix + this.sharedData.variableNames[prefix];\r\n }\r\n\r\n return prefix;\r\n } else {\r\n this.sharedData.variableNames[prefix]++;\r\n }\r\n\r\n return prefix + this.sharedData.variableNames[prefix];\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _getFreeDefineName(prefix: string): string {\r\n if (this.sharedData.defineNames[prefix] === undefined) {\r\n this.sharedData.defineNames[prefix] = 0;\r\n } else {\r\n this.sharedData.defineNames[prefix]++;\r\n }\r\n\r\n return prefix + this.sharedData.defineNames[prefix];\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _excludeVariableName(name: string) {\r\n this.sharedData.variableNames[name] = 0;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _emit2DSampler(name: string) {\r\n if (this.samplers.indexOf(name) < 0) {\r\n this._samplerDeclaration += `uniform sampler2D ${name};\\n`;\r\n this.samplers.push(name);\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _emit2DArraySampler(name: string) {\r\n if (this.samplers.indexOf(name) < 0) {\r\n this._samplerDeclaration += `uniform sampler2DArray ${name};\\n`;\r\n this.samplers.push(name);\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _getGLType(type: NodeMaterialBlockConnectionPointTypes): string {\r\n switch (type) {\r\n case NodeMaterialBlockConnectionPointTypes.Float:\r\n return \"float\";\r\n case NodeMaterialBlockConnectionPointTypes.Int:\r\n return \"int\";\r\n case NodeMaterialBlockConnectionPointTypes.Vector2:\r\n return \"vec2\";\r\n case NodeMaterialBlockConnectionPointTypes.Color3:\r\n case NodeMaterialBlockConnectionPointTypes.Vector3:\r\n return \"vec3\";\r\n case NodeMaterialBlockConnectionPointTypes.Color4:\r\n case NodeMaterialBlockConnectionPointTypes.Vector4:\r\n return \"vec4\";\r\n case NodeMaterialBlockConnectionPointTypes.Matrix:\r\n return \"mat4\";\r\n }\r\n\r\n return \"\";\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _emitExtension(name: string, extension: string, define: string = \"\") {\r\n if (this.extensions[name]) {\r\n return;\r\n }\r\n\r\n if (define) {\r\n extension = `#if ${define}\\n${extension}\\n#endif`;\r\n }\r\n this.extensions[name] = extension;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _emitFunction(name: string, code: string, comments: string) {\r\n if (this.functions[name]) {\r\n return;\r\n }\r\n\r\n if (this.sharedData.emitComments) {\r\n code = comments + `\\n` + code;\r\n }\r\n\r\n this.functions[name] = code;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _emitCodeFromInclude(\r\n includeName: string,\r\n comments: string,\r\n options?: {\r\n replaceStrings?: { search: RegExp; replace: string }[];\r\n repeatKey?: string;\r\n substitutionVars?: string;\r\n }\r\n ) {\r\n if (options && options.repeatKey) {\r\n return `#include<${includeName}>${options.substitutionVars ? \"(\" + options.substitutionVars + \")\" : \"\"}[0..${options.repeatKey}]\\n`;\r\n }\r\n\r\n let code = Effect.IncludesShadersStore[includeName] + \"\\n\";\r\n\r\n if (this.sharedData.emitComments) {\r\n code = comments + `\\n` + code;\r\n }\r\n\r\n if (!options) {\r\n return code;\r\n }\r\n\r\n if (options.replaceStrings) {\r\n for (let index = 0; index < options.replaceStrings.length; index++) {\r\n const replaceString = options.replaceStrings[index];\r\n code = code.replace(replaceString.search, replaceString.replace);\r\n }\r\n }\r\n\r\n return code;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _emitFunctionFromInclude(\r\n includeName: string,\r\n comments: string,\r\n options?: {\r\n repeatKey?: string;\r\n substitutionVars?: string;\r\n removeAttributes?: boolean;\r\n removeUniforms?: boolean;\r\n removeVaryings?: boolean;\r\n removeIfDef?: boolean;\r\n replaceStrings?: { search: RegExp; replace: string }[];\r\n },\r\n storeKey: string = \"\"\r\n ) {\r\n const key = includeName + storeKey;\r\n if (this.functions[key]) {\r\n return;\r\n }\r\n\r\n if (!options || (!options.removeAttributes && !options.removeUniforms && !options.removeVaryings && !options.removeIfDef && !options.replaceStrings)) {\r\n if (options && options.repeatKey) {\r\n this.functions[key] = `#include<${includeName}>${options.substitutionVars ? \"(\" + options.substitutionVars + \")\" : \"\"}[0..${options.repeatKey}]\\n`;\r\n } else {\r\n this.functions[key] = `#include<${includeName}>${options?.substitutionVars ? \"(\" + options?.substitutionVars + \")\" : \"\"}\\n`;\r\n }\r\n\r\n if (this.sharedData.emitComments) {\r\n this.functions[key] = comments + `\\n` + this.functions[key];\r\n }\r\n\r\n return;\r\n }\r\n\r\n this.functions[key] = Effect.IncludesShadersStore[includeName];\r\n\r\n if (this.sharedData.emitComments) {\r\n this.functions[key] = comments + `\\n` + this.functions[key];\r\n }\r\n\r\n if (options.removeIfDef) {\r\n this.functions[key] = this.functions[key].replace(/^\\s*?#ifdef.+$/gm, \"\");\r\n this.functions[key] = this.functions[key].replace(/^\\s*?#endif.*$/gm, \"\");\r\n this.functions[key] = this.functions[key].replace(/^\\s*?#else.*$/gm, \"\");\r\n this.functions[key] = this.functions[key].replace(/^\\s*?#elif.*$/gm, \"\");\r\n }\r\n\r\n if (options.removeAttributes) {\r\n this.functions[key] = this.functions[key].replace(/\\s*?attribute .+?;/g, \"\\n\");\r\n }\r\n\r\n if (options.removeUniforms) {\r\n this.functions[key] = this.functions[key].replace(/\\s*?uniform .*?;/g, \"\\n\");\r\n }\r\n\r\n if (options.removeVaryings) {\r\n this.functions[key] = this.functions[key].replace(/\\s*?(varying|in) .+?;/g, \"\\n\");\r\n }\r\n\r\n if (options.replaceStrings) {\r\n for (let index = 0; index < options.replaceStrings.length; index++) {\r\n const replaceString = options.replaceStrings[index];\r\n this.functions[key] = this.functions[key].replace(replaceString.search, replaceString.replace);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _registerTempVariable(name: string) {\r\n if (this.sharedData.temps.indexOf(name) !== -1) {\r\n return false;\r\n }\r\n\r\n this.sharedData.temps.push(name);\r\n return true;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _emitVaryingFromString(name: string, type: string, define: string = \"\", notDefine = false) {\r\n if (this.sharedData.varyings.indexOf(name) !== -1) {\r\n return false;\r\n }\r\n\r\n this.sharedData.varyings.push(name);\r\n\r\n if (define) {\r\n if (define.startsWith(\"defined(\")) {\r\n this.sharedData.varyingDeclaration += `#if ${define}\\n`;\r\n } else {\r\n this.sharedData.varyingDeclaration += `${notDefine ? \"#ifndef\" : \"#ifdef\"} ${define}\\n`;\r\n }\r\n }\r\n this.sharedData.varyingDeclaration += `varying ${type} ${name};\\n`;\r\n if (define) {\r\n this.sharedData.varyingDeclaration += `#endif\\n`;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _emitUniformFromString(name: string, type: string, define: string = \"\", notDefine = false) {\r\n if (this.uniforms.indexOf(name) !== -1) {\r\n return;\r\n }\r\n\r\n this.uniforms.push(name);\r\n\r\n if (define) {\r\n if (define.startsWith(\"defined(\")) {\r\n this._uniformDeclaration += `#if ${define}\\n`;\r\n } else {\r\n this._uniformDeclaration += `${notDefine ? \"#ifndef\" : \"#ifdef\"} ${define}\\n`;\r\n }\r\n }\r\n this._uniformDeclaration += `uniform ${type} ${name};\\n`;\r\n if (define) {\r\n this._uniformDeclaration += `#endif\\n`;\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _emitFloat(value: number) {\r\n if (value.toString() === value.toFixed(0)) {\r\n return `${value}.0`;\r\n }\r\n\r\n return value.toString();\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"nodeMaterialBuildState.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Node/nodeMaterialBuildState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qCAAqC,EAAE,MAAM,+CAA+C,CAAC;AACtG,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAE5E,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC;;GAEG;AACH,MAAM,OAAO,sBAAsB;IAAnC;QACI,sFAAsF;QAC/E,0BAAqB,GAAG,KAAK,CAAC;QACrC;;WAEG;QACI,eAAU,GAAa,EAAE,CAAC;QACjC;;WAEG;QACI,aAAQ,GAAa,EAAE,CAAC;QAC/B;;WAEG;QACI,cAAS,GAAa,EAAE,CAAC;QAChC;;WAEG;QACI,aAAQ,GAAa,EAAE,CAAC;QAC/B;;WAEG;QACI,cAAS,GAA8B,EAAE,CAAC;QACjD;;WAEG;QACI,eAAU,GAA8B,EAAE,CAAC;QAClD;;WAEG;QACI,kBAAa,GAA8B,EAAE,CAAC;QAMrD;;WAEG;QACI,aAAQ,GAA8B,EAAE,CAAC;QAUhD,gBAAgB;QACT,0BAAqB,GAAG,EAAE,CAAC;QAClC,gBAAgB;QACT,wBAAmB,GAAG,EAAE,CAAC;QAChC,gBAAgB;QACT,yBAAoB,GAAG,EAAE,CAAC;QACjC,gBAAgB;QACT,wBAAmB,GAAG,EAAE,CAAC;QAChC,gBAAgB;QACT,qBAAgB,GAAG,EAAE,CAAC;QAC7B,gBAAgB;QACT,iBAAY,GAAG,EAAE,CAAC;QAEjB,kCAA6B,GAAG,CAAC,CAAC;QAC1C,gBAAgB;QACT,4BAAuB,GAAG,EAAE,CAAC;QAEpC;;WAEG;QACI,sBAAiB,GAAG,EAAE,CAAC;IAwWlC,CAAC;IAtWG;;;OAGG;IACI,QAAQ,CAAC,KAA6B;QACzC,MAAM,YAAY,GAAG,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC;QACnD,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,KAAK,wBAAwB,CAAC,QAAQ,CAAC;QAEzE,IAAI,CAAC,iBAAiB,GAAG,KAAK,YAAY,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,sBAAsB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAElH,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC3B,IAAI,CAAC,iBAAiB,GAAG,KAAK,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,oBAAoB,KAAK,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC9H;QAED,IAAI,YAAY,GAAG,EAAE,CAAC;QACtB,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,SAAS,EAAE;YACvC,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;SACvD;QACD,IAAI,CAAC,iBAAiB,GAAG,KAAK,YAAY,KAAK,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAExE,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,gBAAgB,EAAE;YAC1C,IAAI,CAAC,iBAAiB,GAAG,GAAG,IAAI,CAAC,iBAAiB,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC;SAClF;QAED,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,iBAAiB,GAAG,GAAG,IAAI,CAAC,iBAAiB,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;SAC9E;QAED,IAAI,CAAC,iBAAiB,GAAG,GAAG,IAAI,CAAC,iBAAiB,KAAK,CAAC;QAExD,IAAI,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE;YACpC,IAAI,CAAC,iBAAiB,GAAG,KAAK,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,KAAK,IAAI,CAAC,iBAAiB,EAAE,CAAC;SACtI;QAED,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC1B,IAAI,CAAC,iBAAiB,GAAG,KAAK,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,mBAAmB,KAAK,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC5H;QAED,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC1B,IAAI,CAAC,iBAAiB,GAAG,KAAK,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,mBAAmB,KAAK,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC5H;QAED,IAAI,IAAI,CAAC,qBAAqB,IAAI,CAAC,cAAc,EAAE;YAC/C,IAAI,CAAC,iBAAiB,GAAG,KAAK,YAAY,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,qBAAqB,KAAK,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAChI;QAED,IAAI,CAAC,iBAAiB,GAAG,0BAA0B,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAC7E,IAAI,CAAC,iBAAiB,GAAG,mFAAmF,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAEtI,IAAI,cAAc,EAAE;YAChB,IAAI,CAAC,iBAAiB;gBAClB,gLAAgL;oBAChL,IAAI,CAAC,iBAAiB,CAAC;SAC9B;QAED,KAAK,MAAM,aAAa,IAAI,IAAI,CAAC,UAAU,EAAE;YACzC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YACjD,IAAI,CAAC,iBAAiB,GAAG,KAAK,SAAS,KAAK,IAAI,CAAC,iBAAiB,EAAE,CAAC;SACxE;QAED,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,iBAAiB,CAAC;IAC1D,CAAC;IAED,gBAAgB;IAChB,IAAW,wBAAwB;QAC/B,OAAO,eAAe,IAAI,CAAC,6BAA6B,EAAE,QAAQ,CAAC;IACvE,CAAC;IAED;;OAEG;IACI,oBAAoB,CAAC,MAAc;QACtC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAE5C,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE;YACrD,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAE1C,uBAAuB;YACvB,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,SAAS,EAAE;gBAC7C,OAAO,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;aACzD;YAED,OAAO,MAAM,CAAC;SACjB;aAAM;YACH,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;SAC3C;QAED,OAAO,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACI,kBAAkB,CAAC,MAAc;QACpC,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE;YACnD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;SAC3C;aAAM;YACH,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;SACzC;QAED,OAAO,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACI,oBAAoB,CAAC,IAAY;QACpC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACI,cAAc,CAAC,IAAY;QAC9B,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACjC,IAAI,CAAC,mBAAmB,IAAI,qBAAqB,IAAI,KAAK,CAAC;YAC3D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC5B;IACL,CAAC;IAED;;OAEG;IACI,mBAAmB,CAAC,IAAY;QACnC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACjC,IAAI,CAAC,mBAAmB,IAAI,0BAA0B,IAAI,KAAK,CAAC;YAChE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC5B;IACL,CAAC;IAED;;OAEG;IACI,UAAU,CAAC,IAA2C;QACzD,QAAQ,IAAI,EAAE;YACV,KAAK,qCAAqC,CAAC,KAAK;gBAC5C,OAAO,OAAO,CAAC;YACnB,KAAK,qCAAqC,CAAC,GAAG;gBAC1C,OAAO,KAAK,CAAC;YACjB,KAAK,qCAAqC,CAAC,OAAO;gBAC9C,OAAO,MAAM,CAAC;YAClB,KAAK,qCAAqC,CAAC,MAAM,CAAC;YAClD,KAAK,qCAAqC,CAAC,OAAO;gBAC9C,OAAO,MAAM,CAAC;YAClB,KAAK,qCAAqC,CAAC,MAAM,CAAC;YAClD,KAAK,qCAAqC,CAAC,OAAO;gBAC9C,OAAO,MAAM,CAAC;YAClB,KAAK,qCAAqC,CAAC,MAAM;gBAC7C,OAAO,MAAM,CAAC;SACrB;QAED,OAAO,EAAE,CAAC;IACd,CAAC;IAED;;OAEG;IACI,cAAc,CAAC,IAAY,EAAE,SAAiB,EAAE,SAAiB,EAAE;QACtE,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YACvB,OAAO;SACV;QAED,IAAI,MAAM,EAAE;YACR,SAAS,GAAG,OAAO,MAAM,KAAK,SAAS,UAAU,CAAC;SACrD;QACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;IACtC,CAAC;IAED;;OAEG;IACI,aAAa,CAAC,IAAY,EAAE,IAAY,EAAE,QAAgB;QAC7D,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;YACtB,OAAO;SACV;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;YAC9B,IAAI,GAAG,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC;SACjC;QAED,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAChC,CAAC;IAED;;OAEG;IACI,oBAAoB,CACvB,WAAmB,EACnB,QAAgB,EAChB,OAIC;QAED,IAAI,OAAO,IAAI,OAAO,CAAC,SAAS,EAAE;YAC9B,OAAO,YAAY,WAAW,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,gBAAgB,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,OAAO,CAAC,SAAS,KAAK,CAAC;SACvI;QAED,IAAI,IAAI,GAAG,MAAM,CAAC,oBAAoB,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;QAE3D,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;YAC9B,IAAI,GAAG,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC;SACjC;QAED,IAAI,CAAC,OAAO,EAAE;YACV,OAAO,IAAI,CAAC;SACf;QAED,IAAI,OAAO,CAAC,cAAc,EAAE;YACxB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBAChE,MAAM,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;gBACpD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;aACpE;SACJ;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,wBAAwB,CAC3B,WAAmB,EACnB,QAAgB,EAChB,OAQC,EACD,WAAmB,EAAE;QAErB,MAAM,GAAG,GAAG,WAAW,GAAG,QAAQ,CAAC;QACnC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;YACrB,OAAO;SACV;QAED,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,gBAAgB,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;YAClJ,IAAI,OAAO,IAAI,OAAO,CAAC,SAAS,EAAE;gBAC9B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,YAAY,WAAW,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,gBAAgB,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,OAAO,CAAC,SAAS,KAAK,CAAC;aACtJ;iBAAM;gBACH,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,YAAY,WAAW,IAAI,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,GAAG,OAAO,EAAE,gBAAgB,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;aAC/H;YAED,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;gBAC9B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;aAC/D;YAED,OAAO;SACV;QAED,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QAE/D,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;YAC9B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;SAC/D;QAED,IAAI,OAAO,CAAC,WAAW,EAAE;YACrB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;YAC1E,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;YAC1E,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;YACzE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;SAC5E;QAED,IAAI,OAAO,CAAC,gBAAgB,EAAE;YAC1B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC;SAClF;QAED,IAAI,OAAO,CAAC,cAAc,EAAE;YACxB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;SAChF;QAED,IAAI,OAAO,CAAC,cAAc,EAAE;YACxB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,wBAAwB,EAAE,IAAI,CAAC,CAAC;SACrF;QAED,IAAI,OAAO,CAAC,cAAc,EAAE;YACxB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBAChE,MAAM,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;gBACpD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;aAClG;SACJ;IACL,CAAC;IAED;;OAEG;IACI,qBAAqB,CAAC,IAAY;QACrC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YAC5C,OAAO,KAAK,CAAC;SAChB;QAED,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,sBAAsB,CAAC,IAAY,EAAE,IAAY,EAAE,SAAiB,EAAE,EAAE,SAAS,GAAG,KAAK;QAC5F,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YAC/C,OAAO,KAAK,CAAC;SAChB;QAED,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEpC,IAAI,MAAM,EAAE;YACR,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;gBAC/B,IAAI,CAAC,UAAU,CAAC,kBAAkB,IAAI,OAAO,MAAM,IAAI,CAAC;aAC3D;iBAAM;gBACH,IAAI,CAAC,UAAU,CAAC,kBAAkB,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,IAAI,MAAM,IAAI,CAAC;aAC3F;SACJ;QACD,IAAI,CAAC,UAAU,CAAC,kBAAkB,IAAI,WAAW,IAAI,IAAI,IAAI,KAAK,CAAC;QACnE,IAAI,MAAM,EAAE;YACR,IAAI,CAAC,UAAU,CAAC,kBAAkB,IAAI,UAAU,CAAC;SACpD;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,sBAAsB,CAAC,IAAY,EAAE,IAAY,EAAE,SAAiB,EAAE,EAAE,SAAS,GAAG,KAAK;QAC5F,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YACpC,OAAO;SACV;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEzB,IAAI,MAAM,EAAE;YACR,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;gBAC/B,IAAI,CAAC,mBAAmB,IAAI,OAAO,MAAM,IAAI,CAAC;aACjD;iBAAM;gBACH,IAAI,CAAC,mBAAmB,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,IAAI,MAAM,IAAI,CAAC;aACjF;SACJ;QACD,IAAI,CAAC,mBAAmB,IAAI,WAAW,IAAI,IAAI,IAAI,KAAK,CAAC;QACzD,IAAI,MAAM,EAAE;YACR,IAAI,CAAC,mBAAmB,IAAI,UAAU,CAAC;SAC1C;IACL,CAAC;IAED;;OAEG;IACI,UAAU,CAAC,KAAa;QAC3B,IAAI,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACvC,OAAO,GAAG,KAAK,IAAI,CAAC;SACvB;QAED,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC5B,CAAC;CACJ","sourcesContent":["import { NodeMaterialBlockConnectionPointTypes } from \"./Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport { NodeMaterialBlockTargets } from \"./Enums/nodeMaterialBlockTargets\";\r\nimport type { NodeMaterialBuildStateSharedData } from \"./nodeMaterialBuildStateSharedData\";\r\nimport { Effect } from \"../effect\";\r\n\r\n/**\r\n * Class used to store node based material build state\r\n */\r\nexport class NodeMaterialBuildState {\r\n /** Gets or sets a boolean indicating if the current state can emit uniform buffers */\r\n public supportUniformBuffers = false;\r\n /**\r\n * Gets the list of emitted attributes\r\n */\r\n public attributes: string[] = [];\r\n /**\r\n * Gets the list of emitted uniforms\r\n */\r\n public uniforms: string[] = [];\r\n /**\r\n * Gets the list of emitted constants\r\n */\r\n public constants: string[] = [];\r\n /**\r\n * Gets the list of emitted samplers\r\n */\r\n public samplers: string[] = [];\r\n /**\r\n * Gets the list of emitted functions\r\n */\r\n public functions: { [key: string]: string } = {};\r\n /**\r\n * Gets the list of emitted extensions\r\n */\r\n public extensions: { [key: string]: string } = {};\r\n /**\r\n * Gets the list of emitted prePass outputs - if using the prepass\r\n */\r\n public prePassOutput: { [key: string]: string } = {};\r\n\r\n /**\r\n * Gets the target of the compilation state\r\n */\r\n public target: NodeMaterialBlockTargets;\r\n /**\r\n * Gets the list of emitted counters\r\n */\r\n public counters: { [key: string]: number } = {};\r\n\r\n /**\r\n * Shared data between multiple NodeMaterialBuildState instances\r\n */\r\n public sharedData: NodeMaterialBuildStateSharedData;\r\n\r\n /** @internal */\r\n public _vertexState: NodeMaterialBuildState;\r\n\r\n /** @internal */\r\n public _attributeDeclaration = \"\";\r\n /** @internal */\r\n public _uniformDeclaration = \"\";\r\n /** @internal */\r\n public _constantDeclaration = \"\";\r\n /** @internal */\r\n public _samplerDeclaration = \"\";\r\n /** @internal */\r\n public _varyingTransfer = \"\";\r\n /** @internal */\r\n public _injectAtEnd = \"\";\r\n\r\n private _repeatableContentAnchorIndex = 0;\r\n /** @internal */\r\n public _builtCompilationString = \"\";\r\n\r\n /**\r\n * Gets the emitted compilation strings\r\n */\r\n public compilationString = \"\";\r\n\r\n /**\r\n * Finalize the compilation strings\r\n * @param state defines the current compilation state\r\n */\r\n public finalize(state: NodeMaterialBuildState) {\r\n const emitComments = state.sharedData.emitComments;\r\n const isFragmentMode = this.target === NodeMaterialBlockTargets.Fragment;\r\n\r\n this.compilationString = `\\n${emitComments ? \"//Entry point\\n\" : \"\"}void main(void) {\\n${this.compilationString}`;\r\n\r\n if (this._constantDeclaration) {\r\n this.compilationString = `\\n${emitComments ? \"//Constants\\n\" : \"\"}${this._constantDeclaration}\\n${this.compilationString}`;\r\n }\r\n\r\n let functionCode = \"\";\r\n for (const functionName in this.functions) {\r\n functionCode += this.functions[functionName] + `\\n`;\r\n }\r\n this.compilationString = `\\n${functionCode}\\n${this.compilationString}`;\r\n\r\n if (!isFragmentMode && this._varyingTransfer) {\r\n this.compilationString = `${this.compilationString}\\n${this._varyingTransfer}`;\r\n }\r\n\r\n if (this._injectAtEnd) {\r\n this.compilationString = `${this.compilationString}\\n${this._injectAtEnd}`;\r\n }\r\n\r\n this.compilationString = `${this.compilationString}\\n}`;\r\n\r\n if (this.sharedData.varyingDeclaration) {\r\n this.compilationString = `\\n${emitComments ? \"//Varyings\\n\" : \"\"}${this.sharedData.varyingDeclaration}\\n${this.compilationString}`;\r\n }\r\n\r\n if (this._samplerDeclaration) {\r\n this.compilationString = `\\n${emitComments ? \"//Samplers\\n\" : \"\"}${this._samplerDeclaration}\\n${this.compilationString}`;\r\n }\r\n\r\n if (this._uniformDeclaration) {\r\n this.compilationString = `\\n${emitComments ? \"//Uniforms\\n\" : \"\"}${this._uniformDeclaration}\\n${this.compilationString}`;\r\n }\r\n\r\n if (this._attributeDeclaration && !isFragmentMode) {\r\n this.compilationString = `\\n${emitComments ? \"//Attributes\\n\" : \"\"}${this._attributeDeclaration}\\n${this.compilationString}`;\r\n }\r\n\r\n this.compilationString = \"precision highp float;\\n\" + this.compilationString;\r\n this.compilationString = \"#if defined(WEBGL2) || defined(WEBGPU)\\nprecision highp sampler2DArray;\\n#endif\\n\" + this.compilationString;\r\n\r\n if (isFragmentMode) {\r\n this.compilationString =\r\n \"#if defined(PREPASS)\\r\\n#extension GL_EXT_draw_buffers : require\\r\\nlayout(location = 0) out highp vec4 glFragData[SCENE_MRT_COUNT];\\r\\nhighp vec4 gl_FragColor;\\r\\n#endif\\r\\n\" +\r\n this.compilationString;\r\n }\r\n\r\n for (const extensionName in this.extensions) {\r\n const extension = this.extensions[extensionName];\r\n this.compilationString = `\\n${extension}\\n${this.compilationString}`;\r\n }\r\n\r\n this._builtCompilationString = this.compilationString;\r\n }\r\n\r\n /** @internal */\r\n public get _repeatableContentAnchor(): string {\r\n return `###___ANCHOR${this._repeatableContentAnchorIndex++}___###`;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _getFreeVariableName(prefix: string): string {\r\n prefix = prefix.replace(/[^a-zA-Z_]+/g, \"\");\r\n\r\n if (this.sharedData.variableNames[prefix] === undefined) {\r\n this.sharedData.variableNames[prefix] = 0;\r\n\r\n // Check reserved words\r\n if (prefix === \"output\" || prefix === \"texture\") {\r\n return prefix + this.sharedData.variableNames[prefix];\r\n }\r\n\r\n return prefix;\r\n } else {\r\n this.sharedData.variableNames[prefix]++;\r\n }\r\n\r\n return prefix + this.sharedData.variableNames[prefix];\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _getFreeDefineName(prefix: string): string {\r\n if (this.sharedData.defineNames[prefix] === undefined) {\r\n this.sharedData.defineNames[prefix] = 0;\r\n } else {\r\n this.sharedData.defineNames[prefix]++;\r\n }\r\n\r\n return prefix + this.sharedData.defineNames[prefix];\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _excludeVariableName(name: string) {\r\n this.sharedData.variableNames[name] = 0;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _emit2DSampler(name: string) {\r\n if (this.samplers.indexOf(name) < 0) {\r\n this._samplerDeclaration += `uniform sampler2D ${name};\\n`;\r\n this.samplers.push(name);\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _emit2DArraySampler(name: string) {\r\n if (this.samplers.indexOf(name) < 0) {\r\n this._samplerDeclaration += `uniform sampler2DArray ${name};\\n`;\r\n this.samplers.push(name);\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _getGLType(type: NodeMaterialBlockConnectionPointTypes): string {\r\n switch (type) {\r\n case NodeMaterialBlockConnectionPointTypes.Float:\r\n return \"float\";\r\n case NodeMaterialBlockConnectionPointTypes.Int:\r\n return \"int\";\r\n case NodeMaterialBlockConnectionPointTypes.Vector2:\r\n return \"vec2\";\r\n case NodeMaterialBlockConnectionPointTypes.Color3:\r\n case NodeMaterialBlockConnectionPointTypes.Vector3:\r\n return \"vec3\";\r\n case NodeMaterialBlockConnectionPointTypes.Color4:\r\n case NodeMaterialBlockConnectionPointTypes.Vector4:\r\n return \"vec4\";\r\n case NodeMaterialBlockConnectionPointTypes.Matrix:\r\n return \"mat4\";\r\n }\r\n\r\n return \"\";\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _emitExtension(name: string, extension: string, define: string = \"\") {\r\n if (this.extensions[name]) {\r\n return;\r\n }\r\n\r\n if (define) {\r\n extension = `#if ${define}\\n${extension}\\n#endif`;\r\n }\r\n this.extensions[name] = extension;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _emitFunction(name: string, code: string, comments: string) {\r\n if (this.functions[name]) {\r\n return;\r\n }\r\n\r\n if (this.sharedData.emitComments) {\r\n code = comments + `\\n` + code;\r\n }\r\n\r\n this.functions[name] = code;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _emitCodeFromInclude(\r\n includeName: string,\r\n comments: string,\r\n options?: {\r\n replaceStrings?: { search: RegExp; replace: string }[];\r\n repeatKey?: string;\r\n substitutionVars?: string;\r\n }\r\n ) {\r\n if (options && options.repeatKey) {\r\n return `#include<${includeName}>${options.substitutionVars ? \"(\" + options.substitutionVars + \")\" : \"\"}[0..${options.repeatKey}]\\n`;\r\n }\r\n\r\n let code = Effect.IncludesShadersStore[includeName] + \"\\n\";\r\n\r\n if (this.sharedData.emitComments) {\r\n code = comments + `\\n` + code;\r\n }\r\n\r\n if (!options) {\r\n return code;\r\n }\r\n\r\n if (options.replaceStrings) {\r\n for (let index = 0; index < options.replaceStrings.length; index++) {\r\n const replaceString = options.replaceStrings[index];\r\n code = code.replace(replaceString.search, replaceString.replace);\r\n }\r\n }\r\n\r\n return code;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _emitFunctionFromInclude(\r\n includeName: string,\r\n comments: string,\r\n options?: {\r\n repeatKey?: string;\r\n substitutionVars?: string;\r\n removeAttributes?: boolean;\r\n removeUniforms?: boolean;\r\n removeVaryings?: boolean;\r\n removeIfDef?: boolean;\r\n replaceStrings?: { search: RegExp; replace: string }[];\r\n },\r\n storeKey: string = \"\"\r\n ) {\r\n const key = includeName + storeKey;\r\n if (this.functions[key]) {\r\n return;\r\n }\r\n\r\n if (!options || (!options.removeAttributes && !options.removeUniforms && !options.removeVaryings && !options.removeIfDef && !options.replaceStrings)) {\r\n if (options && options.repeatKey) {\r\n this.functions[key] = `#include<${includeName}>${options.substitutionVars ? \"(\" + options.substitutionVars + \")\" : \"\"}[0..${options.repeatKey}]\\n`;\r\n } else {\r\n this.functions[key] = `#include<${includeName}>${options?.substitutionVars ? \"(\" + options?.substitutionVars + \")\" : \"\"}\\n`;\r\n }\r\n\r\n if (this.sharedData.emitComments) {\r\n this.functions[key] = comments + `\\n` + this.functions[key];\r\n }\r\n\r\n return;\r\n }\r\n\r\n this.functions[key] = Effect.IncludesShadersStore[includeName];\r\n\r\n if (this.sharedData.emitComments) {\r\n this.functions[key] = comments + `\\n` + this.functions[key];\r\n }\r\n\r\n if (options.removeIfDef) {\r\n this.functions[key] = this.functions[key].replace(/^\\s*?#ifdef.+$/gm, \"\");\r\n this.functions[key] = this.functions[key].replace(/^\\s*?#endif.*$/gm, \"\");\r\n this.functions[key] = this.functions[key].replace(/^\\s*?#else.*$/gm, \"\");\r\n this.functions[key] = this.functions[key].replace(/^\\s*?#elif.*$/gm, \"\");\r\n }\r\n\r\n if (options.removeAttributes) {\r\n this.functions[key] = this.functions[key].replace(/\\s*?attribute .+?;/g, \"\\n\");\r\n }\r\n\r\n if (options.removeUniforms) {\r\n this.functions[key] = this.functions[key].replace(/\\s*?uniform .*?;/g, \"\\n\");\r\n }\r\n\r\n if (options.removeVaryings) {\r\n this.functions[key] = this.functions[key].replace(/\\s*?(varying|in) .+?;/g, \"\\n\");\r\n }\r\n\r\n if (options.replaceStrings) {\r\n for (let index = 0; index < options.replaceStrings.length; index++) {\r\n const replaceString = options.replaceStrings[index];\r\n this.functions[key] = this.functions[key].replace(replaceString.search, replaceString.replace);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _registerTempVariable(name: string) {\r\n if (this.sharedData.temps.indexOf(name) !== -1) {\r\n return false;\r\n }\r\n\r\n this.sharedData.temps.push(name);\r\n return true;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _emitVaryingFromString(name: string, type: string, define: string = \"\", notDefine = false) {\r\n if (this.sharedData.varyings.indexOf(name) !== -1) {\r\n return false;\r\n }\r\n\r\n this.sharedData.varyings.push(name);\r\n\r\n if (define) {\r\n if (define.startsWith(\"defined(\")) {\r\n this.sharedData.varyingDeclaration += `#if ${define}\\n`;\r\n } else {\r\n this.sharedData.varyingDeclaration += `${notDefine ? \"#ifndef\" : \"#ifdef\"} ${define}\\n`;\r\n }\r\n }\r\n this.sharedData.varyingDeclaration += `varying ${type} ${name};\\n`;\r\n if (define) {\r\n this.sharedData.varyingDeclaration += `#endif\\n`;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _emitUniformFromString(name: string, type: string, define: string = \"\", notDefine = false) {\r\n if (this.uniforms.indexOf(name) !== -1) {\r\n return;\r\n }\r\n\r\n this.uniforms.push(name);\r\n\r\n if (define) {\r\n if (define.startsWith(\"defined(\")) {\r\n this._uniformDeclaration += `#if ${define}\\n`;\r\n } else {\r\n this._uniformDeclaration += `${notDefine ? \"#ifndef\" : \"#ifdef\"} ${define}\\n`;\r\n }\r\n }\r\n this._uniformDeclaration += `uniform ${type} ${name};\\n`;\r\n if (define) {\r\n this._uniformDeclaration += `#endif\\n`;\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _emitFloat(value: number) {\r\n if (value.toString() === value.toFixed(0)) {\r\n return `${value}.0`;\r\n }\r\n\r\n return value.toString();\r\n }\r\n}\r\n"]}
|
|
@@ -189,10 +189,7 @@ export declare class RenderTargetTexture extends Texture implements IRenderTarge
|
|
|
189
189
|
*/
|
|
190
190
|
clearColor: Color4;
|
|
191
191
|
protected _size: TextureSize;
|
|
192
|
-
protected _initialSizeParameter:
|
|
193
|
-
width: number;
|
|
194
|
-
height: number;
|
|
195
|
-
} | {
|
|
192
|
+
protected _initialSizeParameter: TextureSize | {
|
|
196
193
|
ratio: number;
|
|
197
194
|
};
|
|
198
195
|
protected _sizeRatio: Nullable<number>;
|
|
@@ -277,11 +274,7 @@ export declare class RenderTargetTexture extends Texture implements IRenderTarge
|
|
|
277
274
|
* @param scene The scene the RTT belongs to. Default is the last created scene.
|
|
278
275
|
* @param options The options for creating the render target texture.
|
|
279
276
|
*/
|
|
280
|
-
constructor(name: string, size:
|
|
281
|
-
width: number;
|
|
282
|
-
height: number;
|
|
283
|
-
layers?: number;
|
|
284
|
-
} | {
|
|
277
|
+
constructor(name: string, size: TextureSize | {
|
|
285
278
|
ratio: number;
|
|
286
279
|
}, scene?: Nullable<Scene>, options?: RenderTargetTextureOptions);
|
|
287
280
|
/**
|
|
@@ -305,11 +298,7 @@ export declare class RenderTargetTexture extends Texture implements IRenderTarge
|
|
|
305
298
|
* @param noColorAttachment True (default: false) to indicate that no color target should be created. (e.g., if you only want to write to the depth buffer)
|
|
306
299
|
* @param useSRGBBuffer True (default: false) to create a SRGB texture
|
|
307
300
|
*/
|
|
308
|
-
constructor(name: string, size:
|
|
309
|
-
width: number;
|
|
310
|
-
height: number;
|
|
311
|
-
layers?: number;
|
|
312
|
-
} | {
|
|
301
|
+
constructor(name: string, size: TextureSize | {
|
|
313
302
|
ratio: number;
|
|
314
303
|
}, scene?: Nullable<Scene>, generateMipMaps?: boolean, doNotChangeAspectRatio?: boolean, type?: number, isCube?: boolean, samplingMode?: number, generateDepthBuffer?: boolean, generateStencilBuffer?: boolean, isMulti?: boolean, format?: number, delayAllocation?: boolean, samples?: number, creationFlags?: number, noColorAttachment?: boolean, useSRGBBuffer?: boolean);
|
|
315
304
|
/**
|
|
@@ -324,10 +313,7 @@ export declare class RenderTargetTexture extends Texture implements IRenderTarge
|
|
|
324
313
|
createDepthStencilTexture(comparisonFunction?: number, bilinearFiltering?: boolean, generateStencil?: boolean, samples?: number, format?: number): void;
|
|
325
314
|
private _releaseRenderPassId;
|
|
326
315
|
private _createRenderPassId;
|
|
327
|
-
protected _processSizeParameter(size:
|
|
328
|
-
width: number;
|
|
329
|
-
height: number;
|
|
330
|
-
} | {
|
|
316
|
+
protected _processSizeParameter(size: TextureSize | {
|
|
331
317
|
ratio: number;
|
|
332
318
|
}, createRenderPassIds?: boolean): void;
|
|
333
319
|
/**
|
|
@@ -380,7 +366,7 @@ export declare class RenderTargetTexture extends Texture implements IRenderTarge
|
|
|
380
366
|
*/
|
|
381
367
|
getRenderHeight(): number;
|
|
382
368
|
/**
|
|
383
|
-
* Gets the actual number of layers of the texture.
|
|
369
|
+
* Gets the actual number of layers of the texture or, in the case of a 3D texture, return the depth.
|
|
384
370
|
* @returns the number of layers
|
|
385
371
|
*/
|
|
386
372
|
getRenderLayers(): number;
|
|
@@ -410,10 +396,7 @@ export declare class RenderTargetTexture extends Texture implements IRenderTarge
|
|
|
410
396
|
* - an object containing { width: number, height: number }
|
|
411
397
|
* - or an object containing a ratio { ratio: number }
|
|
412
398
|
*/
|
|
413
|
-
resize(size:
|
|
414
|
-
width: number;
|
|
415
|
-
height: number;
|
|
416
|
-
} | {
|
|
399
|
+
resize(size: TextureSize | {
|
|
417
400
|
ratio: number;
|
|
418
401
|
}): void;
|
|
419
402
|
private _defaultRenderListPrepared;
|
|
@@ -473,7 +473,7 @@ export class RenderTargetTexture extends Texture {
|
|
|
473
473
|
return this._size;
|
|
474
474
|
}
|
|
475
475
|
/**
|
|
476
|
-
* Gets the actual number of layers of the texture.
|
|
476
|
+
* Gets the actual number of layers of the texture or, in the case of a 3D texture, return the depth.
|
|
477
477
|
* @returns the number of layers
|
|
478
478
|
*/
|
|
479
479
|
getRenderLayers() {
|
|
@@ -481,6 +481,10 @@ export class RenderTargetTexture extends Texture {
|
|
|
481
481
|
if (layers) {
|
|
482
482
|
return layers;
|
|
483
483
|
}
|
|
484
|
+
const depth = this._size.depth;
|
|
485
|
+
if (depth) {
|
|
486
|
+
return depth;
|
|
487
|
+
}
|
|
484
488
|
return 0;
|
|
485
489
|
}
|
|
486
490
|
/**
|
|
@@ -617,7 +621,7 @@ export class RenderTargetTexture extends Texture {
|
|
|
617
621
|
this._defaultRenderListPrepared = false;
|
|
618
622
|
let returnValue = checkReadiness;
|
|
619
623
|
if (!checkReadiness) {
|
|
620
|
-
if (this.is2DArray && !this.isMulti) {
|
|
624
|
+
if ((this.is2DArray || this.is3D) && !this.isMulti) {
|
|
621
625
|
for (let layer = 0; layer < this.getRenderLayers(); layer++) {
|
|
622
626
|
this._renderToTarget(0, useCameraPostProcess, dumpForDebug, layer, camera);
|
|
623
627
|
scene.incrementRenderId();
|
|
@@ -640,7 +644,7 @@ export class RenderTargetTexture extends Texture {
|
|
|
640
644
|
// We probably didn't execute scene.render() yet, so make sure we have a view/projection matrix setup for the scene
|
|
641
645
|
scene.updateTransformMatrix();
|
|
642
646
|
}
|
|
643
|
-
const numLayers = this.is2DArray ? this.getRenderLayers() : this.isCube ? 6 : 1;
|
|
647
|
+
const numLayers = this.is2DArray || this.is3D ? this.getRenderLayers() : this.isCube ? 6 : 1;
|
|
644
648
|
for (let layer = 0; layer < numLayers && returnValue; layer++) {
|
|
645
649
|
let currentRenderList = null;
|
|
646
650
|
const defaultRenderList = this.renderList ? this.renderList : scene.getActiveMeshes().data;
|
|
@@ -673,7 +677,7 @@ export class RenderTargetTexture extends Texture {
|
|
|
673
677
|
}
|
|
674
678
|
}
|
|
675
679
|
this.onAfterRenderObservable.notifyObservers(layer);
|
|
676
|
-
if (this.is2DArray || this.isCube) {
|
|
680
|
+
if (this.is2DArray || this.is3D || this.isCube) {
|
|
677
681
|
scene.incrementRenderId();
|
|
678
682
|
scene.resetCachedMaterial();
|
|
679
683
|
}
|
|
@@ -812,7 +816,7 @@ export class RenderTargetTexture extends Texture {
|
|
|
812
816
|
engine._debugPushGroup?.(`render to face #${faceIndex} layer #${layer}`, 1);
|
|
813
817
|
// Bind
|
|
814
818
|
this._prepareFrame(scene, faceIndex, layer, useCameraPostProcess);
|
|
815
|
-
if (this.is2DArray) {
|
|
819
|
+
if (this.is2DArray || this.is3D) {
|
|
816
820
|
engine.currentRenderPassId = this._renderPassIds[layer];
|
|
817
821
|
this.onBeforeRenderObservable.notifyObservers(layer);
|
|
818
822
|
}
|
|
@@ -827,7 +831,7 @@ export class RenderTargetTexture extends Texture {
|
|
|
827
831
|
const defaultRenderList = this.renderList ? this.renderList : scene.getActiveMeshes().data;
|
|
828
832
|
const defaultRenderListLength = this.renderList ? this.renderList.length : scene.getActiveMeshes().length;
|
|
829
833
|
if (this.getCustomRenderList) {
|
|
830
|
-
currentRenderList = this.getCustomRenderList(this.is2DArray ? layer : faceIndex, defaultRenderList, defaultRenderListLength);
|
|
834
|
+
currentRenderList = this.getCustomRenderList(this.is2DArray || this.is3D ? layer : faceIndex, defaultRenderList, defaultRenderListLength);
|
|
831
835
|
}
|
|
832
836
|
if (!currentRenderList) {
|
|
833
837
|
// No custom render list provided, we prepare the rendering for the default list, but check
|