@babylonjs/core 5.0.0-beta.9 → 5.0.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/Animations/animation.d.ts +4 -4
  2. package/Animations/animation.js +4 -4
  3. package/Animations/animation.js.map +1 -1
  4. package/Audio/sound.js +9 -3
  5. package/Audio/sound.js.map +1 -1
  6. package/DeviceInput/Helpers/eventFactory.js +8 -1
  7. package/DeviceInput/Helpers/eventFactory.js.map +1 -1
  8. package/DeviceInput/InputDevices/webDeviceInputSystem.d.ts +1 -0
  9. package/DeviceInput/InputDevices/webDeviceInputSystem.js +51 -9
  10. package/DeviceInput/InputDevices/webDeviceInputSystem.js.map +1 -1
  11. package/Engines/Extensions/engine.query.d.ts +7 -0
  12. package/Engines/Extensions/engine.query.js +12 -0
  13. package/Engines/Extensions/engine.query.js.map +1 -1
  14. package/Engines/Extensions/engine.renderTarget.d.ts +5 -0
  15. package/Engines/Extensions/engine.renderTarget.js.map +1 -1
  16. package/Engines/index.d.ts +1 -0
  17. package/Engines/index.js +1 -0
  18. package/Engines/index.js.map +1 -1
  19. package/Engines/nativeEngine.js +10 -10
  20. package/Engines/nativeEngine.js.map +1 -1
  21. package/Engines/thinEngine.js +2 -2
  22. package/Engines/thinEngine.js.map +1 -1
  23. package/Engines/webgpuEngine.js +2 -2
  24. package/Engines/webgpuEngine.js.map +1 -1
  25. package/Helpers/environmentHelper.js +2 -2
  26. package/Helpers/environmentHelper.js.map +1 -1
  27. package/Layers/effectLayer.d.ts +1 -0
  28. package/Layers/effectLayer.js +24 -0
  29. package/Layers/effectLayer.js.map +1 -1
  30. package/Materials/PBR/pbrBaseMaterial.js +1 -0
  31. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  32. package/Materials/Textures/dynamicTexture.d.ts +1 -1
  33. package/Materials/Textures/dynamicTexture.js.map +1 -1
  34. package/Materials/materialPluginBase.d.ts +5 -0
  35. package/Materials/materialPluginBase.js +5 -0
  36. package/Materials/materialPluginBase.js.map +1 -1
  37. package/Materials/materialPluginEvent.d.ts +1 -0
  38. package/Materials/materialPluginEvent.js.map +1 -1
  39. package/Materials/materialPluginManager.d.ts +1 -0
  40. package/Materials/materialPluginManager.js +20 -15
  41. package/Materials/materialPluginManager.js.map +1 -1
  42. package/Materials/standardMaterial.js +1 -0
  43. package/Materials/standardMaterial.js.map +1 -1
  44. package/Maths/math.vector.d.ts +5 -0
  45. package/Maths/math.vector.js +11 -0
  46. package/Maths/math.vector.js.map +1 -1
  47. package/Meshes/Builders/polygonBuilder.js +2 -1
  48. package/Meshes/Builders/polygonBuilder.js.map +1 -1
  49. package/Meshes/abstractMesh.d.ts +1 -1
  50. package/Meshes/abstractMesh.js.map +1 -1
  51. package/Meshes/instancedMesh.js +7 -4
  52. package/Meshes/instancedMesh.js.map +1 -1
  53. package/Meshes/mesh.js +21 -22
  54. package/Meshes/mesh.js.map +1 -1
  55. package/Meshes/mesh.vertexData.d.ts +1 -1
  56. package/Meshes/mesh.vertexData.js +98 -75
  57. package/Meshes/mesh.vertexData.js.map +1 -1
  58. package/Meshes/transformNode.d.ts +0 -2
  59. package/Meshes/transformNode.js +6 -5
  60. package/Meshes/transformNode.js.map +1 -1
  61. package/Misc/decorators.d.ts +1 -1
  62. package/Misc/decorators.js +1 -1
  63. package/Misc/decorators.js.map +1 -1
  64. package/Misc/fileTools.js.map +1 -1
  65. package/Particles/particleSystem.d.ts +13 -1
  66. package/Particles/particleSystem.js +20 -0
  67. package/Particles/particleSystem.js.map +1 -1
  68. package/Rendering/prePassRenderer.js +12 -2
  69. package/Rendering/prePassRenderer.js.map +1 -1
  70. package/Rendering/subSurfaceConfiguration.js +1 -1
  71. package/Rendering/subSurfaceConfiguration.js.map +1 -1
  72. package/Rendering/utilityLayerRenderer.js +2 -0
  73. package/Rendering/utilityLayerRenderer.js.map +1 -1
  74. package/Shaders/ShadersInclude/pointCloudVertex.js +1 -1
  75. package/Shaders/ShadersInclude/pointCloudVertex.js.map +1 -1
  76. package/Shaders/background.vertex.js +1 -1
  77. package/Shaders/background.vertex.js.map +1 -1
  78. package/Shaders/pbr.vertex.js +1 -1
  79. package/Shaders/pbr.vertex.js.map +1 -1
  80. package/XR/features/WebXRNearInteraction.js +4 -2
  81. package/XR/features/WebXRNearInteraction.js.map +1 -1
  82. package/package.json +1 -1
  83. package/scene.d.ts +1 -10
  84. package/scene.js +12 -33
  85. package/scene.js.map +1 -1
  86. package/types.d.ts +1 -1
  87. package/types.js.map +1 -1
@@ -70,7 +70,7 @@ export declare class DynamicTexture extends Texture {
70
70
  * @param invertY defines the direction for the Y axis (default is true - y increases downwards)
71
71
  * @param update defines whether texture is immediately update (default is true)
72
72
  */
73
- drawText(text: string, x: number | null | undefined, y: number | null | undefined, font: string, color: string | null, clearColor: string, invertY?: boolean, update?: boolean): void;
73
+ drawText(text: string, x: number | null | undefined, y: number | null | undefined, font: string, color: string | null, clearColor: string | null, invertY?: boolean, update?: boolean): void;
74
74
  /**
75
75
  * Clones the texture
76
76
  * @returns the clone of the texture.
@@ -1 +1 @@
1
- {"version":3,"file":"dynamicTexture.js","sourceRoot":"","sources":["../../../../sourceES6/core/Materials/Textures/dynamicTexture.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../../Misc/logger\";\r\nimport { Nullable } from \"../../types\";\r\nimport { Scene } from \"../../scene\";\r\nimport { ISize } from \"../../Maths/math.size\";\r\nimport { Texture } from \"../../Materials/Textures/texture\";\r\n\r\nimport \"../../Engines/Extensions/engine.dynamicTexture\";\r\nimport { ICanvas, ICanvasRenderingContext } from \"../../Engines/ICanvas\";\r\n\r\n/**\r\n * A class extending Texture allowing drawing on a texture\r\n * @see https://doc.babylonjs.com/divingDeeper/materials/using/dynamicTexture\r\n */\r\nexport class DynamicTexture extends Texture {\r\n private _generateMipMaps: boolean;\r\n private _canvas: ICanvas;\r\n private _context: ICanvasRenderingContext;\r\n\r\n /**\r\n * Creates a DynamicTexture\r\n * @param name defines the name of the texture\r\n * @param options provides 3 alternatives for width and height of texture, a canvas, object with width and height properties, number for both width and height\r\n * @param scene defines the scene where you want the texture\r\n * @param generateMipMaps defines the use of MinMaps or not (default is false)\r\n * @param samplingMode defines the sampling mode to use (default is Texture.TRILINEAR_SAMPLINGMODE)\r\n * @param format defines the texture format to use (default is Engine.TEXTUREFORMAT_RGBA)\r\n * @param invertY defines if the texture needs to be inverted on the y axis during loading\r\n */\r\n\r\n constructor(name: string, options: any, scene: Nullable<Scene> = null, generateMipMaps: boolean = false, samplingMode: number = 3, format: number = 5, invertY?: boolean) {\r\n super(null, scene, !generateMipMaps, invertY, samplingMode, undefined, undefined, undefined, undefined, format);\r\n\r\n this.name = name;\r\n this.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n this.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n\r\n this._generateMipMaps = generateMipMaps;\r\n\r\n const engine = this._getEngine();\r\n if (!engine) {\r\n return;\r\n }\r\n\r\n if (options.getContext) {\r\n this._canvas = options;\r\n this._texture = engine.createDynamicTexture(options.width, options.height, generateMipMaps, samplingMode);\r\n } else {\r\n this._canvas = engine.createCanvas(1, 1);\r\n\r\n if (options.width || options.width === 0) {\r\n this._texture = engine.createDynamicTexture(options.width, options.height, generateMipMaps, samplingMode);\r\n } else {\r\n this._texture = engine.createDynamicTexture(options, options, generateMipMaps, samplingMode);\r\n }\r\n }\r\n\r\n var textureSize = this.getSize();\r\n\r\n if (this._canvas.width !== textureSize.width) {\r\n this._canvas.width = textureSize.width;\r\n }\r\n if (this._canvas.height !== textureSize.height) {\r\n this._canvas.height = textureSize.height;\r\n }\r\n this._context = this._canvas.getContext(\"2d\");\r\n }\r\n\r\n /**\r\n * Get the current class name of the texture useful for serialization or dynamic coding.\r\n * @returns \"DynamicTexture\"\r\n */\r\n public getClassName(): string {\r\n return \"DynamicTexture\";\r\n }\r\n\r\n /**\r\n * Gets the current state of canRescale\r\n */\r\n public get canRescale(): boolean {\r\n return true;\r\n }\r\n\r\n private _recreate(textureSize: ISize): void {\r\n this._canvas.width = textureSize.width;\r\n this._canvas.height = textureSize.height;\r\n\r\n this.releaseInternalTexture();\r\n\r\n this._texture = this._getEngine()!.createDynamicTexture(textureSize.width, textureSize.height, this._generateMipMaps, this.samplingMode);\r\n }\r\n\r\n /**\r\n * Scales the texture\r\n * @param ratio the scale factor to apply to both width and height\r\n */\r\n public scale(ratio: number): void {\r\n var textureSize = this.getSize();\r\n\r\n textureSize.width *= ratio;\r\n textureSize.height *= ratio;\r\n\r\n this._recreate(textureSize);\r\n }\r\n\r\n /**\r\n * Resizes the texture\r\n * @param width the new width\r\n * @param height the new height\r\n */\r\n public scaleTo(width: number, height: number): void {\r\n var textureSize = this.getSize();\r\n\r\n textureSize.width = width;\r\n textureSize.height = height;\r\n\r\n this._recreate(textureSize);\r\n }\r\n\r\n /**\r\n * Gets the context of the canvas used by the texture\r\n * @returns the canvas context of the dynamic texture\r\n */\r\n public getContext(): ICanvasRenderingContext {\r\n return this._context;\r\n }\r\n\r\n /**\r\n * Clears the texture\r\n */\r\n public clear(): void {\r\n var size = this.getSize();\r\n this._context.fillRect(0, 0, size.width, size.height);\r\n }\r\n\r\n /**\r\n * Updates the texture\r\n * @param invertY defines the direction for the Y axis (default is true - y increases downwards)\r\n * @param premulAlpha defines if alpha is stored as premultiplied (default is false)\r\n * @param allowGPUOptimization true to allow some specific GPU optimizations (subject to engine feature \"allowGPUOptimizationsForGUI\" being true)\r\n */\r\n public update(invertY?: boolean, premulAlpha = false, allowGPUOptimization = false): void {\r\n this._getEngine()!.updateDynamicTexture(this._texture, this._canvas, invertY === undefined ? true : invertY, premulAlpha, this._format || undefined, undefined, allowGPUOptimization);\r\n }\r\n\r\n /**\r\n * Draws text onto the texture\r\n * @param text defines the text to be drawn\r\n * @param x defines the placement of the text from the left\r\n * @param y defines the placement of the text from the top when invertY is true and from the bottom when false\r\n * @param font defines the font to be used with font-style, font-size, font-name\r\n * @param color defines the color used for the text\r\n * @param clearColor defines the color for the canvas, use null to not overwrite canvas\r\n * @param invertY defines the direction for the Y axis (default is true - y increases downwards)\r\n * @param update defines whether texture is immediately update (default is true)\r\n */\r\n public drawText(text: string, x: number | null | undefined, y: number | null | undefined, font: string, color: string | null, clearColor: string, invertY?: boolean, update = true) {\r\n var size = this.getSize();\r\n if (clearColor) {\r\n this._context.fillStyle = clearColor;\r\n this._context.fillRect(0, 0, size.width, size.height);\r\n }\r\n\r\n this._context.font = font;\r\n if (x === null || x === undefined) {\r\n var textSize = this._context.measureText(text);\r\n x = (size.width - textSize.width) / 2;\r\n }\r\n if (y === null || y === undefined) {\r\n var fontSize = parseInt((font.replace(/\\D/g, '')));\r\n y = (size.height / 2) + (fontSize / 3.65);\r\n }\r\n\r\n this._context.fillStyle = color || \"\";\r\n this._context.fillText(text, x, y);\r\n\r\n if (update) {\r\n this.update(invertY);\r\n }\r\n }\r\n\r\n /**\r\n * Clones the texture\r\n * @returns the clone of the texture.\r\n */\r\n public clone(): DynamicTexture {\r\n let scene = this.getScene();\r\n\r\n if (!scene) {\r\n return this;\r\n }\r\n\r\n var textureSize = this.getSize();\r\n var newTexture = new DynamicTexture(this.name, textureSize, scene, this._generateMipMaps);\r\n\r\n // Base texture\r\n newTexture.hasAlpha = this.hasAlpha;\r\n newTexture.level = this.level;\r\n\r\n // Dynamic Texture\r\n newTexture.wrapU = this.wrapU;\r\n newTexture.wrapV = this.wrapV;\r\n\r\n return newTexture;\r\n }\r\n\r\n /**\r\n * Serializes the dynamic texture. The scene should be ready before the dynamic texture is serialized\r\n * @returns a serialized dynamic texture object\r\n */\r\n public serialize(): any {\r\n const scene = this.getScene();\r\n if (scene && !scene.isReady()) {\r\n Logger.Warn(\"The scene must be ready before serializing the dynamic texture\");\r\n }\r\n\r\n const serializationObject = super.serialize();\r\n if (this._IsCanvasElement(this._canvas)) {\r\n serializationObject.base64String = this._canvas.toDataURL();\r\n }\r\n\r\n serializationObject.invertY = this._invertY;\r\n serializationObject.samplingMode = this.samplingMode;\r\n\r\n return serializationObject;\r\n }\r\n\r\n private _IsCanvasElement(canvas: HTMLCanvasElement | OffscreenCanvas | ICanvas): canvas is HTMLCanvasElement {\r\n return (canvas as HTMLCanvasElement).toDataURL !== undefined;\r\n }\r\n\r\n /** @hidden */\r\n public _rebuild(): void {\r\n this.update();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"dynamicTexture.js","sourceRoot":"","sources":["../../../../sourceES6/core/Materials/Textures/dynamicTexture.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../../Misc/logger\";\r\nimport { Nullable } from \"../../types\";\r\nimport { Scene } from \"../../scene\";\r\nimport { ISize } from \"../../Maths/math.size\";\r\nimport { Texture } from \"../../Materials/Textures/texture\";\r\n\r\nimport \"../../Engines/Extensions/engine.dynamicTexture\";\r\nimport { ICanvas, ICanvasRenderingContext } from \"../../Engines/ICanvas\";\r\n\r\n/**\r\n * A class extending Texture allowing drawing on a texture\r\n * @see https://doc.babylonjs.com/divingDeeper/materials/using/dynamicTexture\r\n */\r\nexport class DynamicTexture extends Texture {\r\n private _generateMipMaps: boolean;\r\n private _canvas: ICanvas;\r\n private _context: ICanvasRenderingContext;\r\n\r\n /**\r\n * Creates a DynamicTexture\r\n * @param name defines the name of the texture\r\n * @param options provides 3 alternatives for width and height of texture, a canvas, object with width and height properties, number for both width and height\r\n * @param scene defines the scene where you want the texture\r\n * @param generateMipMaps defines the use of MinMaps or not (default is false)\r\n * @param samplingMode defines the sampling mode to use (default is Texture.TRILINEAR_SAMPLINGMODE)\r\n * @param format defines the texture format to use (default is Engine.TEXTUREFORMAT_RGBA)\r\n * @param invertY defines if the texture needs to be inverted on the y axis during loading\r\n */\r\n\r\n constructor(name: string, options: any, scene: Nullable<Scene> = null, generateMipMaps: boolean = false, samplingMode: number = 3, format: number = 5, invertY?: boolean) {\r\n super(null, scene, !generateMipMaps, invertY, samplingMode, undefined, undefined, undefined, undefined, format);\r\n\r\n this.name = name;\r\n this.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n this.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n\r\n this._generateMipMaps = generateMipMaps;\r\n\r\n const engine = this._getEngine();\r\n if (!engine) {\r\n return;\r\n }\r\n\r\n if (options.getContext) {\r\n this._canvas = options;\r\n this._texture = engine.createDynamicTexture(options.width, options.height, generateMipMaps, samplingMode);\r\n } else {\r\n this._canvas = engine.createCanvas(1, 1);\r\n\r\n if (options.width || options.width === 0) {\r\n this._texture = engine.createDynamicTexture(options.width, options.height, generateMipMaps, samplingMode);\r\n } else {\r\n this._texture = engine.createDynamicTexture(options, options, generateMipMaps, samplingMode);\r\n }\r\n }\r\n\r\n var textureSize = this.getSize();\r\n\r\n if (this._canvas.width !== textureSize.width) {\r\n this._canvas.width = textureSize.width;\r\n }\r\n if (this._canvas.height !== textureSize.height) {\r\n this._canvas.height = textureSize.height;\r\n }\r\n this._context = this._canvas.getContext(\"2d\");\r\n }\r\n\r\n /**\r\n * Get the current class name of the texture useful for serialization or dynamic coding.\r\n * @returns \"DynamicTexture\"\r\n */\r\n public getClassName(): string {\r\n return \"DynamicTexture\";\r\n }\r\n\r\n /**\r\n * Gets the current state of canRescale\r\n */\r\n public get canRescale(): boolean {\r\n return true;\r\n }\r\n\r\n private _recreate(textureSize: ISize): void {\r\n this._canvas.width = textureSize.width;\r\n this._canvas.height = textureSize.height;\r\n\r\n this.releaseInternalTexture();\r\n\r\n this._texture = this._getEngine()!.createDynamicTexture(textureSize.width, textureSize.height, this._generateMipMaps, this.samplingMode);\r\n }\r\n\r\n /**\r\n * Scales the texture\r\n * @param ratio the scale factor to apply to both width and height\r\n */\r\n public scale(ratio: number): void {\r\n var textureSize = this.getSize();\r\n\r\n textureSize.width *= ratio;\r\n textureSize.height *= ratio;\r\n\r\n this._recreate(textureSize);\r\n }\r\n\r\n /**\r\n * Resizes the texture\r\n * @param width the new width\r\n * @param height the new height\r\n */\r\n public scaleTo(width: number, height: number): void {\r\n var textureSize = this.getSize();\r\n\r\n textureSize.width = width;\r\n textureSize.height = height;\r\n\r\n this._recreate(textureSize);\r\n }\r\n\r\n /**\r\n * Gets the context of the canvas used by the texture\r\n * @returns the canvas context of the dynamic texture\r\n */\r\n public getContext(): ICanvasRenderingContext {\r\n return this._context;\r\n }\r\n\r\n /**\r\n * Clears the texture\r\n */\r\n public clear(): void {\r\n var size = this.getSize();\r\n this._context.fillRect(0, 0, size.width, size.height);\r\n }\r\n\r\n /**\r\n * Updates the texture\r\n * @param invertY defines the direction for the Y axis (default is true - y increases downwards)\r\n * @param premulAlpha defines if alpha is stored as premultiplied (default is false)\r\n * @param allowGPUOptimization true to allow some specific GPU optimizations (subject to engine feature \"allowGPUOptimizationsForGUI\" being true)\r\n */\r\n public update(invertY?: boolean, premulAlpha = false, allowGPUOptimization = false): void {\r\n this._getEngine()!.updateDynamicTexture(this._texture, this._canvas, invertY === undefined ? true : invertY, premulAlpha, this._format || undefined, undefined, allowGPUOptimization);\r\n }\r\n\r\n /**\r\n * Draws text onto the texture\r\n * @param text defines the text to be drawn\r\n * @param x defines the placement of the text from the left\r\n * @param y defines the placement of the text from the top when invertY is true and from the bottom when false\r\n * @param font defines the font to be used with font-style, font-size, font-name\r\n * @param color defines the color used for the text\r\n * @param clearColor defines the color for the canvas, use null to not overwrite canvas\r\n * @param invertY defines the direction for the Y axis (default is true - y increases downwards)\r\n * @param update defines whether texture is immediately update (default is true)\r\n */\r\n public drawText(text: string, x: number | null | undefined, y: number | null | undefined, font: string, color: string | null, clearColor: string | null, invertY?: boolean, update = true) {\r\n var size = this.getSize();\r\n if (clearColor) {\r\n this._context.fillStyle = clearColor;\r\n this._context.fillRect(0, 0, size.width, size.height);\r\n }\r\n\r\n this._context.font = font;\r\n if (x === null || x === undefined) {\r\n var textSize = this._context.measureText(text);\r\n x = (size.width - textSize.width) / 2;\r\n }\r\n if (y === null || y === undefined) {\r\n var fontSize = parseInt((font.replace(/\\D/g, '')));\r\n y = (size.height / 2) + (fontSize / 3.65);\r\n }\r\n\r\n this._context.fillStyle = color || \"\";\r\n this._context.fillText(text, x, y);\r\n\r\n if (update) {\r\n this.update(invertY);\r\n }\r\n }\r\n\r\n /**\r\n * Clones the texture\r\n * @returns the clone of the texture.\r\n */\r\n public clone(): DynamicTexture {\r\n let scene = this.getScene();\r\n\r\n if (!scene) {\r\n return this;\r\n }\r\n\r\n var textureSize = this.getSize();\r\n var newTexture = new DynamicTexture(this.name, textureSize, scene, this._generateMipMaps);\r\n\r\n // Base texture\r\n newTexture.hasAlpha = this.hasAlpha;\r\n newTexture.level = this.level;\r\n\r\n // Dynamic Texture\r\n newTexture.wrapU = this.wrapU;\r\n newTexture.wrapV = this.wrapV;\r\n\r\n return newTexture;\r\n }\r\n\r\n /**\r\n * Serializes the dynamic texture. The scene should be ready before the dynamic texture is serialized\r\n * @returns a serialized dynamic texture object\r\n */\r\n public serialize(): any {\r\n const scene = this.getScene();\r\n if (scene && !scene.isReady()) {\r\n Logger.Warn(\"The scene must be ready before serializing the dynamic texture\");\r\n }\r\n\r\n const serializationObject = super.serialize();\r\n if (this._IsCanvasElement(this._canvas)) {\r\n serializationObject.base64String = this._canvas.toDataURL();\r\n }\r\n\r\n serializationObject.invertY = this._invertY;\r\n serializationObject.samplingMode = this.samplingMode;\r\n\r\n return serializationObject;\r\n }\r\n\r\n private _IsCanvasElement(canvas: HTMLCanvasElement | OffscreenCanvas | ICanvas): canvas is HTMLCanvasElement {\r\n return (canvas as HTMLCanvasElement).toDataURL !== undefined;\r\n }\r\n\r\n /** @hidden */\r\n public _rebuild(): void {\r\n this.update();\r\n }\r\n}\r\n"]}
@@ -153,6 +153,11 @@ export declare class MaterialPluginBase {
153
153
  * @param samplers list that the sampler names should be added to.
154
154
  */
155
155
  getSamplers(samplers: string[]): void;
156
+ /**
157
+ * Gets the uniform buffers names added by the plugin.
158
+ * @param ubos list that the ubo names should be added to.
159
+ */
160
+ getUniformBuffersNames(ubos: string[]): void;
156
161
  /**
157
162
  * Gets the description of the uniforms to add to the ubo (if engine supports ubos) or to inject directly in the vertex/fragment shaders (if engine does not support ubos)
158
163
  * @returns the description of the uniforms
@@ -169,6 +169,11 @@ var MaterialPluginBase = /** @class */ (function () {
169
169
  * @param samplers list that the sampler names should be added to.
170
170
  */
171
171
  MaterialPluginBase.prototype.getSamplers = function (samplers) { };
172
+ /**
173
+ * Gets the uniform buffers names added by the plugin.
174
+ * @param ubos list that the ubo names should be added to.
175
+ */
176
+ MaterialPluginBase.prototype.getUniformBuffersNames = function (ubos) { };
172
177
  /**
173
178
  * Gets the description of the uniforms to add to the ubo (if engine supports ubos) or to inject directly in the vertex/fragment shaders (if engine does not support ubos)
174
179
  * @returns the description of the uniforms
@@ -1 +1 @@
1
- {"version":3,"file":"materialPluginBase.js","sourceRoot":"","sources":["../../../sourceES6/core/Materials/materialPluginBase.ts"],"names":[],"mappings":"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","sourcesContent":["import { SerializationHelper, serialize } from \"../Misc/decorators\";\r\nimport { Nullable } from \"../types\";\r\nimport { MaterialPluginManager } from \"./materialPluginManager\";\r\nimport { SmartArray } from \"../Misc/smartArray\";\r\n\r\n\r\ndeclare type Engine = import(\"../Engines/engine\").Engine;\r\ndeclare type Scene = import(\"../scene\").Scene;\r\ndeclare type AbstractMesh = import(\"../Meshes/abstractMesh\").AbstractMesh;\r\ndeclare type SubMesh = import(\"../Meshes/subMesh\").SubMesh;\r\ndeclare type IAnimatable = import(\"../Animations/animatable.interface\").IAnimatable;\r\ndeclare type UniformBuffer = import(\"./uniformBuffer\").UniformBuffer;\r\ndeclare type EffectFallbacks = import(\"./effectFallbacks\").EffectFallbacks;\r\ndeclare type MaterialDefines = import(\"./materialDefines\").MaterialDefines;\r\ndeclare type Material = import(\"./material\").Material;\r\ndeclare type BaseTexture = import(\"./Textures/baseTexture\").BaseTexture;\r\ndeclare type RenderTargetTexture = import(\"./Textures/renderTargetTexture\").RenderTargetTexture;\r\n\r\n/**\r\n * Base class for material plugins.\r\n * @since 5.0\r\n */\r\nexport class MaterialPluginBase {\r\n /**\r\n * Defines the name of the plugin\r\n */\r\n @serialize()\r\n public name: string;\r\n\r\n /**\r\n * Defines the priority of the plugin. Lower numbers run first.\r\n */\r\n @serialize()\r\n public priority: number = 500;\r\n\r\n /**\r\n * Indicates that this plugin should be notified for the extra events (HasRenderTargetTextures / FillRenderTargetTextures / HardBindForSubMesh)\r\n */\r\n @serialize()\r\n public registerForExtraEvents: boolean = false;\r\n\r\n protected _material: Material;\r\n protected _pluginManager: MaterialPluginManager;\r\n protected _pluginDefineNames?: { [name: string]: any };\r\n\r\n protected _enable(enable: boolean) {\r\n if (enable) {\r\n this._pluginManager._activatePlugin(this);\r\n }\r\n }\r\n\r\n /**\r\n * Helper function to mark defines as being dirty.\r\n */\r\n protected readonly markAllDefinesAsDirty: () => void;\r\n\r\n /**\r\n * Creates a new material plugin\r\n * @param material parent material of the plugin\r\n * @param name name of the plugin\r\n * @param priority priority of the plugin\r\n * @param defines list of defines used by the plugin. The value of the property is the default value for this property\r\n * @param addToPluginList true to add the plugin to the list of plugins managed by the material plugin manager of the material (default: true)\r\n * @param enable true to enable the plugin (it is handy if the plugin does not handle properties to switch its current activation)\r\n */\r\n constructor(material: Material, name: string, priority: number, defines?: { [key: string]: any }, addToPluginList = true, enable = false) {\r\n this._material = material;\r\n this.name = name;\r\n this.priority = priority;\r\n\r\n if (!material.pluginManager) {\r\n material.pluginManager = new MaterialPluginManager(material);\r\n }\r\n\r\n this._pluginDefineNames = defines;\r\n this._pluginManager = material.pluginManager;\r\n\r\n if (addToPluginList) {\r\n this._pluginManager._addPlugin(this);\r\n }\r\n\r\n if (enable) {\r\n this._enable(true);\r\n }\r\n\r\n this.markAllDefinesAsDirty = material._dirtyCallbacks[63];\r\n }\r\n\r\n /**\r\n * Gets the current class name useful for serialization or dynamic coding.\r\n * @returns The class name.\r\n */\r\n public getClassName(): string {\r\n return \"MaterialPluginBase\";\r\n }\r\n\r\n /**\r\n * Specifies that the submesh is ready to be used.\r\n * @param defines the list of \"defines\" to update.\r\n * @param scene defines the scene the material belongs to.\r\n * @param engine the engine this scene belongs to.\r\n * @param subMesh the submesh to check for readiness\r\n * @returns - boolean indicating that the submesh is ready or not.\r\n */\r\n public isReadyForSubMesh(defines: MaterialDefines, scene: Scene, engine: Engine, subMesh: SubMesh): boolean {\r\n return true;\r\n }\r\n\r\n /**\r\n * Binds the material data (this function is called even if mustRebind() returns false)\r\n * @param uniformBuffer defines the Uniform buffer to fill in.\r\n * @param scene defines the scene the material belongs to.\r\n * @param engine defines the engine the material belongs to.\r\n * @param subMesh the submesh to bind data for\r\n */\r\n public hardBindForSubMesh(uniformBuffer: UniformBuffer, scene: Scene, engine: Engine, subMesh: SubMesh): void {}\r\n\r\n /**\r\n * Binds the material data.\r\n * @param uniformBuffer defines the Uniform buffer to fill in.\r\n * @param scene defines the scene the material belongs to.\r\n * @param engine the engine this scene belongs to.\r\n * @param subMesh the submesh to bind data for\r\n */\r\n public bindForSubMesh(uniformBuffer: UniformBuffer, scene: Scene, engine: Engine, subMesh: SubMesh): void {}\r\n\r\n /**\r\n * Disposes the resources of the material.\r\n * @param forceDisposeTextures - Forces the disposal of all textures.\r\n */\r\n public dispose(forceDisposeTextures?: boolean): void {}\r\n\r\n /**\r\n * Returns a list of custom shader code fragments to customize the shader.\r\n * @param shaderType \"vertex\" or \"fragment\"\r\n * @returns null if no code to be added, or a list of pointName => code.\r\n * Note that `pointName` can also be a regular expression if it starts with a `!`.\r\n * In that case, the string found by the regular expression (if any) will be\r\n * replaced by the code provided.\r\n */\r\n public getCustomCode(shaderType: string): Nullable<{ [pointName: string]: string }> {\r\n return null;\r\n }\r\n\r\n /**\r\n * Collects all defines.\r\n * @param defines The object to append to.\r\n */\r\n public collectDefines(defines: { [name: string]: { type: string; default: any } }): void {\r\n if (!this._pluginDefineNames) {\r\n return;\r\n }\r\n for (const key of Object.keys(this._pluginDefineNames)) {\r\n if (key[0] === \"_\") {\r\n continue;\r\n }\r\n\r\n const type = typeof this._pluginDefineNames[key];\r\n defines[key] = {\r\n type: type === \"number\" ? \"number\" : type === \"string\" ? \"string\" : type === \"boolean\" ? \"boolean\" : \"object\",\r\n default: this._pluginDefineNames[key],\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * Sets the defines for the next rendering\r\n * @param defines the list of \"defines\" to update.\r\n * @param scene defines the scene to the material belongs to.\r\n * @param mesh the mesh being rendered\r\n */\r\n public prepareDefines(defines: MaterialDefines, scene: Scene, mesh: AbstractMesh): void {}\r\n\r\n /**\r\n * Checks to see if a texture is used in the material.\r\n * @param texture - Base texture to use.\r\n * @returns - Boolean specifying if a texture is used in the material.\r\n */\r\n public hasTexture(texture: BaseTexture): boolean {\r\n return false;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that current material needs to register RTT\r\n * @returns true if this uses a render target otherwise false.\r\n */\r\n public hasRenderTargetTextures(): boolean {\r\n return false;\r\n }\r\n\r\n /**\r\n * Fills the list of render target textures.\r\n * @param renderTargets the list of render targets to update\r\n */\r\n public fillRenderTargetTextures(renderTargets: SmartArray<RenderTargetTexture>): void {}\r\n\r\n /**\r\n * Returns an array of the actively used textures.\r\n * @param activeTextures Array of BaseTextures\r\n */\r\n public getActiveTextures(activeTextures: BaseTexture[]): void {}\r\n\r\n /**\r\n * Returns the animatable textures.\r\n * @param animatables Array of animatable textures.\r\n */\r\n public getAnimatables(animatables: IAnimatable[]): void {}\r\n\r\n /**\r\n * Add fallbacks to the effect fallbacks list.\r\n * @param defines defines the Base texture to use.\r\n * @param fallbacks defines the current fallback list.\r\n * @param currentRank defines the current fallback rank.\r\n * @returns the new fallback rank.\r\n */\r\n public addFallbacks(defines: MaterialDefines, fallbacks: EffectFallbacks, currentRank: number): number {\r\n return currentRank;\r\n }\r\n\r\n /**\r\n * Gets the samplers used by the plugin.\r\n * @param samplers list that the sampler names should be added to.\r\n */\r\n public getSamplers(samplers: string[]): void {}\r\n\r\n /**\r\n * Gets the description of the uniforms to add to the ubo (if engine supports ubos) or to inject directly in the vertex/fragment shaders (if engine does not support ubos)\r\n * @returns the description of the uniforms\r\n */\r\n public getUniforms(): { ubo?: Array<{ name: string; size: number; type: string }>; vertex?: string; fragment?: string } {\r\n return {};\r\n }\r\n\r\n /**\r\n * Makes a duplicate of the current configuration into another one.\r\n * @param plugin define the config where to copy the info\r\n */\r\n public copyTo(plugin: MaterialPluginBase): void {\r\n SerializationHelper.Clone(() => plugin, this);\r\n }\r\n\r\n /**\r\n * Serializes this clear coat configuration.\r\n * @returns - An object with the serialized config.\r\n */\r\n public serialize(): any {\r\n return SerializationHelper.Serialize(this);\r\n }\r\n\r\n /**\r\n * Parses a anisotropy Configuration from a serialized object.\r\n * @param source - Serialized object.\r\n * @param scene Defines the scene we are parsing for\r\n * @param rootUrl Defines the rootUrl to load from\r\n */\r\n public parse(source: any, scene: Scene, rootUrl: string): void {\r\n SerializationHelper.Parse(() => this, source, scene, rootUrl);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"materialPluginBase.js","sourceRoot":"","sources":["../../../sourceES6/core/Materials/materialPluginBase.ts"],"names":[],"mappings":"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","sourcesContent":["import { SerializationHelper, serialize } from \"../Misc/decorators\";\r\nimport { Nullable } from \"../types\";\r\nimport { MaterialPluginManager } from \"./materialPluginManager\";\r\nimport { SmartArray } from \"../Misc/smartArray\";\r\n\r\n\r\ndeclare type Engine = import(\"../Engines/engine\").Engine;\r\ndeclare type Scene = import(\"../scene\").Scene;\r\ndeclare type AbstractMesh = import(\"../Meshes/abstractMesh\").AbstractMesh;\r\ndeclare type SubMesh = import(\"../Meshes/subMesh\").SubMesh;\r\ndeclare type IAnimatable = import(\"../Animations/animatable.interface\").IAnimatable;\r\ndeclare type UniformBuffer = import(\"./uniformBuffer\").UniformBuffer;\r\ndeclare type EffectFallbacks = import(\"./effectFallbacks\").EffectFallbacks;\r\ndeclare type MaterialDefines = import(\"./materialDefines\").MaterialDefines;\r\ndeclare type Material = import(\"./material\").Material;\r\ndeclare type BaseTexture = import(\"./Textures/baseTexture\").BaseTexture;\r\ndeclare type RenderTargetTexture = import(\"./Textures/renderTargetTexture\").RenderTargetTexture;\r\n\r\n/**\r\n * Base class for material plugins.\r\n * @since 5.0\r\n */\r\nexport class MaterialPluginBase {\r\n /**\r\n * Defines the name of the plugin\r\n */\r\n @serialize()\r\n public name: string;\r\n\r\n /**\r\n * Defines the priority of the plugin. Lower numbers run first.\r\n */\r\n @serialize()\r\n public priority: number = 500;\r\n\r\n /**\r\n * Indicates that this plugin should be notified for the extra events (HasRenderTargetTextures / FillRenderTargetTextures / HardBindForSubMesh)\r\n */\r\n @serialize()\r\n public registerForExtraEvents: boolean = false;\r\n\r\n protected _material: Material;\r\n protected _pluginManager: MaterialPluginManager;\r\n protected _pluginDefineNames?: { [name: string]: any };\r\n\r\n protected _enable(enable: boolean) {\r\n if (enable) {\r\n this._pluginManager._activatePlugin(this);\r\n }\r\n }\r\n\r\n /**\r\n * Helper function to mark defines as being dirty.\r\n */\r\n protected readonly markAllDefinesAsDirty: () => void;\r\n\r\n /**\r\n * Creates a new material plugin\r\n * @param material parent material of the plugin\r\n * @param name name of the plugin\r\n * @param priority priority of the plugin\r\n * @param defines list of defines used by the plugin. The value of the property is the default value for this property\r\n * @param addToPluginList true to add the plugin to the list of plugins managed by the material plugin manager of the material (default: true)\r\n * @param enable true to enable the plugin (it is handy if the plugin does not handle properties to switch its current activation)\r\n */\r\n constructor(material: Material, name: string, priority: number, defines?: { [key: string]: any }, addToPluginList = true, enable = false) {\r\n this._material = material;\r\n this.name = name;\r\n this.priority = priority;\r\n\r\n if (!material.pluginManager) {\r\n material.pluginManager = new MaterialPluginManager(material);\r\n }\r\n\r\n this._pluginDefineNames = defines;\r\n this._pluginManager = material.pluginManager;\r\n\r\n if (addToPluginList) {\r\n this._pluginManager._addPlugin(this);\r\n }\r\n\r\n if (enable) {\r\n this._enable(true);\r\n }\r\n\r\n this.markAllDefinesAsDirty = material._dirtyCallbacks[63];\r\n }\r\n\r\n /**\r\n * Gets the current class name useful for serialization or dynamic coding.\r\n * @returns The class name.\r\n */\r\n public getClassName(): string {\r\n return \"MaterialPluginBase\";\r\n }\r\n\r\n /**\r\n * Specifies that the submesh is ready to be used.\r\n * @param defines the list of \"defines\" to update.\r\n * @param scene defines the scene the material belongs to.\r\n * @param engine the engine this scene belongs to.\r\n * @param subMesh the submesh to check for readiness\r\n * @returns - boolean indicating that the submesh is ready or not.\r\n */\r\n public isReadyForSubMesh(defines: MaterialDefines, scene: Scene, engine: Engine, subMesh: SubMesh): boolean {\r\n return true;\r\n }\r\n\r\n /**\r\n * Binds the material data (this function is called even if mustRebind() returns false)\r\n * @param uniformBuffer defines the Uniform buffer to fill in.\r\n * @param scene defines the scene the material belongs to.\r\n * @param engine defines the engine the material belongs to.\r\n * @param subMesh the submesh to bind data for\r\n */\r\n public hardBindForSubMesh(uniformBuffer: UniformBuffer, scene: Scene, engine: Engine, subMesh: SubMesh): void {}\r\n\r\n /**\r\n * Binds the material data.\r\n * @param uniformBuffer defines the Uniform buffer to fill in.\r\n * @param scene defines the scene the material belongs to.\r\n * @param engine the engine this scene belongs to.\r\n * @param subMesh the submesh to bind data for\r\n */\r\n public bindForSubMesh(uniformBuffer: UniformBuffer, scene: Scene, engine: Engine, subMesh: SubMesh): void {}\r\n\r\n /**\r\n * Disposes the resources of the material.\r\n * @param forceDisposeTextures - Forces the disposal of all textures.\r\n */\r\n public dispose(forceDisposeTextures?: boolean): void {}\r\n\r\n /**\r\n * Returns a list of custom shader code fragments to customize the shader.\r\n * @param shaderType \"vertex\" or \"fragment\"\r\n * @returns null if no code to be added, or a list of pointName => code.\r\n * Note that `pointName` can also be a regular expression if it starts with a `!`.\r\n * In that case, the string found by the regular expression (if any) will be\r\n * replaced by the code provided.\r\n */\r\n public getCustomCode(shaderType: string): Nullable<{ [pointName: string]: string }> {\r\n return null;\r\n }\r\n\r\n /**\r\n * Collects all defines.\r\n * @param defines The object to append to.\r\n */\r\n public collectDefines(defines: { [name: string]: { type: string; default: any } }): void {\r\n if (!this._pluginDefineNames) {\r\n return;\r\n }\r\n for (const key of Object.keys(this._pluginDefineNames)) {\r\n if (key[0] === \"_\") {\r\n continue;\r\n }\r\n\r\n const type = typeof this._pluginDefineNames[key];\r\n defines[key] = {\r\n type: type === \"number\" ? \"number\" : type === \"string\" ? \"string\" : type === \"boolean\" ? \"boolean\" : \"object\",\r\n default: this._pluginDefineNames[key],\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * Sets the defines for the next rendering\r\n * @param defines the list of \"defines\" to update.\r\n * @param scene defines the scene to the material belongs to.\r\n * @param mesh the mesh being rendered\r\n */\r\n public prepareDefines(defines: MaterialDefines, scene: Scene, mesh: AbstractMesh): void {}\r\n\r\n /**\r\n * Checks to see if a texture is used in the material.\r\n * @param texture - Base texture to use.\r\n * @returns - Boolean specifying if a texture is used in the material.\r\n */\r\n public hasTexture(texture: BaseTexture): boolean {\r\n return false;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that current material needs to register RTT\r\n * @returns true if this uses a render target otherwise false.\r\n */\r\n public hasRenderTargetTextures(): boolean {\r\n return false;\r\n }\r\n\r\n /**\r\n * Fills the list of render target textures.\r\n * @param renderTargets the list of render targets to update\r\n */\r\n public fillRenderTargetTextures(renderTargets: SmartArray<RenderTargetTexture>): void {}\r\n\r\n /**\r\n * Returns an array of the actively used textures.\r\n * @param activeTextures Array of BaseTextures\r\n */\r\n public getActiveTextures(activeTextures: BaseTexture[]): void {}\r\n\r\n /**\r\n * Returns the animatable textures.\r\n * @param animatables Array of animatable textures.\r\n */\r\n public getAnimatables(animatables: IAnimatable[]): void {}\r\n\r\n /**\r\n * Add fallbacks to the effect fallbacks list.\r\n * @param defines defines the Base texture to use.\r\n * @param fallbacks defines the current fallback list.\r\n * @param currentRank defines the current fallback rank.\r\n * @returns the new fallback rank.\r\n */\r\n public addFallbacks(defines: MaterialDefines, fallbacks: EffectFallbacks, currentRank: number): number {\r\n return currentRank;\r\n }\r\n\r\n /**\r\n * Gets the samplers used by the plugin.\r\n * @param samplers list that the sampler names should be added to.\r\n */\r\n public getSamplers(samplers: string[]): void {}\r\n\r\n /**\r\n * Gets the uniform buffers names added by the plugin.\r\n * @param ubos list that the ubo names should be added to.\r\n */\r\n public getUniformBuffersNames(ubos: string[]): void {}\r\n\r\n /**\r\n * Gets the description of the uniforms to add to the ubo (if engine supports ubos) or to inject directly in the vertex/fragment shaders (if engine does not support ubos)\r\n * @returns the description of the uniforms\r\n */\r\n public getUniforms(): { ubo?: Array<{ name: string; size: number; type: string }>; vertex?: string; fragment?: string } {\r\n return {};\r\n }\r\n\r\n /**\r\n * Makes a duplicate of the current configuration into another one.\r\n * @param plugin define the config where to copy the info\r\n */\r\n public copyTo(plugin: MaterialPluginBase): void {\r\n SerializationHelper.Clone(() => plugin, this);\r\n }\r\n\r\n /**\r\n * Serializes this clear coat configuration.\r\n * @returns - An object with the serialized config.\r\n */\r\n public serialize(): any {\r\n return SerializationHelper.Serialize(this);\r\n }\r\n\r\n /**\r\n * Parses a anisotropy Configuration from a serialized object.\r\n * @param source - Serialized object.\r\n * @param scene Defines the scene we are parsing for\r\n * @param rootUrl Defines the rootUrl to load from\r\n */\r\n public parse(source: any, scene: Scene, rootUrl: string): void {\r\n SerializationHelper.Parse(() => this, source, scene, rootUrl);\r\n }\r\n}\r\n"]}
@@ -42,6 +42,7 @@ export declare type MaterialPluginPrepareEffect = {
42
42
  customCode?: ShaderCustomProcessingFunction;
43
43
  uniforms: string[];
44
44
  samplers: string[];
45
+ uniformBuffersNames: string[];
45
46
  };
46
47
  /** @hidden */
47
48
  export declare type MaterialPluginPrepareDefines = {
@@ -1 +1 @@
1
- {"version":3,"file":"materialPluginEvent.js","sourceRoot":"","sources":["../../../sourceES6/core/Materials/materialPluginEvent.ts"],"names":[],"mappings":"AAyFA;;GAEG;AACH,MAAM,CAAN,IAAY,mBAeX;AAfD,WAAY,mBAAmB;IAC3B,mEAAgB,CAAA;IAChB,qEAAiB,CAAA;IACjB,iFAAuB,CAAA;IACvB,6FAA6B,CAAA;IAC7B,wFAA0B,CAAA;IAC1B,kFAAuB,CAAA;IACvB,kFAAuB,CAAA;IACvB,iFAAsB,CAAA;IACtB,mFAAuB,CAAA;IACvB,yFAA0B,CAAA;IAC1B,4EAAmB,CAAA;IACnB,wGAAiC,CAAA;IACjC,sGAAgC,CAAA;IAChC,4FAA2B,CAAA;AAC/B,CAAC,EAfW,mBAAmB,KAAnB,mBAAmB,QAe9B","sourcesContent":["import { ShaderCustomProcessingFunction } from \"../Engines/Processors/shaderProcessingOptions\";\r\nimport { SmartArray } from \"../Misc/smartArray\";\r\n\r\ndeclare type BaseTexture = import(\"./Textures/baseTexture\").BaseTexture;\r\ndeclare type EffectFallbacks = import(\"./effectFallbacks\").EffectFallbacks;\r\ndeclare type MaterialDefines = import(\"./materialDefines\").MaterialDefines;\r\ndeclare type UniformBuffer = import(\"./uniformBuffer\").UniformBuffer;\r\ndeclare type SubMesh = import(\"../Meshes/subMesh\").SubMesh;\r\ndeclare type AbstractMesh = import(\"../Meshes/abstractMesh\").AbstractMesh;\r\ndeclare type IAnimatable = import(\"../Animations/animatable.interface\").IAnimatable;\r\ndeclare type RenderTargetTexture = import(\"./Textures/renderTargetTexture\").RenderTargetTexture;\r\n\r\n/** @hidden */\r\nexport type MaterialPluginCreated = {};\r\n\r\n/** @hidden */\r\nexport type MaterialPluginDisposed = {\r\n forceDisposeTextures?: boolean;\r\n};\r\n\r\n/** @hidden */\r\nexport type MaterialPluginHasTexture = {\r\n hasTexture: boolean;\r\n texture: BaseTexture;\r\n};\r\n\r\n/** @hidden */\r\nexport type MaterialPluginIsReadyForSubMesh = {\r\n isReadyForSubMesh: boolean;\r\n defines: MaterialDefines;\r\n subMesh: SubMesh;\r\n};\r\n\r\n/** @hidden */\r\nexport type MaterialPluginGetDefineNames = {\r\n defineNames?: { [name: string]: { type: string; default: any } };\r\n};\r\n\r\n/** @hidden */\r\nexport type MaterialPluginPrepareEffect = {\r\n defines: MaterialDefines;\r\n fallbacks: EffectFallbacks;\r\n fallbackRank: number;\r\n customCode?: ShaderCustomProcessingFunction;\r\n uniforms: string[];\r\n samplers: string[];\r\n};\r\n\r\n/** @hidden */\r\nexport type MaterialPluginPrepareDefines = {\r\n defines: MaterialDefines;\r\n mesh: AbstractMesh;\r\n};\r\n\r\n/** @hidden */\r\nexport type MaterialPluginPrepareUniformBuffer = {\r\n ubo: UniformBuffer;\r\n};\r\n\r\n/** @hidden */\r\nexport type MaterialPluginBindForSubMesh = {\r\n subMesh: SubMesh;\r\n};\r\n\r\n/** @hidden */\r\nexport type MaterialPluginGetAnimatables = {\r\n animatables: IAnimatable[];\r\n};\r\n\r\n/** @hidden */\r\nexport type MaterialPluginGetActiveTextures = {\r\n activeTextures: BaseTexture[];\r\n};\r\n\r\n/** @hidden */\r\nexport type MaterialPluginFillRenderTargetTextures = {\r\n renderTargets: SmartArray<RenderTargetTexture>;\r\n};\r\n\r\n/** @hidden */\r\nexport type MaterialPluginHasRenderTargetTextures = {\r\n hasRenderTargetTextures: boolean;\r\n};\r\n\r\n/** @hidden */\r\nexport type MaterialPluginHardBindForSubMesh = {\r\n subMesh: SubMesh;\r\n};\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport enum MaterialPluginEvent {\r\n Created = 0x0001,\r\n Disposed = 0x0002,\r\n GetDefineNames = 0x0004,\r\n PrepareUniformBuffer = 0x0008,\r\n IsReadyForSubMesh = 0x0010,\r\n PrepareDefines = 0x0020,\r\n BindForSubMesh = 0x0040,\r\n PrepareEffect = 0x0080,\r\n GetAnimatables = 0x0100,\r\n GetActiveTextures = 0x0200,\r\n HasTexture = 0x0400,\r\n FillRenderTargetTextures = 0x0800,\r\n HasRenderTargetTextures = 0x1000,\r\n HardBindForSubMesh = 0x2000,\r\n}\r\n"]}
1
+ {"version":3,"file":"materialPluginEvent.js","sourceRoot":"","sources":["../../../sourceES6/core/Materials/materialPluginEvent.ts"],"names":[],"mappings":"AA0FA;;GAEG;AACH,MAAM,CAAN,IAAY,mBAeX;AAfD,WAAY,mBAAmB;IAC3B,mEAAgB,CAAA;IAChB,qEAAiB,CAAA;IACjB,iFAAuB,CAAA;IACvB,6FAA6B,CAAA;IAC7B,wFAA0B,CAAA;IAC1B,kFAAuB,CAAA;IACvB,kFAAuB,CAAA;IACvB,iFAAsB,CAAA;IACtB,mFAAuB,CAAA;IACvB,yFAA0B,CAAA;IAC1B,4EAAmB,CAAA;IACnB,wGAAiC,CAAA;IACjC,sGAAgC,CAAA;IAChC,4FAA2B,CAAA;AAC/B,CAAC,EAfW,mBAAmB,KAAnB,mBAAmB,QAe9B","sourcesContent":["import { ShaderCustomProcessingFunction } from \"../Engines/Processors/shaderProcessingOptions\";\r\nimport { SmartArray } from \"../Misc/smartArray\";\r\n\r\ndeclare type BaseTexture = import(\"./Textures/baseTexture\").BaseTexture;\r\ndeclare type EffectFallbacks = import(\"./effectFallbacks\").EffectFallbacks;\r\ndeclare type MaterialDefines = import(\"./materialDefines\").MaterialDefines;\r\ndeclare type UniformBuffer = import(\"./uniformBuffer\").UniformBuffer;\r\ndeclare type SubMesh = import(\"../Meshes/subMesh\").SubMesh;\r\ndeclare type AbstractMesh = import(\"../Meshes/abstractMesh\").AbstractMesh;\r\ndeclare type IAnimatable = import(\"../Animations/animatable.interface\").IAnimatable;\r\ndeclare type RenderTargetTexture = import(\"./Textures/renderTargetTexture\").RenderTargetTexture;\r\n\r\n/** @hidden */\r\nexport type MaterialPluginCreated = {};\r\n\r\n/** @hidden */\r\nexport type MaterialPluginDisposed = {\r\n forceDisposeTextures?: boolean;\r\n};\r\n\r\n/** @hidden */\r\nexport type MaterialPluginHasTexture = {\r\n hasTexture: boolean;\r\n texture: BaseTexture;\r\n};\r\n\r\n/** @hidden */\r\nexport type MaterialPluginIsReadyForSubMesh = {\r\n isReadyForSubMesh: boolean;\r\n defines: MaterialDefines;\r\n subMesh: SubMesh;\r\n};\r\n\r\n/** @hidden */\r\nexport type MaterialPluginGetDefineNames = {\r\n defineNames?: { [name: string]: { type: string; default: any } };\r\n};\r\n\r\n/** @hidden */\r\nexport type MaterialPluginPrepareEffect = {\r\n defines: MaterialDefines;\r\n fallbacks: EffectFallbacks;\r\n fallbackRank: number;\r\n customCode?: ShaderCustomProcessingFunction;\r\n uniforms: string[];\r\n samplers: string[];\r\n uniformBuffersNames: string[];\r\n};\r\n\r\n/** @hidden */\r\nexport type MaterialPluginPrepareDefines = {\r\n defines: MaterialDefines;\r\n mesh: AbstractMesh;\r\n};\r\n\r\n/** @hidden */\r\nexport type MaterialPluginPrepareUniformBuffer = {\r\n ubo: UniformBuffer;\r\n};\r\n\r\n/** @hidden */\r\nexport type MaterialPluginBindForSubMesh = {\r\n subMesh: SubMesh;\r\n};\r\n\r\n/** @hidden */\r\nexport type MaterialPluginGetAnimatables = {\r\n animatables: IAnimatable[];\r\n};\r\n\r\n/** @hidden */\r\nexport type MaterialPluginGetActiveTextures = {\r\n activeTextures: BaseTexture[];\r\n};\r\n\r\n/** @hidden */\r\nexport type MaterialPluginFillRenderTargetTextures = {\r\n renderTargets: SmartArray<RenderTargetTexture>;\r\n};\r\n\r\n/** @hidden */\r\nexport type MaterialPluginHasRenderTargetTextures = {\r\n hasRenderTargetTextures: boolean;\r\n};\r\n\r\n/** @hidden */\r\nexport type MaterialPluginHardBindForSubMesh = {\r\n subMesh: SubMesh;\r\n};\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport enum MaterialPluginEvent {\r\n Created = 0x0001,\r\n Disposed = 0x0002,\r\n GetDefineNames = 0x0004,\r\n PrepareUniformBuffer = 0x0008,\r\n IsReadyForSubMesh = 0x0010,\r\n PrepareDefines = 0x0020,\r\n BindForSubMesh = 0x0040,\r\n PrepareEffect = 0x0080,\r\n GetAnimatables = 0x0100,\r\n GetActiveTextures = 0x0200,\r\n HasTexture = 0x0400,\r\n FillRenderTargetTextures = 0x0800,\r\n HasRenderTargetTextures = 0x1000,\r\n HardBindForSubMesh = 0x2000,\r\n}\r\n"]}
@@ -40,6 +40,7 @@ export declare class MaterialPluginManager {
40
40
  protected _fragmentDeclaration: string;
41
41
  protected _uniformList: string[];
42
42
  protected _samplerList: string[];
43
+ protected _uboList: string[];
43
44
  /**
44
45
  * Creates a new instance of the plugin manager
45
46
  * @param material material that this manager will manage the plugins for
@@ -119,20 +119,20 @@ var MaterialPluginManager = /** @class */ (function () {
119
119
  }
120
120
  };
121
121
  MaterialPluginManager.prototype._handlePluginEvent = function (id, info) {
122
- var _a, _b;
122
+ var _a, _b, _c;
123
123
  switch (id) {
124
124
  case MaterialPluginEvent.GetActiveTextures: {
125
125
  var eventData = info;
126
- for (var _i = 0, _c = this._activePlugins; _i < _c.length; _i++) {
127
- var plugin = _c[_i];
126
+ for (var _i = 0, _d = this._activePlugins; _i < _d.length; _i++) {
127
+ var plugin = _d[_i];
128
128
  plugin.getActiveTextures(eventData.activeTextures);
129
129
  }
130
130
  break;
131
131
  }
132
132
  case MaterialPluginEvent.GetAnimatables: {
133
133
  var eventData = info;
134
- for (var _d = 0, _e = this._activePlugins; _d < _e.length; _d++) {
135
- var plugin = _e[_d];
134
+ for (var _e = 0, _f = this._activePlugins; _e < _f.length; _e++) {
135
+ var plugin = _f[_e];
136
136
  plugin.getAnimatables(eventData.animatables);
137
137
  }
138
138
  break;
@@ -140,8 +140,8 @@ var MaterialPluginManager = /** @class */ (function () {
140
140
  case MaterialPluginEvent.HasTexture: {
141
141
  var eventData = info;
142
142
  var hasTexture = false;
143
- for (var _f = 0, _g = this._activePlugins; _f < _g.length; _f++) {
144
- var plugin = _g[_f];
143
+ for (var _g = 0, _h = this._activePlugins; _g < _h.length; _g++) {
144
+ var plugin = _h[_g];
145
145
  hasTexture = plugin.hasTexture(eventData.texture);
146
146
  if (hasTexture) {
147
147
  break;
@@ -152,8 +152,8 @@ var MaterialPluginManager = /** @class */ (function () {
152
152
  }
153
153
  case MaterialPluginEvent.Disposed: {
154
154
  var eventData = info;
155
- for (var _h = 0, _j = this._plugins; _h < _j.length; _h++) {
156
- var plugin = _j[_h];
155
+ for (var _j = 0, _k = this._plugins; _j < _k.length; _j++) {
156
+ var plugin = _k[_j];
157
157
  plugin.dispose(eventData.forceDisposeTextures);
158
158
  }
159
159
  break;
@@ -165,8 +165,8 @@ var MaterialPluginManager = /** @class */ (function () {
165
165
  }
166
166
  case MaterialPluginEvent.PrepareEffect: {
167
167
  var eventData = info;
168
- for (var _k = 0, _l = this._activePlugins; _k < _l.length; _k++) {
169
- var plugin = _l[_k];
168
+ for (var _l = 0, _m = this._activePlugins; _l < _m.length; _l++) {
169
+ var plugin = _m[_l];
170
170
  eventData.fallbackRank = plugin.addFallbacks(eventData.defines, eventData.fallbacks, eventData.fallbackRank);
171
171
  }
172
172
  if (this._uniformList.length > 0) {
@@ -175,6 +175,9 @@ var MaterialPluginManager = /** @class */ (function () {
175
175
  if (this._samplerList.length > 0) {
176
176
  (_b = eventData.samplers).push.apply(_b, this._samplerList);
177
177
  }
178
+ if (this._uboList.length > 0) {
179
+ (_c = eventData.uniformBuffersNames).push.apply(_c, this._uboList);
180
+ }
178
181
  eventData.customCode = this._injectCustomCode(eventData.customCode);
179
182
  break;
180
183
  }
@@ -185,13 +188,14 @@ var MaterialPluginManager = /** @class */ (function () {
185
188
  this._fragmentDeclaration = "";
186
189
  this._uniformList = [];
187
190
  this._samplerList = [];
188
- for (var _m = 0, _o = this._plugins; _m < _o.length; _m++) {
189
- var plugin = _o[_m];
191
+ this._uboList = [];
192
+ for (var _o = 0, _p = this._plugins; _o < _p.length; _o++) {
193
+ var plugin = _p[_o];
190
194
  var uniforms = plugin.getUniforms();
191
195
  if (uniforms) {
192
196
  if (uniforms.ubo) {
193
- for (var _p = 0, _q = uniforms.ubo; _p < _q.length; _p++) {
194
- var uniform = _q[_p];
197
+ for (var _q = 0, _r = uniforms.ubo; _q < _r.length; _q++) {
198
+ var uniform = _r[_q];
195
199
  eventData.ubo.addUniform(uniform.name, uniform.size);
196
200
  this._uboDeclaration += "".concat(uniform.type, " ").concat(uniform.name, ";\r\n");
197
201
  this._uniformList.push(uniform.name);
@@ -205,6 +209,7 @@ var MaterialPluginManager = /** @class */ (function () {
205
209
  }
206
210
  }
207
211
  plugin.getSamplers(this._samplerList);
212
+ plugin.getUniformBuffersNames(this._uboList);
208
213
  }
209
214
  break;
210
215
  }
@@ -1 +1 @@
1
- {"version":3,"file":"materialPluginManager.js","sourceRoot":"","sources":["../../../sourceES6/core/Materials/materialPluginManager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAWH,mBAAmB,GAItB,MAAM,uBAAuB,CAAC;AAe/B;;;GAGG;AACH;IAeI;;;OAGG;IACH,+BAAY,QAAkB;QAfpB,aAAQ,GAAyB,EAAE,CAAC;QACpC,mBAAc,GAAyB,EAAE,CAAC;QAC1C,iCAA4B,GAAyB,EAAE,CAAC;QAc9D,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;IAC3C,CAAC;IAED,cAAc;IACP,0CAAU,GAAjB,UAAkB,MAA0B;QACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YAC3C,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE;gBACvC,MAAM,mBAAW,MAAM,CAAC,IAAI,gDAAoC,IAAI,CAAC,SAAS,CAAC,IAAI,QAAI,CAAC;aAC3F;SACJ;QAED,IAAI,IAAI,CAAC,SAAS,CAAC,yBAAyB,EAAE;YAC1C,MAAM,uBAAe,MAAM,CAAC,IAAI,iDAAqC,IAAI,CAAC,SAAS,CAAC,IAAI,kJAA8I,CAAC;SAC1O;QAED,IAAI,CAAC,SAAS,CAAC,2BAA2B,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEhF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,EAAvB,CAAuB,CAAC,CAAC;QAEtD,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;QAE/B,IAAM,sBAAsB,GAAG,EAAE,CAAC;QAClC,KAAqB,UAAa,EAAb,KAAA,IAAI,CAAC,QAAQ,EAAb,cAAa,EAAb,IAAa,EAAE;YAA/B,IAAM,QAAM,SAAA;YACb,QAAM,CAAC,cAAc,CAAC,sBAAsB,CAAC,CAAC;YAC9C,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,QAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;YAClE,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,QAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;SACzE;QAED,IAAI,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YAChD,IAAI,CAAC,uBAAuB,GAAG,sBAAsB,CAAC;SACzD;aAAM;YACH,OAAO,IAAI,CAAC,uBAAuB,CAAC;SACvC;IACL,CAAC;IAED,cAAc;IACP,+CAAe,GAAtB,UAAuB,MAA0B;QAC7C,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;YAC5C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACjC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,EAAvB,CAAuB,CAAC,CAAC;YAE5D,IAAI,CAAC,SAAS,CAAC,qCAAqC,GAAG,IAAI,CAAC,mCAAmC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3G,IAAI,CAAC,SAAS,CAAC,kCAAkC,GAAG,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrG,IAAI,CAAC,SAAS,CAAC,kCAAkC,GAAG,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAErG,IAAI,MAAM,CAAC,sBAAsB,EAAE;gBAC/B,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC/C,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,EAAvB,CAAuB,CAAC,CAAC;gBAC1E,IAAI,CAAC,SAAS,CAAC,2CAA2C,GAAG,IAAI,CAAC,yCAAyC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvH,IAAI,CAAC,SAAS,CAAC,4CAA4C,GAAG,IAAI,CAAC,0CAA0C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACzH,IAAI,CAAC,SAAS,CAAC,sCAAsC,GAAG,IAAI,CAAC,oCAAoC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAChH;SACJ;IACL,CAAC;IAED;;;;OAIG;IACI,yCAAS,GAAhB,UAAiB,IAAY;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YAC3C,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE;gBAChC,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;aAC3B;SACJ;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAES,mEAAmC,GAA7C,UAA8C,SAA0C;QACpF,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,KAAqB,UAAmB,EAAnB,KAAA,IAAI,CAAC,cAAc,EAAnB,cAAmB,EAAnB,IAAmB,EAAE;YAArC,IAAM,MAAM,SAAA;YACb,OAAO,GAAG,OAAO,IAAI,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;SAClH;QACD,SAAS,CAAC,iBAAiB,GAAG,OAAO,CAAC;IAC1C,CAAC;IAES,gEAAgC,GAA1C,UAA2C,SAAuC;QAC9E,KAAqB,UAAmB,EAAnB,KAAA,IAAI,CAAC,cAAc,EAAnB,cAAmB,EAAnB,IAAmB,EAAE;YAArC,IAAM,MAAM,SAAA;YACb,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;SACzE;IACL,CAAC;IAES,oEAAoC,GAA9C,UAA+C,SAA2C;QACtF,KAAqB,UAAiC,EAAjC,KAAA,IAAI,CAAC,4BAA4B,EAAjC,cAAiC,EAAjC,IAAiC,EAAE;YAAnD,IAAM,MAAM,SAAA;YACb,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;SAC1G;IACL,CAAC;IAES,gEAAgC,GAA1C,UAA2C,SAAuC;QAC9E,KAAqB,UAAmB,EAAnB,KAAA,IAAI,CAAC,cAAc,EAAnB,cAAmB,EAAnB,IAAmB,EAAE;YAArC,IAAM,MAAM,SAAA;YACb,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;SACtG;IACL,CAAC;IAES,yEAAyC,GAAnD,UAAoD,SAAgD;QAChG,IAAI,uBAAuB,GAAG,KAAK,CAAC;QACpC,KAAqB,UAAiC,EAAjC,KAAA,IAAI,CAAC,4BAA4B,EAAjC,cAAiC,EAAjC,IAAiC,EAAE;YAAnD,IAAM,MAAM,SAAA;YACb,uBAAuB,GAAG,MAAM,CAAC,uBAAuB,EAAE,CAAC;YAC3D,IAAI,uBAAuB,EAAE;gBACzB,MAAM;aACT;SACJ;QACD,SAAS,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;IAChE,CAAC;IAES,0EAA0C,GAApD,UAAqD,SAAiD;QAClG,KAAqB,UAAiC,EAAjC,KAAA,IAAI,CAAC,4BAA4B,EAAjC,cAAiC,EAAjC,IAAiC,EAAE;YAAnD,IAAM,MAAM,SAAA;YACb,MAAM,CAAC,wBAAwB,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;SAC5D;IACL,CAAC;IAES,kDAAkB,GAA5B,UACI,EAAU,EACV,IAOwC;;QAExC,QAAQ,EAAE,EAAE;YACR,KAAK,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;gBACxC,IAAM,SAAS,GAAG,IAAuC,CAAC;gBAC1D,KAAqB,UAAmB,EAAnB,KAAA,IAAI,CAAC,cAAc,EAAnB,cAAmB,EAAnB,IAAmB,EAAE;oBAArC,IAAM,MAAM,SAAA;oBACb,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;iBACtD;gBACD,MAAM;aACT;YAED,KAAK,mBAAmB,CAAC,cAAc,CAAC,CAAC;gBACrC,IAAM,SAAS,GAAG,IAAoC,CAAC;gBACvD,KAAqB,UAAmB,EAAnB,KAAA,IAAI,CAAC,cAAc,EAAnB,cAAmB,EAAnB,IAAmB,EAAE;oBAArC,IAAM,MAAM,SAAA;oBACb,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;iBAChD;gBACD,MAAM;aACT;YAED,KAAK,mBAAmB,CAAC,UAAU,CAAC,CAAC;gBACjC,IAAM,SAAS,GAAG,IAAgC,CAAC;gBACnD,IAAI,UAAU,GAAG,KAAK,CAAC;gBACvB,KAAqB,UAAmB,EAAnB,KAAA,IAAI,CAAC,cAAc,EAAnB,cAAmB,EAAnB,IAAmB,EAAE;oBAArC,IAAM,MAAM,SAAA;oBACb,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;oBAClD,IAAI,UAAU,EAAE;wBACZ,MAAM;qBACT;iBACJ;gBACD,SAAS,CAAC,UAAU,GAAG,UAAU,CAAC;gBAClC,MAAM;aACT;YAED,KAAK,mBAAmB,CAAC,QAAQ,CAAC,CAAC;gBAC/B,IAAM,SAAS,GAAG,IAA8B,CAAC;gBACjD,KAAqB,UAAa,EAAb,KAAA,IAAI,CAAC,QAAQ,EAAb,cAAa,EAAb,IAAa,EAAE;oBAA/B,IAAM,MAAM,SAAA;oBACb,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;iBAClD;gBACD,MAAM;aACT;YAED,KAAK,mBAAmB,CAAC,cAAc,CAAC,CAAC;gBACrC,IAAM,SAAS,GAAG,IAAoC,CAAC;gBACvD,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC;gBACrD,MAAM;aACT;YAED,KAAK,mBAAmB,CAAC,aAAa,CAAC,CAAC;gBACpC,IAAM,SAAS,GAAG,IAAmC,CAAC;gBACtD,KAAqB,UAAmB,EAAnB,KAAA,IAAI,CAAC,cAAc,EAAnB,cAAmB,EAAnB,IAAmB,EAAE;oBAArC,IAAM,MAAM,SAAA;oBACb,SAAS,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC;iBAChH;gBACD,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC9B,CAAA,KAAA,SAAS,CAAC,QAAQ,CAAA,CAAC,IAAI,WAAI,IAAI,CAAC,YAAY,EAAE;iBACjD;gBACD,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC9B,CAAA,KAAA,SAAS,CAAC,QAAQ,CAAA,CAAC,IAAI,WAAI,IAAI,CAAC,YAAY,EAAE;iBACjD;gBACD,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;gBACpE,MAAM;aACT;YAED,KAAK,mBAAmB,CAAC,oBAAoB,CAAC,CAAC;gBAC3C,IAAM,SAAS,GAAG,IAA0C,CAAC;gBAC7D,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;gBAC1B,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;gBAC7B,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;gBAC/B,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;gBACvB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;gBACvB,KAAqB,UAAa,EAAb,KAAA,IAAI,CAAC,QAAQ,EAAb,cAAa,EAAb,IAAa,EAAE;oBAA/B,IAAM,MAAM,SAAA;oBACb,IAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;oBACtC,IAAI,QAAQ,EAAE;wBACV,IAAI,QAAQ,CAAC,GAAG,EAAE;4BACd,KAAsB,UAAY,EAAZ,KAAA,QAAQ,CAAC,GAAG,EAAZ,cAAY,EAAZ,IAAY,EAAE;gCAA/B,IAAM,OAAO,SAAA;gCACd,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;gCACrD,IAAI,CAAC,eAAe,IAAI,UAAG,OAAO,CAAC,IAAI,cAAI,OAAO,CAAC,IAAI,UAAO,CAAC;gCAC/D,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;6BACxC;yBACJ;wBACD,IAAI,QAAQ,CAAC,MAAM,EAAE;4BACjB,IAAI,CAAC,kBAAkB,IAAI,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;yBACvD;wBACD,IAAI,QAAQ,CAAC,QAAQ,EAAE;4BACnB,IAAI,CAAC,oBAAoB,IAAI,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC;yBAC3D;qBACJ;oBACD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;iBACzC;gBACD,MAAM;aACT;SACJ;IACL,CAAC;IAES,kDAAkB,GAA5B,UAA6B,UAAkB,EAAE,UAAiE;QAC9G,IAAI,CAAC,UAAU,EAAE;YACb,OAAO;SACV;QACD,KAAK,IAAM,SAAS,IAAI,UAAU,EAAE;YAChC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,EAAE;gBACxC,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;aAC9C;YACD,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;SAC3D;IACL,CAAC;IAES,iDAAiB,GAA3B,UAA4B,gBAA+D;QAA3F,iBA2CC;QA1CG,OAAO,UAAC,UAAkB,EAAE,IAAY;;YACpC,IAAI,gBAAgB,EAAE;gBAClB,IAAI,GAAG,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;aAC7C;YACD,IAAI,KAAI,CAAC,eAAe,EAAE;gBACtB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,oCAAoC,EAAE,KAAI,CAAC,eAAe,CAAC,CAAC;aACnF;YACD,IAAI,KAAI,CAAC,kBAAkB,EAAE;gBACzB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,uCAAuC,EAAE,KAAI,CAAC,kBAAkB,CAAC,CAAC;aACzF;YACD,IAAI,KAAI,CAAC,oBAAoB,EAAE;gBAC3B,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,yCAAyC,EAAE,KAAI,CAAC,oBAAoB,CAAC,CAAC;aAC7F;YACD,IAAM,MAAM,GAAG,MAAA,KAAI,CAAC,oBAAoB,0CAAG,UAAU,CAAC,CAAC;YACvD,IAAI,CAAC,MAAM,EAAE;gBACT,OAAO,IAAI,CAAC;aACf;YACD,KAAK,IAAM,SAAS,IAAI,MAAM,EAAE;gBAC5B,IAAI,YAAY,GAAG,EAAE,CAAC;gBACtB,KAAqB,UAAmB,EAAnB,KAAA,KAAI,CAAC,cAAc,EAAnB,cAAmB,EAAnB,IAAmB,EAAE;oBAArC,IAAM,MAAM,SAAA;oBACb,IAAM,UAAU,GAAG,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;oBACpD,IAAI,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAG,SAAS,CAAC,EAAE;wBACzB,YAAY,IAAI,UAAU,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC;qBAClD;iBACJ;gBACD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;oBACzB,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;wBAC7B,oCAAoC;wBACpC,IAAM,EAAE,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;wBACnD,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAC1B,OAAO,KAAK,KAAK,IAAI,EAAE;4BACnB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;4BAC5C,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;yBACzB;qBACJ;yBAAM;wBACH,IAAM,aAAa,GAAG,UAAU,GAAG,SAAS,CAAC;wBAC7C,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,GAAG,YAAY,GAAG,MAAM,GAAG,aAAa,CAAC,CAAC;qBACtF;iBACJ;aACJ;YACD,OAAO,IAAI,CAAC;QAChB,CAAC,CAAC;IACN,CAAC;IACL,4BAAC;AAAD,CAAC,AApSD,IAoSC;;AAOD,IAAI,QAAQ,GAA2C,EAAE,CAAC;AAC1D,IAAI,OAAO,GAAG,KAAK,CAAC;AAEpB;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,UAAkB,EAAE,OAA8B;IACrF,IAAI,CAAC,OAAO,EAAE;QACV,QAAQ,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAC,QAAkB,EAAE,UAAsB;YACtE,KAA+B,UAAQ,EAAR,qBAAQ,EAAR,sBAAQ,EAAR,IAAQ,EAAE;gBAA9B,IAAA,mBAAgB,EAAf,KAAK,QAAA,EAAE,SAAO,QAAA;gBACtB,SAAO,CAAC,QAAQ,CAAC,CAAC;aACrB;QACL,CAAC,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAChC,OAAO,GAAG,IAAI,CAAC;KAClB;IACD,IAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAC,EAAgB;YAAf,IAAI,QAAA,EAAE,QAAQ,QAAA;QAAM,OAAA,IAAI,KAAK,UAAU;IAAnB,CAAmB,CAAC,CAAC;IAC5E,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;QACrB,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;KAC5B;SAAM;QACH,QAAQ,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;KACxC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,UAAkB;IACvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;QACtC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE;YAC/B,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACtB,OAAO,IAAI,CAAC;SACf;KACJ;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B;IACxC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AACxB,CAAC","sourcesContent":["import { ShaderCustomProcessingFunction } from \"../Engines/Processors/shaderProcessingOptions\";\r\nimport { EventState } from \"../Misc/observable\";\r\nimport { Nullable } from \"../types\";\r\nimport { Material } from \"./material\";\r\nimport {\r\n MaterialPluginPrepareEffect,\r\n MaterialPluginBindForSubMesh,\r\n MaterialPluginDisposed,\r\n MaterialPluginGetActiveTextures,\r\n MaterialPluginGetAnimatables,\r\n MaterialPluginGetDefineNames,\r\n MaterialPluginHasTexture,\r\n MaterialPluginIsReadyForSubMesh,\r\n MaterialPluginPrepareDefines,\r\n MaterialPluginPrepareUniformBuffer,\r\n MaterialPluginEvent,\r\n MaterialPluginHardBindForSubMesh,\r\n MaterialPluginHasRenderTargetTextures,\r\n MaterialPluginFillRenderTargetTextures,\r\n} from \"./materialPluginEvent\";\r\n\r\ndeclare type Scene = import(\"../scene\").Scene;\r\ndeclare type Engine = import(\"../Engines/engine\").Engine;\r\ndeclare type MaterialPluginBase = import(\"./materialPluginBase\").MaterialPluginBase;\r\n\r\ndeclare module \"./material\" {\r\n export interface Material {\r\n /**\r\n * Plugin manager for this material\r\n */\r\n pluginManager?: MaterialPluginManager;\r\n }\r\n}\r\n\r\n/**\r\n * Class that manages the plugins of a material\r\n * @since 5.0\r\n */\r\nexport class MaterialPluginManager {\r\n protected _material: Material;\r\n protected _scene: Scene;\r\n protected _engine: Engine;\r\n protected _plugins: MaterialPluginBase[] = [];\r\n protected _activePlugins: MaterialPluginBase[] = [];\r\n protected _activePluginsForExtraEvents: MaterialPluginBase[] = [];\r\n protected _codeInjectionPoints: { [shaderType: string]: { [codeName: string]: boolean } };\r\n protected _defineNamesFromPlugins?: { [name: string]: { type: string; default: any } };\r\n protected _uboDeclaration: string;\r\n protected _vertexDeclaration: string;\r\n protected _fragmentDeclaration: string;\r\n protected _uniformList: string[];\r\n protected _samplerList: string[];\r\n\r\n /**\r\n * Creates a new instance of the plugin manager\r\n * @param material material that this manager will manage the plugins for\r\n */\r\n constructor(material: Material) {\r\n this._material = material;\r\n this._scene = material.getScene();\r\n this._engine = this._scene.getEngine();\r\n }\r\n\r\n /** @hidden */\r\n public _addPlugin(plugin: MaterialPluginBase): void {\r\n for (let i = 0; i < this._plugins.length; ++i) {\r\n if (this._plugins[i].name === plugin.name) {\r\n throw `Plugin \"${plugin.name}\" already added to the material \"${this._material.name}\"!`;\r\n }\r\n }\r\n\r\n if (this._material._uniformBufferLayoutBuilt) {\r\n throw `The plugin \"${plugin.name}\" can't be added to the material \"${this._material.name}\" because this material has already been used for rendering! Please add plugins to materials before any rendering with this material occurs.`;\r\n }\r\n\r\n this._material._callbackPluginEventGeneric = this._handlePluginEvent.bind(this);\r\n\r\n this._plugins.push(plugin);\r\n this._plugins.sort((a, b) => a.priority - b.priority);\r\n\r\n this._codeInjectionPoints = {};\r\n\r\n const defineNamesFromPlugins = {};\r\n for (const plugin of this._plugins) {\r\n plugin.collectDefines(defineNamesFromPlugins);\r\n this._collectPointNames(\"vertex\", plugin.getCustomCode(\"vertex\"));\r\n this._collectPointNames(\"fragment\", plugin.getCustomCode(\"fragment\"));\r\n }\r\n\r\n if (Object.keys(defineNamesFromPlugins).length > 0) {\r\n this._defineNamesFromPlugins = defineNamesFromPlugins;\r\n } else {\r\n delete this._defineNamesFromPlugins;\r\n }\r\n }\r\n\r\n /** @hidden */\r\n public _activatePlugin(plugin: MaterialPluginBase): void {\r\n if (this._activePlugins.indexOf(plugin) === -1) {\r\n this._activePlugins.push(plugin);\r\n this._activePlugins.sort((a, b) => a.priority - b.priority);\r\n\r\n this._material._callbackPluginEventIsReadyForSubMesh = this._handlePluginEventIsReadyForSubMesh.bind(this);\r\n this._material._callbackPluginEventPrepareDefines = this._handlePluginEventPrepareDefines.bind(this);\r\n this._material._callbackPluginEventBindForSubMesh = this._handlePluginEventBindForSubMesh.bind(this);\r\n\r\n if (plugin.registerForExtraEvents) {\r\n this._activePluginsForExtraEvents.push(plugin);\r\n this._activePluginsForExtraEvents.sort((a, b) => a.priority - b.priority);\r\n this._material._callbackPluginEventHasRenderTargetTextures = this._handlePluginEventHasRenderTargetTextures.bind(this);\r\n this._material._callbackPluginEventFillRenderTargetTextures = this._handlePluginEventFillRenderTargetTextures.bind(this);\r\n this._material._callbackPluginEventHardBindForSubMesh = this._handlePluginEventHardBindForSubMesh.bind(this);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets a plugin from the list of plugins managed by this manager\r\n * @param name name of the plugin\r\n * @returns the plugin if found, else null\r\n */\r\n public getPlugin(name: string): Nullable<MaterialPluginBase> {\r\n for (let i = 0; i < this._plugins.length; ++i) {\r\n if (this._plugins[i].name === name) {\r\n return this._plugins[i];\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n protected _handlePluginEventIsReadyForSubMesh(eventData: MaterialPluginIsReadyForSubMesh): void {\r\n let isReady = true;\r\n for (const plugin of this._activePlugins) {\r\n isReady = isReady && plugin.isReadyForSubMesh(eventData.defines, this._scene, this._engine, eventData.subMesh);\r\n }\r\n eventData.isReadyForSubMesh = isReady;\r\n }\r\n\r\n protected _handlePluginEventPrepareDefines(eventData: MaterialPluginPrepareDefines): void {\r\n for (const plugin of this._activePlugins) {\r\n plugin.prepareDefines(eventData.defines, this._scene, eventData.mesh);\r\n }\r\n }\r\n\r\n protected _handlePluginEventHardBindForSubMesh(eventData: MaterialPluginHardBindForSubMesh): void {\r\n for (const plugin of this._activePluginsForExtraEvents) {\r\n plugin.hardBindForSubMesh(this._material._uniformBuffer, this._scene, this._engine, eventData.subMesh);\r\n }\r\n }\r\n\r\n protected _handlePluginEventBindForSubMesh(eventData: MaterialPluginBindForSubMesh): void {\r\n for (const plugin of this._activePlugins) {\r\n plugin.bindForSubMesh(this._material._uniformBuffer, this._scene, this._engine, eventData.subMesh);\r\n }\r\n }\r\n\r\n protected _handlePluginEventHasRenderTargetTextures(eventData: MaterialPluginHasRenderTargetTextures): void {\r\n let hasRenderTargetTextures = false;\r\n for (const plugin of this._activePluginsForExtraEvents) {\r\n hasRenderTargetTextures = plugin.hasRenderTargetTextures();\r\n if (hasRenderTargetTextures) {\r\n break;\r\n }\r\n }\r\n eventData.hasRenderTargetTextures = hasRenderTargetTextures;\r\n }\r\n\r\n protected _handlePluginEventFillRenderTargetTextures(eventData: MaterialPluginFillRenderTargetTextures): void {\r\n for (const plugin of this._activePluginsForExtraEvents) {\r\n plugin.fillRenderTargetTextures(eventData.renderTargets);\r\n }\r\n }\r\n\r\n protected _handlePluginEvent(\r\n id: number,\r\n info:\r\n | MaterialPluginGetActiveTextures\r\n | MaterialPluginGetAnimatables\r\n | MaterialPluginHasTexture\r\n | MaterialPluginDisposed\r\n | MaterialPluginGetDefineNames\r\n | MaterialPluginPrepareEffect\r\n | MaterialPluginPrepareUniformBuffer\r\n ): void {\r\n switch (id) {\r\n case MaterialPluginEvent.GetActiveTextures: {\r\n const eventData = info as MaterialPluginGetActiveTextures;\r\n for (const plugin of this._activePlugins) {\r\n plugin.getActiveTextures(eventData.activeTextures);\r\n }\r\n break;\r\n }\r\n\r\n case MaterialPluginEvent.GetAnimatables: {\r\n const eventData = info as MaterialPluginGetAnimatables;\r\n for (const plugin of this._activePlugins) {\r\n plugin.getAnimatables(eventData.animatables);\r\n }\r\n break;\r\n }\r\n\r\n case MaterialPluginEvent.HasTexture: {\r\n const eventData = info as MaterialPluginHasTexture;\r\n let hasTexture = false;\r\n for (const plugin of this._activePlugins) {\r\n hasTexture = plugin.hasTexture(eventData.texture);\r\n if (hasTexture) {\r\n break;\r\n }\r\n }\r\n eventData.hasTexture = hasTexture;\r\n break;\r\n }\r\n\r\n case MaterialPluginEvent.Disposed: {\r\n const eventData = info as MaterialPluginDisposed;\r\n for (const plugin of this._plugins) {\r\n plugin.dispose(eventData.forceDisposeTextures);\r\n }\r\n break;\r\n }\r\n\r\n case MaterialPluginEvent.GetDefineNames: {\r\n const eventData = info as MaterialPluginGetDefineNames;\r\n eventData.defineNames = this._defineNamesFromPlugins;\r\n break;\r\n }\r\n\r\n case MaterialPluginEvent.PrepareEffect: {\r\n const eventData = info as MaterialPluginPrepareEffect;\r\n for (const plugin of this._activePlugins) {\r\n eventData.fallbackRank = plugin.addFallbacks(eventData.defines, eventData.fallbacks, eventData.fallbackRank);\r\n }\r\n if (this._uniformList.length > 0) {\r\n eventData.uniforms.push(...this._uniformList);\r\n }\r\n if (this._samplerList.length > 0) {\r\n eventData.samplers.push(...this._samplerList);\r\n }\r\n eventData.customCode = this._injectCustomCode(eventData.customCode);\r\n break;\r\n }\r\n\r\n case MaterialPluginEvent.PrepareUniformBuffer: {\r\n const eventData = info as MaterialPluginPrepareUniformBuffer;\r\n this._uboDeclaration = \"\";\r\n this._vertexDeclaration = \"\";\r\n this._fragmentDeclaration = \"\";\r\n this._uniformList = [];\r\n this._samplerList = [];\r\n for (const plugin of this._plugins) {\r\n const uniforms = plugin.getUniforms();\r\n if (uniforms) {\r\n if (uniforms.ubo) {\r\n for (const uniform of uniforms.ubo) {\r\n eventData.ubo.addUniform(uniform.name, uniform.size);\r\n this._uboDeclaration += `${uniform.type} ${uniform.name};\\r\\n`;\r\n this._uniformList.push(uniform.name);\r\n }\r\n }\r\n if (uniforms.vertex) {\r\n this._vertexDeclaration += uniforms.vertex + \"\\r\\n\";\r\n }\r\n if (uniforms.fragment) {\r\n this._fragmentDeclaration += uniforms.fragment + \"\\r\\n\";\r\n }\r\n }\r\n plugin.getSamplers(this._samplerList);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n protected _collectPointNames(shaderType: string, customCode: Nullable<{ [pointName: string]: string }> | undefined): void {\r\n if (!customCode) {\r\n return;\r\n }\r\n for (const pointName in customCode) {\r\n if (!this._codeInjectionPoints[shaderType]) {\r\n this._codeInjectionPoints[shaderType] = {};\r\n }\r\n this._codeInjectionPoints[shaderType][pointName] = true;\r\n }\r\n }\r\n\r\n protected _injectCustomCode(existingCallback?: (shaderType: string, code: string) => string): ShaderCustomProcessingFunction {\r\n return (shaderType: string, code: string) => {\r\n if (existingCallback) {\r\n code = existingCallback(shaderType, code);\r\n }\r\n if (this._uboDeclaration) {\r\n code = code.replace(\"#define ADDITIONAL_UBO_DECLARATION\", this._uboDeclaration);\r\n }\r\n if (this._vertexDeclaration) {\r\n code = code.replace(\"#define ADDITIONAL_VERTEX_DECLARATION\", this._vertexDeclaration);\r\n }\r\n if (this._fragmentDeclaration) {\r\n code = code.replace(\"#define ADDITIONAL_FRAGMENT_DECLARATION\", this._fragmentDeclaration);\r\n }\r\n const points = this._codeInjectionPoints?.[shaderType];\r\n if (!points) {\r\n return code;\r\n }\r\n for (const pointName in points) {\r\n let injectedCode = \"\";\r\n for (const plugin of this._activePlugins) {\r\n const customCode = plugin.getCustomCode(shaderType);\r\n if (customCode?.[pointName]) {\r\n injectedCode += customCode[pointName] + \"\\r\\n\";\r\n }\r\n }\r\n if (injectedCode.length > 0) {\r\n if (pointName.charAt(0) === \"!\") {\r\n // pointName is a regular expression\r\n const rx = new RegExp(pointName.substring(1), \"g\");\r\n let match = rx.exec(code);\r\n while (match !== null) {\r\n code = code.replace(match[0], injectedCode);\r\n match = rx.exec(code);\r\n }\r\n } else {\r\n const fullPointName = \"#define \" + pointName;\r\n code = code.replace(fullPointName, \"\\r\\n\" + injectedCode + \"\\r\\n\" + fullPointName);\r\n }\r\n }\r\n }\r\n return code;\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Type for plugin material factories.\r\n */\r\nexport type PluginMaterialFactory = (material: Material) => Nullable<MaterialPluginBase>;\r\n\r\nlet _Plugins: Array<[string, PluginMaterialFactory]> = [];\r\nlet _Inited = false;\r\n\r\n/**\r\n * Registers a new material plugin through a factory, or updates it. This makes the plugin available to all materials instantiated after its registration.\r\n * @param pluginName The plugin name\r\n * @param factory The factory function which allows to create the plugin\r\n */\r\nexport function RegisterMaterialPlugin(pluginName: string, factory: PluginMaterialFactory): void {\r\n if (!_Inited) {\r\n Material.OnEventObservable.add((material: Material, eventState: EventState) => {\r\n for (const [_name, factory] of _Plugins) {\r\n factory(material);\r\n }\r\n }, MaterialPluginEvent.Created);\r\n _Inited = true;\r\n }\r\n const existing = _Plugins.filter(([name, _factory]) => name === pluginName);\r\n if (existing.length > 0) {\r\n existing[0][1] = factory;\r\n } else {\r\n _Plugins.push([pluginName, factory]);\r\n }\r\n}\r\n\r\n/**\r\n * Removes a material plugin from the list of global plugins.\r\n * @param pluginName The plugin name\r\n * @returns true if the plugin has been removed, else false\r\n */\r\nexport function UnregisterMaterialPlugin(pluginName: string): boolean {\r\n for (let i = 0; i < _Plugins.length; ++i) {\r\n if (_Plugins[i][0] === pluginName) {\r\n _Plugins.splice(i, 1);\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * Clear the list of global material plugins\r\n */\r\nexport function UnregisterAllMaterialPlugins(): void {\r\n _Plugins.length = 0;\r\n}\r\n"]}
1
+ {"version":3,"file":"materialPluginManager.js","sourceRoot":"","sources":["../../../sourceES6/core/Materials/materialPluginManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { ShaderCustomProcessingFunction } from \"../Engines/Processors/shaderProcessingOptions\";\r\nimport { EventState } from \"../Misc/observable\";\r\nimport { Nullable } from \"../types\";\r\nimport { Material } from \"./material\";\r\nimport {\r\n MaterialPluginPrepareEffect,\r\n MaterialPluginBindForSubMesh,\r\n MaterialPluginDisposed,\r\n MaterialPluginGetActiveTextures,\r\n MaterialPluginGetAnimatables,\r\n MaterialPluginGetDefineNames,\r\n MaterialPluginHasTexture,\r\n MaterialPluginIsReadyForSubMesh,\r\n MaterialPluginPrepareDefines,\r\n MaterialPluginPrepareUniformBuffer,\r\n MaterialPluginEvent,\r\n MaterialPluginHardBindForSubMesh,\r\n MaterialPluginHasRenderTargetTextures,\r\n MaterialPluginFillRenderTargetTextures,\r\n} from \"./materialPluginEvent\";\r\n\r\ndeclare type Scene = import(\"../scene\").Scene;\r\ndeclare type Engine = import(\"../Engines/engine\").Engine;\r\ndeclare type MaterialPluginBase = import(\"./materialPluginBase\").MaterialPluginBase;\r\n\r\ndeclare module \"./material\" {\r\n export interface Material {\r\n /**\r\n * Plugin manager for this material\r\n */\r\n pluginManager?: MaterialPluginManager;\r\n }\r\n}\r\n\r\n/**\r\n * Class that manages the plugins of a material\r\n * @since 5.0\r\n */\r\nexport class MaterialPluginManager {\r\n protected _material: Material;\r\n protected _scene: Scene;\r\n protected _engine: Engine;\r\n protected _plugins: MaterialPluginBase[] = [];\r\n protected _activePlugins: MaterialPluginBase[] = [];\r\n protected _activePluginsForExtraEvents: MaterialPluginBase[] = [];\r\n protected _codeInjectionPoints: { [shaderType: string]: { [codeName: string]: boolean } };\r\n protected _defineNamesFromPlugins?: { [name: string]: { type: string; default: any } };\r\n protected _uboDeclaration: string;\r\n protected _vertexDeclaration: string;\r\n protected _fragmentDeclaration: string;\r\n protected _uniformList: string[];\r\n protected _samplerList: string[];\r\n protected _uboList: string[];\r\n\r\n /**\r\n * Creates a new instance of the plugin manager\r\n * @param material material that this manager will manage the plugins for\r\n */\r\n constructor(material: Material) {\r\n this._material = material;\r\n this._scene = material.getScene();\r\n this._engine = this._scene.getEngine();\r\n }\r\n\r\n /** @hidden */\r\n public _addPlugin(plugin: MaterialPluginBase): void {\r\n for (let i = 0; i < this._plugins.length; ++i) {\r\n if (this._plugins[i].name === plugin.name) {\r\n throw `Plugin \"${plugin.name}\" already added to the material \"${this._material.name}\"!`;\r\n }\r\n }\r\n\r\n if (this._material._uniformBufferLayoutBuilt) {\r\n throw `The plugin \"${plugin.name}\" can't be added to the material \"${this._material.name}\" because this material has already been used for rendering! Please add plugins to materials before any rendering with this material occurs.`;\r\n }\r\n\r\n this._material._callbackPluginEventGeneric = this._handlePluginEvent.bind(this);\r\n\r\n this._plugins.push(plugin);\r\n this._plugins.sort((a, b) => a.priority - b.priority);\r\n\r\n this._codeInjectionPoints = {};\r\n\r\n const defineNamesFromPlugins = {};\r\n for (const plugin of this._plugins) {\r\n plugin.collectDefines(defineNamesFromPlugins);\r\n this._collectPointNames(\"vertex\", plugin.getCustomCode(\"vertex\"));\r\n this._collectPointNames(\"fragment\", plugin.getCustomCode(\"fragment\"));\r\n }\r\n\r\n if (Object.keys(defineNamesFromPlugins).length > 0) {\r\n this._defineNamesFromPlugins = defineNamesFromPlugins;\r\n } else {\r\n delete this._defineNamesFromPlugins;\r\n }\r\n }\r\n\r\n /** @hidden */\r\n public _activatePlugin(plugin: MaterialPluginBase): void {\r\n if (this._activePlugins.indexOf(plugin) === -1) {\r\n this._activePlugins.push(plugin);\r\n this._activePlugins.sort((a, b) => a.priority - b.priority);\r\n\r\n this._material._callbackPluginEventIsReadyForSubMesh = this._handlePluginEventIsReadyForSubMesh.bind(this);\r\n this._material._callbackPluginEventPrepareDefines = this._handlePluginEventPrepareDefines.bind(this);\r\n this._material._callbackPluginEventBindForSubMesh = this._handlePluginEventBindForSubMesh.bind(this);\r\n\r\n if (plugin.registerForExtraEvents) {\r\n this._activePluginsForExtraEvents.push(plugin);\r\n this._activePluginsForExtraEvents.sort((a, b) => a.priority - b.priority);\r\n this._material._callbackPluginEventHasRenderTargetTextures = this._handlePluginEventHasRenderTargetTextures.bind(this);\r\n this._material._callbackPluginEventFillRenderTargetTextures = this._handlePluginEventFillRenderTargetTextures.bind(this);\r\n this._material._callbackPluginEventHardBindForSubMesh = this._handlePluginEventHardBindForSubMesh.bind(this);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets a plugin from the list of plugins managed by this manager\r\n * @param name name of the plugin\r\n * @returns the plugin if found, else null\r\n */\r\n public getPlugin(name: string): Nullable<MaterialPluginBase> {\r\n for (let i = 0; i < this._plugins.length; ++i) {\r\n if (this._plugins[i].name === name) {\r\n return this._plugins[i];\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n protected _handlePluginEventIsReadyForSubMesh(eventData: MaterialPluginIsReadyForSubMesh): void {\r\n let isReady = true;\r\n for (const plugin of this._activePlugins) {\r\n isReady = isReady && plugin.isReadyForSubMesh(eventData.defines, this._scene, this._engine, eventData.subMesh);\r\n }\r\n eventData.isReadyForSubMesh = isReady;\r\n }\r\n\r\n protected _handlePluginEventPrepareDefines(eventData: MaterialPluginPrepareDefines): void {\r\n for (const plugin of this._activePlugins) {\r\n plugin.prepareDefines(eventData.defines, this._scene, eventData.mesh);\r\n }\r\n }\r\n\r\n protected _handlePluginEventHardBindForSubMesh(eventData: MaterialPluginHardBindForSubMesh): void {\r\n for (const plugin of this._activePluginsForExtraEvents) {\r\n plugin.hardBindForSubMesh(this._material._uniformBuffer, this._scene, this._engine, eventData.subMesh);\r\n }\r\n }\r\n\r\n protected _handlePluginEventBindForSubMesh(eventData: MaterialPluginBindForSubMesh): void {\r\n for (const plugin of this._activePlugins) {\r\n plugin.bindForSubMesh(this._material._uniformBuffer, this._scene, this._engine, eventData.subMesh);\r\n }\r\n }\r\n\r\n protected _handlePluginEventHasRenderTargetTextures(eventData: MaterialPluginHasRenderTargetTextures): void {\r\n let hasRenderTargetTextures = false;\r\n for (const plugin of this._activePluginsForExtraEvents) {\r\n hasRenderTargetTextures = plugin.hasRenderTargetTextures();\r\n if (hasRenderTargetTextures) {\r\n break;\r\n }\r\n }\r\n eventData.hasRenderTargetTextures = hasRenderTargetTextures;\r\n }\r\n\r\n protected _handlePluginEventFillRenderTargetTextures(eventData: MaterialPluginFillRenderTargetTextures): void {\r\n for (const plugin of this._activePluginsForExtraEvents) {\r\n plugin.fillRenderTargetTextures(eventData.renderTargets);\r\n }\r\n }\r\n\r\n protected _handlePluginEvent(\r\n id: number,\r\n info:\r\n | MaterialPluginGetActiveTextures\r\n | MaterialPluginGetAnimatables\r\n | MaterialPluginHasTexture\r\n | MaterialPluginDisposed\r\n | MaterialPluginGetDefineNames\r\n | MaterialPluginPrepareEffect\r\n | MaterialPluginPrepareUniformBuffer\r\n ): void {\r\n switch (id) {\r\n case MaterialPluginEvent.GetActiveTextures: {\r\n const eventData = info as MaterialPluginGetActiveTextures;\r\n for (const plugin of this._activePlugins) {\r\n plugin.getActiveTextures(eventData.activeTextures);\r\n }\r\n break;\r\n }\r\n\r\n case MaterialPluginEvent.GetAnimatables: {\r\n const eventData = info as MaterialPluginGetAnimatables;\r\n for (const plugin of this._activePlugins) {\r\n plugin.getAnimatables(eventData.animatables);\r\n }\r\n break;\r\n }\r\n\r\n case MaterialPluginEvent.HasTexture: {\r\n const eventData = info as MaterialPluginHasTexture;\r\n let hasTexture = false;\r\n for (const plugin of this._activePlugins) {\r\n hasTexture = plugin.hasTexture(eventData.texture);\r\n if (hasTexture) {\r\n break;\r\n }\r\n }\r\n eventData.hasTexture = hasTexture;\r\n break;\r\n }\r\n\r\n case MaterialPluginEvent.Disposed: {\r\n const eventData = info as MaterialPluginDisposed;\r\n for (const plugin of this._plugins) {\r\n plugin.dispose(eventData.forceDisposeTextures);\r\n }\r\n break;\r\n }\r\n\r\n case MaterialPluginEvent.GetDefineNames: {\r\n const eventData = info as MaterialPluginGetDefineNames;\r\n eventData.defineNames = this._defineNamesFromPlugins;\r\n break;\r\n }\r\n\r\n case MaterialPluginEvent.PrepareEffect: {\r\n const eventData = info as MaterialPluginPrepareEffect;\r\n for (const plugin of this._activePlugins) {\r\n eventData.fallbackRank = plugin.addFallbacks(eventData.defines, eventData.fallbacks, eventData.fallbackRank);\r\n }\r\n if (this._uniformList.length > 0) {\r\n eventData.uniforms.push(...this._uniformList);\r\n }\r\n if (this._samplerList.length > 0) {\r\n eventData.samplers.push(...this._samplerList);\r\n }\r\n if (this._uboList.length > 0) {\r\n eventData.uniformBuffersNames.push(...this._uboList);\r\n }\r\n eventData.customCode = this._injectCustomCode(eventData.customCode);\r\n break;\r\n }\r\n\r\n case MaterialPluginEvent.PrepareUniformBuffer: {\r\n const eventData = info as MaterialPluginPrepareUniformBuffer;\r\n this._uboDeclaration = \"\";\r\n this._vertexDeclaration = \"\";\r\n this._fragmentDeclaration = \"\";\r\n this._uniformList = [];\r\n this._samplerList = [];\r\n this._uboList = [];\r\n for (const plugin of this._plugins) {\r\n const uniforms = plugin.getUniforms();\r\n if (uniforms) {\r\n if (uniforms.ubo) {\r\n for (const uniform of uniforms.ubo) {\r\n eventData.ubo.addUniform(uniform.name, uniform.size);\r\n this._uboDeclaration += `${uniform.type} ${uniform.name};\\r\\n`;\r\n this._uniformList.push(uniform.name);\r\n }\r\n }\r\n if (uniforms.vertex) {\r\n this._vertexDeclaration += uniforms.vertex + \"\\r\\n\";\r\n }\r\n if (uniforms.fragment) {\r\n this._fragmentDeclaration += uniforms.fragment + \"\\r\\n\";\r\n }\r\n }\r\n plugin.getSamplers(this._samplerList);\r\n plugin.getUniformBuffersNames(this._uboList);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n protected _collectPointNames(shaderType: string, customCode: Nullable<{ [pointName: string]: string }> | undefined): void {\r\n if (!customCode) {\r\n return;\r\n }\r\n for (const pointName in customCode) {\r\n if (!this._codeInjectionPoints[shaderType]) {\r\n this._codeInjectionPoints[shaderType] = {};\r\n }\r\n this._codeInjectionPoints[shaderType][pointName] = true;\r\n }\r\n }\r\n\r\n protected _injectCustomCode(existingCallback?: (shaderType: string, code: string) => string): ShaderCustomProcessingFunction {\r\n return (shaderType: string, code: string) => {\r\n if (existingCallback) {\r\n code = existingCallback(shaderType, code);\r\n }\r\n if (this._uboDeclaration) {\r\n code = code.replace(\"#define ADDITIONAL_UBO_DECLARATION\", this._uboDeclaration);\r\n }\r\n if (this._vertexDeclaration) {\r\n code = code.replace(\"#define ADDITIONAL_VERTEX_DECLARATION\", this._vertexDeclaration);\r\n }\r\n if (this._fragmentDeclaration) {\r\n code = code.replace(\"#define ADDITIONAL_FRAGMENT_DECLARATION\", this._fragmentDeclaration);\r\n }\r\n const points = this._codeInjectionPoints?.[shaderType];\r\n if (!points) {\r\n return code;\r\n }\r\n for (const pointName in points) {\r\n let injectedCode = \"\";\r\n for (const plugin of this._activePlugins) {\r\n const customCode = plugin.getCustomCode(shaderType);\r\n if (customCode?.[pointName]) {\r\n injectedCode += customCode[pointName] + \"\\r\\n\";\r\n }\r\n }\r\n if (injectedCode.length > 0) {\r\n if (pointName.charAt(0) === \"!\") {\r\n // pointName is a regular expression\r\n const rx = new RegExp(pointName.substring(1), \"g\");\r\n let match = rx.exec(code);\r\n while (match !== null) {\r\n code = code.replace(match[0], injectedCode);\r\n match = rx.exec(code);\r\n }\r\n } else {\r\n const fullPointName = \"#define \" + pointName;\r\n code = code.replace(fullPointName, \"\\r\\n\" + injectedCode + \"\\r\\n\" + fullPointName);\r\n }\r\n }\r\n }\r\n return code;\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Type for plugin material factories.\r\n */\r\nexport type PluginMaterialFactory = (material: Material) => Nullable<MaterialPluginBase>;\r\n\r\nlet _Plugins: Array<[string, PluginMaterialFactory]> = [];\r\nlet _Inited = false;\r\n\r\n/**\r\n * Registers a new material plugin through a factory, or updates it. This makes the plugin available to all materials instantiated after its registration.\r\n * @param pluginName The plugin name\r\n * @param factory The factory function which allows to create the plugin\r\n */\r\nexport function RegisterMaterialPlugin(pluginName: string, factory: PluginMaterialFactory): void {\r\n if (!_Inited) {\r\n Material.OnEventObservable.add((material: Material, eventState: EventState) => {\r\n for (const [_name, factory] of _Plugins) {\r\n factory(material);\r\n }\r\n }, MaterialPluginEvent.Created);\r\n _Inited = true;\r\n }\r\n const existing = _Plugins.filter(([name, _factory]) => name === pluginName);\r\n if (existing.length > 0) {\r\n existing[0][1] = factory;\r\n } else {\r\n _Plugins.push([pluginName, factory]);\r\n }\r\n}\r\n\r\n/**\r\n * Removes a material plugin from the list of global plugins.\r\n * @param pluginName The plugin name\r\n * @returns true if the plugin has been removed, else false\r\n */\r\nexport function UnregisterMaterialPlugin(pluginName: string): boolean {\r\n for (let i = 0; i < _Plugins.length; ++i) {\r\n if (_Plugins[i][0] === pluginName) {\r\n _Plugins.splice(i, 1);\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * Clear the list of global material plugins\r\n */\r\nexport function UnregisterAllMaterialPlugins(): void {\r\n _Plugins.length = 0;\r\n}\r\n"]}
@@ -929,6 +929,7 @@ var StandardMaterial = /** @class */ (function (_super) {
929
929
  this._eventInfo.defines = defines;
930
930
  this._eventInfo.uniforms = uniforms;
931
931
  this._eventInfo.samplers = samplers;
932
+ this._eventInfo.uniformBuffersNames = uniformBuffers;
932
933
  this._eventInfo.customCode = undefined;
933
934
  this._callbackPluginEventGeneric(MaterialPluginEvent.PrepareEffect, this._eventInfo);
934
935
  PrePassConfiguration.AddUniforms(uniforms);