@babylonjs/core 7.5.0 → 7.6.1
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/sound.js +3 -0
- package/Audio/sound.js.map +1 -1
- package/Bones/bone.js +1 -1
- package/Bones/bone.js.map +1 -1
- package/Buffers/storageBuffer.d.ts +2 -2
- package/Buffers/storageBuffer.js.map +1 -1
- package/Cameras/arcRotateCamera.js +3 -0
- package/Cameras/arcRotateCamera.js.map +1 -1
- package/Cameras/camera.js +1 -1
- package/Cameras/camera.js.map +1 -1
- package/Cameras/flyCamera.js +3 -0
- package/Cameras/flyCamera.js.map +1 -1
- package/Cameras/followCamera.js +4 -0
- package/Cameras/followCamera.js.map +1 -1
- package/Cameras/freeCamera.js +3 -0
- package/Cameras/freeCamera.js.map +1 -1
- package/Engines/Extensions/index.d.ts +0 -3
- package/Engines/Extensions/index.js +0 -3
- package/Engines/Extensions/index.js.map +1 -1
- package/Engines/WebGPU/Extensions/index.d.ts +0 -3
- package/Engines/WebGPU/Extensions/index.js +0 -3
- package/Engines/WebGPU/Extensions/index.js.map +1 -1
- package/Engines/abstractEngine.d.ts +0 -51
- package/Engines/abstractEngine.js +7 -3
- package/Engines/abstractEngine.js.map +1 -1
- package/Engines/engine.js +5 -2
- package/Engines/engine.js.map +1 -1
- package/Engines/nativeEngine.js +2 -2
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/thinEngine.functions.d.ts +0 -10
- package/Engines/thinEngine.functions.js +0 -19
- package/Engines/thinEngine.functions.js.map +1 -1
- package/Engines/thinEngine.js +18 -1
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.d.ts +54 -2
- package/Engines/webgpuEngine.js +147 -0
- package/Engines/webgpuEngine.js.map +1 -1
- package/Inputs/scene.inputManager.d.ts +1 -0
- package/Inputs/scene.inputManager.js +1 -0
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Lights/directionalLight.js +3 -0
- package/Lights/directionalLight.js.map +1 -1
- package/Lights/hemisphericLight.js +3 -0
- package/Lights/hemisphericLight.js.map +1 -1
- package/Lights/light.js +1 -1
- package/Lights/light.js.map +1 -1
- package/Lights/pointLight.js +3 -0
- package/Lights/pointLight.js.map +1 -1
- package/Lights/spotLight.js +3 -0
- package/Lights/spotLight.js.map +1 -1
- package/Materials/Node/Blocks/Dual/clipPlanesBlock.d.ts +1 -1
- package/Materials/Node/Blocks/Dual/clipPlanesBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/currentScreenBlock.d.ts +1 -1
- package/Materials/Node/Blocks/Dual/currentScreenBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/fogBlock.d.ts +1 -1
- package/Materials/Node/Blocks/Dual/fogBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/imageSourceBlock.d.ts +1 -1
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js +9 -3
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.d.ts +1 -1
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/sceneDepthBlock.d.ts +1 -1
- package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/textureBlock.d.ts +2 -2
- package/Materials/Node/Blocks/Dual/textureBlock.js +13 -3
- package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.d.ts +1 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/perturbNormalBlock.d.ts +1 -1
- package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/screenSizeBlock.d.ts +1 -1
- package/Materials/Node/Blocks/Fragment/screenSizeBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/shadowMapBlock.d.ts +1 -1
- package/Materials/Node/Blocks/Fragment/shadowMapBlock.js.map +1 -1
- package/Materials/Node/Blocks/Input/animatedInputBlockTypes.d.ts +2 -1
- package/Materials/Node/Blocks/Input/animatedInputBlockTypes.js +1 -0
- package/Materials/Node/Blocks/Input/animatedInputBlockTypes.js.map +1 -1
- package/Materials/Node/Blocks/Input/inputBlock.d.ts +1 -1
- package/Materials/Node/Blocks/Input/inputBlock.js +16 -0
- package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/anisotropyBlock.d.ts +1 -1
- package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/clearCoatBlock.d.ts +1 -1
- package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.d.ts +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.d.ts +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/refractionBlock.d.ts +1 -1
- package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/lightInformationBlock.d.ts +1 -1
- package/Materials/Node/Blocks/Vertex/lightInformationBlock.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/vertexOutputBlock.d.ts +1 -1
- package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js.map +1 -1
- package/Materials/Node/Blocks/baseMathBlock.js +2 -4
- package/Materials/Node/Blocks/baseMathBlock.js.map +1 -1
- package/Materials/Node/Blocks/triPlanarBlock.d.ts +1 -1
- package/Materials/Node/Blocks/triPlanarBlock.js.map +1 -1
- package/Materials/Node/Blocks/trigonometryBlock.d.ts +3 -1
- package/Materials/Node/Blocks/trigonometryBlock.js +6 -0
- package/Materials/Node/Blocks/trigonometryBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.d.ts +6 -3
- package/Materials/Node/nodeMaterial.js +9 -6
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/Node/nodeMaterialBlock.d.ts +1 -1
- package/Materials/Node/nodeMaterialBlock.js +1 -1
- package/Materials/Node/nodeMaterialBlock.js.map +1 -1
- package/Materials/Node/nodeMaterialBlockConnectionPoint.d.ts +34 -14
- package/Materials/Node/nodeMaterialBlockConnectionPoint.js +87 -9
- package/Materials/Node/nodeMaterialBlockConnectionPoint.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildState.d.ts +1 -1
- package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
- package/Materials/Textures/Loaders/ktxTextureLoader.js +1 -1
- package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
- package/Materials/Textures/htmlElementTexture.d.ts +0 -1
- package/Materials/Textures/htmlElementTexture.js +7 -2
- package/Materials/Textures/htmlElementTexture.js.map +1 -1
- package/Materials/Textures/videoTexture.js +4 -2
- package/Materials/Textures/videoTexture.js.map +1 -1
- package/Materials/effect.functions.d.ts +1 -1
- package/Materials/effect.functions.js +4 -4
- package/Materials/effect.functions.js.map +1 -1
- package/Materials/effect.js +1 -1
- package/Materials/effect.js.map +1 -1
- package/Materials/effect.webgl.functions.js +2 -2
- package/Materials/effect.webgl.functions.js.map +1 -1
- package/Materials/imageProcessingConfiguration.js +3 -0
- package/Materials/imageProcessingConfiguration.js.map +1 -1
- package/Materials/materialPluginBase.js +3 -0
- package/Materials/materialPluginBase.js.map +1 -1
- package/Materials/shaderMaterial.js +18 -8
- package/Materials/shaderMaterial.js.map +1 -1
- package/Maths/math.color.d.ts +85 -82
- package/Maths/math.color.js +34 -27
- package/Maths/math.color.js.map +1 -1
- package/Maths/math.vector.d.ts +202 -202
- package/Maths/math.vector.js +133 -130
- package/Maths/math.vector.js.map +1 -1
- package/Maths/tensor.d.ts +44 -42
- package/Maths/tensor.js.map +1 -1
- package/Meshes/Compression/dracoCompression.d.ts +7 -0
- package/Meshes/Compression/dracoCompression.js +14 -0
- package/Meshes/Compression/dracoCompression.js.map +1 -1
- package/Meshes/instancedMesh.js +3 -0
- package/Meshes/instancedMesh.js.map +1 -1
- package/Meshes/transformNode.js +1 -1
- package/Meshes/transformNode.js.map +1 -1
- package/Misc/dumpTools.js +11 -0
- package/Misc/dumpTools.js.map +1 -1
- package/Misc/fileTools.d.ts +9 -9
- package/Misc/fileTools.js +17 -15
- package/Misc/fileTools.js.map +1 -1
- package/Misc/tools.d.ts +5 -0
- package/Misc/tools.js +9 -0
- package/Misc/tools.js.map +1 -1
- package/Misc/typeStore.d.ts +4 -0
- package/Misc/typeStore.js +11 -0
- package/Misc/typeStore.js.map +1 -1
- package/NOTICE.md +8 -0
- package/Particles/baseParticleSystem.js +3 -0
- package/Particles/baseParticleSystem.js.map +1 -1
- package/Particles/computeShaderParticleSystem.d.ts +2 -2
- package/Particles/computeShaderParticleSystem.js.map +1 -1
- package/Physics/v1/Plugins/ammoJSPlugin.js +39 -10
- package/Physics/v1/Plugins/ammoJSPlugin.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +3 -0
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js +4 -0
- package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.d.ts +7 -0
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +40 -20
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
- package/Rendering/prePassRenderer.js +3 -0
- package/Rendering/prePassRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/screenSpaceRayTrace.js +8 -0
- package/Shaders/ShadersInclude/screenSpaceRayTrace.js.map +1 -1
- package/Shaders/fluidRenderingRender.fragment.js +11 -2
- package/Shaders/fluidRenderingRender.fragment.js.map +1 -1
- package/Shaders/screenSpaceReflection2.fragment.js +7 -1
- package/Shaders/screenSpaceReflection2.fragment.js.map +1 -1
- package/Shaders/sprites.fragment.d.ts +2 -0
- package/Shaders/sprites.fragment.js +8 -1
- package/Shaders/sprites.fragment.js.map +1 -1
- package/Shaders/sprites.vertex.d.ts +2 -0
- package/Shaders/sprites.vertex.js +4 -0
- package/Shaders/sprites.vertex.js.map +1 -1
- package/Shaders/ssao2.fragment.js +1 -1
- package/Shaders/ssao2.fragment.js.map +1 -1
- package/Sprites/spriteManager.d.ts +3 -0
- package/Sprites/spriteManager.js +11 -0
- package/Sprites/spriteManager.js.map +1 -1
- package/Sprites/spriteRenderer.d.ts +11 -3
- package/Sprites/spriteRenderer.js +49 -32
- package/Sprites/spriteRenderer.js.map +1 -1
- package/XR/features/WebXRNearInteraction.d.ts +6 -0
- package/XR/features/WebXRNearInteraction.js +14 -2
- package/XR/features/WebXRNearInteraction.js.map +1 -1
- package/XR/webXRManagedOutputCanvas.d.ts +2 -0
- package/XR/webXRManagedOutputCanvas.js +14 -6
- package/XR/webXRManagedOutputCanvas.js.map +1 -1
- package/abstractScene.js +3 -0
- package/abstractScene.js.map +1 -1
- package/assets/glslang/glslang.js +113 -0
- package/assets/glslang/glslang.wasm +0 -0
- package/assets/twgsl/twgsl.js +53 -0
- package/assets/twgsl/twgsl.wasm +0 -0
- package/node.d.ts +2 -1
- package/node.js +5 -1
- package/node.js.map +1 -1
- package/package.json +1 -1
- package/scene.js +3 -0
- package/scene.js.map +1 -1
- package/Engines/Extensions/engine.externalTexture.d.ts +0 -18
- package/Engines/Extensions/engine.externalTexture.js +0 -10
- package/Engines/Extensions/engine.externalTexture.js.map +0 -1
- package/Engines/Extensions/engine.storageBuffer.d.ts +0 -39
- package/Engines/Extensions/engine.storageBuffer.js +0 -16
- package/Engines/Extensions/engine.storageBuffer.js.map +0 -1
- package/Engines/Extensions/engine.textureSampler.d.ts +0 -12
- package/Engines/Extensions/engine.textureSampler.js +0 -6
- package/Engines/Extensions/engine.textureSampler.js.map +0 -1
- package/Engines/WebGPU/Extensions/engine.externalTexture.d.ts +0 -28
- package/Engines/WebGPU/Extensions/engine.externalTexture.js +0 -18
- package/Engines/WebGPU/Extensions/engine.externalTexture.js.map +0 -1
- package/Engines/WebGPU/Extensions/engine.storageBuffer.d.ts +0 -50
- package/Engines/WebGPU/Extensions/engine.storageBuffer.js +0 -88
- package/Engines/WebGPU/Extensions/engine.storageBuffer.js.map +0 -1
- package/Engines/WebGPU/Extensions/engine.textureSampler.d.ts +0 -22
- package/Engines/WebGPU/Extensions/engine.textureSampler.js +0 -9
- package/Engines/WebGPU/Extensions/engine.textureSampler.js.map +0 -1
|
@@ -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 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 * 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"]}
|
|
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 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 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 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 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 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 /** 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._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._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 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 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"]}
|
|
@@ -2,7 +2,7 @@ import { NodeMaterialBlockConnectionPointTypes } from "./Enums/nodeMaterialBlock
|
|
|
2
2
|
import { NodeMaterialBlockTargets } from "./Enums/nodeMaterialBlockTargets";
|
|
3
3
|
import type { NodeMaterialBuildStateSharedData } from "./nodeMaterialBuildStateSharedData";
|
|
4
4
|
import { ShaderLanguage } from "../shaderLanguage";
|
|
5
|
-
import {
|
|
5
|
+
import type { NodeMaterialConnectionPoint } from "./nodeMaterialBlockConnectionPoint";
|
|
6
6
|
/**
|
|
7
7
|
* Class used to store node based material build state
|
|
8
8
|
*/
|
|
@@ -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\nimport { ShaderLanguage } from \"../shaderLanguage\";\r\nimport { type NodeMaterialConnectionPoint } from \"./nodeMaterialBlockConnectionPoint\";\r\nimport { ShaderStore as EngineShaderStore } from \"../../Engines/shaderStore\";\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 * Gets the current shader language to use\r\n */\r\n public get shaderLanguage() {\r\n return this.sharedData.nodeMaterial.shaderLanguage;\r\n }\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 if (this.shaderLanguage === ShaderLanguage.WGSL) {\r\n if (isFragmentMode) {\r\n this.compilationString = `\\n${emitComments ? \"//Entry point\\n\" : \"\"}@fragment\\nfn main(input: FragmentInputs) -> FragmentOutputs {\\n${this.compilationString}`;\r\n } else {\r\n this.compilationString = `\\n${emitComments ? \"//Entry point\\n\" : \"\"}@vertex\\nfn main(input: VertexInputs) -> FragmentInputs{\\n${this.compilationString}`;\r\n }\r\n } else {\r\n this.compilationString = `\\n${emitComments ? \"//Entry point\\n\" : \"\"}void main(void) {\\n${this.compilationString}`;\r\n }\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 if (this.shaderLanguage !== ShaderLanguage.WGSL) {\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\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, textureName = \"\") {\r\n if (this.samplers.indexOf(name) < 0) {\r\n if (this.shaderLanguage === ShaderLanguage.WGSL) {\r\n this._samplerDeclaration += `var ${name}: sampler;\\n`;\r\n this._samplerDeclaration += `var ${textureName}: texture_2d<f32>;\\n`;\r\n } else {\r\n this._samplerDeclaration += `uniform sampler2D ${name};\\n`;\r\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 _getShaderType(type: NodeMaterialBlockConnectionPointTypes) {\r\n const isWGSL = this.shaderLanguage === ShaderLanguage.WGSL;\r\n\r\n switch (type) {\r\n case NodeMaterialBlockConnectionPointTypes.Float:\r\n return isWGSL ? \"f32\" : \"float\";\r\n case NodeMaterialBlockConnectionPointTypes.Int:\r\n return isWGSL ? \"i32\" : \"int\";\r\n case NodeMaterialBlockConnectionPointTypes.Vector2:\r\n return isWGSL ? \"vec2<f32>\" : \"vec2\";\r\n case NodeMaterialBlockConnectionPointTypes.Color3:\r\n case NodeMaterialBlockConnectionPointTypes.Vector3:\r\n return isWGSL ? \"vec3<f32>\" : \"vec3\";\r\n case NodeMaterialBlockConnectionPointTypes.Color4:\r\n case NodeMaterialBlockConnectionPointTypes.Vector4:\r\n return isWGSL ? \"vec4<f32>\" : \"vec4\";\r\n case NodeMaterialBlockConnectionPointTypes.Matrix:\r\n return isWGSL ? \"mat4x4<f32>\" : \"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 const store = EngineShaderStore.GetIncludesShadersStore(this.shaderLanguage);\r\n\r\n this.functions[key] = store[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: NodeMaterialBlockConnectionPointTypes, 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 const shaderType = this._getShaderType(type);\r\n if (this.shaderLanguage === ShaderLanguage.WGSL) {\r\n this.sharedData.varyingDeclaration += `varying ${name}: ${shaderType};\\n`;\r\n } else {\r\n this.sharedData.varyingDeclaration += `varying ${shaderType} ${name};\\n`;\r\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 _getVaryingName(name: string): string {\r\n if (this.shaderLanguage === ShaderLanguage.WGSL) {\r\n return (this.target !== NodeMaterialBlockTargets.Fragment ? \"vertexOutputs.\" : \"fragmentInputs.\") + name;\r\n }\r\n\r\n return name;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _emitUniformFromString(name: string, type: NodeMaterialBlockConnectionPointTypes, 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 const shaderType = this._getShaderType(type);\r\n if (this.shaderLanguage === ShaderLanguage.WGSL) {\r\n this._uniformDeclaration += `uniform ${name}: ${shaderType};\\n`;\r\n } else {\r\n this._uniformDeclaration += `uniform ${shaderType} ${name};\\n`;\r\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 _generateTertiary(trueStatement: string, falseStatement: string, condition: string) {\r\n if (this.shaderLanguage === ShaderLanguage.WGSL) {\r\n return `select(${falseStatement}, ${trueStatement}, ${condition})`;\r\n }\r\n\r\n return `${condition} ? ${trueStatement} : ${falseStatement}`;\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 /**\r\n * @internal\r\n */\r\n public _declareOutput(output: NodeMaterialConnectionPoint): string {\r\n return this._declareLocalVar(output.associatedVariableName, output.type);\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _declareLocalVar(name: string, type: NodeMaterialBlockConnectionPointTypes): string {\r\n if (this.shaderLanguage === ShaderLanguage.WGSL) {\r\n return `var ${name}: ${this._getShaderType(type)}`;\r\n } else {\r\n return `${this._getShaderType(type)} ${name}`;\r\n }\r\n }\r\n\r\n private _convertVariableDeclarationToWGSL(type: string, dest: string, source: string): string {\r\n return source.replace(new RegExp(`(${type})\\\\s+(\\\\w+)`, \"g\"), `var $2: ${dest}`);\r\n }\r\n\r\n private _convertVariableConstructorsToWGSL(type: string, dest: string, source: string): string {\r\n return source.replace(new RegExp(`(${type})\\\\(`, \"g\"), ` ${dest}(`);\r\n }\r\n\r\n private _convertOutParametersToWGSL(source: string): string {\r\n return source.replace(new RegExp(`out\\\\s+var\\\\s+(\\\\w+)\\\\s*:\\\\s*(\\\\w+)`, \"g\"), `$1: ptr<function, $2>`);\r\n }\r\n\r\n private _convertFunctionsToWGSL(source: string): string {\r\n const regex = /var\\s+(\\w+)\\s*:\\s*(\\w+)\\((.*)\\)/;\r\n const match = source.match(regex);\r\n\r\n if (match) {\r\n const funcName = match[1];\r\n const funcType = match[2];\r\n const params = match[3]; // All parameters as a single string\r\n\r\n // Processing the parameters to match 'name: type' format\r\n const formattedParams = params.replace(/var\\s/g, \"\");\r\n\r\n // Constructing the final output string\r\n return source.replace(match[0], `fn ${funcName}(${formattedParams}) -> ${funcType}`);\r\n }\r\n return source;\r\n }\r\n\r\n public _babylonSLtoWGSL(code: string) {\r\n // variable declarations\r\n code = this._convertVariableDeclarationToWGSL(\"void\", \"voidnull\", code);\r\n code = this._convertVariableDeclarationToWGSL(\"int\", \"i32\", code);\r\n code = this._convertVariableDeclarationToWGSL(\"uint\", \"u32\", code);\r\n code = this._convertVariableDeclarationToWGSL(\"float\", \"f32\", code);\r\n code = this._convertVariableDeclarationToWGSL(\"vec2\", \"vec2f\", code);\r\n code = this._convertVariableDeclarationToWGSL(\"vec3\", \"vec3f\", code);\r\n code = this._convertVariableDeclarationToWGSL(\"vec4\", \"vec4f\", code);\r\n code = this._convertVariableDeclarationToWGSL(\"mat2\", \"mat2x2f\", code);\r\n code = this._convertVariableDeclarationToWGSL(\"mat3\", \"mat3x3f\", code);\r\n code = this._convertVariableDeclarationToWGSL(\"mat4\", \"mat4x4f\", code);\r\n\r\n // Type constructors\r\n code = this._convertVariableConstructorsToWGSL(\"float\", \"f32\", code);\r\n code = this._convertVariableConstructorsToWGSL(\"vec2\", \"vec2f\", code);\r\n code = this._convertVariableConstructorsToWGSL(\"vec3\", \"vec3f\", code);\r\n code = this._convertVariableConstructorsToWGSL(\"vec4\", \"vec4f\", code);\r\n code = this._convertVariableConstructorsToWGSL(\"mat2\", \"mat2x2f\", code);\r\n code = this._convertVariableConstructorsToWGSL(\"mat3\", \"mat3x3f\", code);\r\n code = this._convertVariableConstructorsToWGSL(\"mat4\", \"mat4x4f\", code);\r\n\r\n // Out paramters\r\n code = this._convertOutParametersToWGSL(code);\r\n code = code.replace(/\\[\\*\\]/g, \"*\");\r\n\r\n // Functions\r\n code = this._convertFunctionsToWGSL(code);\r\n\r\n // Remove voidnull\r\n code = code.replace(/\\s->\\svoidnull/g, \"\");\r\n\r\n return code;\r\n }\r\n\r\n public _babylonSLtoGLSL(code: string) {\r\n code = code.replace(/\\[\\*\\]/g, \"\");\r\n\r\n return code;\r\n }\r\n}\r\n"]}
|
|
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\nimport { ShaderLanguage } from \"../shaderLanguage\";\r\nimport type { NodeMaterialConnectionPoint } from \"./nodeMaterialBlockConnectionPoint\";\r\nimport { ShaderStore as EngineShaderStore } from \"../../Engines/shaderStore\";\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 * Gets the current shader language to use\r\n */\r\n public get shaderLanguage() {\r\n return this.sharedData.nodeMaterial.shaderLanguage;\r\n }\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 if (this.shaderLanguage === ShaderLanguage.WGSL) {\r\n if (isFragmentMode) {\r\n this.compilationString = `\\n${emitComments ? \"//Entry point\\n\" : \"\"}@fragment\\nfn main(input: FragmentInputs) -> FragmentOutputs {\\n${this.compilationString}`;\r\n } else {\r\n this.compilationString = `\\n${emitComments ? \"//Entry point\\n\" : \"\"}@vertex\\nfn main(input: VertexInputs) -> FragmentInputs{\\n${this.compilationString}`;\r\n }\r\n } else {\r\n this.compilationString = `\\n${emitComments ? \"//Entry point\\n\" : \"\"}void main(void) {\\n${this.compilationString}`;\r\n }\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 if (this.shaderLanguage !== ShaderLanguage.WGSL) {\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\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, textureName = \"\") {\r\n if (this.samplers.indexOf(name) < 0) {\r\n if (this.shaderLanguage === ShaderLanguage.WGSL) {\r\n this._samplerDeclaration += `var ${name}: sampler;\\n`;\r\n this._samplerDeclaration += `var ${textureName}: texture_2d<f32>;\\n`;\r\n } else {\r\n this._samplerDeclaration += `uniform sampler2D ${name};\\n`;\r\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 _getShaderType(type: NodeMaterialBlockConnectionPointTypes) {\r\n const isWGSL = this.shaderLanguage === ShaderLanguage.WGSL;\r\n\r\n switch (type) {\r\n case NodeMaterialBlockConnectionPointTypes.Float:\r\n return isWGSL ? \"f32\" : \"float\";\r\n case NodeMaterialBlockConnectionPointTypes.Int:\r\n return isWGSL ? \"i32\" : \"int\";\r\n case NodeMaterialBlockConnectionPointTypes.Vector2:\r\n return isWGSL ? \"vec2<f32>\" : \"vec2\";\r\n case NodeMaterialBlockConnectionPointTypes.Color3:\r\n case NodeMaterialBlockConnectionPointTypes.Vector3:\r\n return isWGSL ? \"vec3<f32>\" : \"vec3\";\r\n case NodeMaterialBlockConnectionPointTypes.Color4:\r\n case NodeMaterialBlockConnectionPointTypes.Vector4:\r\n return isWGSL ? \"vec4<f32>\" : \"vec4\";\r\n case NodeMaterialBlockConnectionPointTypes.Matrix:\r\n return isWGSL ? \"mat4x4<f32>\" : \"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 const store = EngineShaderStore.GetIncludesShadersStore(this.shaderLanguage);\r\n\r\n this.functions[key] = store[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: NodeMaterialBlockConnectionPointTypes, 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 const shaderType = this._getShaderType(type);\r\n if (this.shaderLanguage === ShaderLanguage.WGSL) {\r\n this.sharedData.varyingDeclaration += `varying ${name}: ${shaderType};\\n`;\r\n } else {\r\n this.sharedData.varyingDeclaration += `varying ${shaderType} ${name};\\n`;\r\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 _getVaryingName(name: string): string {\r\n if (this.shaderLanguage === ShaderLanguage.WGSL) {\r\n return (this.target !== NodeMaterialBlockTargets.Fragment ? \"vertexOutputs.\" : \"fragmentInputs.\") + name;\r\n }\r\n\r\n return name;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _emitUniformFromString(name: string, type: NodeMaterialBlockConnectionPointTypes, 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 const shaderType = this._getShaderType(type);\r\n if (this.shaderLanguage === ShaderLanguage.WGSL) {\r\n this._uniformDeclaration += `uniform ${name}: ${shaderType};\\n`;\r\n } else {\r\n this._uniformDeclaration += `uniform ${shaderType} ${name};\\n`;\r\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 _generateTertiary(trueStatement: string, falseStatement: string, condition: string) {\r\n if (this.shaderLanguage === ShaderLanguage.WGSL) {\r\n return `select(${falseStatement}, ${trueStatement}, ${condition})`;\r\n }\r\n\r\n return `${condition} ? ${trueStatement} : ${falseStatement}`;\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 /**\r\n * @internal\r\n */\r\n public _declareOutput(output: NodeMaterialConnectionPoint): string {\r\n return this._declareLocalVar(output.associatedVariableName, output.type);\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _declareLocalVar(name: string, type: NodeMaterialBlockConnectionPointTypes): string {\r\n if (this.shaderLanguage === ShaderLanguage.WGSL) {\r\n return `var ${name}: ${this._getShaderType(type)}`;\r\n } else {\r\n return `${this._getShaderType(type)} ${name}`;\r\n }\r\n }\r\n\r\n private _convertVariableDeclarationToWGSL(type: string, dest: string, source: string): string {\r\n return source.replace(new RegExp(`(${type})\\\\s+(\\\\w+)`, \"g\"), `var $2: ${dest}`);\r\n }\r\n\r\n private _convertVariableConstructorsToWGSL(type: string, dest: string, source: string): string {\r\n return source.replace(new RegExp(`(${type})\\\\(`, \"g\"), ` ${dest}(`);\r\n }\r\n\r\n private _convertOutParametersToWGSL(source: string): string {\r\n return source.replace(new RegExp(`out\\\\s+var\\\\s+(\\\\w+)\\\\s*:\\\\s*(\\\\w+)`, \"g\"), `$1: ptr<function, $2>`);\r\n }\r\n\r\n private _convertFunctionsToWGSL(source: string): string {\r\n const regex = /var\\s+(\\w+)\\s*:\\s*(\\w+)\\((.*)\\)/;\r\n const match = source.match(regex);\r\n\r\n if (match) {\r\n const funcName = match[1];\r\n const funcType = match[2];\r\n const params = match[3]; // All parameters as a single string\r\n\r\n // Processing the parameters to match 'name: type' format\r\n const formattedParams = params.replace(/var\\s/g, \"\");\r\n\r\n // Constructing the final output string\r\n return source.replace(match[0], `fn ${funcName}(${formattedParams}) -> ${funcType}`);\r\n }\r\n return source;\r\n }\r\n\r\n public _babylonSLtoWGSL(code: string) {\r\n // variable declarations\r\n code = this._convertVariableDeclarationToWGSL(\"void\", \"voidnull\", code);\r\n code = this._convertVariableDeclarationToWGSL(\"int\", \"i32\", code);\r\n code = this._convertVariableDeclarationToWGSL(\"uint\", \"u32\", code);\r\n code = this._convertVariableDeclarationToWGSL(\"float\", \"f32\", code);\r\n code = this._convertVariableDeclarationToWGSL(\"vec2\", \"vec2f\", code);\r\n code = this._convertVariableDeclarationToWGSL(\"vec3\", \"vec3f\", code);\r\n code = this._convertVariableDeclarationToWGSL(\"vec4\", \"vec4f\", code);\r\n code = this._convertVariableDeclarationToWGSL(\"mat2\", \"mat2x2f\", code);\r\n code = this._convertVariableDeclarationToWGSL(\"mat3\", \"mat3x3f\", code);\r\n code = this._convertVariableDeclarationToWGSL(\"mat4\", \"mat4x4f\", code);\r\n\r\n // Type constructors\r\n code = this._convertVariableConstructorsToWGSL(\"float\", \"f32\", code);\r\n code = this._convertVariableConstructorsToWGSL(\"vec2\", \"vec2f\", code);\r\n code = this._convertVariableConstructorsToWGSL(\"vec3\", \"vec3f\", code);\r\n code = this._convertVariableConstructorsToWGSL(\"vec4\", \"vec4f\", code);\r\n code = this._convertVariableConstructorsToWGSL(\"mat2\", \"mat2x2f\", code);\r\n code = this._convertVariableConstructorsToWGSL(\"mat3\", \"mat3x3f\", code);\r\n code = this._convertVariableConstructorsToWGSL(\"mat4\", \"mat4x4f\", code);\r\n\r\n // Out paramters\r\n code = this._convertOutParametersToWGSL(code);\r\n code = code.replace(/\\[\\*\\]/g, \"*\");\r\n\r\n // Functions\r\n code = this._convertFunctionsToWGSL(code);\r\n\r\n // Remove voidnull\r\n code = code.replace(/\\s->\\svoidnull/g, \"\");\r\n\r\n return code;\r\n }\r\n\r\n public _babylonSLtoGLSL(code: string) {\r\n code = code.replace(/\\[\\*\\]/g, \"\");\r\n\r\n return code;\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ktxTextureLoader.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Textures/Loaders/ktxTextureLoader.ts"],"names":[],"mappings":"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","sourcesContent":["import { KhronosTextureContainer } from \"../../../Misc/khronosTextureContainer\";\r\nimport { KhronosTextureContainer2 } from \"../../../Misc/khronosTextureContainer2\";\r\nimport type { Nullable } from \"../../../types\";\r\nimport { Engine } from \"../../../Engines/engine\";\r\nimport type { InternalTexture } from \"../../../Materials/Textures/internalTexture\";\r\nimport type { IInternalTextureLoader } from \"../../../Materials/Textures/internalTextureLoader\";\r\nimport { Logger } from \"../../../Misc/logger\";\r\nimport { Constants } from \"../../../Engines/constants\";\r\n\r\nfunction mapSRGBToLinear(format: number): Nullable<number> {\r\n switch (format) {\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB_S3TC_DXT1_EXT:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGB_S3TC_DXT1;\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT3;\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT5;\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ETC2:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGB8_ETC2;\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGBA8_ETC2_EAC;\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2;\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_4x4;\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB_ALPHA_BPTC_UNORM:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGBA_BPTC_UNORM;\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/**\r\n * Implementation of the KTX Texture Loader.\r\n * @internal\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class _KTXTextureLoader implements IInternalTextureLoader {\r\n /**\r\n * Defines whether the loader supports cascade loading the different faces.\r\n */\r\n public readonly supportCascades = false;\r\n\r\n /**\r\n * This returns if the loader support the current file information.\r\n * @param extension defines the file extension of the file being loaded\r\n * @param mimeType defines the optional mime type of the file being loaded\r\n * @returns true if the loader can load the specified file\r\n */\r\n public canLoad(extension: string, mimeType?: string): boolean {\r\n // The \".ktx2\" file extension is still up for debate: https://github.com/KhronosGroup/KTX-Specification/issues/18\r\n return extension.endsWith(\".ktx\") || extension.endsWith(\".ktx2\") || mimeType === \"image/ktx\" || mimeType === \"image/ktx2\";\r\n }\r\n\r\n /**\r\n * Uploads the cube texture data to the WebGL texture. It has already been bound.\r\n * @param data contains the texture data\r\n * @param texture defines the BabylonJS internal texture\r\n * @param createPolynomials will be true if polynomials have been requested\r\n * @param onLoad defines the callback to trigger once the texture is ready\r\n */\r\n public loadCubeData(data: ArrayBufferView | ArrayBufferView[], texture: InternalTexture, createPolynomials: boolean, onLoad: Nullable<(data?: any) => void>): void {\r\n if (Array.isArray(data)) {\r\n return;\r\n }\r\n\r\n // Need to invert vScale as invertY via UNPACK_FLIP_Y_WEBGL is not supported by compressed texture\r\n texture._invertVScale = !texture.invertY;\r\n const engine = texture.getEngine() as Engine;\r\n const ktx = new KhronosTextureContainer(data, 6);\r\n\r\n const loadMipmap = ktx.numberOfMipmapLevels > 1 && texture.generateMipMaps;\r\n\r\n engine._unpackFlipY(true);\r\n\r\n ktx.uploadLevels(texture, texture.generateMipMaps);\r\n\r\n texture.width = ktx.pixelWidth;\r\n texture.height = ktx.pixelHeight;\r\n\r\n engine._setCubeMapTextureParams(texture, loadMipmap, ktx.numberOfMipmapLevels - 1);\r\n texture.isReady = true;\r\n texture.onLoadedObservable.notifyObservers(texture);\r\n texture.onLoadedObservable.clear();\r\n\r\n if (onLoad) {\r\n onLoad();\r\n }\r\n }\r\n\r\n /**\r\n * Uploads the 2D texture data to the WebGL texture. It has already been bound once in the callback.\r\n * @param data contains the texture data\r\n * @param texture defines the BabylonJS internal texture\r\n * @param callback defines the method to call once ready to upload\r\n * @param options\r\n */\r\n public loadData(\r\n data: ArrayBufferView,\r\n texture: InternalTexture,\r\n callback: (width: number, height: number, loadMipmap: boolean, isCompressed: boolean, done: () => void, loadFailed: boolean) => void,\r\n options?: any\r\n ): void {\r\n if (KhronosTextureContainer.IsValid(data)) {\r\n // Need to invert vScale as invertY via UNPACK_FLIP_Y_WEBGL is not supported by compressed texture\r\n texture._invertVScale = !texture.invertY;\r\n const ktx = new KhronosTextureContainer(data, 1);\r\n\r\n const mappedFormat = mapSRGBToLinear(ktx.glInternalFormat);\r\n if (mappedFormat) {\r\n texture.format = mappedFormat;\r\n texture._useSRGBBuffer = texture.getEngine()._getUseSRGBBuffer(true, texture.generateMipMaps);\r\n texture._gammaSpace = true;\r\n } else {\r\n texture.format = ktx.glInternalFormat;\r\n }\r\n\r\n callback(\r\n ktx.pixelWidth,\r\n ktx.pixelHeight,\r\n texture.generateMipMaps,\r\n true,\r\n () => {\r\n ktx.uploadLevels(texture, texture.generateMipMaps);\r\n },\r\n ktx.isInvalid\r\n );\r\n } else if (KhronosTextureContainer2.IsValid(data)) {\r\n const ktx2 = new KhronosTextureContainer2(texture.getEngine());\r\n ktx2._uploadAsync(data, texture, options).then(\r\n () => {\r\n callback(texture.width, texture.height, texture.generateMipMaps, true, () => {}, false);\r\n },\r\n (error) => {\r\n Logger.Warn(`Failed to load KTX2 texture data: ${error.message}`);\r\n callback(0, 0, false, false, () => {}, true);\r\n }\r\n );\r\n } else {\r\n Logger.Error(\"texture missing KTX identifier\");\r\n callback(0, 0, false, false, () => {}, true);\r\n }\r\n }\r\n}\r\n\r\n// Register the loader.\r\nEngine._TextureLoaders.unshift(new _KTXTextureLoader());\r\n"]}
|
|
1
|
+
{"version":3,"file":"ktxTextureLoader.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Textures/Loaders/ktxTextureLoader.ts"],"names":[],"mappings":"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","sourcesContent":["import { KhronosTextureContainer } from \"../../../Misc/khronosTextureContainer\";\r\nimport { KhronosTextureContainer2 } from \"../../../Misc/khronosTextureContainer2\";\r\nimport type { Nullable } from \"../../../types\";\r\nimport { Engine } from \"../../../Engines/engine\";\r\nimport type { InternalTexture } from \"../../../Materials/Textures/internalTexture\";\r\nimport type { IInternalTextureLoader } from \"../../../Materials/Textures/internalTextureLoader\";\r\nimport { Logger } from \"../../../Misc/logger\";\r\nimport { Constants } from \"../../../Engines/constants\";\r\n\r\nfunction mapSRGBToLinear(format: number): Nullable<number> {\r\n switch (format) {\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB_S3TC_DXT1_EXT:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGB_S3TC_DXT1;\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT3;\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT5;\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ETC2:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGB8_ETC2;\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGBA8_ETC2_EAC;\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2;\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_4x4;\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB_ALPHA_BPTC_UNORM:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGBA_BPTC_UNORM;\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/**\r\n * Implementation of the KTX Texture Loader.\r\n * @internal\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class _KTXTextureLoader implements IInternalTextureLoader {\r\n /**\r\n * Defines whether the loader supports cascade loading the different faces.\r\n */\r\n public readonly supportCascades = false;\r\n\r\n /**\r\n * This returns if the loader support the current file information.\r\n * @param extension defines the file extension of the file being loaded\r\n * @param mimeType defines the optional mime type of the file being loaded\r\n * @returns true if the loader can load the specified file\r\n */\r\n public canLoad(extension: string, mimeType?: string): boolean {\r\n // The \".ktx2\" file extension is still up for debate: https://github.com/KhronosGroup/KTX-Specification/issues/18\r\n return extension.endsWith(\".ktx\") || extension.endsWith(\".ktx2\") || mimeType === \"image/ktx\" || mimeType === \"image/ktx2\";\r\n }\r\n\r\n /**\r\n * Uploads the cube texture data to the WebGL texture. It has already been bound.\r\n * @param data contains the texture data\r\n * @param texture defines the BabylonJS internal texture\r\n * @param createPolynomials will be true if polynomials have been requested\r\n * @param onLoad defines the callback to trigger once the texture is ready\r\n */\r\n public loadCubeData(data: ArrayBufferView | ArrayBufferView[], texture: InternalTexture, createPolynomials: boolean, onLoad: Nullable<(data?: any) => void>): void {\r\n if (Array.isArray(data)) {\r\n return;\r\n }\r\n\r\n // Need to invert vScale as invertY via UNPACK_FLIP_Y_WEBGL is not supported by compressed texture\r\n texture._invertVScale = !texture.invertY;\r\n const engine = texture.getEngine() as Engine;\r\n const ktx = new KhronosTextureContainer(data, 6);\r\n\r\n const loadMipmap = ktx.numberOfMipmapLevels > 1 && texture.generateMipMaps;\r\n\r\n engine._unpackFlipY(true);\r\n\r\n ktx.uploadLevels(texture, texture.generateMipMaps);\r\n\r\n texture.width = ktx.pixelWidth;\r\n texture.height = ktx.pixelHeight;\r\n\r\n engine._setCubeMapTextureParams(texture, loadMipmap, ktx.numberOfMipmapLevels - 1);\r\n texture.isReady = true;\r\n texture.onLoadedObservable.notifyObservers(texture);\r\n texture.onLoadedObservable.clear();\r\n\r\n if (onLoad) {\r\n onLoad();\r\n }\r\n }\r\n\r\n /**\r\n * Uploads the 2D texture data to the WebGL texture. It has already been bound once in the callback.\r\n * @param data contains the texture data\r\n * @param texture defines the BabylonJS internal texture\r\n * @param callback defines the method to call once ready to upload\r\n * @param options\r\n */\r\n public loadData(\r\n data: ArrayBufferView,\r\n texture: InternalTexture,\r\n callback: (width: number, height: number, loadMipmap: boolean, isCompressed: boolean, done: () => void, loadFailed: boolean) => void,\r\n options?: any\r\n ): void {\r\n if (KhronosTextureContainer.IsValid(data)) {\r\n // Need to invert vScale as invertY via UNPACK_FLIP_Y_WEBGL is not supported by compressed texture\r\n texture._invertVScale = !texture.invertY;\r\n const ktx = new KhronosTextureContainer(data, 1);\r\n\r\n const mappedFormat = mapSRGBToLinear(ktx.glInternalFormat);\r\n if (mappedFormat) {\r\n texture.format = mappedFormat;\r\n texture._useSRGBBuffer = texture.getEngine()._getUseSRGBBuffer(true, texture.generateMipMaps);\r\n texture._gammaSpace = true;\r\n } else {\r\n texture.format = ktx.glInternalFormat;\r\n }\r\n\r\n callback(\r\n ktx.pixelWidth,\r\n ktx.pixelHeight,\r\n texture.generateMipMaps,\r\n true,\r\n () => {\r\n ktx.uploadLevels(texture, texture.generateMipMaps);\r\n },\r\n ktx.isInvalid\r\n );\r\n } else if (KhronosTextureContainer2.IsValid(data)) {\r\n const ktx2 = new KhronosTextureContainer2(texture.getEngine());\r\n ktx2._uploadAsync(data, texture, options).then(\r\n () => {\r\n callback(texture.width, texture.height, texture.generateMipMaps, true, () => {}, false);\r\n },\r\n (error) => {\r\n Logger.Warn(`Failed to load KTX2 texture data: ${error.message}`);\r\n callback(0, 0, false, false, () => {}, true);\r\n }\r\n );\r\n } else {\r\n Logger.Error(\"texture missing KTX identifier\");\r\n callback(0, 0, false, false, () => {}, true);\r\n }\r\n }\r\n}\r\n\r\n// Register the loader.\r\nEngine._TextureLoaders.push(new _KTXTextureLoader());\r\n"]}
|
|
@@ -4,7 +4,6 @@ import { Matrix } from "../../Maths/math.vector";
|
|
|
4
4
|
import { Observable } from "../../Misc/observable";
|
|
5
5
|
import "../../Engines/Extensions/engine.dynamicTexture";
|
|
6
6
|
import "../../Engines/Extensions/engine.videoTexture";
|
|
7
|
-
import "../../Engines/Extensions/engine.externalTexture";
|
|
8
7
|
import type { AbstractEngine } from "../../Engines/abstractEngine";
|
|
9
8
|
import type { Scene } from "../../scene";
|
|
10
9
|
/**
|
|
@@ -4,7 +4,6 @@ import { Matrix } from "../../Maths/math.vector.js";
|
|
|
4
4
|
import { Observable } from "../../Misc/observable.js";
|
|
5
5
|
import "../../Engines/Extensions/engine.dynamicTexture.js";
|
|
6
6
|
import "../../Engines/Extensions/engine.videoTexture.js";
|
|
7
|
-
import "../../Engines/Extensions/engine.externalTexture.js";
|
|
8
7
|
/**
|
|
9
8
|
* This represents the smallest workload to use an already existing element (Canvas or Video) as a texture.
|
|
10
9
|
* To be as efficient as possible depending on your constraints nothing aside the first upload
|
|
@@ -42,7 +41,13 @@ export class HtmlElementTexture extends BaseTexture {
|
|
|
42
41
|
this.name = name;
|
|
43
42
|
this.element = element;
|
|
44
43
|
this._isVideo = !!element.getVideoPlaybackQuality;
|
|
45
|
-
|
|
44
|
+
if (this._isVideo) {
|
|
45
|
+
const engineWebGPU = this._engine;
|
|
46
|
+
const createExternalTexture = engineWebGPU?.createExternalTexture;
|
|
47
|
+
if (createExternalTexture) {
|
|
48
|
+
this._externalTexture = createExternalTexture.call(engineWebGPU, element);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
46
51
|
this.anisotropicFilteringLevel = 1;
|
|
47
52
|
this._createInternalTexture();
|
|
48
53
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"htmlElementTexture.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Textures/htmlElementTexture.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGnD,OAAO,gDAAgD,CAAC;AACxD,OAAO,8CAA8C,CAAC;
|
|
1
|
+
{"version":3,"file":"htmlElementTexture.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Textures/htmlElementTexture.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../types\";\r\nimport { BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport { Matrix } from \"../../Maths/math.vector\";\r\nimport { Observable } from \"../../Misc/observable\";\r\nimport type { ExternalTexture } from \"./externalTexture\";\r\n\r\nimport \"../../Engines/Extensions/engine.dynamicTexture\";\r\nimport \"../../Engines/Extensions/engine.videoTexture\";\r\n\r\nimport type { AbstractEngine } from \"../../Engines/abstractEngine\";\r\nimport type { Scene } from \"../../scene\";\r\nimport type { WebGPUEngine } from \"core/Engines/webgpuEngine\";\r\n\r\n/**\r\n * Defines the options related to the creation of an HtmlElementTexture\r\n */\r\nexport interface IHtmlElementTextureOptions {\r\n /**\r\n * Defines whether mip maps should be created or not.\r\n */\r\n generateMipMaps?: boolean;\r\n /**\r\n * Defines the sampling mode of the texture.\r\n */\r\n samplingMode?: number;\r\n /**\r\n * Defines the associated texture format.\r\n */\r\n format?: number;\r\n /**\r\n * Defines the engine instance to use the texture with. It is not mandatory if you define a scene.\r\n */\r\n engine: Nullable<AbstractEngine>;\r\n /**\r\n * Defines the scene the texture belongs to. It is not mandatory if you define an engine.\r\n */\r\n scene: Nullable<Scene>;\r\n}\r\n\r\n/**\r\n * This represents the smallest workload to use an already existing element (Canvas or Video) as a texture.\r\n * To be as efficient as possible depending on your constraints nothing aside the first upload\r\n * is automatically managed.\r\n * It is a cheap VideoTexture or DynamicTexture if you prefer to keep full control of the elements\r\n * in your application.\r\n *\r\n * As the update is not automatic, you need to call them manually.\r\n */\r\nexport class HtmlElementTexture extends BaseTexture {\r\n /**\r\n * The texture URL.\r\n */\r\n public element: HTMLVideoElement | HTMLCanvasElement;\r\n\r\n /**\r\n * Observable triggered once the texture has been loaded.\r\n */\r\n public onLoadObservable: Observable<HtmlElementTexture> = new Observable<HtmlElementTexture>();\r\n\r\n private static readonly _DefaultOptions: IHtmlElementTextureOptions = {\r\n generateMipMaps: false,\r\n samplingMode: Constants.TEXTURE_BILINEAR_SAMPLINGMODE,\r\n format: Constants.TEXTUREFORMAT_RGBA,\r\n engine: null,\r\n scene: null,\r\n };\r\n\r\n private readonly _format: number;\r\n private _textureMatrix: Matrix;\r\n private _isVideo: boolean;\r\n private _generateMipMaps: boolean;\r\n private _samplingMode: number;\r\n private _externalTexture: Nullable<ExternalTexture>;\r\n\r\n /**\r\n * Instantiates a HtmlElementTexture from the following parameters.\r\n *\r\n * @param name Defines the name of the texture\r\n * @param element Defines the video or canvas the texture is filled with\r\n * @param options Defines the other none mandatory texture creation options\r\n */\r\n constructor(name: string, element: HTMLVideoElement | HTMLCanvasElement, options: IHtmlElementTextureOptions) {\r\n super(options.scene || options.engine);\r\n\r\n if (!element || (!options.engine && !options.scene)) {\r\n return;\r\n }\r\n\r\n options = {\r\n ...HtmlElementTexture._DefaultOptions,\r\n ...options,\r\n };\r\n\r\n this._generateMipMaps = options.generateMipMaps!;\r\n this._samplingMode = options.samplingMode!;\r\n this._textureMatrix = Matrix.Identity();\r\n this._format = options.format!;\r\n\r\n this.name = name;\r\n this.element = element;\r\n this._isVideo = !!(element as HTMLVideoElement).getVideoPlaybackQuality;\r\n\r\n if (this._isVideo) {\r\n const engineWebGPU = this._engine as Nullable<WebGPUEngine>;\r\n const createExternalTexture = engineWebGPU?.createExternalTexture;\r\n if (createExternalTexture) {\r\n this._externalTexture = createExternalTexture.call(engineWebGPU, element as HTMLVideoElement);\r\n }\r\n }\r\n\r\n this.anisotropicFilteringLevel = 1;\r\n\r\n this._createInternalTexture();\r\n }\r\n\r\n private _createInternalTexture(): void {\r\n let width = 0;\r\n let height = 0;\r\n if (this._isVideo) {\r\n width = (this.element as HTMLVideoElement).videoWidth;\r\n height = (this.element as HTMLVideoElement).videoHeight;\r\n } else {\r\n width = this.element.width;\r\n height = this.element.height;\r\n }\r\n\r\n const engine = this._getEngine();\r\n if (engine) {\r\n this._texture = engine.createDynamicTexture(width, height, this._generateMipMaps, this._samplingMode);\r\n this._texture.format = this._format;\r\n }\r\n\r\n this.update();\r\n }\r\n\r\n /**\r\n * @returns the texture matrix used in most of the material.\r\n */\r\n public override getTextureMatrix(): Matrix {\r\n return this._textureMatrix;\r\n }\r\n\r\n /**\r\n * Updates the content of the texture.\r\n * @param invertY Defines whether the texture should be inverted on Y (false by default on video and true on canvas)\r\n */\r\n public update(invertY: Nullable<boolean> = null): void {\r\n const engine = this._getEngine();\r\n if (this._texture == null || engine == null) {\r\n return;\r\n }\r\n\r\n const wasReady = this.isReady();\r\n if (this._isVideo) {\r\n const videoElement = this.element as HTMLVideoElement;\r\n if (videoElement.readyState < videoElement.HAVE_CURRENT_DATA) {\r\n return;\r\n }\r\n\r\n engine.updateVideoTexture(this._texture, this._externalTexture ? this._externalTexture : videoElement, invertY === null ? true : invertY);\r\n } else {\r\n const canvasElement = this.element as HTMLCanvasElement;\r\n engine.updateDynamicTexture(this._texture, canvasElement, invertY === null ? true : invertY, false, this._format);\r\n }\r\n\r\n if (!wasReady && this.isReady()) {\r\n this.onLoadObservable.notifyObservers(this);\r\n }\r\n }\r\n\r\n /**\r\n * Dispose the texture and release its associated resources.\r\n */\r\n public override dispose(): void {\r\n this.onLoadObservable.clear();\r\n super.dispose();\r\n }\r\n}\r\n"]}
|
|
@@ -188,8 +188,10 @@ export class VideoTexture extends Texture {
|
|
|
188
188
|
this._currentSrc = src;
|
|
189
189
|
this.name = name || this._getName(src);
|
|
190
190
|
this.video = this._getVideo(src);
|
|
191
|
-
|
|
192
|
-
|
|
191
|
+
const engineWebGPU = this._engine;
|
|
192
|
+
const createExternalTexture = engineWebGPU?.createExternalTexture;
|
|
193
|
+
if (createExternalTexture) {
|
|
194
|
+
this._externalTexture = createExternalTexture.call(engineWebGPU, this.video);
|
|
193
195
|
}
|
|
194
196
|
if (!this._settings.independentVideoSource) {
|
|
195
197
|
if (this._settings.poster) {
|