31318e1881b30902d05db40089952ba8d5fb6597115b2f41cfe86713d495fdd3.json 53 KB

1
  1. {"ast":null,"code":"import { Material } from \"./material.js\";\nimport { EngineStore } from \"../Engines/engineStore.js\";\nimport { _ProcessIncludes } from \"../Engines/Processors/shaderProcessor.js\";\nimport { ShaderStore } from \"../Engines/shaderStore.js\";\nconst rxOption = new RegExp(\"^([gimus]+)!\");\n/**\n * Class that manages the plugins of a material\n * @since 5.0\n */\nexport class MaterialPluginManager {\n /**\n * Creates a new instance of the plugin manager\n * @param material material that this manager will manage the plugins for\n */\n constructor(material) {\n /** @internal */\n this._plugins = [];\n this._activePlugins = [];\n this._activePluginsForExtraEvents = [];\n this._material = material;\n this._scene = material.getScene();\n this._engine = this._scene.getEngine();\n }\n /**\n * @internal\n */\n _addPlugin(plugin) {\n for (let i = 0; i < this._plugins.length; ++i) {\n if (this._plugins[i].name === plugin.name) {\n return false;\n }\n }\n if (this._material._uniformBufferLayoutBuilt) {\n this._material.resetDrawCache();\n this._material._createUniformBuffer();\n }\n if (!plugin.isCompatible(this._material.shaderLanguage)) {\n // eslint-disable-next-line no-throw-literal\n throw `The plugin \"${plugin.name}\" can't be added to the material \"${this._material.name}\" because the plugin is not compatible with the shader language of the material.`;\n }\n const pluginClassName = plugin.getClassName();\n if (!MaterialPluginManager._MaterialPluginClassToMainDefine[pluginClassName]) {\n MaterialPluginManager._MaterialPluginClassToMainDefine[pluginClassName] = \"MATERIALPLUGIN_\" + ++MaterialPluginManager._MaterialPluginCounter;\n }\n this._material._callbackPluginEventGeneric = (id, info) => this._handlePluginEvent(id, info);\n this._plugins.push(plugin);\n this._plugins.sort((a, b) => a.priority - b.priority);\n this._codeInjectionPoints = {};\n const defineNamesFromPlugins = {};\n defineNamesFromPlugins[MaterialPluginManager._MaterialPluginClassToMainDefine[pluginClassName]] = {\n type: \"boolean\",\n default: true\n };\n for (const plugin of this._plugins) {\n plugin.collectDefines(defineNamesFromPlugins);\n this._collectPointNames(\"vertex\", plugin.getCustomCode(\"vertex\", this._material.shaderLanguage));\n this._collectPointNames(\"fragment\", plugin.getCustomCode(\"fragment\", this._material.shaderLanguage));\n }\n this._defineNamesFromPlugins = defineNamesFromPlugins;\n return true;\n }\n /**\n * @internal\n */\n _activatePlugin(plugin) {\n if (this._activePlugins.indexOf(plugin) === -1) {\n this._activePlugins.push(plugin);\n this._activePlugins.sort((a, b) => a.priority - b.priority);\n this._material._callbackPluginEventIsReadyForSubMesh = this._handlePluginEventIsReadyForSubMesh.bind(this);\n this._material._callbackPluginEventPrepareDefinesBeforeAttributes = this._handlePluginEventPrepareDefinesBeforeAttributes.bind(this);\n this._material._callbackPluginEventPrepareDefines = this._handlePluginEventPrepareDefines.bind(this);\n this._material._callbackPluginEventBindForSubMesh = this._handlePluginEventBindForSubMesh.bind(this);\n if (plugin.registerForExtraEvents) {\n this._activePluginsForExtraEvents.push(plugin);\n this._activePluginsForExtraEvents.sort((a, b) => a.priority - b.priority);\n this._material._callbackPluginEventHasRenderTargetTextures = this._handlePluginEventHasRenderTargetTextures.bind(this);\n this._material._callbackPluginEventFillRenderTargetTextures = this._handlePluginEventFillRenderTargetTextures.bind(this);\n this._material._callbackPluginEventHardBindForSubMesh = this._handlePluginEventHardBindForSubMesh.bind(this);\n }\n }\n }\n /**\n * Gets a plugin from the list of plugins managed by this manager\n * @param name name of the plugin\n * @returns the plugin if found, else null\n */\n getPlugin(name) {\n for (let i = 0; i < this._plugins.length; ++i) {\n if (this._plugins[i].name === name) {\n return this._plugins[i];\n }\n }\n return null;\n }\n _handlePluginEventIsReadyForSubMesh(eventData) {\n let isReady = true;\n for (const plugin of this._activePlugins) {\n isReady = isReady && plugin.isReadyForSubMesh(eventData.defines, this._scene, this._engine, eventData.subMesh);\n }\n eventData.isReadyForSubMesh = isReady;\n }\n _handlePluginEventPrepareDefinesBeforeAttributes(eventData) {\n for (const plugin of this._activePlugins) {\n plugin.prepareDefinesBeforeAttributes(eventData.defines, this._scene, eventData.mesh);\n }\n }\n _handlePluginEventPrepareDefines(eventData) {\n for (const plugin of this._activePlugins) {\n plugin.prepareDefines(eventData.defines, this._scene, eventData.mesh);\n }\n }\n _handlePluginEventHardBindForSubMesh(eventData) {\n for (const plugin of this._activePluginsForExtraEvents) {\n plugin.hardBindForSubMesh(this._material._uniformBuffer, this._scene, this._engine, eventData.subMesh);\n }\n }\n _handlePluginEventBindForSubMesh(eventData) {\n for (const plugin of this._activePlugins) {\n plugin.bindForSubMesh(this._material._uniformBuffer, this._scene, this._engine, eventData.subMesh);\n }\n }\n _handlePluginEventHasRenderTargetTextures(eventData) {\n let hasRenderTargetTextures = false;\n for (const plugin of this._activePluginsForExtraEvents) {\n hasRenderTargetTextures = plugin.hasRenderTargetTextures();\n if (hasRenderTargetTextures) {\n break;\n }\n }\n eventData.hasRenderTargetTextures = hasRenderTargetTextures;\n }\n _handlePluginEventFillRenderTargetTextures(eventData) {\n for (const plugin of this._activePluginsForExtraEvents) {\n plugin.fillRenderTargetTextures(eventData.renderTargets);\n }\n }\n _handlePluginEvent(id, info) {\n switch (id) {\n case 512 /* MaterialPluginEvent.GetActiveTextures */:\n {\n const eventData = info;\n for (const plugin of this._activePlugins) {\n plugin.getActiveTextures(eventData.activeTextures);\n }\n break;\n }\n case 256 /* MaterialPluginEvent.GetAnimatables */:\n {\n const eventData = info;\n for (const plugin of this._activePlugins) {\n plugin.getAnimatables(eventData.animatables);\n }\n break;\n }\n case 1024 /* MaterialPluginEvent.HasTexture */:\n {\n const eventData = info;\n let hasTexture = false;\n for (const plugin of this._activePlugins) {\n hasTexture = plugin.hasTexture(eventData.texture);\n if (hasTexture) {\n break;\n }\n }\n eventData.hasTexture = hasTexture;\n break;\n }\n case 2 /* MaterialPluginEvent.Disposed */:\n {\n const eventData = info;\n for (const plugin of this._plugins) {\n plugin.dispose(eventData.forceDisposeTextures);\n }\n break;\n }\n case 4 /* MaterialPluginEvent.GetDefineNames */:\n {\n const eventData = info;\n eventData.defineNames = this._defineNamesFromPlugins;\n break;\n }\n case 128 /* MaterialPluginEvent.PrepareEffect */:\n {\n const eventData = info;\n for (const plugin of this._activePlugins) {\n eventData.fallbackRank = plugin.addFallbacks(eventData.defines, eventData.fallbacks, eventData.fallbackRank);\n plugin.getAttributes(eventData.attributes, this._scene, eventData.mesh);\n }\n if (this._uniformList.length > 0) {\n eventData.uniforms.push(...this._uniformList);\n }\n if (this._samplerList.length > 0) {\n eventData.samplers.push(...this._samplerList);\n }\n if (this._uboList.length > 0) {\n eventData.uniformBuffersNames.push(...this._uboList);\n }\n eventData.customCode = this._injectCustomCode(eventData, eventData.customCode);\n break;\n }\n case 8 /* MaterialPluginEvent.PrepareUniformBuffer */:\n {\n const eventData = info;\n this._uboDeclaration = \"\";\n this._vertexDeclaration = \"\";\n this._fragmentDeclaration = \"\";\n this._uniformList = [];\n this._samplerList = [];\n this._uboList = [];\n const isWebGPU = this._material.shaderLanguage === 1 /* ShaderLanguage.WGSL */;\n for (const plugin of this._plugins) {\n const uniforms = plugin.getUniforms(this._material.shaderLanguage);\n if (uniforms) {\n if (uniforms.ubo) {\n for (const uniform of uniforms.ubo) {\n if (uniform.size && uniform.type) {\n var _uniform$arraySize;\n const arraySize = (_uniform$arraySize = uniform.arraySize) !== null && _uniform$arraySize !== void 0 ? _uniform$arraySize : 0;\n eventData.ubo.addUniform(uniform.name, uniform.size, arraySize);\n if (isWebGPU) {\n let type;\n switch (uniform.type) {\n case \"mat4\":\n type = \"mat4x4f\";\n break;\n case \"float\":\n type = \"f32\";\n break;\n default:\n type = `${uniform.type}f`;\n break;\n }\n this._uboDeclaration += `uniform ${uniform.name}: ${type}${arraySize > 0 ? `[${arraySize}]` : \"\"};\\n`;\n } else {\n this._uboDeclaration += `${uniform.type} ${uniform.name}${arraySize > 0 ? `[${arraySize}]` : \"\"};\\n`;\n }\n }\n this._uniformList.push(uniform.name);\n }\n }\n if (uniforms.vertex) {\n this._vertexDeclaration += uniforms.vertex + \"\\n\";\n }\n if (uniforms.fragment) {\n this._fragmentDeclaration += uniforms.fragment + \"\\n\";\n }\n }\n plugin.getSamplers(this._samplerList);\n plugin.getUniformBuffersNames(this._uboList);\n }\n break;\n }\n }\n }\n _collectPointNames(shaderType, customCode) {\n if (!customCode) {\n return;\n }\n for (const pointName in customCode) {\n if (!this._codeInjectionPoints[shaderType]) {\n this._codeInjectionPoints[shaderType] = {};\n }\n this._codeInjectionPoints[shaderType][pointName] = true;\n }\n }\n _injectCustomCode(eventData, existingCallback) {\n return (shaderType, code) => {\n var _this$_codeInjectionP;\n if (existingCallback) {\n code = existingCallback(shaderType, code);\n }\n if (this._uboDeclaration) {\n code = code.replace(\"#define ADDITIONAL_UBO_DECLARATION\", this._uboDeclaration);\n }\n if (this._vertexDeclaration) {\n code = code.replace(\"#define ADDITIONAL_VERTEX_DECLARATION\", this._vertexDeclaration);\n }\n if (this._fragmentDeclaration) {\n code = code.replace(\"#define ADDITIONAL_FRAGMENT_DECLARATION\", this._fragmentDeclaration);\n }\n const points = (_this$_codeInjectionP = this._codeInjectionPoints) === null || _this$_codeInjectionP === void 0 ? void 0 : _this$_codeInjectionP[shaderType];\n if (!points) {\n return code;\n }\n let processorOptions = null;\n for (let pointName in points) {\n let injectedCode = \"\";\n for (const plugin of this._activePlugins) {\n var _plugin$getCustomCode;\n let customCode = (_plugin$getCustomCode = plugin.getCustomCode(shaderType, this._material.shaderLanguage)) === null || _plugin$getCustomCode === void 0 ? void 0 : _plugin$getCustomCode[pointName];\n if (!customCode) {\n continue;\n }\n if (plugin.resolveIncludes) {\n if (processorOptions === null) {\n const shaderLanguage = 0 /* ShaderLanguage.GLSL */;\n processorOptions = {\n defines: [],\n // not used by _ProcessIncludes\n indexParameters: eventData.indexParameters,\n isFragment: false,\n shouldUseHighPrecisionShader: this._engine._shouldUseHighPrecisionShader,\n processor: undefined,\n // not used by _ProcessIncludes\n supportsUniformBuffers: this._engine.supportsUniformBuffers,\n shadersRepository: ShaderStore.GetShadersRepository(shaderLanguage),\n includesShadersStore: ShaderStore.GetIncludesShadersStore(shaderLanguage),\n version: undefined,\n // not used by _ProcessIncludes\n platformName: this._engine.shaderPlatformName,\n processingContext: undefined,\n // not used by _ProcessIncludes\n isNDCHalfZRange: this._engine.isNDCHalfZRange,\n useReverseDepthBuffer: this._engine.useReverseDepthBuffer,\n processCodeAfterIncludes: undefined // not used by _ProcessIncludes\n };\n }\n processorOptions.isFragment = shaderType === \"fragment\";\n _ProcessIncludes(customCode, processorOptions, code => customCode = code);\n }\n injectedCode += customCode + \"\\n\";\n }\n if (injectedCode.length > 0) {\n if (pointName.charAt(0) === \"!\") {\n // pointName is a regular expression\n pointName = pointName.substring(1);\n let regexFlags = \"g\";\n if (pointName.charAt(0) === \"!\") {\n // no flags\n regexFlags = \"\";\n pointName = pointName.substring(1);\n } else {\n // get the flag(s)\n const matchOption = rxOption.exec(pointName);\n if (matchOption && matchOption.length >= 2) {\n regexFlags = matchOption[1];\n pointName = pointName.substring(regexFlags.length + 1);\n }\n }\n if (regexFlags.indexOf(\"g\") < 0) {\n // we force the \"g\" flag so that the regexp object is stateful!\n regexFlags += \"g\";\n }\n const sourceCode = code;\n const rx = new RegExp(pointName, regexFlags);\n let match = rx.exec(sourceCode);\n while (match !== null) {\n let newCode = injectedCode;\n for (let i = 0; i < match.length; ++i) {\n newCode = newCode.replace(\"$\" + i, match[i]);\n }\n code = code.replace(match[0], newCode);\n match = rx.exec(sourceCode);\n }\n } else {\n const fullPointName = \"#define \" + pointName;\n code = code.replace(fullPointName, \"\\n\" + injectedCode + \"\\n\" + fullPointName);\n }\n }\n }\n return code;\n };\n }\n}\n/** Map a plugin class name to a #define name (used in the vertex/fragment shaders as a marker of the plugin usage) */\nMaterialPluginManager._MaterialPluginClassToMainDefine = {};\nMaterialPluginManager._MaterialPluginCounter = 0;\n(() => {\n EngineStore.OnEnginesDisposedObservable.add(() => {\n UnregisterAllMaterialPlugins();\n });\n})();\nconst plugins = [];\nlet inited = false;\nlet observer = null;\n/**\n * Registers a new material plugin through a factory, or updates it. This makes the plugin available to all materials instantiated after its registration.\n * @param pluginName The plugin name\n * @param factory The factory function which allows to create the plugin\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function RegisterMaterialPlugin(pluginName, factory) {\n if (!inited) {\n observer = Material.OnEventObservable.add(material => {\n for (const [, factory] of plugins) {\n factory(material);\n }\n }, 1 /* MaterialPluginEvent.Created */);\n inited = true;\n }\n const existing = plugins.filter(([name, _factory]) => name === pluginName);\n if (existing.length > 0) {\n existing[0][1] = factory;\n } else {\n plugins.push([pluginName, factory]);\n }\n}\n/**\n * Removes a material plugin from the list of global plugins.\n * @param pluginName The plugin name\n * @returns true if the plugin has been removed, else false\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function UnregisterMaterialPlugin(pluginName) {\n for (let i = 0; i < plugins.length; ++i) {\n if (plugins[i][0] === pluginName) {\n plugins.splice(i, 1);\n if (plugins.length === 0) {\n UnregisterAllMaterialPlugins();\n }\n return true;\n }\n }\n return false;\n}\n/**\n * Clear the list of global material plugins\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function UnregisterAllMaterialPlugins() {\n plugins.length = 0;\n inited = false;\n Material.OnEventObservable.remove(observer);\n observer = null;\n}","map":{"version":3,"names":["Material","EngineStore","_ProcessIncludes","ShaderStore","rxOption","RegExp","MaterialPluginManager","constructor","material","_plugins","_activePlugins","_activePluginsForExtraEvents","_material","_scene","getScene","_engine","getEngine","_addPlugin","plugin","i","length","name","_uniformBufferLayoutBuilt","resetDrawCache","_createUniformBuffer","isCompatible","shaderLanguage","pluginClassName","getClassName","_MaterialPluginClassToMainDefine","_MaterialPluginCounter","_callbackPluginEventGeneric","id","info","_handlePluginEvent","push","sort","a","b","priority","_codeInjectionPoints","defineNamesFromPlugins","type","default","collectDefines","_collectPointNames","getCustomCode","_defineNamesFromPlugins","_activatePlugin","indexOf","_callbackPluginEventIsReadyForSubMesh","_handlePluginEventIsReadyForSubMesh","bind","_callbackPluginEventPrepareDefinesBeforeAttributes","_handlePluginEventPrepareDefinesBeforeAttributes","_callbackPluginEventPrepareDefines","_handlePluginEventPrepareDefines","_callbackPluginEventBindForSubMesh","_handlePluginEventBindForSubMesh","registerForExtraEvents","_callbackPluginEventHasRenderTargetTextures","_handlePluginEventHasRenderTargetTextures","_callbackPluginEventFillRenderTargetTextures","_handlePluginEventFillRenderTargetTextures","_callbackPluginEventHardBindForSubMesh","_handlePluginEventHardBindForSubMesh","getPlugin","eventData","isReady","isReadyForSubMesh","defines","subMesh","prepareDefinesBeforeAttributes","mesh","prepareDefines","hardBindForSubMesh","_uniformBuffer","bindForSubMesh","hasRenderTargetTextures","fillRenderTargetTextures","renderTargets","getActiveTextures","activeTextures","getAnimatables","animatables","hasTexture","texture","dispose","forceDisposeTextures","defineNames","fallbackRank","addFallbacks","fallbacks","getAttributes","attributes","_uniformList","uniforms","_samplerList","samplers","_uboList","uniformBuffersNames","customCode","_injectCustomCode","_uboDeclaration","_vertexDeclaration","_fragmentDeclaration","isWebGPU","getUniforms","ubo","uniform","size","_uniform$arraySize","arraySize","addUniform","vertex","fragment","getSamplers","getUniformBuffersNames","shaderType","pointName","existingCallback","code","_this$_codeInjectionP","replace","points","processorOptions","injectedCode","_plugin$getCustomCode","resolveIncludes","indexParameters","isFragment","shouldUseHighPrecisionShader","_shouldUseHighPrecisionShader","processor","undefined","supportsUniformBuffers","shadersRepository","GetShadersRepository","includesShadersStore","GetIncludesShadersStore","version","platformName","shaderPlatformName","processingContext","isNDCHalfZRange","useReverseDepthBuffer","processCodeAfterIncludes","charAt","substring","regexFlags","matchOption","exec","sourceCode","rx","match","newCode","fullPointName","OnEnginesDisposedObservable","add","UnregisterAllMaterialPlugins","plugins","inited","observer","RegisterMaterialPlugin","pluginName","factory","OnEventObservable","existing","filter","_factory","UnregisterMaterialPlugin","splice","remove"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Materials/materialPluginManager.js"],"sourcesContent":["import { Material } from \"./material.js\";\nimport { EngineStore } from \"../Engines/engineStore.js\";\nimport { _ProcessIncludes } from \"../Engines/Processors/shaderProcessor.js\";\nimport { ShaderStore } from \"../Engines/shaderStore.js\";\nconst rxOption = new RegExp(\"^([gimus]+)!\");\n/**\n * Class that manages the plugins of a material\n * @since 5.0\n */\nexport class MaterialPluginManager {\n /**\n * Creates a new instance of the plugin manager\n * @param material material that this manager will manage the plugins for\n */\n constructor(material) {\n /** @internal */\n this._plugins = [];\n this._activePlugins = [];\n this._activePluginsForExtraEvents = [];\n this._material = material;\n this._scene = material.getScene();\n this._engine = this._scene.getEngine();\n }\n /**\n * @internal\n */\n _addPlugin(plugin) {\n for (let i = 0; i < this._plugins.length; ++i) {\n if (this._plugins[i].name === plugin.name) {\n return false;\n }\n }\n if (this._material._uniformBufferLayoutBuilt) {\n this._material.resetDrawCache();\n this._material._createUniformBuffer();\n }\n if (!plugin.isCompatible(this._material.shaderLanguage)) {\n // eslint-disable-next-line no-throw-literal\n throw `The plugin \"${plugin.name}\" can't be added to the material \"${this._material.name}\" because the plugin is not compatible with the shader language of the material.`;\n }\n const pluginClassName = plugin.getClassName();\n if (!MaterialPluginManager._MaterialPluginClassToMainDefine[pluginClassName]) {\n MaterialPluginManager._MaterialPluginClassToMainDefine[pluginClassName] = \"MATERIALPLUGIN_\" + ++MaterialPluginManager._MaterialPluginCounter;\n }\n this._material._callbackPluginEventGeneric = (id, info) => this._handlePluginEvent(id, info);\n this._plugins.push(plugin);\n this._plugins.sort((a, b) => a.priority - b.priority);\n this._codeInjectionPoints = {};\n const defineNamesFromPlugins = {};\n defineNamesFromPlugins[MaterialPluginManager._MaterialPluginClassToMainDefine[pluginClassName]] = {\n type: \"boolean\",\n default: true,\n };\n for (const plugin of this._plugins) {\n plugin.collectDefines(defineNamesFromPlugins);\n this._collectPointNames(\"vertex\", plugin.getCustomCode(\"vertex\", this._material.shaderLanguage));\n this._collectPointNames(\"fragment\", plugin.getCustomCode(\"fragment\", this._material.shaderLanguage));\n }\n this._defineNamesFromPlugins = defineNamesFromPlugins;\n return true;\n }\n /**\n * @internal\n */\n _activatePlugin(plugin) {\n if (this._activePlugins.indexOf(plugin) === -1) {\n this._activePlugins.push(plugin);\n this._activePlugins.sort((a, b) => a.priority - b.priority);\n this._material._callbackPluginEventIsReadyForSubMesh = this._handlePluginEventIsReadyForSubMesh.bind(this);\n this._material._callbackPluginEventPrepareDefinesBeforeAttributes = this._handlePluginEventPrepareDefinesBeforeAttributes.bind(this);\n this._material._callbackPluginEventPrepareDefines = this._handlePluginEventPrepareDefines.bind(this);\n this._material._callbackPluginEventBindForSubMesh = this._handlePluginEventBindForSubMesh.bind(this);\n if (plugin.registerForExtraEvents) {\n this._activePluginsForExtraEvents.push(plugin);\n this._activePluginsForExtraEvents.sort((a, b) => a.priority - b.priority);\n this._material._callbackPluginEventHasRenderTargetTextures = this._handlePluginEventHasRenderTargetTextures.bind(this);\n this._material._callbackPluginEventFillRenderTargetTextures = this._handlePluginEventFillRenderTargetTextures.bind(this);\n this._material._callbackPluginEventHardBindForSubMesh = this._handlePluginEventHardBindForSubMesh.bind(this);\n }\n }\n }\n /**\n * Gets a plugin from the list of plugins managed by this manager\n * @param name name of the plugin\n * @returns the plugin if found, else null\n */\n getPlugin(name) {\n for (let i = 0; i < this._plugins.length; ++i) {\n if (this._plugins[i].name === name) {\n return this._plugins[i];\n }\n }\n return null;\n }\n _handlePluginEventIsReadyForSubMesh(eventData) {\n let isReady = true;\n for (const plugin of this._activePlugins) {\n isReady = isReady && plugin.isReadyForSubMesh(eventData.defines, this._scene, this._engine, eventData.subMesh);\n }\n eventData.isReadyForSubMesh = isReady;\n }\n _handlePluginEventPrepareDefinesBeforeAttributes(eventData) {\n for (const plugin of this._activePlugins) {\n plugin.prepareDefinesBeforeAttributes(eventData.defines, this._scene, eventData.mesh);\n }\n }\n _handlePluginEventPrepareDefines(eventData) {\n for (const plugin of this._activePlugins) {\n plugin.prepareDefines(eventData.defines, this._scene, eventData.mesh);\n }\n }\n _handlePluginEventHardBindForSubMesh(eventData) {\n for (const plugin of this._activePluginsForExtraEvents) {\n plugin.hardBindForSubMesh(this._material._uniformBuffer, this._scene, this._engine, eventData.subMesh);\n }\n }\n _handlePluginEventBindForSubMesh(eventData) {\n for (const plugin of this._activePlugins) {\n plugin.bindForSubMesh(this._material._uniformBuffer, this._scene, this._engine, eventData.subMesh);\n }\n }\n _handlePluginEventHasRenderTargetTextures(eventData) {\n let hasRenderTargetTextures = false;\n for (const plugin of this._activePluginsForExtraEvents) {\n hasRenderTargetTextures = plugin.hasRenderTargetTextures();\n if (hasRenderTargetTextures) {\n break;\n }\n }\n eventData.hasRenderTargetTextures = hasRenderTargetTextures;\n }\n _handlePluginEventFillRenderTargetTextures(eventData) {\n for (const plugin of this._activePluginsForExtraEvents) {\n plugin.fillRenderTargetTextures(eventData.renderTargets);\n }\n }\n _handlePluginEvent(id, info) {\n switch (id) {\n case 512 /* MaterialPluginEvent.GetActiveTextures */: {\n const eventData = info;\n for (const plugin of this._activePlugins) {\n plugin.getActiveTextures(eventData.activeTextures);\n }\n break;\n }\n case 256 /* MaterialPluginEvent.GetAnimatables */: {\n const eventData = info;\n for (const plugin of this._activePlugins) {\n plugin.getAnimatables(eventData.animatables);\n }\n break;\n }\n case 1024 /* MaterialPluginEvent.HasTexture */: {\n const eventData = info;\n let hasTexture = false;\n for (const plugin of this._activePlugins) {\n hasTexture = plugin.hasTexture(eventData.texture);\n if (hasTexture) {\n break;\n }\n }\n eventData.hasTexture = hasTexture;\n break;\n }\n case 2 /* MaterialPluginEvent.Disposed */: {\n const eventData = info;\n for (const plugin of this._plugins) {\n plugin.dispose(eventData.forceDisposeTextures);\n }\n break;\n }\n case 4 /* MaterialPluginEvent.GetDefineNames */: {\n const eventData = info;\n eventData.defineNames = this._defineNamesFromPlugins;\n break;\n }\n case 128 /* MaterialPluginEvent.PrepareEffect */: {\n const eventData = info;\n for (const plugin of this._activePlugins) {\n eventData.fallbackRank = plugin.addFallbacks(eventData.defines, eventData.fallbacks, eventData.fallbackRank);\n plugin.getAttributes(eventData.attributes, this._scene, eventData.mesh);\n }\n if (this._uniformList.length > 0) {\n eventData.uniforms.push(...this._uniformList);\n }\n if (this._samplerList.length > 0) {\n eventData.samplers.push(...this._samplerList);\n }\n if (this._uboList.length > 0) {\n eventData.uniformBuffersNames.push(...this._uboList);\n }\n eventData.customCode = this._injectCustomCode(eventData, eventData.customCode);\n break;\n }\n case 8 /* MaterialPluginEvent.PrepareUniformBuffer */: {\n const eventData = info;\n this._uboDeclaration = \"\";\n this._vertexDeclaration = \"\";\n this._fragmentDeclaration = \"\";\n this._uniformList = [];\n this._samplerList = [];\n this._uboList = [];\n const isWebGPU = this._material.shaderLanguage === 1 /* ShaderLanguage.WGSL */;\n for (const plugin of this._plugins) {\n const uniforms = plugin.getUniforms(this._material.shaderLanguage);\n if (uniforms) {\n if (uniforms.ubo) {\n for (const uniform of uniforms.ubo) {\n if (uniform.size && uniform.type) {\n const arraySize = uniform.arraySize ?? 0;\n eventData.ubo.addUniform(uniform.name, uniform.size, arraySize);\n if (isWebGPU) {\n let type;\n switch (uniform.type) {\n case \"mat4\":\n type = \"mat4x4f\";\n break;\n case \"float\":\n type = \"f32\";\n break;\n default:\n type = `${uniform.type}f`;\n break;\n }\n this._uboDeclaration += `uniform ${uniform.name}: ${type}${arraySize > 0 ? `[${arraySize}]` : \"\"};\\n`;\n }\n else {\n this._uboDeclaration += `${uniform.type} ${uniform.name}${arraySize > 0 ? `[${arraySize}]` : \"\"};\\n`;\n }\n }\n this._uniformList.push(uniform.name);\n }\n }\n if (uniforms.vertex) {\n this._vertexDeclaration += uniforms.vertex + \"\\n\";\n }\n if (uniforms.fragment) {\n this._fragmentDeclaration += uniforms.fragment + \"\\n\";\n }\n }\n plugin.getSamplers(this._samplerList);\n plugin.getUniformBuffersNames(this._uboList);\n }\n break;\n }\n }\n }\n _collectPointNames(shaderType, customCode) {\n if (!customCode) {\n return;\n }\n for (const pointName in customCode) {\n if (!this._codeInjectionPoints[shaderType]) {\n this._codeInjectionPoints[shaderType] = {};\n }\n this._codeInjectionPoints[shaderType][pointName] = true;\n }\n }\n _injectCustomCode(eventData, existingCallback) {\n return (shaderType, code) => {\n if (existingCallback) {\n code = existingCallback(shaderType, code);\n }\n if (this._uboDeclaration) {\n code = code.replace(\"#define ADDITIONAL_UBO_DECLARATION\", this._uboDeclaration);\n }\n if (this._vertexDeclaration) {\n code = code.replace(\"#define ADDITIONAL_VERTEX_DECLARATION\", this._vertexDeclaration);\n }\n if (this._fragmentDeclaration) {\n code = code.replace(\"#define ADDITIONAL_FRAGMENT_DECLARATION\", this._fragmentDeclaration);\n }\n const points = this._codeInjectionPoints?.[shaderType];\n if (!points) {\n return code;\n }\n let processorOptions = null;\n for (let pointName in points) {\n let injectedCode = \"\";\n for (const plugin of this._activePlugins) {\n let customCode = plugin.getCustomCode(shaderType, this._material.shaderLanguage)?.[pointName];\n if (!customCode) {\n continue;\n }\n if (plugin.resolveIncludes) {\n if (processorOptions === null) {\n const shaderLanguage = 0 /* ShaderLanguage.GLSL */;\n processorOptions = {\n defines: [], // not used by _ProcessIncludes\n indexParameters: eventData.indexParameters,\n isFragment: false,\n shouldUseHighPrecisionShader: this._engine._shouldUseHighPrecisionShader,\n processor: undefined, // not used by _ProcessIncludes\n supportsUniformBuffers: this._engine.supportsUniformBuffers,\n shadersRepository: ShaderStore.GetShadersRepository(shaderLanguage),\n includesShadersStore: ShaderStore.GetIncludesShadersStore(shaderLanguage),\n version: undefined, // not used by _ProcessIncludes\n platformName: this._engine.shaderPlatformName,\n processingContext: undefined, // not used by _ProcessIncludes\n isNDCHalfZRange: this._engine.isNDCHalfZRange,\n useReverseDepthBuffer: this._engine.useReverseDepthBuffer,\n processCodeAfterIncludes: undefined, // not used by _ProcessIncludes\n };\n }\n processorOptions.isFragment = shaderType === \"fragment\";\n _ProcessIncludes(customCode, processorOptions, (code) => (customCode = code));\n }\n injectedCode += customCode + \"\\n\";\n }\n if (injectedCode.length > 0) {\n if (pointName.charAt(0) === \"!\") {\n // pointName is a regular expression\n pointName = pointName.substring(1);\n let regexFlags = \"g\";\n if (pointName.charAt(0) === \"!\") {\n // no flags\n regexFlags = \"\";\n pointName = pointName.substring(1);\n }\n else {\n // get the flag(s)\n const matchOption = rxOption.exec(pointName);\n if (matchOption && matchOption.length >= 2) {\n regexFlags = matchOption[1];\n pointName = pointName.substring(regexFlags.length + 1);\n }\n }\n if (regexFlags.indexOf(\"g\") < 0) {\n // we force the \"g\" flag so that the regexp object is stateful!\n regexFlags += \"g\";\n }\n const sourceCode = code;\n const rx = new RegExp(pointName, regexFlags);\n let match = rx.exec(sourceCode);\n while (match !== null) {\n let newCode = injectedCode;\n for (let i = 0; i < match.length; ++i) {\n newCode = newCode.replace(\"$\" + i, match[i]);\n }\n code = code.replace(match[0], newCode);\n match = rx.exec(sourceCode);\n }\n }\n else {\n const fullPointName = \"#define \" + pointName;\n code = code.replace(fullPointName, \"\\n\" + injectedCode + \"\\n\" + fullPointName);\n }\n }\n }\n return code;\n };\n }\n}\n/** Map a plugin class name to a #define name (used in the vertex/fragment shaders as a marker of the plugin usage) */\nMaterialPluginManager._MaterialPluginClassToMainDefine = {};\nMaterialPluginManager._MaterialPluginCounter = 0;\n(() => {\n EngineStore.OnEnginesDisposedObservable.add(() => {\n UnregisterAllMaterialPlugins();\n });\n})();\nconst plugins = [];\nlet inited = false;\nlet observer = null;\n/**\n * Registers a new material plugin through a factory, or updates it. This makes the plugin available to all materials instantiated after its registration.\n * @param pluginName The plugin name\n * @param factory The factory function which allows to create the plugin\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function RegisterMaterialPlugin(pluginName, factory) {\n if (!inited) {\n observer = Material.OnEventObservable.add((material) => {\n for (const [, factory] of plugins) {\n factory(material);\n }\n }, 1 /* MaterialPluginEvent.Created */);\n inited = true;\n }\n const existing = plugins.filter(([name, _factory]) => name === pluginName);\n if (existing.length > 0) {\n existing[0][1] = factory;\n }\n else {\n plugins.push([pluginName, factory]);\n }\n}\n/**\n * Removes a material plugin from the list of global plugins.\n * @param pluginName The plugin name\n * @returns true if the plugin has been removed, else false\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function UnregisterMaterialPlugin(pluginName) {\n for (let i = 0; i < plugins.length; ++i) {\n if (plugins[i][0] === pluginName) {\n plugins.splice(i, 1);\n if (plugins.length === 0) {\n UnregisterAllMaterialPlugins();\n }\n return true;\n }\n }\n return false;\n}\n/**\n * Clear the list of global material plugins\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function UnregisterAllMaterialPlugins() {\n plugins.length = 0;\n inited = false;\n Material.OnEventObservable.remove(observer);\n observer = null;\n}\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}