@babylonjs/core 8.0.0 → 8.0.2
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/Audio/audioEngine.js +2 -0
- package/Audio/audioEngine.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js +2 -5
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheBindGroups.js +1 -1
- package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
- package/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/Engines/thinEngine.d.ts +1 -0
- package/Engines/thinEngine.js +7 -1
- package/Engines/thinEngine.js.map +1 -1
- package/FlowGraph/flowGraphCoordinator.d.ts +1 -0
- package/FlowGraph/flowGraphCoordinator.js +11 -4
- package/FlowGraph/flowGraphCoordinator.js.map +1 -1
- package/FrameGraph/Node/nodeRenderGraphBlock.js +1 -1
- package/FrameGraph/Node/nodeRenderGraphBlock.js.map +1 -1
- package/FrameGraph/Node/nodeRenderGraphBlockConnectionPoint.js +1 -1
- package/FrameGraph/Node/nodeRenderGraphBlockConnectionPoint.js.map +1 -1
- package/Materials/Node/Blocks/PBR/subSurfaceBlock.d.ts +4 -0
- package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +11 -0
- package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
- package/Materials/Node/nodeMaterialBlockConnectionPoint.js +1 -1
- package/Materials/Node/nodeMaterialBlockConnectionPoint.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.d.ts +1 -0
- package/Materials/PBR/pbrBaseMaterial.js +4 -0
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/PBR/pbrSubSurfaceConfiguration.d.ts +15 -0
- package/Materials/PBR/pbrSubSurfaceConfiguration.js +20 -0
- package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
- package/Materials/Textures/thinTexture.js +1 -1
- package/Materials/Textures/thinTexture.js.map +1 -1
- package/Meshes/Node/nodeGeometryBlockConnectionPoint.js +1 -1
- package/Meshes/Node/nodeGeometryBlockConnectionPoint.js.map +1 -1
- package/Meshes/instancedMesh.js +1 -0
- package/Meshes/instancedMesh.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsPluginMaterial.js +2 -2
- package/Rendering/IBLShadows/iblShadowsPluginMaterial.js.map +1 -1
- package/Rendering/objectRenderer.js +5 -1
- package/Rendering/objectRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/lightFragment.js +12 -2
- package/Shaders/ShadersInclude/lightFragment.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockDirectLighting.js +3 -0
- package/Shaders/ShadersInclude/pbrBlockDirectLighting.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockFinalLitComponents.js +5 -0
- package/Shaders/ShadersInclude/pbrBlockFinalLitComponents.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockFinalUnlitComponents.js +3 -3
- package/Shaders/ShadersInclude/pbrBlockFinalUnlitComponents.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockNormalFinal.js +4 -0
- package/Shaders/ShadersInclude/pbrBlockNormalFinal.js.map +1 -1
- package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js +5 -2
- package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
- package/Shaders/iblVoxelGrid.vertex.d.ts +10 -0
- package/Shaders/iblVoxelGrid.vertex.js +23 -1
- package/Shaders/iblVoxelGrid.vertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/lightFragment.js +13 -3
- package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockDirectLighting.js +3 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockDirectLighting.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockFinalLitComponents.js +5 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockFinalLitComponents.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockFinalUnlitComponents.js +3 -3
- package/ShadersWGSL/ShadersInclude/pbrBlockFinalUnlitComponents.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockNormalFinal.js +4 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockNormalFinal.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js +5 -2
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
- package/ShadersWGSL/iblVoxelGrid.vertex.d.ts +10 -0
- package/ShadersWGSL/iblVoxelGrid.vertex.js +26 -3
- package/ShadersWGSL/iblVoxelGrid.vertex.js.map +1 -1
- package/package.json +1 -1
|
@@ -473,7 +473,7 @@ export class NodeMaterialConnectionPoint {
|
|
|
473
473
|
connectTo(connectionPoint, ignoreConstraints = false) {
|
|
474
474
|
if (!ignoreConstraints && !this.canConnectTo(connectionPoint)) {
|
|
475
475
|
// eslint-disable-next-line no-throw-literal
|
|
476
|
-
throw
|
|
476
|
+
throw `Cannot connect these two connectors. source: "${this.ownerBlock.name}".${this.name}, target: "${connectionPoint.ownerBlock.name}".${connectionPoint.name}`;
|
|
477
477
|
}
|
|
478
478
|
this._endpoints.push(connectionPoint);
|
|
479
479
|
connectionPoint._connectedPoint = this;
|
|
@@ -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 { Observer } 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 const 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 const 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 _preventBubbleUp = false;\r\n\r\n /** @internal */\r\n public readonly _ownerBlock: NodeMaterialBlock;\r\n\r\n private _connectedPointBackingField: Nullable<NodeMaterialConnectionPoint> = null;\r\n private _connectedPointTypeChangedObserver: Nullable<Observer<NodeMaterialBlockConnectionPointTypes>>;\r\n\r\n private get _connectedPoint(): Nullable<NodeMaterialConnectionPoint> {\r\n return this._connectedPointBackingField;\r\n }\r\n\r\n private set _connectedPoint(value: Nullable<NodeMaterialConnectionPoint>) {\r\n if (this._connectedPointBackingField === value) {\r\n return;\r\n }\r\n\r\n this._connectedPointTypeChangedObserver?.remove();\r\n this._updateTypeDependentState(() => (this._connectedPointBackingField = value));\r\n if (this._connectedPointBackingField) {\r\n this._connectedPointTypeChangedObserver = this._connectedPointBackingField.onTypeChangedObservable.add(() => {\r\n this._notifyTypeChanged();\r\n });\r\n }\r\n }\r\n\r\n private readonly _endpoints = new Array<NodeMaterialConnectionPoint>();\r\n private _associatedVariableName: string;\r\n private readonly _direction: NodeMaterialConnectionPointDirection;\r\n\r\n /** @internal */\r\n public _redirectedSource: Nullable<NodeMaterialConnectionPoint> = null;\r\n\r\n private _typeConnectionSourceBackingField: Nullable<NodeMaterialConnectionPoint> = null;\r\n private _typeConnectionSourceTypeChangedObserver: Nullable<Observer<NodeMaterialBlockConnectionPointTypes>>;\r\n\r\n /** @internal */\r\n public get _typeConnectionSource(): Nullable<NodeMaterialConnectionPoint> {\r\n return this._typeConnectionSourceBackingField;\r\n }\r\n\r\n /** @internal */\r\n public set _typeConnectionSource(value: Nullable<NodeMaterialConnectionPoint>) {\r\n if (this._typeConnectionSourceBackingField === value) {\r\n return;\r\n }\r\n\r\n this._typeConnectionSourceTypeChangedObserver?.remove();\r\n this._updateTypeDependentState(() => (this._typeConnectionSourceBackingField = value));\r\n if (this._typeConnectionSourceBackingField) {\r\n this._typeConnectionSourceTypeChangedObserver = this._typeConnectionSourceBackingField.onTypeChangedObservable.add(() => {\r\n this._notifyTypeChanged();\r\n });\r\n }\r\n }\r\n\r\n private _defaultConnectionPointTypeBackingField: Nullable<NodeMaterialBlockConnectionPointTypes> = null;\r\n\r\n /** @internal */\r\n public get _defaultConnectionPointType(): Nullable<NodeMaterialBlockConnectionPointTypes> {\r\n return this._defaultConnectionPointTypeBackingField;\r\n }\r\n\r\n /** @internal */\r\n public set _defaultConnectionPointType(value: Nullable<NodeMaterialBlockConnectionPointTypes>) {\r\n this._updateTypeDependentState(() => (this._defaultConnectionPointTypeBackingField = value));\r\n }\r\n\r\n /** @internal */\r\n public _isMainLinkSource = false;\r\n\r\n private _linkedConnectionSourceBackingField: Nullable<NodeMaterialConnectionPoint> = null;\r\n private _linkedConnectionSourceTypeChangedObserver: Nullable<Observer<NodeMaterialBlockConnectionPointTypes>>;\r\n\r\n /** @internal */\r\n public get _linkedConnectionSource(): Nullable<NodeMaterialConnectionPoint> {\r\n return this._linkedConnectionSourceBackingField;\r\n }\r\n\r\n /** @internal */\r\n public set _linkedConnectionSource(value: Nullable<NodeMaterialConnectionPoint>) {\r\n if (this._linkedConnectionSourceBackingField === value) {\r\n return;\r\n }\r\n\r\n this._linkedConnectionSourceTypeChangedObserver?.remove();\r\n this._updateTypeDependentState(() => (this._linkedConnectionSourceBackingField = value));\r\n this._isMainLinkSource = false;\r\n if (this._linkedConnectionSourceBackingField) {\r\n this._linkedConnectionSourceTypeChangedObserver = this._linkedConnectionSourceBackingField.onTypeChangedObservable.add(() => {\r\n this._notifyTypeChanged();\r\n });\r\n }\r\n }\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 /** @internal */\r\n public _forPostBuild = 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 readonly onConnectionObservable = new Observable<NodeMaterialConnectionPoint>();\r\n\r\n /**\r\n * Observable triggered when this point is disconnected\r\n */\r\n public readonly onDisconnectionObservable = new Observable<NodeMaterialConnectionPoint>();\r\n\r\n /**\r\n * Observable triggered when the type of the connection point is changed\r\n */\r\n public readonly onTypeChangedObservable = new Observable<NodeMaterialBlockConnectionPointTypes>();\r\n private _isTypeChangeObservableNotifying = false;\r\n\r\n /**\r\n * Gets the declaration variable name in the shader\r\n */\r\n public get declarationVariableName(): string {\r\n if (this._ownerBlock.isInput) {\r\n return (this._ownerBlock as InputBlock).declarationVariableName;\r\n }\r\n\r\n if ((!this._enforceAssociatedVariableName || !this._associatedVariableName) && this._connectedPoint) {\r\n return this._connectedPoint.declarationVariableName;\r\n }\r\n\r\n return this._associatedVariableName;\r\n }\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._isMainLinkSource && 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) {\r\n if (this._linkedConnectionSource.isConnected) {\r\n if (this._linkedConnectionSource.connectedPoint!._redirectedSource && this._linkedConnectionSource.connectedPoint!._redirectedSource.isConnected) {\r\n return this._linkedConnectionSource.connectedPoint!._redirectedSource.type;\r\n }\r\n return this._linkedConnectionSource.type;\r\n }\r\n if (this._linkedConnectionSource._defaultConnectionPointType) {\r\n return this._linkedConnectionSource._defaultConnectionPointType;\r\n }\r\n }\r\n\r\n if (this._defaultConnectionPointType) {\r\n return this._defaultConnectionPointType;\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._updateTypeDependentState(() => (this._type = value));\r\n }\r\n\r\n /**\r\n * Gets or sets the connection point name\r\n */\r\n public readonly 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 if (this.displayName) {\r\n serializationObject.displayName = this.displayName;\r\n }\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 this.onTypeChangedObservable.clear();\r\n\r\n this._connectedPoint = null;\r\n this._typeConnectionSource = null;\r\n this._linkedConnectionSource = null;\r\n }\r\n\r\n private _updateTypeDependentState(update: () => void) {\r\n const previousType = this.type;\r\n update();\r\n if (this.type !== previousType) {\r\n this._notifyTypeChanged();\r\n }\r\n }\r\n\r\n private _notifyTypeChanged() {\r\n // Disallow re-entrancy\r\n if (this._isTypeChangeObservableNotifying) {\r\n return;\r\n }\r\n\r\n this._isTypeChangeObservableNotifying = true;\r\n this.onTypeChangedObservable.notifyObservers(this.type);\r\n this._isTypeChangeObservableNotifying = false;\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 { Observer } 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 const 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 const 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 _preventBubbleUp = false;\r\n\r\n /** @internal */\r\n public readonly _ownerBlock: NodeMaterialBlock;\r\n\r\n private _connectedPointBackingField: Nullable<NodeMaterialConnectionPoint> = null;\r\n private _connectedPointTypeChangedObserver: Nullable<Observer<NodeMaterialBlockConnectionPointTypes>>;\r\n\r\n private get _connectedPoint(): Nullable<NodeMaterialConnectionPoint> {\r\n return this._connectedPointBackingField;\r\n }\r\n\r\n private set _connectedPoint(value: Nullable<NodeMaterialConnectionPoint>) {\r\n if (this._connectedPointBackingField === value) {\r\n return;\r\n }\r\n\r\n this._connectedPointTypeChangedObserver?.remove();\r\n this._updateTypeDependentState(() => (this._connectedPointBackingField = value));\r\n if (this._connectedPointBackingField) {\r\n this._connectedPointTypeChangedObserver = this._connectedPointBackingField.onTypeChangedObservable.add(() => {\r\n this._notifyTypeChanged();\r\n });\r\n }\r\n }\r\n\r\n private readonly _endpoints = new Array<NodeMaterialConnectionPoint>();\r\n private _associatedVariableName: string;\r\n private readonly _direction: NodeMaterialConnectionPointDirection;\r\n\r\n /** @internal */\r\n public _redirectedSource: Nullable<NodeMaterialConnectionPoint> = null;\r\n\r\n private _typeConnectionSourceBackingField: Nullable<NodeMaterialConnectionPoint> = null;\r\n private _typeConnectionSourceTypeChangedObserver: Nullable<Observer<NodeMaterialBlockConnectionPointTypes>>;\r\n\r\n /** @internal */\r\n public get _typeConnectionSource(): Nullable<NodeMaterialConnectionPoint> {\r\n return this._typeConnectionSourceBackingField;\r\n }\r\n\r\n /** @internal */\r\n public set _typeConnectionSource(value: Nullable<NodeMaterialConnectionPoint>) {\r\n if (this._typeConnectionSourceBackingField === value) {\r\n return;\r\n }\r\n\r\n this._typeConnectionSourceTypeChangedObserver?.remove();\r\n this._updateTypeDependentState(() => (this._typeConnectionSourceBackingField = value));\r\n if (this._typeConnectionSourceBackingField) {\r\n this._typeConnectionSourceTypeChangedObserver = this._typeConnectionSourceBackingField.onTypeChangedObservable.add(() => {\r\n this._notifyTypeChanged();\r\n });\r\n }\r\n }\r\n\r\n private _defaultConnectionPointTypeBackingField: Nullable<NodeMaterialBlockConnectionPointTypes> = null;\r\n\r\n /** @internal */\r\n public get _defaultConnectionPointType(): Nullable<NodeMaterialBlockConnectionPointTypes> {\r\n return this._defaultConnectionPointTypeBackingField;\r\n }\r\n\r\n /** @internal */\r\n public set _defaultConnectionPointType(value: Nullable<NodeMaterialBlockConnectionPointTypes>) {\r\n this._updateTypeDependentState(() => (this._defaultConnectionPointTypeBackingField = value));\r\n }\r\n\r\n /** @internal */\r\n public _isMainLinkSource = false;\r\n\r\n private _linkedConnectionSourceBackingField: Nullable<NodeMaterialConnectionPoint> = null;\r\n private _linkedConnectionSourceTypeChangedObserver: Nullable<Observer<NodeMaterialBlockConnectionPointTypes>>;\r\n\r\n /** @internal */\r\n public get _linkedConnectionSource(): Nullable<NodeMaterialConnectionPoint> {\r\n return this._linkedConnectionSourceBackingField;\r\n }\r\n\r\n /** @internal */\r\n public set _linkedConnectionSource(value: Nullable<NodeMaterialConnectionPoint>) {\r\n if (this._linkedConnectionSourceBackingField === value) {\r\n return;\r\n }\r\n\r\n this._linkedConnectionSourceTypeChangedObserver?.remove();\r\n this._updateTypeDependentState(() => (this._linkedConnectionSourceBackingField = value));\r\n this._isMainLinkSource = false;\r\n if (this._linkedConnectionSourceBackingField) {\r\n this._linkedConnectionSourceTypeChangedObserver = this._linkedConnectionSourceBackingField.onTypeChangedObservable.add(() => {\r\n this._notifyTypeChanged();\r\n });\r\n }\r\n }\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 /** @internal */\r\n public _forPostBuild = 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 readonly onConnectionObservable = new Observable<NodeMaterialConnectionPoint>();\r\n\r\n /**\r\n * Observable triggered when this point is disconnected\r\n */\r\n public readonly onDisconnectionObservable = new Observable<NodeMaterialConnectionPoint>();\r\n\r\n /**\r\n * Observable triggered when the type of the connection point is changed\r\n */\r\n public readonly onTypeChangedObservable = new Observable<NodeMaterialBlockConnectionPointTypes>();\r\n private _isTypeChangeObservableNotifying = false;\r\n\r\n /**\r\n * Gets the declaration variable name in the shader\r\n */\r\n public get declarationVariableName(): string {\r\n if (this._ownerBlock.isInput) {\r\n return (this._ownerBlock as InputBlock).declarationVariableName;\r\n }\r\n\r\n if ((!this._enforceAssociatedVariableName || !this._associatedVariableName) && this._connectedPoint) {\r\n return this._connectedPoint.declarationVariableName;\r\n }\r\n\r\n return this._associatedVariableName;\r\n }\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._isMainLinkSource && 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) {\r\n if (this._linkedConnectionSource.isConnected) {\r\n if (this._linkedConnectionSource.connectedPoint!._redirectedSource && this._linkedConnectionSource.connectedPoint!._redirectedSource.isConnected) {\r\n return this._linkedConnectionSource.connectedPoint!._redirectedSource.type;\r\n }\r\n return this._linkedConnectionSource.type;\r\n }\r\n if (this._linkedConnectionSource._defaultConnectionPointType) {\r\n return this._linkedConnectionSource._defaultConnectionPointType;\r\n }\r\n }\r\n\r\n if (this._defaultConnectionPointType) {\r\n return this._defaultConnectionPointType;\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._updateTypeDependentState(() => (this._type = value));\r\n }\r\n\r\n /**\r\n * Gets or sets the connection point name\r\n */\r\n public readonly 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. source: \"${this.ownerBlock.name}\".${this.name}, target: \"${connectionPoint.ownerBlock.name}\".${connectionPoint.name}`;\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 if (this.displayName) {\r\n serializationObject.displayName = this.displayName;\r\n }\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 this.onTypeChangedObservable.clear();\r\n\r\n this._connectedPoint = null;\r\n this._typeConnectionSource = null;\r\n this._linkedConnectionSource = null;\r\n }\r\n\r\n private _updateTypeDependentState(update: () => void) {\r\n const previousType = this.type;\r\n update();\r\n if (this.type !== previousType) {\r\n this._notifyTypeChanged();\r\n }\r\n }\r\n\r\n private _notifyTypeChanged() {\r\n // Disallow re-entrancy\r\n if (this._isTypeChangeObservableNotifying) {\r\n return;\r\n }\r\n\r\n this._isTypeChangeObservableNotifying = true;\r\n this.onTypeChangedObservable.notifyObservers(this.type);\r\n this._isTypeChangeObservableNotifying = false;\r\n }\r\n}\r\n"]}
|
|
@@ -203,6 +203,7 @@ export declare class PBRMaterialDefines extends MaterialDefines implements IImag
|
|
|
203
203
|
USEPHYSICALLIGHTFALLOFF: boolean;
|
|
204
204
|
USEGLTFLIGHTFALLOFF: boolean;
|
|
205
205
|
TWOSIDEDLIGHTING: boolean;
|
|
206
|
+
MIRRORED: boolean;
|
|
206
207
|
SHADOWFLOAT: boolean;
|
|
207
208
|
CLIPPLANE: boolean;
|
|
208
209
|
CLIPPLANE2: boolean;
|
|
@@ -216,6 +216,7 @@ export class PBRMaterialDefines extends MaterialDefines {
|
|
|
216
216
|
this.USEPHYSICALLIGHTFALLOFF = false;
|
|
217
217
|
this.USEGLTFLIGHTFALLOFF = false;
|
|
218
218
|
this.TWOSIDEDLIGHTING = false;
|
|
219
|
+
this.MIRRORED = false;
|
|
219
220
|
this.SHADOWFLOAT = false;
|
|
220
221
|
this.CLIPPLANE = false;
|
|
221
222
|
this.CLIPPLANE2 = false;
|
|
@@ -1325,6 +1326,7 @@ export class PBRBaseMaterial extends PushMaterial {
|
|
|
1325
1326
|
defines.RGBDREFLECTION = reflectionTexture.isRGBD;
|
|
1326
1327
|
defines.LODINREFLECTIONALPHA = reflectionTexture.lodLevelInAlpha;
|
|
1327
1328
|
defines.LINEARSPECULARREFLECTION = reflectionTexture.linearSpecularLOD;
|
|
1329
|
+
defines.USEIRRADIANCEMAP = false;
|
|
1328
1330
|
if (this.realTimeFiltering && this.realTimeFilteringQuality > 0) {
|
|
1329
1331
|
defines.NUM_SAMPLES = "" + this.realTimeFilteringQuality;
|
|
1330
1332
|
if (engine._features.needTypeSuffixInShaderConstants) {
|
|
@@ -1545,6 +1547,8 @@ export class PBRBaseMaterial extends PushMaterial {
|
|
|
1545
1547
|
else {
|
|
1546
1548
|
defines.TWOSIDEDLIGHTING = false;
|
|
1547
1549
|
}
|
|
1550
|
+
// We need it to not invert normals in two sided lighting mode (based on the winding of the face)
|
|
1551
|
+
defines.MIRRORED = !!scene._mirroredCameraPosition;
|
|
1548
1552
|
defines.SPECULARAA = engine.getCaps().standardDerivatives && this._enableSpecularAntiAliasing;
|
|
1549
1553
|
}
|
|
1550
1554
|
if (defines._areTexturesDirty || defines._areMiscDirty) {
|