@onerjs/core 8.33.9 → 8.34.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/Materials/Textures/envCubeTexture.d.ts +5 -0
- package/Materials/Textures/envCubeTexture.js +35 -17
- package/Materials/Textures/envCubeTexture.js.map +1 -1
- package/Materials/Textures/hdrCubeTexture.js +1 -1
- package/Materials/Textures/hdrCubeTexture.js.map +1 -1
- package/Materials/index.d.ts +1 -0
- package/Materials/index.js +1 -0
- package/Materials/index.js.map +1 -1
- package/Materials/materialHelper.functions.d.ts +0 -30
- package/Materials/materialHelper.functions.js +0 -59
- package/Materials/materialHelper.functions.js.map +1 -1
- package/Materials/shaderMaterial.js +8 -14
- package/Materials/shaderMaterial.js.map +1 -1
- package/Materials/vertexPullingHelper.functions.d.ts +32 -0
- package/Materials/vertexPullingHelper.functions.js +60 -0
- package/Materials/vertexPullingHelper.functions.js.map +1 -0
- package/Misc/sceneSerializer.d.ts +14 -2
- package/Misc/sceneSerializer.js +10 -5
- package/Misc/sceneSerializer.js.map +1 -1
- package/Shaders/ShadersInclude/lightFragment.js +7 -5
- package/Shaders/ShadersInclude/lightFragment.js.map +1 -1
- package/Shaders/ShadersInclude/lightUboDeclaration.js +1 -1
- package/Shaders/ShadersInclude/lightUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/lightVxFragmentDeclaration.js +1 -1
- package/Shaders/ShadersInclude/lightVxFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/lightVxUboDeclaration.js +1 -1
- package/Shaders/ShadersInclude/lightVxUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrDirectLighting.js +4 -4
- package/Shaders/ShadersInclude/openpbrDirectLighting.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrDirectLightingInit.js +4 -2
- package/Shaders/ShadersInclude/openpbrDirectLightingInit.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/lightFragment.js +6 -4
- package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/lightUboDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/lightUboDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/lightVxFragmentDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/lightVxFragmentDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/lightVxUboDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/lightVxUboDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js +4 -4
- package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrDirectLightingInit.js +4 -2
- package/ShadersWGSL/ShadersInclude/openpbrDirectLightingInit.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shaderMaterial.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/shaderMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["import { SerializationHelper } from \"../Misc/decorators.serialization\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Scene } from \"../scene\";\r\nimport { Matrix, Quaternion } from \"../Maths/math.vector\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport type { SubMesh } from \"../Meshes/subMesh\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport type { BaseTexture } from \"../Materials/Textures/baseTexture\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport type { Effect, IEffectCreationOptions, IShaderPath } from \"./effect\";\r\nimport { RegisterClass } from \"../Misc/typeStore\";\r\nimport { EffectFallbacks } from \"./effectFallbacks\";\r\nimport { WebRequest } from \"../Misc/webRequest\";\r\nimport type { ShaderLanguage } from \"./shaderLanguage\";\r\nimport type { UniformBuffer } from \"./uniformBuffer\";\r\nimport type { TextureSampler } from \"./Textures/textureSampler\";\r\nimport type { StorageBuffer } from \"../Buffers/storageBuffer\";\r\nimport { PushMaterial } from \"./pushMaterial\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { AddClipPlaneUniforms, BindClipPlane, PrepareStringDefinesForClipPlanes } from \"./clipPlaneMaterialHelper\";\r\nimport type { WebGPUEngine } from \"core/Engines/webgpuEngine\";\r\n\r\nimport type { ExternalTexture } from \"./Textures/externalTexture\";\r\nimport {\r\n BindBonesParameters,\r\n BindFogParameters,\r\n BindLogDepth,\r\n BindMorphTargetParameters,\r\n BindSceneUniformBuffer,\r\n PrepareDefinesAndAttributesForMorphTargets,\r\n PrepareVertexPullingUniforms,\r\n BindVertexPullingUniforms,\r\n PushAttributesForInstances,\r\n} from \"./materialHelper.functions\";\r\nimport type { IVertexPullingMetadata } from \"./materialHelper.functions\";\r\nimport type { IColor3Like, IColor4Like, IVector2Like, IVector3Like, IVector4Like } from \"core/Maths/math.like\";\r\nimport type { InternalTexture } from \"./Textures/internalTexture\";\r\n\r\nconst OnCreatedEffectParameters = { effect: null as unknown as Effect, subMesh: null as unknown as Nullable<SubMesh> };\r\n\r\n/**\r\n * Defines the options associated with the creation of a shader material.\r\n */\r\nexport interface IShaderMaterialOptions {\r\n /**\r\n * Does the material work in alpha blend mode\r\n */\r\n needAlphaBlending: boolean;\r\n\r\n /**\r\n * Does the material work in alpha test mode\r\n */\r\n needAlphaTesting: boolean;\r\n\r\n /**\r\n * The list of attribute names used in the shader\r\n */\r\n attributes: string[];\r\n\r\n /**\r\n * The list of uniform names used in the shader\r\n */\r\n uniforms: string[];\r\n\r\n /**\r\n * The list of UBO names used in the shader\r\n */\r\n uniformBuffers: string[];\r\n\r\n /**\r\n * The list of sampler (texture) names used in the shader\r\n */\r\n samplers: string[];\r\n\r\n /**\r\n * The list of external texture names used in the shader\r\n */\r\n externalTextures: string[];\r\n\r\n /**\r\n * The list of sampler object names used in the shader\r\n */\r\n samplerObjects: string[];\r\n\r\n /**\r\n * The list of storage buffer names used in the shader\r\n */\r\n storageBuffers: string[];\r\n\r\n /**\r\n * The list of defines used in the shader\r\n */\r\n defines: string[];\r\n\r\n /**\r\n * Defines if clip planes have to be turned on: true to turn them on, false to turn them off and null to turn them on/off depending on the scene configuration (scene.clipPlaneX)\r\n */\r\n useClipPlane: Nullable<boolean>;\r\n\r\n /**\r\n * The language the shader is written in (default: GLSL)\r\n */\r\n shaderLanguage?: ShaderLanguage;\r\n\r\n /**\r\n * Defines additional code to call to prepare the shader code\r\n */\r\n extraInitializationsAsync?: () => Promise<void>;\r\n}\r\n\r\n/**\r\n * The ShaderMaterial object has the necessary methods to pass data from your scene to the Vertex and Fragment Shaders and returns a material that can be applied to any mesh.\r\n *\r\n * This returned material effects how the mesh will look based on the code in the shaders.\r\n *\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/shaders/shaderMaterial\r\n */\r\nexport class ShaderMaterial extends PushMaterial {\r\n private _shaderPath: IShaderPath | string;\r\n private _options: IShaderMaterialOptions;\r\n private _textures: { [name: string]: BaseTexture } = {};\r\n private _internalTextures: { [name: string]: InternalTexture } = {};\r\n private _textureArrays: { [name: string]: BaseTexture[] } = {};\r\n private _externalTextures: { [name: string]: ExternalTexture } = {};\r\n private _floats: { [name: string]: number } = {};\r\n private _ints: { [name: string]: number } = {};\r\n private _uints: { [name: string]: number } = {};\r\n private _floatsArrays: { [name: string]: number[] } = {};\r\n private _colors3: { [name: string]: IColor3Like } = {};\r\n private _colors3Arrays: { [name: string]: number[] } = {};\r\n private _colors4: { [name: string]: IColor4Like } = {};\r\n private _colors4Arrays: { [name: string]: number[] } = {};\r\n private _vectors2: { [name: string]: IVector2Like } = {};\r\n private _vectors3: { [name: string]: IVector3Like } = {};\r\n private _vectors4: { [name: string]: IVector4Like } = {};\r\n private _quaternions: { [name: string]: Quaternion } = {};\r\n private _quaternionsArrays: { [name: string]: number[] } = {};\r\n private _matrices: { [name: string]: Matrix } = {};\r\n private _matrixArrays: { [name: string]: Float32Array | Array<number> } = {};\r\n private _matrices3x3: { [name: string]: Float32Array | Array<number> } = {};\r\n private _matrices2x2: { [name: string]: Float32Array | Array<number> } = {};\r\n private _vectors2Arrays: { [name: string]: number[] } = {};\r\n private _vectors3Arrays: { [name: string]: number[] } = {};\r\n private _vectors4Arrays: { [name: string]: number[] } = {};\r\n private _uniformBuffers: { [name: string]: UniformBuffer } = {};\r\n private _textureSamplers: { [name: string]: TextureSampler } = {};\r\n private _storageBuffers: { [name: string]: StorageBuffer } = {};\r\n private _cachedWorldViewMatrix = new Matrix();\r\n private _cachedWorldViewProjectionMatrix = new Matrix();\r\n private _multiview = false;\r\n private _vertexPullingMetadata: Map<string, IVertexPullingMetadata> | null = null;\r\n\r\n /**\r\n * @internal\r\n */\r\n public _materialHelperNeedsPreviousMatrices = false;\r\n\r\n /** Define the Url to load snippets */\r\n public static SnippetUrl = Constants.SnippetUrl;\r\n\r\n /** Snippet ID if the material was created from the snippet server */\r\n public snippetId: string;\r\n\r\n /**\r\n * Instantiate a new shader material.\r\n * The ShaderMaterial object has the necessary methods to pass data from your scene to the Vertex and Fragment Shaders and returns a material that can be applied to any mesh.\r\n * This returned material effects how the mesh will look based on the code in the shaders.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/shaders/shaderMaterial\r\n * @param name Define the name of the material in the scene\r\n * @param scene Define the scene the material belongs to\r\n * @param shaderPath Defines the route to the shader code.\r\n * @param options Define the options used to create the shader\r\n * @param storeEffectOnSubMeshes true to store effect on submeshes, false to store the effect directly in the material class.\r\n */\r\n constructor(name: string, scene: Scene, shaderPath: IShaderPath | string, options: Partial<IShaderMaterialOptions> = {}, storeEffectOnSubMeshes = true) {\r\n super(name, scene, storeEffectOnSubMeshes);\r\n this._shaderPath = shaderPath;\r\n\r\n this._options = {\r\n needAlphaBlending: false,\r\n needAlphaTesting: false,\r\n attributes: [\"position\", \"normal\", \"uv\"],\r\n uniforms: [\"worldViewProjection\"],\r\n uniformBuffers: [],\r\n samplers: [],\r\n externalTextures: [],\r\n samplerObjects: [],\r\n storageBuffers: [],\r\n defines: [],\r\n useClipPlane: false,\r\n ...options,\r\n };\r\n }\r\n\r\n /**\r\n * Gets the shader path used to define the shader code\r\n * It can be modified to trigger a new compilation\r\n */\r\n public get shaderPath() {\r\n return this._shaderPath;\r\n }\r\n\r\n /**\r\n * Sets the shader path used to define the shader code\r\n * It can be modified to trigger a new compilation\r\n */\r\n public set shaderPath(shaderPath: IShaderPath | string) {\r\n this._shaderPath = shaderPath;\r\n }\r\n\r\n /**\r\n * Gets the options used to compile the shader.\r\n * They can be modified to trigger a new compilation\r\n */\r\n public get options(): IShaderMaterialOptions {\r\n return this._options;\r\n }\r\n\r\n /**\r\n * is multiview set to true?\r\n */\r\n public get isMultiview(): boolean {\r\n return this._multiview;\r\n }\r\n\r\n /**\r\n * Gets the current class name of the material e.g. \"ShaderMaterial\"\r\n * Mainly use in serialization.\r\n * @returns the class name\r\n */\r\n public override getClassName(): string {\r\n return \"ShaderMaterial\";\r\n }\r\n\r\n /**\r\n * Specifies if the material will require alpha blending\r\n * @returns a boolean specifying if alpha blending is needed\r\n */\r\n public override needAlphaBlending(): boolean {\r\n return this.alpha < 1.0 || this._options.needAlphaBlending;\r\n }\r\n\r\n /**\r\n * Specifies if this material should be rendered in alpha test mode\r\n * @returns a boolean specifying if an alpha test is needed.\r\n */\r\n public override needAlphaTesting(): boolean {\r\n return this._options.needAlphaTesting;\r\n }\r\n\r\n private _checkUniform(uniformName: string): void {\r\n if (this._options.uniforms.indexOf(uniformName) === -1) {\r\n this._options.uniforms.push(uniformName);\r\n }\r\n }\r\n\r\n /**\r\n * Set a texture in the shader.\r\n * @param name Define the name of the uniform samplers as defined in the shader\r\n * @param texture Define the texture to bind to this sampler\r\n * @returns the material itself allowing \"fluent\" like uniform updates\r\n */\r\n public setTexture(name: string, texture: BaseTexture): ShaderMaterial {\r\n if (this._options.samplers.indexOf(name) === -1) {\r\n this._options.samplers.push(name);\r\n }\r\n this._textures[name] = texture;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Set an internal texture in the shader.\r\n * @param name Define the name of the uniform samplers as defined in the shader\r\n * @param texture Define the texture to bind to this sampler\r\n * @returns the material itself allowing \"fluent\" like uniform updates\r\n */\r\n public setInternalTexture(name: string, texture: InternalTexture): ShaderMaterial {\r\n if (this._options.samplers.indexOf(name) === -1) {\r\n this._options.samplers.push(name);\r\n }\r\n this._internalTextures[name] = texture;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove a texture from the material.\r\n * @param name Define the name of the texture to remove\r\n */\r\n public removeTexture(name: string): void {\r\n delete this._textures[name];\r\n }\r\n\r\n /**\r\n * Set a texture array in the shader.\r\n * @param name Define the name of the uniform sampler array as defined in the shader\r\n * @param textures Define the list of textures to bind to this sampler\r\n * @returns the material itself allowing \"fluent\" like uniform updates\r\n */\r\n public setTextureArray(name: string, textures: BaseTexture[]): ShaderMaterial {\r\n if (this._options.samplers.indexOf(name) === -1) {\r\n this._options.samplers.push(name);\r\n }\r\n\r\n this._checkUniform(name);\r\n\r\n this._textureArrays[name] = textures;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Set an internal texture in the shader.\r\n * @param name Define the name of the uniform samplers as defined in the shader\r\n * @param texture Define the texture to bind to this sampler\r\n * @returns the material itself allowing \"fluent\" like uniform updates\r\n */\r\n public setExternalTexture(name: string, texture: ExternalTexture): ShaderMaterial {\r\n if (this._options.externalTextures.indexOf(name) === -1) {\r\n this._options.externalTextures.push(name);\r\n }\r\n this._externalTextures[name] = texture;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Set a float in the shader.\r\n * @param name Define the name of the uniform as defined in the shader\r\n * @param value Define the value to give to the uniform\r\n * @returns the material itself allowing \"fluent\" like uniform updates\r\n */\r\n public setFloat(name: string, value: number): ShaderMaterial {\r\n this._checkUniform(name);\r\n this._floats[name] = value;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Set a int in the shader.\r\n * @param name Define the name of the uniform as defined in the shader\r\n * @param value Define the value to give to the uniform\r\n * @returns the material itself allowing \"fluent\" like uniform updates\r\n */\r\n public setInt(name: string, value: number): ShaderMaterial {\r\n this._checkUniform(name);\r\n this._ints[name] = value;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Set a unsigned int in the shader.\r\n * @param name Define the name of the uniform as defined in the shader\r\n * @param value Define the value to give to the uniform\r\n * @returns the material itself allowing \"fluent\" like uniform updates\r\n */\r\n public setUInt(name: string, value: number): ShaderMaterial {\r\n this._checkUniform(name);\r\n this._uints[name] = value;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Set an array of floats in the shader.\r\n * @param name Define the name of the uniform as defined in the shader\r\n * @param value Define the value to give to the uniform\r\n * @returns the material itself allowing \"fluent\" like uniform updates\r\n */\r\n public setFloats(name: string, value: number[]): ShaderMaterial {\r\n this._checkUniform(name);\r\n this._floatsArrays[name] = value;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Set a vec3 in the shader from a Color3.\r\n * @param name Define the name of the uniform as defined in the shader\r\n * @param value Define the value to give to the uniform\r\n * @returns the material itself allowing \"fluent\" like uniform updates\r\n */\r\n public setColor3(name: string, value: IColor3Like): ShaderMaterial {\r\n this._checkUniform(name);\r\n this._colors3[name] = value;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Set a vec3 array in the shader from a IColor3Like array.\r\n * @param name Define the name of the uniform as defined in the shader\r\n * @param value Define the value to give to the uniform\r\n * @returns the material itself allowing \"fluent\" like uniform updates\r\n */\r\n public setColor3Array(name: string, value: IColor3Like[]): ShaderMaterial {\r\n this._checkUniform(name);\r\n this._colors3Arrays[name] = value.reduce((arr: number[], color) => {\r\n arr.push(color.r, color.g, color.b);\r\n return arr;\r\n }, []);\r\n return this;\r\n }\r\n\r\n /**\r\n * Set a vec4 in the shader from a Color4.\r\n * @param name Define the name of the uniform as defined in the shader\r\n * @param value Define the value to give to the uniform\r\n * @returns the material itself allowing \"fluent\" like uniform updates\r\n */\r\n public setColor4(name: string, value: IColor4Like): ShaderMaterial {\r\n this._checkUniform(name);\r\n this._colors4[name] = value;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Set a vec4 array in the shader from a IColor4Like array.\r\n * @param name Define the name of the uniform as defined in the shader\r\n * @param value Define the value to give to the uniform\r\n * @returns the material itself allowing \"fluent\" like uniform updates\r\n */\r\n public setColor4Array(name: string, value: IColor4Like[]): ShaderMaterial {\r\n this._checkUniform(name);\r\n this._colors4Arrays[name] = value.reduce((arr: number[], color) => {\r\n arr.push(color.r, color.g, color.b, color.a);\r\n return arr;\r\n }, []);\r\n return this;\r\n }\r\n\r\n /**\r\n * Set a vec2 in the shader from a Vector2.\r\n * @param name Define the name of the uniform as defined in the shader\r\n * @param value Define the value to give to the uniform\r\n * @returns the material itself allowing \"fluent\" like uniform updates\r\n */\r\n public setVector2(name: string, value: IVector2Like): ShaderMaterial {\r\n this._checkUniform(name);\r\n this._vectors2[name] = value;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Set a vec3 in the shader from a Vector3.\r\n * @param name Define the name of the uniform as defined in the shader\r\n * @param value Define the value to give to the uniform\r\n * @returns the material itself allowing \"fluent\" like uniform updates\r\n */\r\n public setVector3(name: string, value: IVector3Like): ShaderMaterial {\r\n this._checkUniform(name);\r\n this._vectors3[name] = value;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Set a vec4 in the shader from a Vector4.\r\n * @param name Define the name of the uniform as defined in the shader\r\n * @param value Define the value to give to the uniform\r\n * @returns the material itself allowing \"fluent\" like uniform updates\r\n */\r\n public setVector4(name: string, value: IVector4Like): ShaderMaterial {\r\n this._checkUniform(name);\r\n this._vectors4[name] = value;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Set a vec4 in the shader from a Quaternion.\r\n * @param name Define the name of the uniform as defined in the shader\r\n * @param value Define the value to give to the uniform\r\n * @returns the material itself allowing \"fluent\" like uniform updates\r\n */\r\n public setQuaternion(name: string, value: Quaternion): ShaderMaterial {\r\n this._checkUniform(name);\r\n this._quaternions[name] = value;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Set a vec4 array in the shader from a Quaternion array.\r\n * @param name Define the name of the uniform as defined in the shader\r\n * @param value Define the value to give to the uniform\r\n * @returns the material itself allowing \"fluent\" like uniform updates\r\n */\r\n public setQuaternionArray(name: string, value: Quaternion[]): ShaderMaterial {\r\n this._checkUniform(name);\r\n this._quaternionsArrays[name] = value.reduce((arr, quaternion) => {\r\n quaternion.toArray(arr, arr.length);\r\n return arr;\r\n }, []);\r\n return this;\r\n }\r\n\r\n /**\r\n * Set a mat4 in the shader from a Matrix.\r\n * @param name Define the name of the uniform as defined in the shader\r\n * @param value Define the value to give to the uniform\r\n * @returns the material itself allowing \"fluent\" like uniform updates\r\n */\r\n public setMatrix(name: string, value: Matrix): ShaderMaterial {\r\n this._checkUniform(name);\r\n this._matrices[name] = value;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Set a float32Array in the shader from a matrix array.\r\n * @param name Define the name of the uniform as defined in the shader\r\n * @param value Define the value to give to the uniform\r\n * @returns the material itself allowing \"fluent\" like uniform updates\r\n */\r\n public setMatrices(name: string, value: Matrix[]): ShaderMaterial {\r\n this._checkUniform(name);\r\n\r\n const float32Array = new Float32Array(value.length * 16);\r\n\r\n for (let index = 0; index < value.length; index++) {\r\n const matrix = value[index];\r\n\r\n matrix.copyToArray(float32Array, index * 16);\r\n }\r\n\r\n this._matrixArrays[name] = float32Array;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Set a mat3 in the shader from a Float32Array.\r\n * @param name Define the name of the uniform as defined in the shader\r\n * @param value Define the value to give to the uniform\r\n * @returns the material itself allowing \"fluent\" like uniform updates\r\n */\r\n public setMatrix3x3(name: string, value: Float32Array | Array<number>): ShaderMaterial {\r\n this._checkUniform(name);\r\n this._matrices3x3[name] = value;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Set a mat2 in the shader from a Float32Array.\r\n * @param name Define the name of the uniform as defined in the shader\r\n * @param value Define the value to give to the uniform\r\n * @returns the material itself allowing \"fluent\" like uniform updates\r\n */\r\n public setMatrix2x2(name: string, value: Float32Array | Array<number>): ShaderMaterial {\r\n this._checkUniform(name);\r\n this._matrices2x2[name] = value;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Set a vec2 array in the shader from a number array.\r\n * @param name Define the name of the uniform as defined in the shader\r\n * @param value Define the value to give to the uniform\r\n * @returns the material itself allowing \"fluent\" like uniform updates\r\n */\r\n public setArray2(name: string, value: number[]): ShaderMaterial {\r\n this._checkUniform(name);\r\n this._vectors2Arrays[name] = value;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Set a vec3 array in the shader from a number array.\r\n * @param name Define the name of the uniform as defined in the shader\r\n * @param value Define the value to give to the uniform\r\n * @returns the material itself allowing \"fluent\" like uniform updates\r\n */\r\n public setArray3(name: string, value: number[]): ShaderMaterial {\r\n this._checkUniform(name);\r\n this._vectors3Arrays[name] = value;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Set a vec4 array in the shader from a number array.\r\n * @param name Define the name of the uniform as defined in the shader\r\n * @param value Define the value to give to the uniform\r\n * @returns the material itself allowing \"fluent\" like uniform updates\r\n */\r\n public setArray4(name: string, value: number[]): ShaderMaterial {\r\n this._checkUniform(name);\r\n this._vectors4Arrays[name] = value;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Set a uniform buffer in the shader\r\n * @param name Define the name of the uniform as defined in the shader\r\n * @param buffer Define the value to give to the uniform\r\n * @returns the material itself allowing \"fluent\" like uniform updates\r\n */\r\n public setUniformBuffer(name: string, buffer: UniformBuffer): ShaderMaterial {\r\n if (this._options.uniformBuffers.indexOf(name) === -1) {\r\n this._options.uniformBuffers.push(name);\r\n }\r\n this._uniformBuffers[name] = buffer;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Set a texture sampler in the shader\r\n * @param name Define the name of the uniform as defined in the shader\r\n * @param sampler Define the value to give to the uniform\r\n * @returns the material itself allowing \"fluent\" like uniform updates\r\n */\r\n public setTextureSampler(name: string, sampler: TextureSampler): ShaderMaterial {\r\n if (this._options.samplerObjects.indexOf(name) === -1) {\r\n this._options.samplerObjects.push(name);\r\n }\r\n this._textureSamplers[name] = sampler;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Set a storage buffer in the shader\r\n * @param name Define the name of the storage buffer as defined in the shader\r\n * @param buffer Define the value to give to the uniform\r\n * @returns the material itself allowing \"fluent\" like uniform updates\r\n */\r\n public setStorageBuffer(name: string, buffer: StorageBuffer): ShaderMaterial {\r\n if (this._options.storageBuffers.indexOf(name) === -1) {\r\n this._options.storageBuffers.push(name);\r\n }\r\n this._storageBuffers[name] = buffer;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds, removes, or replaces the specified shader define and value.\r\n * * setDefine(\"MY_DEFINE\", true); // enables a boolean define\r\n * * setDefine(\"MY_DEFINE\", \"0.5\"); // adds \"#define MY_DEFINE 0.5\" to the shader (or sets and replaces the value of any existing define with that name)\r\n * * setDefine(\"MY_DEFINE\", false); // disables and removes the define\r\n * Note if the active defines do change, the shader will be recompiled and this can be expensive.\r\n * @param define the define name e.g., \"OUTPUT_TO_SRGB\" or \"#define OUTPUT_TO_SRGB\". If the define was passed into the constructor already, the version used should match that, and in either case, it should not include any appended value.\r\n * @param value either the value of the define (e.g. a numerical value) or for booleans, true if the define should be enabled or false if it should be disabled\r\n * @returns the material itself allowing \"fluent\" like uniform updates\r\n */\r\n public setDefine(define: string, value: boolean | string): ShaderMaterial {\r\n // First remove any existing define with this name.\r\n const defineName = define.trimEnd() + \" \";\r\n const existingDefineIdx = this.options.defines.findIndex((x) => x === define || x.startsWith(defineName));\r\n if (existingDefineIdx >= 0) {\r\n this.options.defines.splice(existingDefineIdx, 1);\r\n }\r\n\r\n // Then add the new define value. (If it's a boolean value and false, don't add it.)\r\n if (typeof value !== \"boolean\" || value) {\r\n this.options.defines.push(defineName + value);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Specifies that the submesh is ready to be used\r\n * @param mesh defines the mesh to check\r\n * @param subMesh defines which submesh to check\r\n * @param useInstances specifies that instances should be used\r\n * @returns a boolean indicating that the submesh is ready or not\r\n */\r\n public override isReadyForSubMesh(mesh: AbstractMesh, subMesh: SubMesh, useInstances?: boolean): boolean {\r\n return this.isReady(mesh, useInstances, subMesh);\r\n }\r\n\r\n /**\r\n * Checks if the material is ready to render the requested mesh\r\n * @param mesh Define the mesh to render\r\n * @param useInstances Define whether or not the material is used with instances\r\n * @param subMesh defines which submesh to render\r\n * @returns true if ready, otherwise false\r\n */\r\n public override isReady(mesh?: AbstractMesh, useInstances?: boolean, subMesh?: SubMesh): boolean {\r\n const storeEffectOnSubMeshes = subMesh && this._storeEffectOnSubMeshes;\r\n\r\n if (this.isFrozen) {\r\n const drawWrapper = storeEffectOnSubMeshes ? subMesh._drawWrapper : this._drawWrapper;\r\n if (drawWrapper.effect && drawWrapper._wasPreviouslyReady && drawWrapper._wasPreviouslyUsingInstances === useInstances) {\r\n return true;\r\n }\r\n }\r\n\r\n const scene = this.getScene();\r\n const engine = scene.getEngine();\r\n\r\n // Instances\r\n const defines = [];\r\n const attribs = [];\r\n let fallbacks: Nullable<EffectFallbacks> = null;\r\n\r\n let shaderName = this._shaderPath,\r\n uniforms = this._options.uniforms,\r\n uniformBuffers = this._options.uniformBuffers,\r\n samplers = this._options.samplers;\r\n\r\n // global multiview\r\n if (engine.getCaps().multiview && scene.activeCamera && scene.activeCamera.outputRenderTarget && scene.activeCamera.outputRenderTarget.getViewCount() > 1) {\r\n this._multiview = true;\r\n defines.push(\"#define MULTIVIEW\");\r\n if (uniforms.indexOf(\"viewProjection\") !== -1 && uniforms.indexOf(\"viewProjectionR\") === -1) {\r\n uniforms.push(\"viewProjectionR\");\r\n }\r\n }\r\n\r\n for (let index = 0; index < this._options.defines.length; index++) {\r\n const defineToAdd = this._options.defines[index].indexOf(\"#define\") === 0 ? this._options.defines[index] : `#define ${this._options.defines[index]}`;\r\n defines.push(defineToAdd);\r\n }\r\n\r\n for (let index = 0; index < this._options.attributes.length; index++) {\r\n attribs.push(this._options.attributes[index]);\r\n }\r\n\r\n if (mesh && mesh.isVerticesDataPresent(VertexBuffer.ColorKind)) {\r\n if (attribs.indexOf(VertexBuffer.ColorKind) === -1) {\r\n attribs.push(VertexBuffer.ColorKind);\r\n }\r\n defines.push(\"#define VERTEXCOLOR\");\r\n }\r\n\r\n if (useInstances) {\r\n defines.push(\"#define INSTANCES\");\r\n PushAttributesForInstances(attribs, this._materialHelperNeedsPreviousMatrices);\r\n if (mesh?.hasThinInstances) {\r\n defines.push(\"#define THIN_INSTANCES\");\r\n if (mesh && mesh.isVerticesDataPresent(VertexBuffer.ColorInstanceKind)) {\r\n attribs.push(VertexBuffer.ColorInstanceKind);\r\n defines.push(\"#define INSTANCESCOLOR\");\r\n }\r\n }\r\n }\r\n\r\n // Bones\r\n if (mesh && mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton) {\r\n attribs.push(VertexBuffer.MatricesIndicesKind);\r\n attribs.push(VertexBuffer.MatricesWeightsKind);\r\n if (mesh.numBoneInfluencers > 4) {\r\n attribs.push(VertexBuffer.MatricesIndicesExtraKind);\r\n attribs.push(VertexBuffer.MatricesWeightsExtraKind);\r\n }\r\n\r\n const skeleton = mesh.skeleton;\r\n\r\n defines.push(\"#define NUM_BONE_INFLUENCERS \" + mesh.numBoneInfluencers);\r\n fallbacks = new EffectFallbacks();\r\n fallbacks.addCPUSkinningFallback(0, mesh);\r\n\r\n if (skeleton.isUsingTextureForMatrices) {\r\n defines.push(\"#define BONETEXTURE\");\r\n\r\n if (uniforms.indexOf(\"boneTextureWidth\") === -1) {\r\n uniforms.push(\"boneTextureWidth\");\r\n }\r\n\r\n if (this._options.samplers.indexOf(\"boneSampler\") === -1) {\r\n this._options.samplers.push(\"boneSampler\");\r\n }\r\n } else {\r\n defines.push(\"#define BonesPerMesh \" + (skeleton.bones.length + 1));\r\n\r\n if (uniforms.indexOf(\"mBones\") === -1) {\r\n uniforms.push(\"mBones\");\r\n }\r\n }\r\n } else {\r\n defines.push(\"#define NUM_BONE_INFLUENCERS 0\");\r\n }\r\n\r\n // Morph\r\n let numInfluencers = 0;\r\n const manager = mesh ? (<Mesh>mesh).morphTargetManager : null;\r\n if (manager) {\r\n const uv = defines.indexOf(\"#define UV1\") !== -1;\r\n const uv2 = defines.indexOf(\"#define UV2\") !== -1;\r\n const tangent = defines.indexOf(\"#define TANGENT\") !== -1;\r\n const normal = defines.indexOf(\"#define NORMAL\") !== -1;\r\n const color = defines.indexOf(\"#define VERTEXCOLOR\") !== -1;\r\n numInfluencers = PrepareDefinesAndAttributesForMorphTargets(\r\n manager,\r\n defines,\r\n attribs,\r\n mesh!,\r\n true, // usePositionMorph\r\n normal, // useNormalMorph\r\n tangent, // useTangentMorph\r\n uv, // useUVMorph\r\n uv2, // useUV2Morph\r\n color // useColorMorph\r\n );\r\n if (manager.isUsingTextureForTargets) {\r\n if (uniforms.indexOf(\"morphTargetTextureIndices\") === -1) {\r\n uniforms.push(\"morphTargetTextureIndices\");\r\n }\r\n\r\n if (this._options.samplers.indexOf(\"morphTargets\") === -1) {\r\n this._options.samplers.push(\"morphTargets\");\r\n }\r\n }\r\n if (numInfluencers > 0) {\r\n uniforms = uniforms.slice();\r\n uniforms.push(\"morphTargetInfluences\");\r\n uniforms.push(\"morphTargetCount\");\r\n uniforms.push(\"morphTargetTextureInfo\");\r\n uniforms.push(\"morphTargetTextureIndices\");\r\n }\r\n } else {\r\n defines.push(\"#define NUM_MORPH_INFLUENCERS 0\");\r\n }\r\n\r\n // Baked Vertex Animation\r\n if (mesh) {\r\n const bvaManager = (<AbstractMesh>mesh).bakedVertexAnimationManager;\r\n\r\n if (bvaManager && bvaManager.isEnabled) {\r\n defines.push(\"#define BAKED_VERTEX_ANIMATION_TEXTURE\");\r\n if (uniforms.indexOf(\"bakedVertexAnimationSettings\") === -1) {\r\n uniforms.push(\"bakedVertexAnimationSettings\");\r\n }\r\n if (uniforms.indexOf(\"bakedVertexAnimationTextureSizeInverted\") === -1) {\r\n uniforms.push(\"bakedVertexAnimationTextureSizeInverted\");\r\n }\r\n if (uniforms.indexOf(\"bakedVertexAnimationTime\") === -1) {\r\n uniforms.push(\"bakedVertexAnimationTime\");\r\n }\r\n\r\n if (this._options.samplers.indexOf(\"bakedVertexAnimationTexture\") === -1) {\r\n this._options.samplers.push(\"bakedVertexAnimationTexture\");\r\n }\r\n\r\n if (useInstances) {\r\n attribs.push(\"bakedVertexAnimationSettingsInstanced\");\r\n }\r\n }\r\n }\r\n\r\n // Textures\r\n for (const name in this._textures) {\r\n if (!this._textures[name].isReady()) {\r\n return false;\r\n }\r\n }\r\n\r\n for (const name in this._internalTextures) {\r\n if (!this._internalTextures[name].isReady) {\r\n return false;\r\n }\r\n }\r\n\r\n // Alpha test\r\n if (mesh && this.needAlphaTestingForMesh(mesh)) {\r\n defines.push(\"#define ALPHATEST\");\r\n }\r\n\r\n // Clip planes\r\n if (this._options.useClipPlane !== false) {\r\n AddClipPlaneUniforms(uniforms);\r\n\r\n PrepareStringDefinesForClipPlanes(this, scene, defines);\r\n }\r\n\r\n // Fog\r\n if (scene.fogEnabled && mesh?.applyFog && scene.fogMode !== Scene.FOGMODE_NONE) {\r\n defines.push(\"#define FOG\");\r\n if (uniforms.indexOf(\"view\") === -1) {\r\n uniforms.push(\"view\");\r\n }\r\n if (uniforms.indexOf(\"vFogInfos\") === -1) {\r\n uniforms.push(\"vFogInfos\");\r\n }\r\n if (uniforms.indexOf(\"vFogColor\") === -1) {\r\n uniforms.push(\"vFogColor\");\r\n }\r\n }\r\n\r\n // Misc\r\n if (this._useLogarithmicDepth) {\r\n defines.push(\"#define LOGARITHMICDEPTH\");\r\n if (uniforms.indexOf(\"logarithmicDepthConstant\") === -1) {\r\n uniforms.push(\"logarithmicDepthConstant\");\r\n }\r\n }\r\n\r\n const renderingMesh = subMesh ? subMesh.getRenderingMesh() : mesh;\r\n if (renderingMesh && this.useVertexPulling) {\r\n // Add vertex buffer metadata defines for proper stride/offset handling\r\n const geometry = renderingMesh.geometry;\r\n if (geometry) {\r\n this._vertexPullingMetadata = PrepareVertexPullingUniforms(geometry);\r\n if (this._vertexPullingMetadata) {\r\n this._vertexPullingMetadata.forEach((_, attribute) => {\r\n uniforms.push(`vp_${attribute}_info`);\r\n });\r\n }\r\n }\r\n }\r\n\r\n if (this.customShaderNameResolve) {\r\n uniforms = uniforms.slice();\r\n uniformBuffers = uniformBuffers.slice();\r\n samplers = samplers.slice();\r\n shaderName = this.customShaderNameResolve(this.name, uniforms, uniformBuffers, samplers, defines, attribs);\r\n }\r\n\r\n if (renderingMesh && this.useVertexPulling) {\r\n defines.push(\"#define USE_VERTEX_PULLING\");\r\n\r\n const indexBuffer = renderingMesh.geometry?.getIndexBuffer();\r\n if (indexBuffer && !(renderingMesh as Mesh).isUnIndexed) {\r\n defines.push(\"#define VERTEX_PULLING_USE_INDEX_BUFFER\");\r\n if (indexBuffer.is32Bits) {\r\n defines.push(\"#define VERTEX_PULLING_INDEX_BUFFER_32BITS\");\r\n }\r\n }\r\n\r\n // Add vertex buffer metadata defines for proper stride/offset handling\r\n const geometry = renderingMesh.geometry;\r\n if (geometry) {\r\n this._vertexPullingMetadata = PrepareVertexPullingUniforms(geometry);\r\n }\r\n }\r\n\r\n const drawWrapper = storeEffectOnSubMeshes ? subMesh._getDrawWrapper(undefined, true) : this._drawWrapper;\r\n const previousEffect = drawWrapper?.effect ?? null;\r\n const previousDefines = drawWrapper?.defines ?? null;\r\n const join = defines.join(\"\\n\");\r\n\r\n let effect = previousEffect;\r\n if (previousDefines !== join) {\r\n effect = engine.createEffect(\r\n shaderName,\r\n <IEffectCreationOptions>{\r\n attributes: attribs,\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: uniformBuffers,\r\n samplers: samplers,\r\n defines: join,\r\n fallbacks: fallbacks,\r\n onCompiled: this.onCompiled,\r\n onError: this.onError,\r\n indexParameters: { maxSimultaneousMorphTargets: numInfluencers },\r\n shaderLanguage: this._options.shaderLanguage,\r\n extraInitializationsAsync: this._options.extraInitializationsAsync,\r\n },\r\n engine\r\n );\r\n\r\n if (storeEffectOnSubMeshes) {\r\n subMesh.setEffect(effect, join, this._materialContext);\r\n } else if (drawWrapper) {\r\n drawWrapper.setEffect(effect, join);\r\n }\r\n\r\n if (this._onEffectCreatedObservable) {\r\n OnCreatedEffectParameters.effect = effect;\r\n OnCreatedEffectParameters.subMesh = subMesh ?? mesh?.subMeshes[0] ?? null;\r\n this._onEffectCreatedObservable.notifyObservers(OnCreatedEffectParameters);\r\n }\r\n }\r\n\r\n drawWrapper!._wasPreviouslyUsingInstances = !!useInstances;\r\n\r\n if (!effect?.isReady()) {\r\n return false;\r\n }\r\n\r\n if (previousEffect !== effect) {\r\n scene.resetCachedMaterial();\r\n }\r\n\r\n drawWrapper!._wasPreviouslyReady = true;\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Binds the world matrix to the material\r\n * @param world defines the world transformation matrix\r\n * @param effectOverride - If provided, use this effect instead of internal effect\r\n */\r\n public override bindOnlyWorldMatrix(world: Matrix, effectOverride?: Nullable<Effect>): void {\r\n const effect = effectOverride ?? this.getEffect();\r\n if (!effect) {\r\n return;\r\n }\r\n\r\n const uniforms = this._options.uniforms;\r\n if (uniforms.indexOf(\"world\") !== -1) {\r\n effect.setMatrix(\"world\", world);\r\n }\r\n\r\n const scene = this.getScene();\r\n if (uniforms.indexOf(\"worldView\") !== -1) {\r\n world.multiplyToRef(scene.getViewMatrix(), this._cachedWorldViewMatrix);\r\n effect.setMatrix(\"worldView\", this._cachedWorldViewMatrix);\r\n }\r\n\r\n if (uniforms.indexOf(\"worldViewProjection\") !== -1) {\r\n world.multiplyToRef(scene.getTransformMatrix(), this._cachedWorldViewProjectionMatrix);\r\n effect.setMatrix(\"worldViewProjection\", this._cachedWorldViewProjectionMatrix);\r\n }\r\n\r\n if (uniforms.indexOf(\"view\") !== -1) {\r\n effect.setMatrix(\"view\", scene.getViewMatrix());\r\n }\r\n }\r\n\r\n /**\r\n * Binds the submesh to this material by preparing the effect and shader to draw\r\n * @param world defines the world transformation matrix\r\n * @param mesh defines the mesh containing the submesh\r\n * @param subMesh defines the submesh to bind the material to\r\n */\r\n public override bindForSubMesh(world: Matrix, mesh: Mesh, subMesh: SubMesh): void {\r\n this.bind(world, mesh, subMesh._drawWrapperOverride?.effect, subMesh);\r\n }\r\n\r\n /**\r\n * Binds the material to the mesh\r\n * @param world defines the world transformation matrix\r\n * @param mesh defines the mesh to bind the material to\r\n * @param effectOverride - If provided, use this effect instead of internal effect\r\n * @param subMesh defines the submesh to bind the material to\r\n */\r\n public override bind(world: Matrix, mesh?: AbstractMesh, effectOverride?: Nullable<Effect>, subMesh?: SubMesh): void {\r\n // Std values\r\n const storeEffectOnSubMeshes = subMesh && this._storeEffectOnSubMeshes;\r\n const effect = effectOverride ?? (storeEffectOnSubMeshes ? subMesh.effect : this.getEffect());\r\n\r\n if (!effect) {\r\n return;\r\n }\r\n\r\n const scene = this.getScene();\r\n\r\n this._activeEffect = effect;\r\n\r\n this.bindOnlyWorldMatrix(world, effectOverride);\r\n\r\n const uniformBuffers = this._options.uniformBuffers;\r\n\r\n let useSceneUBO = false;\r\n\r\n if (effect && uniformBuffers && uniformBuffers.length > 0 && scene.getEngine().supportsUniformBuffers) {\r\n for (let i = 0; i < uniformBuffers.length; ++i) {\r\n const bufferName = uniformBuffers[i];\r\n switch (bufferName) {\r\n case \"Mesh\":\r\n if (mesh) {\r\n mesh.getMeshUniformBuffer().bindToEffect(effect, \"Mesh\");\r\n mesh.transferToEffect(world);\r\n }\r\n break;\r\n case \"Scene\":\r\n BindSceneUniformBuffer(effect, scene.getSceneUniformBuffer());\r\n scene.finalizeSceneUbo();\r\n useSceneUBO = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n const mustRebind = mesh && storeEffectOnSubMeshes ? this._mustRebind(scene, effect, subMesh, mesh.visibility) : scene.getCachedMaterial() !== this;\r\n\r\n if (effect && mustRebind) {\r\n if (!useSceneUBO && this._options.uniforms.indexOf(\"view\") !== -1) {\r\n effect.setMatrix(\"view\", scene.getViewMatrix());\r\n }\r\n\r\n if (!useSceneUBO && this._options.uniforms.indexOf(\"projection\") !== -1) {\r\n effect.setMatrix(\"projection\", scene.getProjectionMatrix());\r\n }\r\n\r\n if (!useSceneUBO && this._options.uniforms.indexOf(\"viewProjection\") !== -1) {\r\n effect.setMatrix(\"viewProjection\", scene.getTransformMatrix());\r\n if (this._multiview) {\r\n effect.setMatrix(\"viewProjectionR\", scene._transformMatrixR);\r\n }\r\n }\r\n\r\n if (scene.activeCamera && this._options.uniforms.indexOf(\"cameraPosition\") !== -1) {\r\n effect.setVector3(\"cameraPosition\", scene.activeCamera.globalPosition);\r\n }\r\n\r\n // Bones\r\n BindBonesParameters(mesh, effect);\r\n\r\n // Clip plane\r\n BindClipPlane(effect, this, scene);\r\n\r\n if (this._vertexPullingMetadata) {\r\n BindVertexPullingUniforms(effect, this._vertexPullingMetadata);\r\n }\r\n\r\n // Misc\r\n if (this._useLogarithmicDepth) {\r\n BindLogDepth(storeEffectOnSubMeshes ? subMesh.materialDefines : effect.defines, effect, scene);\r\n }\r\n\r\n // Fog\r\n if (mesh) {\r\n BindFogParameters(scene, mesh, effect);\r\n }\r\n\r\n let name: string;\r\n // Texture\r\n for (name in this._textures) {\r\n effect.setTexture(name, this._textures[name]);\r\n }\r\n\r\n for (name in this._internalTextures) {\r\n effect._bindTexture(name, this._internalTextures[name]);\r\n }\r\n\r\n // Texture arrays\r\n for (name in this._textureArrays) {\r\n effect.setTextureArray(name, this._textureArrays[name]);\r\n }\r\n\r\n // Int\r\n for (name in this._ints) {\r\n effect.setInt(name, this._ints[name]);\r\n }\r\n\r\n // UInt\r\n for (name in this._uints) {\r\n effect.setUInt(name, this._uints[name]);\r\n }\r\n\r\n // Float\r\n for (name in this._floats) {\r\n effect.setFloat(name, this._floats[name]);\r\n }\r\n\r\n // Floats\r\n for (name in this._floatsArrays) {\r\n effect.setArray(name, this._floatsArrays[name]);\r\n }\r\n\r\n // Color3\r\n for (name in this._colors3) {\r\n effect.setColor3(name, this._colors3[name]);\r\n }\r\n\r\n // Color3Array\r\n for (name in this._colors3Arrays) {\r\n effect.setArray3(name, this._colors3Arrays[name]);\r\n }\r\n\r\n // Color4\r\n for (name in this._colors4) {\r\n const color = this._colors4[name];\r\n effect.setFloat4(name, color.r, color.g, color.b, color.a);\r\n }\r\n\r\n // Color4Array\r\n for (name in this._colors4Arrays) {\r\n effect.setArray4(name, this._colors4Arrays[name]);\r\n }\r\n\r\n // Vector2\r\n for (name in this._vectors2) {\r\n effect.setVector2(name, this._vectors2[name]);\r\n }\r\n\r\n // Vector3\r\n for (name in this._vectors3) {\r\n effect.setVector3(name, this._vectors3[name]);\r\n }\r\n\r\n // Vector4\r\n for (name in this._vectors4) {\r\n effect.setVector4(name, this._vectors4[name]);\r\n }\r\n\r\n // Quaternion\r\n for (name in this._quaternions) {\r\n effect.setQuaternion(name, this._quaternions[name]);\r\n }\r\n\r\n // Matrix\r\n for (name in this._matrices) {\r\n effect.setMatrix(name, this._matrices[name]);\r\n }\r\n\r\n // MatrixArray\r\n for (name in this._matrixArrays) {\r\n effect.setMatrices(name, this._matrixArrays[name]);\r\n }\r\n\r\n // Matrix 3x3\r\n for (name in this._matrices3x3) {\r\n effect.setMatrix3x3(name, this._matrices3x3[name]);\r\n }\r\n\r\n // Matrix 2x2\r\n for (name in this._matrices2x2) {\r\n effect.setMatrix2x2(name, this._matrices2x2[name]);\r\n }\r\n\r\n // Vector2Array\r\n for (name in this._vectors2Arrays) {\r\n effect.setArray2(name, this._vectors2Arrays[name]);\r\n }\r\n\r\n // Vector3Array\r\n for (name in this._vectors3Arrays) {\r\n effect.setArray3(name, this._vectors3Arrays[name]);\r\n }\r\n\r\n // Vector4Array\r\n for (name in this._vectors4Arrays) {\r\n effect.setArray4(name, this._vectors4Arrays[name]);\r\n }\r\n\r\n // QuaternionArray\r\n for (name in this._quaternionsArrays) {\r\n effect.setArray4(name, this._quaternionsArrays[name]);\r\n }\r\n\r\n // Uniform buffers\r\n for (name in this._uniformBuffers) {\r\n const buffer = this._uniformBuffers[name].getBuffer();\r\n if (buffer) {\r\n effect.bindUniformBuffer(buffer, name);\r\n }\r\n }\r\n\r\n const engineWebGPU = scene.getEngine() as WebGPUEngine;\r\n\r\n // External texture\r\n const setExternalTexture = engineWebGPU.setExternalTexture;\r\n if (setExternalTexture) {\r\n for (name in this._externalTextures) {\r\n setExternalTexture.call(engineWebGPU, name, this._externalTextures[name]);\r\n }\r\n }\r\n\r\n // Samplers\r\n const setTextureSampler = engineWebGPU.setTextureSampler;\r\n if (setTextureSampler) {\r\n for (name in this._textureSamplers) {\r\n setTextureSampler.call(engineWebGPU, name, this._textureSamplers[name]);\r\n }\r\n }\r\n\r\n // Storage buffers\r\n const setStorageBuffer = engineWebGPU.setStorageBuffer;\r\n if (setStorageBuffer) {\r\n for (name in this._storageBuffers) {\r\n setStorageBuffer.call(engineWebGPU, name, this._storageBuffers[name]);\r\n }\r\n }\r\n }\r\n\r\n if (effect && mesh && (mustRebind || !this.isFrozen)) {\r\n // Morph targets\r\n BindMorphTargetParameters(mesh, effect);\r\n if (mesh.morphTargetManager && mesh.morphTargetManager.isUsingTextureForTargets) {\r\n mesh.morphTargetManager._bind(effect);\r\n }\r\n\r\n const bvaManager = (<AbstractMesh>mesh).bakedVertexAnimationManager;\r\n\r\n if (bvaManager && bvaManager.isEnabled) {\r\n const drawWrapper = storeEffectOnSubMeshes ? subMesh._drawWrapper : this._drawWrapper;\r\n mesh.bakedVertexAnimationManager?.bind(effect, !!drawWrapper._wasPreviouslyUsingInstances);\r\n }\r\n }\r\n\r\n this._afterBind(mesh, effect, subMesh);\r\n }\r\n\r\n /**\r\n * Gets the active textures from the material\r\n * @returns an array of textures\r\n */\r\n public override getActiveTextures(): BaseTexture[] {\r\n const activeTextures = super.getActiveTextures();\r\n\r\n for (const name in this._textures) {\r\n activeTextures.push(this._textures[name]);\r\n }\r\n\r\n for (const name in this._textureArrays) {\r\n const array = this._textureArrays[name];\r\n for (let index = 0; index < array.length; index++) {\r\n activeTextures.push(array[index]);\r\n }\r\n }\r\n\r\n return activeTextures;\r\n }\r\n\r\n /**\r\n * Specifies if the material uses a texture\r\n * @param texture defines the texture to check against the material\r\n * @returns a boolean specifying if the material uses the texture\r\n */\r\n public override hasTexture(texture: BaseTexture): boolean {\r\n if (super.hasTexture(texture)) {\r\n return true;\r\n }\r\n\r\n for (const name in this._textures) {\r\n if (this._textures[name] === texture) {\r\n return true;\r\n }\r\n }\r\n\r\n const internalTexture = texture.getInternalTexture();\r\n for (const name in this._internalTextures) {\r\n if (this._internalTextures[name] === internalTexture) {\r\n return true;\r\n }\r\n }\r\n\r\n for (const name in this._textureArrays) {\r\n const array = this._textureArrays[name];\r\n for (let index = 0; index < array.length; index++) {\r\n if (array[index] === texture) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Makes a duplicate of the material, and gives it a new name\r\n * @param name defines the new name for the duplicated material\r\n * @returns the cloned material\r\n */\r\n public override clone(name: string): ShaderMaterial {\r\n const result = SerializationHelper.Clone(() => new ShaderMaterial(name, this.getScene(), this._shaderPath, this._options, this._storeEffectOnSubMeshes), this);\r\n\r\n result.name = name;\r\n result.id = name;\r\n\r\n // Shader code path\r\n if (typeof result._shaderPath === \"object\") {\r\n result._shaderPath = { ...result._shaderPath };\r\n }\r\n\r\n // Options\r\n this._options = { ...this._options };\r\n\r\n const keys = Object.keys(this._options) as Array<keyof IShaderMaterialOptions>;\r\n\r\n for (const propName of keys) {\r\n const propValue = this._options[propName];\r\n if (Array.isArray(propValue)) {\r\n (<string[]>this._options[propName]) = propValue.slice(0);\r\n }\r\n }\r\n\r\n // Stencil\r\n this.stencil.copyTo(result.stencil);\r\n\r\n // Texture\r\n for (const key in this._textures) {\r\n result.setTexture(key, this._textures[key]);\r\n }\r\n\r\n for (const key in this._internalTextures) {\r\n result.setInternalTexture(key, this._internalTextures[key]);\r\n }\r\n\r\n // TextureArray\r\n for (const key in this._textureArrays) {\r\n result.setTextureArray(key, this._textureArrays[key]);\r\n }\r\n\r\n // External texture\r\n for (const key in this._externalTextures) {\r\n result.setExternalTexture(key, this._externalTextures[key]);\r\n }\r\n\r\n // Int\r\n for (const key in this._ints) {\r\n result.setInt(key, this._ints[key]);\r\n }\r\n\r\n // UInt\r\n for (const key in this._uints) {\r\n result.setUInt(key, this._uints[key]);\r\n }\r\n\r\n // Float\r\n for (const key in this._floats) {\r\n result.setFloat(key, this._floats[key]);\r\n }\r\n\r\n // Floats\r\n for (const key in this._floatsArrays) {\r\n result.setFloats(key, this._floatsArrays[key]);\r\n }\r\n\r\n // Color3\r\n for (const key in this._colors3) {\r\n result.setColor3(key, this._colors3[key]);\r\n }\r\n\r\n // Color3Array\r\n for (const key in this._colors3Arrays) {\r\n result._colors3Arrays[key] = this._colors3Arrays[key];\r\n }\r\n\r\n // Color4\r\n for (const key in this._colors4) {\r\n result.setColor4(key, this._colors4[key]);\r\n }\r\n\r\n // Color4Array\r\n for (const key in this._colors4Arrays) {\r\n result._colors4Arrays[key] = this._colors4Arrays[key];\r\n }\r\n\r\n // Vector2\r\n for (const key in this._vectors2) {\r\n result.setVector2(key, this._vectors2[key]);\r\n }\r\n\r\n // Vector3\r\n for (const key in this._vectors3) {\r\n result.setVector3(key, this._vectors3[key]);\r\n }\r\n\r\n // Vector4\r\n for (const key in this._vectors4) {\r\n result.setVector4(key, this._vectors4[key]);\r\n }\r\n\r\n // Quaternion\r\n for (const key in this._quaternions) {\r\n result.setQuaternion(key, this._quaternions[key]);\r\n }\r\n\r\n // QuaternionArray\r\n for (const key in this._quaternionsArrays) {\r\n result._quaternionsArrays[key] = this._quaternionsArrays[key];\r\n }\r\n\r\n // Matrix\r\n for (const key in this._matrices) {\r\n result.setMatrix(key, this._matrices[key]);\r\n }\r\n\r\n // MatrixArray\r\n for (const key in this._matrixArrays) {\r\n result._matrixArrays[key] = this._matrixArrays[key].slice();\r\n }\r\n\r\n // Matrix 3x3\r\n for (const key in this._matrices3x3) {\r\n result.setMatrix3x3(key, this._matrices3x3[key]);\r\n }\r\n\r\n // Matrix 2x2\r\n for (const key in this._matrices2x2) {\r\n result.setMatrix2x2(key, this._matrices2x2[key]);\r\n }\r\n\r\n // Vector2Array\r\n for (const key in this._vectors2Arrays) {\r\n result.setArray2(key, this._vectors2Arrays[key]);\r\n }\r\n\r\n // Vector3Array\r\n for (const key in this._vectors3Arrays) {\r\n result.setArray3(key, this._vectors3Arrays[key]);\r\n }\r\n\r\n // Vector4Array\r\n for (const key in this._vectors4Arrays) {\r\n result.setArray4(key, this._vectors4Arrays[key]);\r\n }\r\n\r\n // Uniform buffers\r\n for (const key in this._uniformBuffers) {\r\n result.setUniformBuffer(key, this._uniformBuffers[key]);\r\n }\r\n\r\n // Samplers\r\n for (const key in this._textureSamplers) {\r\n result.setTextureSampler(key, this._textureSamplers[key]);\r\n }\r\n\r\n // Storag buffers\r\n for (const key in this._storageBuffers) {\r\n result.setStorageBuffer(key, this._storageBuffers[key]);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Disposes the material\r\n * @param forceDisposeEffect specifies if effects should be forcefully disposed\r\n * @param forceDisposeTextures specifies if textures should be forcefully disposed\r\n * @param notBoundToMesh specifies if the material that is being disposed is known to be not bound to any mesh\r\n */\r\n public override dispose(forceDisposeEffect?: boolean, forceDisposeTextures?: boolean, notBoundToMesh?: boolean): void {\r\n if (forceDisposeTextures) {\r\n let name: string;\r\n for (name in this._textures) {\r\n this._textures[name].dispose();\r\n }\r\n for (name in this._internalTextures) {\r\n this._internalTextures[name].dispose();\r\n }\r\n\r\n for (name in this._textureArrays) {\r\n const array = this._textureArrays[name];\r\n for (let index = 0; index < array.length; index++) {\r\n array[index].dispose();\r\n }\r\n }\r\n }\r\n\r\n this._textures = {};\r\n this._internalTextures = {};\r\n super.dispose(forceDisposeEffect, forceDisposeTextures, notBoundToMesh);\r\n }\r\n\r\n /**\r\n * Serializes this material in a JSON representation\r\n * @returns the serialized material object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = SerializationHelper.Serialize(this);\r\n serializationObject.customType = \"BABYLON.ShaderMaterial\";\r\n serializationObject.uniqueId = this.uniqueId;\r\n\r\n serializationObject.options = this._options;\r\n serializationObject.shaderPath = this._shaderPath;\r\n serializationObject.storeEffectOnSubMeshes = this._storeEffectOnSubMeshes;\r\n\r\n let name: string;\r\n\r\n // Stencil\r\n serializationObject.stencil = this.stencil.serialize();\r\n\r\n // Texture\r\n serializationObject.textures = {};\r\n for (name in this._textures) {\r\n serializationObject.textures[name] = this._textures[name].serialize();\r\n }\r\n\r\n // Texture arrays\r\n serializationObject.textureArrays = {};\r\n for (name in this._textureArrays) {\r\n serializationObject.textureArrays[name] = [];\r\n const array = this._textureArrays[name];\r\n for (let index = 0; index < array.length; index++) {\r\n serializationObject.textureArrays[name].push(array[index].serialize());\r\n }\r\n }\r\n\r\n // Int\r\n serializationObject.ints = {};\r\n for (name in this._ints) {\r\n serializationObject.ints[name] = this._ints[name];\r\n }\r\n\r\n // UInt\r\n serializationObject.uints = {};\r\n for (name in this._uints) {\r\n serializationObject.uints[name] = this._uints[name];\r\n }\r\n\r\n // Float\r\n serializationObject.floats = {};\r\n for (name in this._floats) {\r\n serializationObject.floats[name] = this._floats[name];\r\n }\r\n\r\n // Floats\r\n serializationObject.floatsArrays = {};\r\n for (name in this._floatsArrays) {\r\n serializationObject.floatsArrays[name] = this._floatsArrays[name];\r\n }\r\n\r\n // Color3\r\n serializationObject.colors3 = {};\r\n for (name in this._colors3) {\r\n const color3 = this._colors3[name];\r\n serializationObject.colors3[name] = [color3.r, color3.g, color3.b];\r\n }\r\n\r\n // Color3 array\r\n serializationObject.colors3Arrays = {};\r\n for (name in this._colors3Arrays) {\r\n serializationObject.colors3Arrays[name] = this._colors3Arrays[name];\r\n }\r\n\r\n // Color4\r\n serializationObject.colors4 = {};\r\n for (name in this._colors4) {\r\n const color4 = this._colors4[name];\r\n serializationObject.colors4[name] = [color4.r, color4.g, color4.b, color4.a];\r\n }\r\n\r\n // Color4 array\r\n serializationObject.colors4Arrays = {};\r\n for (name in this._colors4Arrays) {\r\n serializationObject.colors4Arrays[name] = this._colors4Arrays[name];\r\n }\r\n\r\n // Vector2\r\n serializationObject.vectors2 = {};\r\n for (name in this._vectors2) {\r\n const v2 = this._vectors2[name];\r\n serializationObject.vectors2[name] = [v2.x, v2.y];\r\n }\r\n\r\n // Vector3\r\n serializationObject.vectors3 = {};\r\n for (name in this._vectors3) {\r\n const v3 = this._vectors3[name];\r\n serializationObject.vectors3[name] = [v3.x, v3.y, v3.z];\r\n }\r\n\r\n // Vector4\r\n serializationObject.vectors4 = {};\r\n for (name in this._vectors4) {\r\n const v4 = this._vectors4[name];\r\n serializationObject.vectors4[name] = [v4.x, v4.y, v4.z, v4.w];\r\n }\r\n\r\n // Quaternion\r\n serializationObject.quaternions = {};\r\n for (name in this._quaternions) {\r\n serializationObject.quaternions[name] = this._quaternions[name].asArray();\r\n }\r\n\r\n // Matrix\r\n serializationObject.matrices = {};\r\n for (name in this._matrices) {\r\n serializationObject.matrices[name] = this._matrices[name].asArray();\r\n }\r\n\r\n // MatrixArray\r\n serializationObject.matrixArray = {};\r\n for (name in this._matrixArrays) {\r\n serializationObject.matrixArray[name] = this._matrixArrays[name];\r\n }\r\n\r\n // Matrix 3x3\r\n serializationObject.matrices3x3 = {};\r\n for (name in this._matrices3x3) {\r\n serializationObject.matrices3x3[name] = this._matrices3x3[name];\r\n }\r\n\r\n // Matrix 2x2\r\n serializationObject.matrices2x2 = {};\r\n for (name in this._matrices2x2) {\r\n serializationObject.matrices2x2[name] = this._matrices2x2[name];\r\n }\r\n\r\n // Vector2Array\r\n serializationObject.vectors2Arrays = {};\r\n for (name in this._vectors2Arrays) {\r\n serializationObject.vectors2Arrays[name] = this._vectors2Arrays[name];\r\n }\r\n\r\n // Vector3Array\r\n serializationObject.vectors3Arrays = {};\r\n for (name in this._vectors3Arrays) {\r\n serializationObject.vectors3Arrays[name] = this._vectors3Arrays[name];\r\n }\r\n\r\n // Vector4Array\r\n serializationObject.vectors4Arrays = {};\r\n for (name in this._vectors4Arrays) {\r\n serializationObject.vectors4Arrays[name] = this._vectors4Arrays[name];\r\n }\r\n\r\n // QuaternionArray\r\n serializationObject.quaternionsArrays = {};\r\n for (name in this._quaternionsArrays) {\r\n serializationObject.quaternionsArrays[name] = this._quaternionsArrays[name];\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Creates a shader material from parsed shader material data\r\n * @param source defines the JSON representation of the material\r\n * @param scene defines the hosting scene\r\n * @param rootUrl defines the root URL to use to load textures and relative dependencies\r\n * @returns a new material\r\n */\r\n public static override Parse(source: any, scene: Scene, rootUrl: string): ShaderMaterial {\r\n const material = SerializationHelper.Parse(\r\n () => new ShaderMaterial(source.name, scene, source.shaderPath, source.options, source.storeEffectOnSubMeshes),\r\n source,\r\n scene,\r\n rootUrl\r\n );\r\n\r\n let name: string;\r\n\r\n // Stencil\r\n if (source.stencil) {\r\n material.stencil.parse(source.stencil, scene, rootUrl);\r\n }\r\n\r\n // Texture\r\n for (name in source.textures) {\r\n material.setTexture(name, <BaseTexture>Texture.Parse(source.textures[name], scene, rootUrl));\r\n }\r\n\r\n // Texture arrays\r\n for (name in source.textureArrays) {\r\n const array = source.textureArrays[name];\r\n const textureArray: BaseTexture[] = [];\r\n\r\n for (let index = 0; index < array.length; index++) {\r\n textureArray.push(<BaseTexture>Texture.Parse(array[index], scene, rootUrl));\r\n }\r\n material.setTextureArray(name, textureArray);\r\n }\r\n\r\n // Int\r\n for (name in source.ints) {\r\n material.setInt(name, source.ints[name]);\r\n }\r\n\r\n // UInt\r\n for (name in source.uints) {\r\n material.setUInt(name, source.uints[name]);\r\n }\r\n\r\n // Float\r\n for (name in source.floats) {\r\n material.setFloat(name, source.floats[name]);\r\n }\r\n\r\n // Floats\r\n for (name in source.floatsArrays) {\r\n material.setFloats(name, source.floatsArrays[name]);\r\n }\r\n\r\n // Color3\r\n for (name in source.colors3) {\r\n const color = source.colors3[name];\r\n material.setColor3(name, { r: color[0], g: color[1], b: color[2] });\r\n }\r\n\r\n // Color3 arrays\r\n for (name in source.colors3Arrays) {\r\n const colors: IColor3Like[] = source.colors3Arrays[name]\r\n .reduce((arr: Array<Array<number>>, num: number, i: number) => {\r\n if (i % 3 === 0) {\r\n arr.push([num]);\r\n } else {\r\n arr[arr.length - 1].push(num);\r\n }\r\n return arr;\r\n }, [])\r\n .map((color: ArrayLike<number>) => ({ r: color[0], g: color[1], b: color[2] }));\r\n material.setColor3Array(name, colors);\r\n }\r\n\r\n // Color4\r\n for (name in source.colors4) {\r\n const color = source.colors4[name];\r\n material.setColor4(name, { r: color[0], g: color[1], b: color[2], a: color[3] });\r\n }\r\n\r\n // Color4 arrays\r\n for (name in source.colors4Arrays) {\r\n const colors: IColor4Like[] = source.colors4Arrays[name]\r\n .reduce((arr: Array<Array<number>>, num: number, i: number) => {\r\n if (i % 4 === 0) {\r\n arr.push([num]);\r\n } else {\r\n arr[arr.length - 1].push(num);\r\n }\r\n return arr;\r\n }, [])\r\n .map((color: ArrayLike<number>) => ({ r: color[0], g: color[1], b: color[2], a: color[3] }));\r\n material.setColor4Array(name, colors);\r\n }\r\n\r\n // Vector2\r\n for (name in source.vectors2) {\r\n const vector = source.vectors2[name];\r\n material.setVector2(name, { x: vector[0], y: vector[1] });\r\n }\r\n\r\n // Vector3\r\n for (name in source.vectors3) {\r\n const vector = source.vectors3[name];\r\n material.setVector3(name, { x: vector[0], y: vector[1], z: vector[2] });\r\n }\r\n\r\n // Vector4\r\n for (name in source.vectors4) {\r\n const vector = source.vectors4[name];\r\n material.setVector4(name, { x: vector[0], y: vector[1], z: vector[2], w: vector[3] });\r\n }\r\n\r\n // Quaternion\r\n for (name in source.quaternions) {\r\n material.setQuaternion(name, Quaternion.FromArray(source.quaternions[name]));\r\n }\r\n\r\n // Matrix\r\n for (name in source.matrices) {\r\n material.setMatrix(name, Matrix.FromArray(source.matrices[name]));\r\n }\r\n\r\n // MatrixArray\r\n for (name in source.matrixArray) {\r\n material._matrixArrays[name] = new Float32Array(source.matrixArray[name]);\r\n }\r\n\r\n // Matrix 3x3\r\n for (name in source.matrices3x3) {\r\n material.setMatrix3x3(name, source.matrices3x3[name]);\r\n }\r\n\r\n // Matrix 2x2\r\n for (name in source.matrices2x2) {\r\n material.setMatrix2x2(name, source.matrices2x2[name]);\r\n }\r\n\r\n // Vector2Array\r\n for (name in source.vectors2Arrays) {\r\n material.setArray2(name, source.vectors2Arrays[name]);\r\n }\r\n\r\n // Vector3Array\r\n for (name in source.vectors3Arrays) {\r\n material.setArray3(name, source.vectors3Arrays[name]);\r\n }\r\n\r\n // Vector4Array\r\n for (name in source.vectors4Arrays) {\r\n material.setArray4(name, source.vectors4Arrays[name]);\r\n }\r\n\r\n // QuaternionArray\r\n for (name in source.quaternionsArrays) {\r\n material.setArray4(name, source.quaternionsArrays[name]);\r\n }\r\n\r\n return material;\r\n }\r\n\r\n /**\r\n * Creates a new ShaderMaterial from a snippet saved in a remote file\r\n * @param name defines the name of the ShaderMaterial to create (can be null or empty to use the one from the json data)\r\n * @param url defines the url to load from\r\n * @param scene defines the hosting scene\r\n * @param rootUrl defines the root URL to use to load textures and relative dependencies\r\n * @returns a promise that will resolve to the new ShaderMaterial\r\n */\r\n public static async ParseFromFileAsync(name: Nullable<string>, url: string, scene: Scene, rootUrl = \"\"): Promise<ShaderMaterial> {\r\n return await new Promise((resolve, reject) => {\r\n const request = new WebRequest();\r\n request.addEventListener(\"readystatechange\", () => {\r\n if (request.readyState == 4) {\r\n if (request.status == 200) {\r\n const serializationObject = JSON.parse(request.responseText);\r\n const output = this.Parse(serializationObject, scene || EngineStore.LastCreatedScene, rootUrl);\r\n\r\n if (name) {\r\n output.name = name;\r\n }\r\n\r\n resolve(output);\r\n } else {\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n reject(\"Unable to load the ShaderMaterial\");\r\n }\r\n }\r\n });\r\n\r\n request.open(\"GET\", url);\r\n request.send();\r\n });\r\n }\r\n\r\n /**\r\n * Creates a ShaderMaterial from a snippet saved by the Inspector\r\n * @param snippetId defines the snippet to load\r\n * @param scene defines the hosting scene\r\n * @param rootUrl defines the root URL to use to load textures and relative dependencies\r\n * @returns a promise that will resolve to the new ShaderMaterial\r\n */\r\n public static async ParseFromSnippetAsync(snippetId: string, scene: Scene, rootUrl = \"\"): Promise<ShaderMaterial> {\r\n return await new Promise((resolve, reject) => {\r\n const request = new WebRequest();\r\n request.addEventListener(\"readystatechange\", () => {\r\n if (request.readyState == 4) {\r\n if (request.status == 200) {\r\n const snippet = JSON.parse(JSON.parse(request.responseText).jsonPayload);\r\n const serializationObject = JSON.parse(snippet.shaderMaterial);\r\n const output = this.Parse(serializationObject, scene || EngineStore.LastCreatedScene, rootUrl);\r\n\r\n output.snippetId = snippetId;\r\n\r\n resolve(output);\r\n } else {\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n reject(\"Unable to load the snippet \" + snippetId);\r\n }\r\n }\r\n });\r\n\r\n request.open(\"GET\", this.SnippetUrl + \"/\" + snippetId.replace(/#/g, \"/\"));\r\n request.send();\r\n });\r\n }\r\n\r\n /**\r\n * Creates a ShaderMaterial from a snippet saved by the Inspector\r\n * @deprecated Please use ParseFromSnippetAsync instead\r\n * @param snippetId defines the snippet to load\r\n * @param scene defines the hosting scene\r\n * @param rootUrl defines the root URL to use to load textures and relative dependencies\r\n * @returns a promise that will resolve to the new ShaderMaterial\r\n */\r\n public static CreateFromSnippetAsync = ShaderMaterial.ParseFromSnippetAsync;\r\n}\r\n\r\nRegisterClass(\"BABYLON.ShaderMaterial\", ShaderMaterial);\r\n"]}
|
|
1
|
+
{"version":3,"file":"shaderMaterial.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/shaderMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["import { SerializationHelper } from \"../Misc/decorators.serialization\";\nimport type { Nullable } from \"../types\";\nimport { Scene } from \"../scene\";\nimport { Matrix, Quaternion } from \"../Maths/math.vector\";\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\nimport type { Mesh } from \"../Meshes/mesh\";\nimport type { SubMesh } from \"../Meshes/subMesh\";\nimport { VertexBuffer } from \"../Buffers/buffer\";\nimport type { BaseTexture } from \"../Materials/Textures/baseTexture\";\nimport { Texture } from \"../Materials/Textures/texture\";\nimport type { Effect, IEffectCreationOptions, IShaderPath } from \"./effect\";\nimport { RegisterClass } from \"../Misc/typeStore\";\nimport { EffectFallbacks } from \"./effectFallbacks\";\nimport { WebRequest } from \"../Misc/webRequest\";\nimport type { ShaderLanguage } from \"./shaderLanguage\";\nimport type { UniformBuffer } from \"./uniformBuffer\";\nimport type { TextureSampler } from \"./Textures/textureSampler\";\nimport type { StorageBuffer } from \"../Buffers/storageBuffer\";\nimport { PushMaterial } from \"./pushMaterial\";\nimport { EngineStore } from \"../Engines/engineStore\";\nimport { Constants } from \"../Engines/constants\";\nimport { AddClipPlaneUniforms, BindClipPlane, PrepareStringDefinesForClipPlanes } from \"./clipPlaneMaterialHelper\";\nimport type { WebGPUEngine } from \"core/Engines/webgpuEngine\";\n\nimport type { ExternalTexture } from \"./Textures/externalTexture\";\nimport {\n BindBonesParameters,\n BindFogParameters,\n BindLogDepth,\n BindMorphTargetParameters,\n BindSceneUniformBuffer,\n PrepareDefinesAndAttributesForMorphTargets,\n PushAttributesForInstances,\n} from \"./materialHelper.functions\";\nimport type { IColor3Like, IColor4Like, IVector2Like, IVector3Like, IVector4Like } from \"core/Maths/math.like\";\nimport type { InternalTexture } from \"./Textures/internalTexture\";\n\nimport { PrepareVertexPullingUniforms, BindVertexPullingUniforms } from \"./vertexPullingHelper.functions\";\nimport type { IVertexPullingMetadata } from \"./vertexPullingHelper.functions\";\n\nconst OnCreatedEffectParameters = { effect: null as unknown as Effect, subMesh: null as unknown as Nullable<SubMesh> };\n\n/**\n * Defines the options associated with the creation of a shader material.\n */\nexport interface IShaderMaterialOptions {\n /**\n * Does the material work in alpha blend mode\n */\n needAlphaBlending: boolean;\n\n /**\n * Does the material work in alpha test mode\n */\n needAlphaTesting: boolean;\n\n /**\n * The list of attribute names used in the shader\n */\n attributes: string[];\n\n /**\n * The list of uniform names used in the shader\n */\n uniforms: string[];\n\n /**\n * The list of UBO names used in the shader\n */\n uniformBuffers: string[];\n\n /**\n * The list of sampler (texture) names used in the shader\n */\n samplers: string[];\n\n /**\n * The list of external texture names used in the shader\n */\n externalTextures: string[];\n\n /**\n * The list of sampler object names used in the shader\n */\n samplerObjects: string[];\n\n /**\n * The list of storage buffer names used in the shader\n */\n storageBuffers: string[];\n\n /**\n * The list of defines used in the shader\n */\n defines: string[];\n\n /**\n * Defines if clip planes have to be turned on: true to turn them on, false to turn them off and null to turn them on/off depending on the scene configuration (scene.clipPlaneX)\n */\n useClipPlane: Nullable<boolean>;\n\n /**\n * The language the shader is written in (default: GLSL)\n */\n shaderLanguage?: ShaderLanguage;\n\n /**\n * Defines additional code to call to prepare the shader code\n */\n extraInitializationsAsync?: () => Promise<void>;\n}\n\n/**\n * The ShaderMaterial object has the necessary methods to pass data from your scene to the Vertex and Fragment Shaders and returns a material that can be applied to any mesh.\n *\n * This returned material effects how the mesh will look based on the code in the shaders.\n *\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/shaders/shaderMaterial\n */\nexport class ShaderMaterial extends PushMaterial {\n private _shaderPath: IShaderPath | string;\n private _options: IShaderMaterialOptions;\n private _textures: { [name: string]: BaseTexture } = {};\n private _internalTextures: { [name: string]: InternalTexture } = {};\n private _textureArrays: { [name: string]: BaseTexture[] } = {};\n private _externalTextures: { [name: string]: ExternalTexture } = {};\n private _floats: { [name: string]: number } = {};\n private _ints: { [name: string]: number } = {};\n private _uints: { [name: string]: number } = {};\n private _floatsArrays: { [name: string]: number[] } = {};\n private _colors3: { [name: string]: IColor3Like } = {};\n private _colors3Arrays: { [name: string]: number[] } = {};\n private _colors4: { [name: string]: IColor4Like } = {};\n private _colors4Arrays: { [name: string]: number[] } = {};\n private _vectors2: { [name: string]: IVector2Like } = {};\n private _vectors3: { [name: string]: IVector3Like } = {};\n private _vectors4: { [name: string]: IVector4Like } = {};\n private _quaternions: { [name: string]: Quaternion } = {};\n private _quaternionsArrays: { [name: string]: number[] } = {};\n private _matrices: { [name: string]: Matrix } = {};\n private _matrixArrays: { [name: string]: Float32Array | Array<number> } = {};\n private _matrices3x3: { [name: string]: Float32Array | Array<number> } = {};\n private _matrices2x2: { [name: string]: Float32Array | Array<number> } = {};\n private _vectors2Arrays: { [name: string]: number[] } = {};\n private _vectors3Arrays: { [name: string]: number[] } = {};\n private _vectors4Arrays: { [name: string]: number[] } = {};\n private _uniformBuffers: { [name: string]: UniformBuffer } = {};\n private _textureSamplers: { [name: string]: TextureSampler } = {};\n private _storageBuffers: { [name: string]: StorageBuffer } = {};\n private _cachedWorldViewMatrix = new Matrix();\n private _cachedWorldViewProjectionMatrix = new Matrix();\n private _multiview = false;\n private _vertexPullingMetadata: Map<string, IVertexPullingMetadata> | null = null;\n\n /**\n * @internal\n */\n public _materialHelperNeedsPreviousMatrices = false;\n\n /** Define the Url to load snippets */\n public static SnippetUrl = Constants.SnippetUrl;\n\n /** Snippet ID if the material was created from the snippet server */\n public snippetId: string;\n\n /**\n * Instantiate a new shader material.\n * The ShaderMaterial object has the necessary methods to pass data from your scene to the Vertex and Fragment Shaders and returns a material that can be applied to any mesh.\n * This returned material effects how the mesh will look based on the code in the shaders.\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/shaders/shaderMaterial\n * @param name Define the name of the material in the scene\n * @param scene Define the scene the material belongs to\n * @param shaderPath Defines the route to the shader code.\n * @param options Define the options used to create the shader\n * @param storeEffectOnSubMeshes true to store effect on submeshes, false to store the effect directly in the material class.\n */\n constructor(name: string, scene: Scene, shaderPath: IShaderPath | string, options: Partial<IShaderMaterialOptions> = {}, storeEffectOnSubMeshes = true) {\n super(name, scene, storeEffectOnSubMeshes);\n this._shaderPath = shaderPath;\n\n this._options = {\n needAlphaBlending: false,\n needAlphaTesting: false,\n attributes: [\"position\", \"normal\", \"uv\"],\n uniforms: [\"worldViewProjection\"],\n uniformBuffers: [],\n samplers: [],\n externalTextures: [],\n samplerObjects: [],\n storageBuffers: [],\n defines: [],\n useClipPlane: false,\n ...options,\n };\n }\n\n /**\n * Gets the shader path used to define the shader code\n * It can be modified to trigger a new compilation\n */\n public get shaderPath() {\n return this._shaderPath;\n }\n\n /**\n * Sets the shader path used to define the shader code\n * It can be modified to trigger a new compilation\n */\n public set shaderPath(shaderPath: IShaderPath | string) {\n this._shaderPath = shaderPath;\n }\n\n /**\n * Gets the options used to compile the shader.\n * They can be modified to trigger a new compilation\n */\n public get options(): IShaderMaterialOptions {\n return this._options;\n }\n\n /**\n * is multiview set to true?\n */\n public get isMultiview(): boolean {\n return this._multiview;\n }\n\n /**\n * Gets the current class name of the material e.g. \"ShaderMaterial\"\n * Mainly use in serialization.\n * @returns the class name\n */\n public override getClassName(): string {\n return \"ShaderMaterial\";\n }\n\n /**\n * Specifies if the material will require alpha blending\n * @returns a boolean specifying if alpha blending is needed\n */\n public override needAlphaBlending(): boolean {\n return this.alpha < 1.0 || this._options.needAlphaBlending;\n }\n\n /**\n * Specifies if this material should be rendered in alpha test mode\n * @returns a boolean specifying if an alpha test is needed.\n */\n public override needAlphaTesting(): boolean {\n return this._options.needAlphaTesting;\n }\n\n private _checkUniform(uniformName: string): void {\n if (this._options.uniforms.indexOf(uniformName) === -1) {\n this._options.uniforms.push(uniformName);\n }\n }\n\n /**\n * Set a texture in the shader.\n * @param name Define the name of the uniform samplers as defined in the shader\n * @param texture Define the texture to bind to this sampler\n * @returns the material itself allowing \"fluent\" like uniform updates\n */\n public setTexture(name: string, texture: BaseTexture): ShaderMaterial {\n if (this._options.samplers.indexOf(name) === -1) {\n this._options.samplers.push(name);\n }\n this._textures[name] = texture;\n\n return this;\n }\n\n /**\n * Set an internal texture in the shader.\n * @param name Define the name of the uniform samplers as defined in the shader\n * @param texture Define the texture to bind to this sampler\n * @returns the material itself allowing \"fluent\" like uniform updates\n */\n public setInternalTexture(name: string, texture: InternalTexture): ShaderMaterial {\n if (this._options.samplers.indexOf(name) === -1) {\n this._options.samplers.push(name);\n }\n this._internalTextures[name] = texture;\n\n return this;\n }\n\n /**\n * Remove a texture from the material.\n * @param name Define the name of the texture to remove\n */\n public removeTexture(name: string): void {\n delete this._textures[name];\n }\n\n /**\n * Set a texture array in the shader.\n * @param name Define the name of the uniform sampler array as defined in the shader\n * @param textures Define the list of textures to bind to this sampler\n * @returns the material itself allowing \"fluent\" like uniform updates\n */\n public setTextureArray(name: string, textures: BaseTexture[]): ShaderMaterial {\n if (this._options.samplers.indexOf(name) === -1) {\n this._options.samplers.push(name);\n }\n\n this._checkUniform(name);\n\n this._textureArrays[name] = textures;\n\n return this;\n }\n\n /**\n * Set an internal texture in the shader.\n * @param name Define the name of the uniform samplers as defined in the shader\n * @param texture Define the texture to bind to this sampler\n * @returns the material itself allowing \"fluent\" like uniform updates\n */\n public setExternalTexture(name: string, texture: ExternalTexture): ShaderMaterial {\n if (this._options.externalTextures.indexOf(name) === -1) {\n this._options.externalTextures.push(name);\n }\n this._externalTextures[name] = texture;\n\n return this;\n }\n\n /**\n * Set a float in the shader.\n * @param name Define the name of the uniform as defined in the shader\n * @param value Define the value to give to the uniform\n * @returns the material itself allowing \"fluent\" like uniform updates\n */\n public setFloat(name: string, value: number): ShaderMaterial {\n this._checkUniform(name);\n this._floats[name] = value;\n\n return this;\n }\n\n /**\n * Set a int in the shader.\n * @param name Define the name of the uniform as defined in the shader\n * @param value Define the value to give to the uniform\n * @returns the material itself allowing \"fluent\" like uniform updates\n */\n public setInt(name: string, value: number): ShaderMaterial {\n this._checkUniform(name);\n this._ints[name] = value;\n\n return this;\n }\n\n /**\n * Set a unsigned int in the shader.\n * @param name Define the name of the uniform as defined in the shader\n * @param value Define the value to give to the uniform\n * @returns the material itself allowing \"fluent\" like uniform updates\n */\n public setUInt(name: string, value: number): ShaderMaterial {\n this._checkUniform(name);\n this._uints[name] = value;\n\n return this;\n }\n\n /**\n * Set an array of floats in the shader.\n * @param name Define the name of the uniform as defined in the shader\n * @param value Define the value to give to the uniform\n * @returns the material itself allowing \"fluent\" like uniform updates\n */\n public setFloats(name: string, value: number[]): ShaderMaterial {\n this._checkUniform(name);\n this._floatsArrays[name] = value;\n\n return this;\n }\n\n /**\n * Set a vec3 in the shader from a Color3.\n * @param name Define the name of the uniform as defined in the shader\n * @param value Define the value to give to the uniform\n * @returns the material itself allowing \"fluent\" like uniform updates\n */\n public setColor3(name: string, value: IColor3Like): ShaderMaterial {\n this._checkUniform(name);\n this._colors3[name] = value;\n\n return this;\n }\n\n /**\n * Set a vec3 array in the shader from a IColor3Like array.\n * @param name Define the name of the uniform as defined in the shader\n * @param value Define the value to give to the uniform\n * @returns the material itself allowing \"fluent\" like uniform updates\n */\n public setColor3Array(name: string, value: IColor3Like[]): ShaderMaterial {\n this._checkUniform(name);\n this._colors3Arrays[name] = value.reduce((arr: number[], color) => {\n arr.push(color.r, color.g, color.b);\n return arr;\n }, []);\n return this;\n }\n\n /**\n * Set a vec4 in the shader from a Color4.\n * @param name Define the name of the uniform as defined in the shader\n * @param value Define the value to give to the uniform\n * @returns the material itself allowing \"fluent\" like uniform updates\n */\n public setColor4(name: string, value: IColor4Like): ShaderMaterial {\n this._checkUniform(name);\n this._colors4[name] = value;\n\n return this;\n }\n\n /**\n * Set a vec4 array in the shader from a IColor4Like array.\n * @param name Define the name of the uniform as defined in the shader\n * @param value Define the value to give to the uniform\n * @returns the material itself allowing \"fluent\" like uniform updates\n */\n public setColor4Array(name: string, value: IColor4Like[]): ShaderMaterial {\n this._checkUniform(name);\n this._colors4Arrays[name] = value.reduce((arr: number[], color) => {\n arr.push(color.r, color.g, color.b, color.a);\n return arr;\n }, []);\n return this;\n }\n\n /**\n * Set a vec2 in the shader from a Vector2.\n * @param name Define the name of the uniform as defined in the shader\n * @param value Define the value to give to the uniform\n * @returns the material itself allowing \"fluent\" like uniform updates\n */\n public setVector2(name: string, value: IVector2Like): ShaderMaterial {\n this._checkUniform(name);\n this._vectors2[name] = value;\n\n return this;\n }\n\n /**\n * Set a vec3 in the shader from a Vector3.\n * @param name Define the name of the uniform as defined in the shader\n * @param value Define the value to give to the uniform\n * @returns the material itself allowing \"fluent\" like uniform updates\n */\n public setVector3(name: string, value: IVector3Like): ShaderMaterial {\n this._checkUniform(name);\n this._vectors3[name] = value;\n\n return this;\n }\n\n /**\n * Set a vec4 in the shader from a Vector4.\n * @param name Define the name of the uniform as defined in the shader\n * @param value Define the value to give to the uniform\n * @returns the material itself allowing \"fluent\" like uniform updates\n */\n public setVector4(name: string, value: IVector4Like): ShaderMaterial {\n this._checkUniform(name);\n this._vectors4[name] = value;\n\n return this;\n }\n\n /**\n * Set a vec4 in the shader from a Quaternion.\n * @param name Define the name of the uniform as defined in the shader\n * @param value Define the value to give to the uniform\n * @returns the material itself allowing \"fluent\" like uniform updates\n */\n public setQuaternion(name: string, value: Quaternion): ShaderMaterial {\n this._checkUniform(name);\n this._quaternions[name] = value;\n\n return this;\n }\n\n /**\n * Set a vec4 array in the shader from a Quaternion array.\n * @param name Define the name of the uniform as defined in the shader\n * @param value Define the value to give to the uniform\n * @returns the material itself allowing \"fluent\" like uniform updates\n */\n public setQuaternionArray(name: string, value: Quaternion[]): ShaderMaterial {\n this._checkUniform(name);\n this._quaternionsArrays[name] = value.reduce((arr, quaternion) => {\n quaternion.toArray(arr, arr.length);\n return arr;\n }, []);\n return this;\n }\n\n /**\n * Set a mat4 in the shader from a Matrix.\n * @param name Define the name of the uniform as defined in the shader\n * @param value Define the value to give to the uniform\n * @returns the material itself allowing \"fluent\" like uniform updates\n */\n public setMatrix(name: string, value: Matrix): ShaderMaterial {\n this._checkUniform(name);\n this._matrices[name] = value;\n\n return this;\n }\n\n /**\n * Set a float32Array in the shader from a matrix array.\n * @param name Define the name of the uniform as defined in the shader\n * @param value Define the value to give to the uniform\n * @returns the material itself allowing \"fluent\" like uniform updates\n */\n public setMatrices(name: string, value: Matrix[]): ShaderMaterial {\n this._checkUniform(name);\n\n const float32Array = new Float32Array(value.length * 16);\n\n for (let index = 0; index < value.length; index++) {\n const matrix = value[index];\n\n matrix.copyToArray(float32Array, index * 16);\n }\n\n this._matrixArrays[name] = float32Array;\n\n return this;\n }\n\n /**\n * Set a mat3 in the shader from a Float32Array.\n * @param name Define the name of the uniform as defined in the shader\n * @param value Define the value to give to the uniform\n * @returns the material itself allowing \"fluent\" like uniform updates\n */\n public setMatrix3x3(name: string, value: Float32Array | Array<number>): ShaderMaterial {\n this._checkUniform(name);\n this._matrices3x3[name] = value;\n\n return this;\n }\n\n /**\n * Set a mat2 in the shader from a Float32Array.\n * @param name Define the name of the uniform as defined in the shader\n * @param value Define the value to give to the uniform\n * @returns the material itself allowing \"fluent\" like uniform updates\n */\n public setMatrix2x2(name: string, value: Float32Array | Array<number>): ShaderMaterial {\n this._checkUniform(name);\n this._matrices2x2[name] = value;\n\n return this;\n }\n\n /**\n * Set a vec2 array in the shader from a number array.\n * @param name Define the name of the uniform as defined in the shader\n * @param value Define the value to give to the uniform\n * @returns the material itself allowing \"fluent\" like uniform updates\n */\n public setArray2(name: string, value: number[]): ShaderMaterial {\n this._checkUniform(name);\n this._vectors2Arrays[name] = value;\n\n return this;\n }\n\n /**\n * Set a vec3 array in the shader from a number array.\n * @param name Define the name of the uniform as defined in the shader\n * @param value Define the value to give to the uniform\n * @returns the material itself allowing \"fluent\" like uniform updates\n */\n public setArray3(name: string, value: number[]): ShaderMaterial {\n this._checkUniform(name);\n this._vectors3Arrays[name] = value;\n\n return this;\n }\n\n /**\n * Set a vec4 array in the shader from a number array.\n * @param name Define the name of the uniform as defined in the shader\n * @param value Define the value to give to the uniform\n * @returns the material itself allowing \"fluent\" like uniform updates\n */\n public setArray4(name: string, value: number[]): ShaderMaterial {\n this._checkUniform(name);\n this._vectors4Arrays[name] = value;\n\n return this;\n }\n\n /**\n * Set a uniform buffer in the shader\n * @param name Define the name of the uniform as defined in the shader\n * @param buffer Define the value to give to the uniform\n * @returns the material itself allowing \"fluent\" like uniform updates\n */\n public setUniformBuffer(name: string, buffer: UniformBuffer): ShaderMaterial {\n if (this._options.uniformBuffers.indexOf(name) === -1) {\n this._options.uniformBuffers.push(name);\n }\n this._uniformBuffers[name] = buffer;\n\n return this;\n }\n\n /**\n * Set a texture sampler in the shader\n * @param name Define the name of the uniform as defined in the shader\n * @param sampler Define the value to give to the uniform\n * @returns the material itself allowing \"fluent\" like uniform updates\n */\n public setTextureSampler(name: string, sampler: TextureSampler): ShaderMaterial {\n if (this._options.samplerObjects.indexOf(name) === -1) {\n this._options.samplerObjects.push(name);\n }\n this._textureSamplers[name] = sampler;\n\n return this;\n }\n\n /**\n * Set a storage buffer in the shader\n * @param name Define the name of the storage buffer as defined in the shader\n * @param buffer Define the value to give to the uniform\n * @returns the material itself allowing \"fluent\" like uniform updates\n */\n public setStorageBuffer(name: string, buffer: StorageBuffer): ShaderMaterial {\n if (this._options.storageBuffers.indexOf(name) === -1) {\n this._options.storageBuffers.push(name);\n }\n this._storageBuffers[name] = buffer;\n\n return this;\n }\n\n /**\n * Adds, removes, or replaces the specified shader define and value.\n * * setDefine(\"MY_DEFINE\", true); // enables a boolean define\n * * setDefine(\"MY_DEFINE\", \"0.5\"); // adds \"#define MY_DEFINE 0.5\" to the shader (or sets and replaces the value of any existing define with that name)\n * * setDefine(\"MY_DEFINE\", false); // disables and removes the define\n * Note if the active defines do change, the shader will be recompiled and this can be expensive.\n * @param define the define name e.g., \"OUTPUT_TO_SRGB\" or \"#define OUTPUT_TO_SRGB\". If the define was passed into the constructor already, the version used should match that, and in either case, it should not include any appended value.\n * @param value either the value of the define (e.g. a numerical value) or for booleans, true if the define should be enabled or false if it should be disabled\n * @returns the material itself allowing \"fluent\" like uniform updates\n */\n public setDefine(define: string, value: boolean | string): ShaderMaterial {\n // First remove any existing define with this name.\n const defineName = define.trimEnd() + \" \";\n const existingDefineIdx = this.options.defines.findIndex((x) => x === define || x.startsWith(defineName));\n if (existingDefineIdx >= 0) {\n this.options.defines.splice(existingDefineIdx, 1);\n }\n\n // Then add the new define value. (If it's a boolean value and false, don't add it.)\n if (typeof value !== \"boolean\" || value) {\n this.options.defines.push(defineName + value);\n }\n\n return this;\n }\n\n /**\n * Specifies that the submesh is ready to be used\n * @param mesh defines the mesh to check\n * @param subMesh defines which submesh to check\n * @param useInstances specifies that instances should be used\n * @returns a boolean indicating that the submesh is ready or not\n */\n public override isReadyForSubMesh(mesh: AbstractMesh, subMesh: SubMesh, useInstances?: boolean): boolean {\n return this.isReady(mesh, useInstances, subMesh);\n }\n\n /**\n * Checks if the material is ready to render the requested mesh\n * @param mesh Define the mesh to render\n * @param useInstances Define whether or not the material is used with instances\n * @param subMesh defines which submesh to render\n * @returns true if ready, otherwise false\n */\n public override isReady(mesh?: AbstractMesh, useInstances?: boolean, subMesh?: SubMesh): boolean {\n const storeEffectOnSubMeshes = subMesh && this._storeEffectOnSubMeshes;\n\n if (this.isFrozen) {\n const drawWrapper = storeEffectOnSubMeshes ? subMesh._drawWrapper : this._drawWrapper;\n if (drawWrapper.effect && drawWrapper._wasPreviouslyReady && drawWrapper._wasPreviouslyUsingInstances === useInstances) {\n return true;\n }\n }\n\n const scene = this.getScene();\n const engine = scene.getEngine();\n\n // Instances\n const defines = [];\n const attribs = [];\n let fallbacks: Nullable<EffectFallbacks> = null;\n\n let shaderName = this._shaderPath,\n uniforms = this._options.uniforms,\n uniformBuffers = this._options.uniformBuffers,\n samplers = this._options.samplers;\n\n // global multiview\n if (engine.getCaps().multiview && scene.activeCamera && scene.activeCamera.outputRenderTarget && scene.activeCamera.outputRenderTarget.getViewCount() > 1) {\n this._multiview = true;\n defines.push(\"#define MULTIVIEW\");\n if (uniforms.indexOf(\"viewProjection\") !== -1 && uniforms.indexOf(\"viewProjectionR\") === -1) {\n uniforms.push(\"viewProjectionR\");\n }\n }\n\n for (let index = 0; index < this._options.defines.length; index++) {\n const defineToAdd = this._options.defines[index].indexOf(\"#define\") === 0 ? this._options.defines[index] : `#define ${this._options.defines[index]}`;\n defines.push(defineToAdd);\n }\n\n for (let index = 0; index < this._options.attributes.length; index++) {\n attribs.push(this._options.attributes[index]);\n }\n\n if (mesh && mesh.isVerticesDataPresent(VertexBuffer.ColorKind)) {\n if (attribs.indexOf(VertexBuffer.ColorKind) === -1) {\n attribs.push(VertexBuffer.ColorKind);\n }\n defines.push(\"#define VERTEXCOLOR\");\n }\n\n if (useInstances) {\n defines.push(\"#define INSTANCES\");\n PushAttributesForInstances(attribs, this._materialHelperNeedsPreviousMatrices);\n if (mesh?.hasThinInstances) {\n defines.push(\"#define THIN_INSTANCES\");\n if (mesh && mesh.isVerticesDataPresent(VertexBuffer.ColorInstanceKind)) {\n attribs.push(VertexBuffer.ColorInstanceKind);\n defines.push(\"#define INSTANCESCOLOR\");\n }\n }\n }\n\n // Bones\n if (mesh && mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton) {\n attribs.push(VertexBuffer.MatricesIndicesKind);\n attribs.push(VertexBuffer.MatricesWeightsKind);\n if (mesh.numBoneInfluencers > 4) {\n attribs.push(VertexBuffer.MatricesIndicesExtraKind);\n attribs.push(VertexBuffer.MatricesWeightsExtraKind);\n }\n\n const skeleton = mesh.skeleton;\n\n defines.push(\"#define NUM_BONE_INFLUENCERS \" + mesh.numBoneInfluencers);\n fallbacks = new EffectFallbacks();\n fallbacks.addCPUSkinningFallback(0, mesh);\n\n if (skeleton.isUsingTextureForMatrices) {\n defines.push(\"#define BONETEXTURE\");\n\n if (uniforms.indexOf(\"boneTextureWidth\") === -1) {\n uniforms.push(\"boneTextureWidth\");\n }\n\n if (this._options.samplers.indexOf(\"boneSampler\") === -1) {\n this._options.samplers.push(\"boneSampler\");\n }\n } else {\n defines.push(\"#define BonesPerMesh \" + (skeleton.bones.length + 1));\n\n if (uniforms.indexOf(\"mBones\") === -1) {\n uniforms.push(\"mBones\");\n }\n }\n } else {\n defines.push(\"#define NUM_BONE_INFLUENCERS 0\");\n }\n\n // Morph\n let numInfluencers = 0;\n const manager = mesh ? (<Mesh>mesh).morphTargetManager : null;\n if (manager) {\n const uv = defines.indexOf(\"#define UV1\") !== -1;\n const uv2 = defines.indexOf(\"#define UV2\") !== -1;\n const tangent = defines.indexOf(\"#define TANGENT\") !== -1;\n const normal = defines.indexOf(\"#define NORMAL\") !== -1;\n const color = defines.indexOf(\"#define VERTEXCOLOR\") !== -1;\n numInfluencers = PrepareDefinesAndAttributesForMorphTargets(\n manager,\n defines,\n attribs,\n mesh!,\n true, // usePositionMorph\n normal, // useNormalMorph\n tangent, // useTangentMorph\n uv, // useUVMorph\n uv2, // useUV2Morph\n color // useColorMorph\n );\n if (manager.isUsingTextureForTargets) {\n if (uniforms.indexOf(\"morphTargetTextureIndices\") === -1) {\n uniforms.push(\"morphTargetTextureIndices\");\n }\n\n if (this._options.samplers.indexOf(\"morphTargets\") === -1) {\n this._options.samplers.push(\"morphTargets\");\n }\n }\n if (numInfluencers > 0) {\n uniforms = uniforms.slice();\n uniforms.push(\"morphTargetInfluences\");\n uniforms.push(\"morphTargetCount\");\n uniforms.push(\"morphTargetTextureInfo\");\n uniforms.push(\"morphTargetTextureIndices\");\n }\n } else {\n defines.push(\"#define NUM_MORPH_INFLUENCERS 0\");\n }\n\n // Baked Vertex Animation\n if (mesh) {\n const bvaManager = (<AbstractMesh>mesh).bakedVertexAnimationManager;\n\n if (bvaManager && bvaManager.isEnabled) {\n defines.push(\"#define BAKED_VERTEX_ANIMATION_TEXTURE\");\n if (uniforms.indexOf(\"bakedVertexAnimationSettings\") === -1) {\n uniforms.push(\"bakedVertexAnimationSettings\");\n }\n if (uniforms.indexOf(\"bakedVertexAnimationTextureSizeInverted\") === -1) {\n uniforms.push(\"bakedVertexAnimationTextureSizeInverted\");\n }\n if (uniforms.indexOf(\"bakedVertexAnimationTime\") === -1) {\n uniforms.push(\"bakedVertexAnimationTime\");\n }\n\n if (this._options.samplers.indexOf(\"bakedVertexAnimationTexture\") === -1) {\n this._options.samplers.push(\"bakedVertexAnimationTexture\");\n }\n\n if (useInstances) {\n attribs.push(\"bakedVertexAnimationSettingsInstanced\");\n }\n }\n }\n\n // Textures\n for (const name in this._textures) {\n if (!this._textures[name].isReady()) {\n return false;\n }\n }\n\n for (const name in this._internalTextures) {\n if (!this._internalTextures[name].isReady) {\n return false;\n }\n }\n\n // Alpha test\n if (mesh && this.needAlphaTestingForMesh(mesh)) {\n defines.push(\"#define ALPHATEST\");\n }\n\n // Clip planes\n if (this._options.useClipPlane !== false) {\n AddClipPlaneUniforms(uniforms);\n\n PrepareStringDefinesForClipPlanes(this, scene, defines);\n }\n\n // Fog\n if (scene.fogEnabled && mesh?.applyFog && scene.fogMode !== Scene.FOGMODE_NONE) {\n defines.push(\"#define FOG\");\n if (uniforms.indexOf(\"view\") === -1) {\n uniforms.push(\"view\");\n }\n if (uniforms.indexOf(\"vFogInfos\") === -1) {\n uniforms.push(\"vFogInfos\");\n }\n if (uniforms.indexOf(\"vFogColor\") === -1) {\n uniforms.push(\"vFogColor\");\n }\n }\n\n // Misc\n if (this._useLogarithmicDepth) {\n defines.push(\"#define LOGARITHMICDEPTH\");\n if (uniforms.indexOf(\"logarithmicDepthConstant\") === -1) {\n uniforms.push(\"logarithmicDepthConstant\");\n }\n }\n\n const renderingMesh = subMesh ? subMesh.getRenderingMesh() : mesh;\n if (renderingMesh && this.useVertexPulling) {\n // Add vertex buffer metadata defines for proper stride/offset handling\n const geometry = renderingMesh.geometry;\n if (geometry) {\n this._vertexPullingMetadata = PrepareVertexPullingUniforms(geometry);\n if (this._vertexPullingMetadata) {\n this._vertexPullingMetadata.forEach((_, attribute) => {\n uniforms.push(`vp_${attribute}_info`);\n });\n }\n }\n\n defines.push(\"#define USE_VERTEX_PULLING\");\n\n const indexBuffer = renderingMesh.geometry?.getIndexBuffer();\n if (indexBuffer && !(renderingMesh as Mesh).isUnIndexed) {\n defines.push(\"#define VERTEX_PULLING_USE_INDEX_BUFFER\");\n if (indexBuffer.is32Bits) {\n defines.push(\"#define VERTEX_PULLING_INDEX_BUFFER_32BITS\");\n }\n }\n }\n\n if (this.customShaderNameResolve) {\n uniforms = uniforms.slice();\n uniformBuffers = uniformBuffers.slice();\n samplers = samplers.slice();\n shaderName = this.customShaderNameResolve(this.name, uniforms, uniformBuffers, samplers, defines, attribs);\n }\n\n const drawWrapper = storeEffectOnSubMeshes ? subMesh._getDrawWrapper(undefined, true) : this._drawWrapper;\n const previousEffect = drawWrapper?.effect ?? null;\n const previousDefines = drawWrapper?.defines ?? null;\n const join = defines.join(\"\\n\");\n\n let effect = previousEffect;\n if (previousDefines !== join) {\n effect = engine.createEffect(\n shaderName,\n <IEffectCreationOptions>{\n attributes: attribs,\n uniformsNames: uniforms,\n uniformBuffersNames: uniformBuffers,\n samplers: samplers,\n defines: join,\n fallbacks: fallbacks,\n onCompiled: this.onCompiled,\n onError: this.onError,\n indexParameters: { maxSimultaneousMorphTargets: numInfluencers },\n shaderLanguage: this._options.shaderLanguage,\n extraInitializationsAsync: this._options.extraInitializationsAsync,\n },\n engine\n );\n\n if (storeEffectOnSubMeshes) {\n subMesh.setEffect(effect, join, this._materialContext);\n } else if (drawWrapper) {\n drawWrapper.setEffect(effect, join);\n }\n\n if (this._onEffectCreatedObservable) {\n OnCreatedEffectParameters.effect = effect;\n OnCreatedEffectParameters.subMesh = subMesh ?? mesh?.subMeshes[0] ?? null;\n this._onEffectCreatedObservable.notifyObservers(OnCreatedEffectParameters);\n }\n }\n\n drawWrapper!._wasPreviouslyUsingInstances = !!useInstances;\n\n if (!effect?.isReady()) {\n return false;\n }\n\n if (previousEffect !== effect) {\n scene.resetCachedMaterial();\n }\n\n drawWrapper!._wasPreviouslyReady = true;\n\n return true;\n }\n\n /**\n * Binds the world matrix to the material\n * @param world defines the world transformation matrix\n * @param effectOverride - If provided, use this effect instead of internal effect\n */\n public override bindOnlyWorldMatrix(world: Matrix, effectOverride?: Nullable<Effect>): void {\n const effect = effectOverride ?? this.getEffect();\n if (!effect) {\n return;\n }\n\n const uniforms = this._options.uniforms;\n if (uniforms.indexOf(\"world\") !== -1) {\n effect.setMatrix(\"world\", world);\n }\n\n const scene = this.getScene();\n if (uniforms.indexOf(\"worldView\") !== -1) {\n world.multiplyToRef(scene.getViewMatrix(), this._cachedWorldViewMatrix);\n effect.setMatrix(\"worldView\", this._cachedWorldViewMatrix);\n }\n\n if (uniforms.indexOf(\"worldViewProjection\") !== -1) {\n world.multiplyToRef(scene.getTransformMatrix(), this._cachedWorldViewProjectionMatrix);\n effect.setMatrix(\"worldViewProjection\", this._cachedWorldViewProjectionMatrix);\n }\n\n if (uniforms.indexOf(\"view\") !== -1) {\n effect.setMatrix(\"view\", scene.getViewMatrix());\n }\n }\n\n /**\n * Binds the submesh to this material by preparing the effect and shader to draw\n * @param world defines the world transformation matrix\n * @param mesh defines the mesh containing the submesh\n * @param subMesh defines the submesh to bind the material to\n */\n public override bindForSubMesh(world: Matrix, mesh: Mesh, subMesh: SubMesh): void {\n this.bind(world, mesh, subMesh._drawWrapperOverride?.effect, subMesh);\n }\n\n /**\n * Binds the material to the mesh\n * @param world defines the world transformation matrix\n * @param mesh defines the mesh to bind the material to\n * @param effectOverride - If provided, use this effect instead of internal effect\n * @param subMesh defines the submesh to bind the material to\n */\n public override bind(world: Matrix, mesh?: AbstractMesh, effectOverride?: Nullable<Effect>, subMesh?: SubMesh): void {\n // Std values\n const storeEffectOnSubMeshes = subMesh && this._storeEffectOnSubMeshes;\n const effect = effectOverride ?? (storeEffectOnSubMeshes ? subMesh.effect : this.getEffect());\n\n if (!effect) {\n return;\n }\n\n const scene = this.getScene();\n\n this._activeEffect = effect;\n\n this.bindOnlyWorldMatrix(world, effectOverride);\n\n const uniformBuffers = this._options.uniformBuffers;\n\n let useSceneUBO = false;\n\n if (effect && uniformBuffers && uniformBuffers.length > 0 && scene.getEngine().supportsUniformBuffers) {\n for (let i = 0; i < uniformBuffers.length; ++i) {\n const bufferName = uniformBuffers[i];\n switch (bufferName) {\n case \"Mesh\":\n if (mesh) {\n mesh.getMeshUniformBuffer().bindToEffect(effect, \"Mesh\");\n mesh.transferToEffect(world);\n }\n break;\n case \"Scene\":\n BindSceneUniformBuffer(effect, scene.getSceneUniformBuffer());\n scene.finalizeSceneUbo();\n useSceneUBO = true;\n break;\n }\n }\n }\n\n const mustRebind = mesh && storeEffectOnSubMeshes ? this._mustRebind(scene, effect, subMesh, mesh.visibility) : scene.getCachedMaterial() !== this;\n\n if (effect && mustRebind) {\n if (!useSceneUBO && this._options.uniforms.indexOf(\"view\") !== -1) {\n effect.setMatrix(\"view\", scene.getViewMatrix());\n }\n\n if (!useSceneUBO && this._options.uniforms.indexOf(\"projection\") !== -1) {\n effect.setMatrix(\"projection\", scene.getProjectionMatrix());\n }\n\n if (!useSceneUBO && this._options.uniforms.indexOf(\"viewProjection\") !== -1) {\n effect.setMatrix(\"viewProjection\", scene.getTransformMatrix());\n if (this._multiview) {\n effect.setMatrix(\"viewProjectionR\", scene._transformMatrixR);\n }\n }\n\n if (scene.activeCamera && this._options.uniforms.indexOf(\"cameraPosition\") !== -1) {\n effect.setVector3(\"cameraPosition\", scene.activeCamera.globalPosition);\n }\n\n // Bones\n BindBonesParameters(mesh, effect);\n\n // Clip plane\n BindClipPlane(effect, this, scene);\n\n if (this._vertexPullingMetadata) {\n BindVertexPullingUniforms(effect, this._vertexPullingMetadata);\n }\n\n // Misc\n if (this._useLogarithmicDepth) {\n BindLogDepth(storeEffectOnSubMeshes ? subMesh.materialDefines : effect.defines, effect, scene);\n }\n\n // Fog\n if (mesh) {\n BindFogParameters(scene, mesh, effect);\n }\n\n let name: string;\n // Texture\n for (name in this._textures) {\n effect.setTexture(name, this._textures[name]);\n }\n\n for (name in this._internalTextures) {\n effect._bindTexture(name, this._internalTextures[name]);\n }\n\n // Texture arrays\n for (name in this._textureArrays) {\n effect.setTextureArray(name, this._textureArrays[name]);\n }\n\n // Int\n for (name in this._ints) {\n effect.setInt(name, this._ints[name]);\n }\n\n // UInt\n for (name in this._uints) {\n effect.setUInt(name, this._uints[name]);\n }\n\n // Float\n for (name in this._floats) {\n effect.setFloat(name, this._floats[name]);\n }\n\n // Floats\n for (name in this._floatsArrays) {\n effect.setArray(name, this._floatsArrays[name]);\n }\n\n // Color3\n for (name in this._colors3) {\n effect.setColor3(name, this._colors3[name]);\n }\n\n // Color3Array\n for (name in this._colors3Arrays) {\n effect.setArray3(name, this._colors3Arrays[name]);\n }\n\n // Color4\n for (name in this._colors4) {\n const color = this._colors4[name];\n effect.setFloat4(name, color.r, color.g, color.b, color.a);\n }\n\n // Color4Array\n for (name in this._colors4Arrays) {\n effect.setArray4(name, this._colors4Arrays[name]);\n }\n\n // Vector2\n for (name in this._vectors2) {\n effect.setVector2(name, this._vectors2[name]);\n }\n\n // Vector3\n for (name in this._vectors3) {\n effect.setVector3(name, this._vectors3[name]);\n }\n\n // Vector4\n for (name in this._vectors4) {\n effect.setVector4(name, this._vectors4[name]);\n }\n\n // Quaternion\n for (name in this._quaternions) {\n effect.setQuaternion(name, this._quaternions[name]);\n }\n\n // Matrix\n for (name in this._matrices) {\n effect.setMatrix(name, this._matrices[name]);\n }\n\n // MatrixArray\n for (name in this._matrixArrays) {\n effect.setMatrices(name, this._matrixArrays[name]);\n }\n\n // Matrix 3x3\n for (name in this._matrices3x3) {\n effect.setMatrix3x3(name, this._matrices3x3[name]);\n }\n\n // Matrix 2x2\n for (name in this._matrices2x2) {\n effect.setMatrix2x2(name, this._matrices2x2[name]);\n }\n\n // Vector2Array\n for (name in this._vectors2Arrays) {\n effect.setArray2(name, this._vectors2Arrays[name]);\n }\n\n // Vector3Array\n for (name in this._vectors3Arrays) {\n effect.setArray3(name, this._vectors3Arrays[name]);\n }\n\n // Vector4Array\n for (name in this._vectors4Arrays) {\n effect.setArray4(name, this._vectors4Arrays[name]);\n }\n\n // QuaternionArray\n for (name in this._quaternionsArrays) {\n effect.setArray4(name, this._quaternionsArrays[name]);\n }\n\n // Uniform buffers\n for (name in this._uniformBuffers) {\n const buffer = this._uniformBuffers[name].getBuffer();\n if (buffer) {\n effect.bindUniformBuffer(buffer, name);\n }\n }\n\n const engineWebGPU = scene.getEngine() as WebGPUEngine;\n\n // External texture\n const setExternalTexture = engineWebGPU.setExternalTexture;\n if (setExternalTexture) {\n for (name in this._externalTextures) {\n setExternalTexture.call(engineWebGPU, name, this._externalTextures[name]);\n }\n }\n\n // Samplers\n const setTextureSampler = engineWebGPU.setTextureSampler;\n if (setTextureSampler) {\n for (name in this._textureSamplers) {\n setTextureSampler.call(engineWebGPU, name, this._textureSamplers[name]);\n }\n }\n\n // Storage buffers\n const setStorageBuffer = engineWebGPU.setStorageBuffer;\n if (setStorageBuffer) {\n for (name in this._storageBuffers) {\n setStorageBuffer.call(engineWebGPU, name, this._storageBuffers[name]);\n }\n }\n }\n\n if (effect && mesh && (mustRebind || !this.isFrozen)) {\n // Morph targets\n BindMorphTargetParameters(mesh, effect);\n if (mesh.morphTargetManager && mesh.morphTargetManager.isUsingTextureForTargets) {\n mesh.morphTargetManager._bind(effect);\n }\n\n const bvaManager = (<AbstractMesh>mesh).bakedVertexAnimationManager;\n\n if (bvaManager && bvaManager.isEnabled) {\n const drawWrapper = storeEffectOnSubMeshes ? subMesh._drawWrapper : this._drawWrapper;\n mesh.bakedVertexAnimationManager?.bind(effect, !!drawWrapper._wasPreviouslyUsingInstances);\n }\n }\n\n this._afterBind(mesh, effect, subMesh);\n }\n\n /**\n * Gets the active textures from the material\n * @returns an array of textures\n */\n public override getActiveTextures(): BaseTexture[] {\n const activeTextures = super.getActiveTextures();\n\n for (const name in this._textures) {\n activeTextures.push(this._textures[name]);\n }\n\n for (const name in this._textureArrays) {\n const array = this._textureArrays[name];\n for (let index = 0; index < array.length; index++) {\n activeTextures.push(array[index]);\n }\n }\n\n return activeTextures;\n }\n\n /**\n * Specifies if the material uses a texture\n * @param texture defines the texture to check against the material\n * @returns a boolean specifying if the material uses the texture\n */\n public override hasTexture(texture: BaseTexture): boolean {\n if (super.hasTexture(texture)) {\n return true;\n }\n\n for (const name in this._textures) {\n if (this._textures[name] === texture) {\n return true;\n }\n }\n\n const internalTexture = texture.getInternalTexture();\n for (const name in this._internalTextures) {\n if (this._internalTextures[name] === internalTexture) {\n return true;\n }\n }\n\n for (const name in this._textureArrays) {\n const array = this._textureArrays[name];\n for (let index = 0; index < array.length; index++) {\n if (array[index] === texture) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n /**\n * Makes a duplicate of the material, and gives it a new name\n * @param name defines the new name for the duplicated material\n * @returns the cloned material\n */\n public override clone(name: string): ShaderMaterial {\n const result = SerializationHelper.Clone(() => new ShaderMaterial(name, this.getScene(), this._shaderPath, this._options, this._storeEffectOnSubMeshes), this);\n\n result.name = name;\n result.id = name;\n\n // Shader code path\n if (typeof result._shaderPath === \"object\") {\n result._shaderPath = { ...result._shaderPath };\n }\n\n // Options\n this._options = { ...this._options };\n\n const keys = Object.keys(this._options) as Array<keyof IShaderMaterialOptions>;\n\n for (const propName of keys) {\n const propValue = this._options[propName];\n if (Array.isArray(propValue)) {\n (<string[]>this._options[propName]) = propValue.slice(0);\n }\n }\n\n // Stencil\n this.stencil.copyTo(result.stencil);\n\n // Texture\n for (const key in this._textures) {\n result.setTexture(key, this._textures[key]);\n }\n\n for (const key in this._internalTextures) {\n result.setInternalTexture(key, this._internalTextures[key]);\n }\n\n // TextureArray\n for (const key in this._textureArrays) {\n result.setTextureArray(key, this._textureArrays[key]);\n }\n\n // External texture\n for (const key in this._externalTextures) {\n result.setExternalTexture(key, this._externalTextures[key]);\n }\n\n // Int\n for (const key in this._ints) {\n result.setInt(key, this._ints[key]);\n }\n\n // UInt\n for (const key in this._uints) {\n result.setUInt(key, this._uints[key]);\n }\n\n // Float\n for (const key in this._floats) {\n result.setFloat(key, this._floats[key]);\n }\n\n // Floats\n for (const key in this._floatsArrays) {\n result.setFloats(key, this._floatsArrays[key]);\n }\n\n // Color3\n for (const key in this._colors3) {\n result.setColor3(key, this._colors3[key]);\n }\n\n // Color3Array\n for (const key in this._colors3Arrays) {\n result._colors3Arrays[key] = this._colors3Arrays[key];\n }\n\n // Color4\n for (const key in this._colors4) {\n result.setColor4(key, this._colors4[key]);\n }\n\n // Color4Array\n for (const key in this._colors4Arrays) {\n result._colors4Arrays[key] = this._colors4Arrays[key];\n }\n\n // Vector2\n for (const key in this._vectors2) {\n result.setVector2(key, this._vectors2[key]);\n }\n\n // Vector3\n for (const key in this._vectors3) {\n result.setVector3(key, this._vectors3[key]);\n }\n\n // Vector4\n for (const key in this._vectors4) {\n result.setVector4(key, this._vectors4[key]);\n }\n\n // Quaternion\n for (const key in this._quaternions) {\n result.setQuaternion(key, this._quaternions[key]);\n }\n\n // QuaternionArray\n for (const key in this._quaternionsArrays) {\n result._quaternionsArrays[key] = this._quaternionsArrays[key];\n }\n\n // Matrix\n for (const key in this._matrices) {\n result.setMatrix(key, this._matrices[key]);\n }\n\n // MatrixArray\n for (const key in this._matrixArrays) {\n result._matrixArrays[key] = this._matrixArrays[key].slice();\n }\n\n // Matrix 3x3\n for (const key in this._matrices3x3) {\n result.setMatrix3x3(key, this._matrices3x3[key]);\n }\n\n // Matrix 2x2\n for (const key in this._matrices2x2) {\n result.setMatrix2x2(key, this._matrices2x2[key]);\n }\n\n // Vector2Array\n for (const key in this._vectors2Arrays) {\n result.setArray2(key, this._vectors2Arrays[key]);\n }\n\n // Vector3Array\n for (const key in this._vectors3Arrays) {\n result.setArray3(key, this._vectors3Arrays[key]);\n }\n\n // Vector4Array\n for (const key in this._vectors4Arrays) {\n result.setArray4(key, this._vectors4Arrays[key]);\n }\n\n // Uniform buffers\n for (const key in this._uniformBuffers) {\n result.setUniformBuffer(key, this._uniformBuffers[key]);\n }\n\n // Samplers\n for (const key in this._textureSamplers) {\n result.setTextureSampler(key, this._textureSamplers[key]);\n }\n\n // Storag buffers\n for (const key in this._storageBuffers) {\n result.setStorageBuffer(key, this._storageBuffers[key]);\n }\n\n return result;\n }\n\n /**\n * Disposes the material\n * @param forceDisposeEffect specifies if effects should be forcefully disposed\n * @param forceDisposeTextures specifies if textures should be forcefully disposed\n * @param notBoundToMesh specifies if the material that is being disposed is known to be not bound to any mesh\n */\n public override dispose(forceDisposeEffect?: boolean, forceDisposeTextures?: boolean, notBoundToMesh?: boolean): void {\n if (forceDisposeTextures) {\n let name: string;\n for (name in this._textures) {\n this._textures[name].dispose();\n }\n for (name in this._internalTextures) {\n this._internalTextures[name].dispose();\n }\n\n for (name in this._textureArrays) {\n const array = this._textureArrays[name];\n for (let index = 0; index < array.length; index++) {\n array[index].dispose();\n }\n }\n }\n\n this._textures = {};\n this._internalTextures = {};\n super.dispose(forceDisposeEffect, forceDisposeTextures, notBoundToMesh);\n }\n\n /**\n * Serializes this material in a JSON representation\n * @returns the serialized material object\n */\n public override serialize(): any {\n const serializationObject = SerializationHelper.Serialize(this);\n serializationObject.customType = \"BABYLON.ShaderMaterial\";\n serializationObject.uniqueId = this.uniqueId;\n\n serializationObject.options = this._options;\n serializationObject.shaderPath = this._shaderPath;\n serializationObject.storeEffectOnSubMeshes = this._storeEffectOnSubMeshes;\n\n let name: string;\n\n // Stencil\n serializationObject.stencil = this.stencil.serialize();\n\n // Texture\n serializationObject.textures = {};\n for (name in this._textures) {\n serializationObject.textures[name] = this._textures[name].serialize();\n }\n\n // Texture arrays\n serializationObject.textureArrays = {};\n for (name in this._textureArrays) {\n serializationObject.textureArrays[name] = [];\n const array = this._textureArrays[name];\n for (let index = 0; index < array.length; index++) {\n serializationObject.textureArrays[name].push(array[index].serialize());\n }\n }\n\n // Int\n serializationObject.ints = {};\n for (name in this._ints) {\n serializationObject.ints[name] = this._ints[name];\n }\n\n // UInt\n serializationObject.uints = {};\n for (name in this._uints) {\n serializationObject.uints[name] = this._uints[name];\n }\n\n // Float\n serializationObject.floats = {};\n for (name in this._floats) {\n serializationObject.floats[name] = this._floats[name];\n }\n\n // Floats\n serializationObject.floatsArrays = {};\n for (name in this._floatsArrays) {\n serializationObject.floatsArrays[name] = this._floatsArrays[name];\n }\n\n // Color3\n serializationObject.colors3 = {};\n for (name in this._colors3) {\n const color3 = this._colors3[name];\n serializationObject.colors3[name] = [color3.r, color3.g, color3.b];\n }\n\n // Color3 array\n serializationObject.colors3Arrays = {};\n for (name in this._colors3Arrays) {\n serializationObject.colors3Arrays[name] = this._colors3Arrays[name];\n }\n\n // Color4\n serializationObject.colors4 = {};\n for (name in this._colors4) {\n const color4 = this._colors4[name];\n serializationObject.colors4[name] = [color4.r, color4.g, color4.b, color4.a];\n }\n\n // Color4 array\n serializationObject.colors4Arrays = {};\n for (name in this._colors4Arrays) {\n serializationObject.colors4Arrays[name] = this._colors4Arrays[name];\n }\n\n // Vector2\n serializationObject.vectors2 = {};\n for (name in this._vectors2) {\n const v2 = this._vectors2[name];\n serializationObject.vectors2[name] = [v2.x, v2.y];\n }\n\n // Vector3\n serializationObject.vectors3 = {};\n for (name in this._vectors3) {\n const v3 = this._vectors3[name];\n serializationObject.vectors3[name] = [v3.x, v3.y, v3.z];\n }\n\n // Vector4\n serializationObject.vectors4 = {};\n for (name in this._vectors4) {\n const v4 = this._vectors4[name];\n serializationObject.vectors4[name] = [v4.x, v4.y, v4.z, v4.w];\n }\n\n // Quaternion\n serializationObject.quaternions = {};\n for (name in this._quaternions) {\n serializationObject.quaternions[name] = this._quaternions[name].asArray();\n }\n\n // Matrix\n serializationObject.matrices = {};\n for (name in this._matrices) {\n serializationObject.matrices[name] = this._matrices[name].asArray();\n }\n\n // MatrixArray\n serializationObject.matrixArray = {};\n for (name in this._matrixArrays) {\n serializationObject.matrixArray[name] = this._matrixArrays[name];\n }\n\n // Matrix 3x3\n serializationObject.matrices3x3 = {};\n for (name in this._matrices3x3) {\n serializationObject.matrices3x3[name] = this._matrices3x3[name];\n }\n\n // Matrix 2x2\n serializationObject.matrices2x2 = {};\n for (name in this._matrices2x2) {\n serializationObject.matrices2x2[name] = this._matrices2x2[name];\n }\n\n // Vector2Array\n serializationObject.vectors2Arrays = {};\n for (name in this._vectors2Arrays) {\n serializationObject.vectors2Arrays[name] = this._vectors2Arrays[name];\n }\n\n // Vector3Array\n serializationObject.vectors3Arrays = {};\n for (name in this._vectors3Arrays) {\n serializationObject.vectors3Arrays[name] = this._vectors3Arrays[name];\n }\n\n // Vector4Array\n serializationObject.vectors4Arrays = {};\n for (name in this._vectors4Arrays) {\n serializationObject.vectors4Arrays[name] = this._vectors4Arrays[name];\n }\n\n // QuaternionArray\n serializationObject.quaternionsArrays = {};\n for (name in this._quaternionsArrays) {\n serializationObject.quaternionsArrays[name] = this._quaternionsArrays[name];\n }\n\n return serializationObject;\n }\n\n /**\n * Creates a shader material from parsed shader material data\n * @param source defines the JSON representation of the material\n * @param scene defines the hosting scene\n * @param rootUrl defines the root URL to use to load textures and relative dependencies\n * @returns a new material\n */\n public static override Parse(source: any, scene: Scene, rootUrl: string): ShaderMaterial {\n const material = SerializationHelper.Parse(\n () => new ShaderMaterial(source.name, scene, source.shaderPath, source.options, source.storeEffectOnSubMeshes),\n source,\n scene,\n rootUrl\n );\n\n let name: string;\n\n // Stencil\n if (source.stencil) {\n material.stencil.parse(source.stencil, scene, rootUrl);\n }\n\n // Texture\n for (name in source.textures) {\n material.setTexture(name, <BaseTexture>Texture.Parse(source.textures[name], scene, rootUrl));\n }\n\n // Texture arrays\n for (name in source.textureArrays) {\n const array = source.textureArrays[name];\n const textureArray: BaseTexture[] = [];\n\n for (let index = 0; index < array.length; index++) {\n textureArray.push(<BaseTexture>Texture.Parse(array[index], scene, rootUrl));\n }\n material.setTextureArray(name, textureArray);\n }\n\n // Int\n for (name in source.ints) {\n material.setInt(name, source.ints[name]);\n }\n\n // UInt\n for (name in source.uints) {\n material.setUInt(name, source.uints[name]);\n }\n\n // Float\n for (name in source.floats) {\n material.setFloat(name, source.floats[name]);\n }\n\n // Floats\n for (name in source.floatsArrays) {\n material.setFloats(name, source.floatsArrays[name]);\n }\n\n // Color3\n for (name in source.colors3) {\n const color = source.colors3[name];\n material.setColor3(name, { r: color[0], g: color[1], b: color[2] });\n }\n\n // Color3 arrays\n for (name in source.colors3Arrays) {\n const colors: IColor3Like[] = source.colors3Arrays[name]\n .reduce((arr: Array<Array<number>>, num: number, i: number) => {\n if (i % 3 === 0) {\n arr.push([num]);\n } else {\n arr[arr.length - 1].push(num);\n }\n return arr;\n }, [])\n .map((color: ArrayLike<number>) => ({ r: color[0], g: color[1], b: color[2] }));\n material.setColor3Array(name, colors);\n }\n\n // Color4\n for (name in source.colors4) {\n const color = source.colors4[name];\n material.setColor4(name, { r: color[0], g: color[1], b: color[2], a: color[3] });\n }\n\n // Color4 arrays\n for (name in source.colors4Arrays) {\n const colors: IColor4Like[] = source.colors4Arrays[name]\n .reduce((arr: Array<Array<number>>, num: number, i: number) => {\n if (i % 4 === 0) {\n arr.push([num]);\n } else {\n arr[arr.length - 1].push(num);\n }\n return arr;\n }, [])\n .map((color: ArrayLike<number>) => ({ r: color[0], g: color[1], b: color[2], a: color[3] }));\n material.setColor4Array(name, colors);\n }\n\n // Vector2\n for (name in source.vectors2) {\n const vector = source.vectors2[name];\n material.setVector2(name, { x: vector[0], y: vector[1] });\n }\n\n // Vector3\n for (name in source.vectors3) {\n const vector = source.vectors3[name];\n material.setVector3(name, { x: vector[0], y: vector[1], z: vector[2] });\n }\n\n // Vector4\n for (name in source.vectors4) {\n const vector = source.vectors4[name];\n material.setVector4(name, { x: vector[0], y: vector[1], z: vector[2], w: vector[3] });\n }\n\n // Quaternion\n for (name in source.quaternions) {\n material.setQuaternion(name, Quaternion.FromArray(source.quaternions[name]));\n }\n\n // Matrix\n for (name in source.matrices) {\n material.setMatrix(name, Matrix.FromArray(source.matrices[name]));\n }\n\n // MatrixArray\n for (name in source.matrixArray) {\n material._matrixArrays[name] = new Float32Array(source.matrixArray[name]);\n }\n\n // Matrix 3x3\n for (name in source.matrices3x3) {\n material.setMatrix3x3(name, source.matrices3x3[name]);\n }\n\n // Matrix 2x2\n for (name in source.matrices2x2) {\n material.setMatrix2x2(name, source.matrices2x2[name]);\n }\n\n // Vector2Array\n for (name in source.vectors2Arrays) {\n material.setArray2(name, source.vectors2Arrays[name]);\n }\n\n // Vector3Array\n for (name in source.vectors3Arrays) {\n material.setArray3(name, source.vectors3Arrays[name]);\n }\n\n // Vector4Array\n for (name in source.vectors4Arrays) {\n material.setArray4(name, source.vectors4Arrays[name]);\n }\n\n // QuaternionArray\n for (name in source.quaternionsArrays) {\n material.setArray4(name, source.quaternionsArrays[name]);\n }\n\n return material;\n }\n\n /**\n * Creates a new ShaderMaterial from a snippet saved in a remote file\n * @param name defines the name of the ShaderMaterial to create (can be null or empty to use the one from the json data)\n * @param url defines the url to load from\n * @param scene defines the hosting scene\n * @param rootUrl defines the root URL to use to load textures and relative dependencies\n * @returns a promise that will resolve to the new ShaderMaterial\n */\n public static async ParseFromFileAsync(name: Nullable<string>, url: string, scene: Scene, rootUrl = \"\"): Promise<ShaderMaterial> {\n return await new Promise((resolve, reject) => {\n const request = new WebRequest();\n request.addEventListener(\"readystatechange\", () => {\n if (request.readyState == 4) {\n if (request.status == 200) {\n const serializationObject = JSON.parse(request.responseText);\n const output = this.Parse(serializationObject, scene || EngineStore.LastCreatedScene, rootUrl);\n\n if (name) {\n output.name = name;\n }\n\n resolve(output);\n } else {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n reject(\"Unable to load the ShaderMaterial\");\n }\n }\n });\n\n request.open(\"GET\", url);\n request.send();\n });\n }\n\n /**\n * Creates a ShaderMaterial from a snippet saved by the Inspector\n * @param snippetId defines the snippet to load\n * @param scene defines the hosting scene\n * @param rootUrl defines the root URL to use to load textures and relative dependencies\n * @returns a promise that will resolve to the new ShaderMaterial\n */\n public static async ParseFromSnippetAsync(snippetId: string, scene: Scene, rootUrl = \"\"): Promise<ShaderMaterial> {\n return await new Promise((resolve, reject) => {\n const request = new WebRequest();\n request.addEventListener(\"readystatechange\", () => {\n if (request.readyState == 4) {\n if (request.status == 200) {\n const snippet = JSON.parse(JSON.parse(request.responseText).jsonPayload);\n const serializationObject = JSON.parse(snippet.shaderMaterial);\n const output = this.Parse(serializationObject, scene || EngineStore.LastCreatedScene, rootUrl);\n\n output.snippetId = snippetId;\n\n resolve(output);\n } else {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n reject(\"Unable to load the snippet \" + snippetId);\n }\n }\n });\n\n request.open(\"GET\", this.SnippetUrl + \"/\" + snippetId.replace(/#/g, \"/\"));\n request.send();\n });\n }\n\n /**\n * Creates a ShaderMaterial from a snippet saved by the Inspector\n * @deprecated Please use ParseFromSnippetAsync instead\n * @param snippetId defines the snippet to load\n * @param scene defines the hosting scene\n * @param rootUrl defines the root URL to use to load textures and relative dependencies\n * @returns a promise that will resolve to the new ShaderMaterial\n */\n public static CreateFromSnippetAsync = ShaderMaterial.ParseFromSnippetAsync;\n}\n\nRegisterClass(\"BABYLON.ShaderMaterial\", ShaderMaterial);\n"]}
|