@babylonjs/core 6.8.1 → 6.9.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 (233) hide show
  1. package/Actions/action.d.ts +4 -5
  2. package/Actions/action.js.map +1 -1
  3. package/Actions/condition.d.ts +1 -2
  4. package/Actions/condition.js.map +1 -1
  5. package/Actions/directActions.d.ts +1 -2
  6. package/Actions/directActions.js.map +1 -1
  7. package/Animations/animatable.interface.d.ts +1 -2
  8. package/Animations/animatable.interface.js.map +1 -1
  9. package/Animations/animation.d.ts +3 -4
  10. package/Animations/animation.js.map +1 -1
  11. package/Animations/runtimeAnimation.d.ts +1 -2
  12. package/Animations/runtimeAnimation.js.map +1 -1
  13. package/Bones/bone.d.ts +3 -3
  14. package/Bones/bone.js.map +1 -1
  15. package/Cameras/arcRotateCamera.d.ts +1 -2
  16. package/Cameras/arcRotateCamera.js.map +1 -1
  17. package/Cameras/camera.d.ts +6 -7
  18. package/Cameras/camera.js.map +1 -1
  19. package/Cameras/flyCamera.js.map +1 -1
  20. package/Cameras/freeCamera.js.map +1 -1
  21. package/Collisions/meshCollisionData.d.ts +1 -2
  22. package/Collisions/meshCollisionData.js.map +1 -1
  23. package/Collisions/pickingInfo.d.ts +1 -2
  24. package/Collisions/pickingInfo.js.map +1 -1
  25. package/Compute/computeEffect.d.ts +1 -2
  26. package/Compute/computeEffect.js.map +1 -1
  27. package/Culling/Octrees/octreeSceneComponent.d.ts +1 -2
  28. package/Culling/Octrees/octreeSceneComponent.js.map +1 -1
  29. package/Culling/boundingBox.d.ts +1 -2
  30. package/Culling/boundingBox.js.map +1 -1
  31. package/Culling/boundingInfo.d.ts +1 -2
  32. package/Culling/boundingInfo.js.map +1 -1
  33. package/Culling/ray.js.map +1 -1
  34. package/Engines/Extensions/engine.storageBuffer.d.ts +1 -2
  35. package/Engines/Extensions/engine.storageBuffer.js.map +1 -1
  36. package/Engines/Extensions/engine.textureSampler.d.ts +1 -2
  37. package/Engines/Extensions/engine.textureSampler.js.map +1 -1
  38. package/Engines/Processors/iShaderProcessor.d.ts +1 -2
  39. package/Engines/Processors/iShaderProcessor.js.map +1 -1
  40. package/Engines/Processors/shaderProcessor.d.ts +5 -6
  41. package/Engines/Processors/shaderProcessor.js.map +1 -1
  42. package/Engines/WebGL/webGLShaderProcessors.d.ts +1 -2
  43. package/Engines/WebGL/webGLShaderProcessors.js.map +1 -1
  44. package/Engines/WebGPU/Extensions/engine.cubeTexture.js.map +1 -1
  45. package/Engines/WebGPU/Extensions/engine.query.js.map +1 -1
  46. package/Engines/WebGPU/Extensions/engine.rawTexture.js.map +1 -1
  47. package/Engines/WebGPU/Extensions/engine.storageBuffer.d.ts +1 -2
  48. package/Engines/WebGPU/Extensions/engine.storageBuffer.js.map +1 -1
  49. package/Engines/WebGPU/Extensions/engine.textureSampler.d.ts +1 -2
  50. package/Engines/WebGPU/Extensions/engine.textureSampler.js.map +1 -1
  51. package/Engines/WebGPU/webgpuHardwareTexture.d.ts +1 -2
  52. package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
  53. package/Engines/engine.d.ts +3 -3
  54. package/Engines/engine.js.map +1 -1
  55. package/Engines/engineStore.d.ts +4 -5
  56. package/Engines/engineStore.js.map +1 -1
  57. package/Engines/thinEngine.js +2 -2
  58. package/Engines/thinEngine.js.map +1 -1
  59. package/Engines/webgpuEngine.d.ts +1 -2
  60. package/Engines/webgpuEngine.js.map +1 -1
  61. package/Events/pointerEvents.d.ts +1 -2
  62. package/Events/pointerEvents.js.map +1 -1
  63. package/Helpers/textureDome.js.map +1 -1
  64. package/Inputs/scene.inputManager.d.ts +1 -2
  65. package/Inputs/scene.inputManager.js.map +1 -1
  66. package/Materials/Node/Blocks/Dual/currentScreenBlock.d.ts +1 -2
  67. package/Materials/Node/Blocks/Dual/currentScreenBlock.js.map +1 -1
  68. package/Materials/Node/Blocks/Dual/sceneDepthBlock.d.ts +1 -2
  69. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
  70. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.d.ts +3 -4
  71. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
  72. package/Materials/Node/Blocks/Particle/particleTextureBlock.d.ts +1 -2
  73. package/Materials/Node/Blocks/Particle/particleTextureBlock.js.map +1 -1
  74. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js.map +1 -1
  75. package/Materials/Node/nodeMaterialDecorator.d.ts +2 -3
  76. package/Materials/Node/nodeMaterialDecorator.js.map +1 -1
  77. package/Materials/PBR/pbrAnisotropicConfiguration.d.ts +3 -4
  78. package/Materials/PBR/pbrAnisotropicConfiguration.js.map +1 -1
  79. package/Materials/PBR/pbrClearCoatConfiguration.d.ts +3 -4
  80. package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
  81. package/Materials/PBR/pbrIridescenceConfiguration.d.ts +3 -4
  82. package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -1
  83. package/Materials/PBR/pbrSheenConfiguration.d.ts +3 -4
  84. package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
  85. package/Materials/PBR/pbrSubSurfaceConfiguration.d.ts +3 -4
  86. package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
  87. package/Materials/Textures/baseTexture.d.ts +2 -1
  88. package/Materials/Textures/baseTexture.js.map +1 -1
  89. package/Materials/Textures/htmlElementTexture.d.ts +2 -3
  90. package/Materials/Textures/htmlElementTexture.js.map +1 -1
  91. package/Materials/Textures/internalTexture.d.ts +3 -4
  92. package/Materials/Textures/internalTexture.js.map +1 -1
  93. package/Materials/Textures/rawTexture.d.ts +1 -2
  94. package/Materials/Textures/rawTexture.js.map +1 -1
  95. package/Materials/Textures/rawTexture2DArray.d.ts +1 -2
  96. package/Materials/Textures/rawTexture2DArray.js.map +1 -1
  97. package/Materials/Textures/renderTargetTexture.d.ts +1 -2
  98. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  99. package/Materials/Textures/texture.d.ts +4 -5
  100. package/Materials/Textures/texture.js.map +1 -1
  101. package/Materials/drawWrapper.d.ts +3 -4
  102. package/Materials/drawWrapper.js.map +1 -1
  103. package/Materials/effect.d.ts +5 -6
  104. package/Materials/effect.js.map +1 -1
  105. package/Materials/effectFallbacks.d.ts +2 -3
  106. package/Materials/effectFallbacks.js.map +1 -1
  107. package/Materials/iEffectFallbacks.d.ts +1 -2
  108. package/Materials/iEffectFallbacks.js.map +1 -1
  109. package/Materials/imageProcessingConfiguration.d.ts +2 -3
  110. package/Materials/imageProcessingConfiguration.js.map +1 -1
  111. package/Materials/material.d.ts +3 -4
  112. package/Materials/material.detailMapConfiguration.d.ts +4 -5
  113. package/Materials/material.detailMapConfiguration.js.map +1 -1
  114. package/Materials/material.js.map +1 -1
  115. package/Materials/materialPluginBase.d.ts +11 -12
  116. package/Materials/materialPluginBase.js.map +1 -1
  117. package/Materials/materialPluginEvent.d.ts +8 -9
  118. package/Materials/materialPluginEvent.js.map +1 -1
  119. package/Materials/materialPluginFactoryExport.d.ts +1 -2
  120. package/Materials/materialPluginFactoryExport.js.map +1 -1
  121. package/Materials/materialPluginManager.d.ts +3 -4
  122. package/Materials/materialPluginManager.js.map +1 -1
  123. package/Materials/materialStencilState.d.ts +1 -2
  124. package/Materials/materialStencilState.js.map +1 -1
  125. package/Materials/shaderMaterial.d.ts +1 -2
  126. package/Materials/shaderMaterial.js.map +1 -1
  127. package/Meshes/Builders/linesBuilder.d.ts +1 -2
  128. package/Meshes/Builders/linesBuilder.js.map +1 -1
  129. package/Meshes/Builders/textBuilder.d.ts +34 -0
  130. package/Meshes/Builders/textBuilder.js +10 -2
  131. package/Meshes/Builders/textBuilder.js.map +1 -1
  132. package/Meshes/abstractMesh.d.ts +5 -5
  133. package/Meshes/abstractMesh.js.map +1 -1
  134. package/Meshes/geometry.d.ts +1 -2
  135. package/Meshes/geometry.js.map +1 -1
  136. package/Meshes/mesh.d.ts +6 -6
  137. package/Meshes/mesh.js.map +1 -1
  138. package/Meshes/mesh.vertexData.d.ts +2 -3
  139. package/Meshes/mesh.vertexData.js.map +1 -1
  140. package/Meshes/subMesh.d.ts +7 -8
  141. package/Meshes/subMesh.js.map +1 -1
  142. package/Misc/copyTools.d.ts +1 -2
  143. package/Misc/copyTools.js.map +1 -1
  144. package/Misc/decorators.d.ts +5 -6
  145. package/Misc/decorators.js.map +1 -1
  146. package/Misc/greasedLineTools.d.ts +12 -0
  147. package/Misc/greasedLineTools.js +36 -0
  148. package/Misc/greasedLineTools.js.map +1 -1
  149. package/Misc/rgbdTextureTools.d.ts +3 -4
  150. package/Misc/rgbdTextureTools.js.map +1 -1
  151. package/Misc/screenshotTools.d.ts +1 -2
  152. package/Misc/screenshotTools.js.map +1 -1
  153. package/Morph/morphTarget.d.ts +2 -1
  154. package/Morph/morphTarget.js.map +1 -1
  155. package/Particles/EmitterTypes/IParticleEmitterType.d.ts +1 -2
  156. package/Particles/EmitterTypes/IParticleEmitterType.js.map +1 -1
  157. package/Particles/IParticleSystem.d.ts +2 -3
  158. package/Particles/IParticleSystem.js.map +1 -1
  159. package/Particles/gpuParticleSystem.d.ts +1 -2
  160. package/Particles/gpuParticleSystem.js.map +1 -1
  161. package/Particles/particle.js.map +1 -1
  162. package/Particles/particleSystem.d.ts +1 -2
  163. package/Particles/particleSystem.js.map +1 -1
  164. package/Particles/subEmitter.d.ts +2 -3
  165. package/Particles/subEmitter.js.map +1 -1
  166. package/Particles/webgl2ParticleSystem.js.map +1 -1
  167. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.d.ts +1 -2
  168. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js.map +1 -1
  169. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.d.ts +1 -2
  170. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
  171. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.d.ts +1 -2
  172. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js.map +1 -1
  173. package/PostProcesses/blackAndWhitePostProcess.d.ts +1 -2
  174. package/PostProcesses/blackAndWhitePostProcess.js.map +1 -1
  175. package/PostProcesses/blurPostProcess.d.ts +1 -2
  176. package/PostProcesses/blurPostProcess.js.map +1 -1
  177. package/PostProcesses/chromaticAberrationPostProcess.d.ts +1 -2
  178. package/PostProcesses/chromaticAberrationPostProcess.js.map +1 -1
  179. package/PostProcesses/colorCorrectionPostProcess.d.ts +1 -2
  180. package/PostProcesses/colorCorrectionPostProcess.js.map +1 -1
  181. package/PostProcesses/convolutionPostProcess.d.ts +1 -2
  182. package/PostProcesses/convolutionPostProcess.js.map +1 -1
  183. package/PostProcesses/displayPassPostProcess.d.ts +1 -2
  184. package/PostProcesses/displayPassPostProcess.js.map +1 -1
  185. package/PostProcesses/filterPostProcess.d.ts +1 -2
  186. package/PostProcesses/filterPostProcess.js.map +1 -1
  187. package/PostProcesses/fxaaPostProcess.d.ts +1 -2
  188. package/PostProcesses/fxaaPostProcess.js.map +1 -1
  189. package/PostProcesses/grainPostProcess.d.ts +1 -2
  190. package/PostProcesses/grainPostProcess.js.map +1 -1
  191. package/PostProcesses/motionBlurPostProcess.d.ts +2 -3
  192. package/PostProcesses/motionBlurPostProcess.js.map +1 -1
  193. package/PostProcesses/passPostProcess.d.ts +1 -2
  194. package/PostProcesses/passPostProcess.js.map +1 -1
  195. package/PostProcesses/postProcess.d.ts +6 -6
  196. package/PostProcesses/postProcess.js.map +1 -1
  197. package/PostProcesses/postProcessManager.d.ts +1 -2
  198. package/PostProcesses/postProcessManager.js.map +1 -1
  199. package/PostProcesses/refractionPostProcess.d.ts +1 -2
  200. package/PostProcesses/refractionPostProcess.js.map +1 -1
  201. package/PostProcesses/screenSpaceCurvaturePostProcess.d.ts +2 -3
  202. package/PostProcesses/screenSpaceCurvaturePostProcess.js.map +1 -1
  203. package/PostProcesses/screenSpaceReflectionPostProcess.d.ts +2 -3
  204. package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
  205. package/PostProcesses/sharpenPostProcess.d.ts +2 -3
  206. package/PostProcesses/sharpenPostProcess.js.map +1 -1
  207. package/PostProcesses/tonemapPostProcess.d.ts +1 -2
  208. package/PostProcesses/tonemapPostProcess.js.map +1 -1
  209. package/PostProcesses/volumetricLightScatteringPostProcess.d.ts +1 -2
  210. package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
  211. package/Rendering/depthRenderer.d.ts +2 -3
  212. package/Rendering/depthRenderer.js.map +1 -1
  213. package/Rendering/geometryBufferRenderer.js +2 -2
  214. package/Rendering/geometryBufferRenderer.js.map +1 -1
  215. package/Rendering/renderingManager.d.ts +5 -6
  216. package/Rendering/renderingManager.js.map +1 -1
  217. package/Sprites/sprite.d.ts +1 -2
  218. package/Sprites/sprite.js.map +1 -1
  219. package/Sprites/spriteManager.d.ts +1 -2
  220. package/Sprites/spriteManager.js.map +1 -1
  221. package/Sprites/spriteRenderer.d.ts +2 -3
  222. package/Sprites/spriteRenderer.js.map +1 -1
  223. package/XR/webXRExperienceHelper.js +1 -0
  224. package/XR/webXRExperienceHelper.js.map +1 -1
  225. package/abstractScene.d.ts +3 -3
  226. package/abstractScene.js.map +1 -1
  227. package/node.d.ts +6 -7
  228. package/node.js.map +1 -1
  229. package/package.json +1 -1
  230. package/scene.d.ts +49 -50
  231. package/scene.js.map +1 -1
  232. package/sceneComponent.d.ts +6 -7
  233. package/sceneComponent.js.map +1 -1
@@ -1,13 +1,13 @@
1
1
  import type { ShaderCustomProcessingFunction } from "../Engines/Processors/shaderProcessingOptions";
2
2
  import type { SmartArray } from "../Misc/smartArray";
3
- declare type BaseTexture = import("./Textures/baseTexture").BaseTexture;
4
- declare type EffectFallbacks = import("./effectFallbacks").EffectFallbacks;
5
- declare type MaterialDefines = import("./materialDefines").MaterialDefines;
6
- declare type UniformBuffer = import("./uniformBuffer").UniformBuffer;
7
- declare type SubMesh = import("../Meshes/subMesh").SubMesh;
8
- declare type AbstractMesh = import("../Meshes/abstractMesh").AbstractMesh;
9
- declare type IAnimatable = import("../Animations/animatable.interface").IAnimatable;
10
- declare type RenderTargetTexture = import("./Textures/renderTargetTexture").RenderTargetTexture;
3
+ import type { BaseTexture } from "./Textures/baseTexture";
4
+ import type { EffectFallbacks } from "./effectFallbacks";
5
+ import type { MaterialDefines } from "./materialDefines";
6
+ import type { UniformBuffer } from "./uniformBuffer";
7
+ import type { SubMesh } from "../Meshes/subMesh";
8
+ import type { AbstractMesh } from "../Meshes/abstractMesh";
9
+ import type { IAnimatable } from "../Animations/animatable.interface";
10
+ import type { RenderTargetTexture } from "./Textures/renderTargetTexture";
11
11
  /** @internal */
12
12
  export type MaterialPluginCreated = {};
13
13
  /** @internal */
@@ -98,4 +98,3 @@ export declare enum MaterialPluginEvent {
98
98
  HasRenderTargetTextures = 4096,
99
99
  HardBindForSubMesh = 8192
100
100
  }
101
- export {};
@@ -1 +1 @@
1
- {"version":3,"file":"materialPluginEvent.js","sourceRoot":"","sources":["../../../../lts/core/generated/Materials/materialPluginEvent.ts"],"names":[],"mappings":"AA4FA;;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 type { ShaderCustomProcessingFunction } from \"../Engines/Processors/shaderProcessingOptions\";\r\nimport type { 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/** @internal */\r\nexport type MaterialPluginCreated = {};\r\n\r\n/** @internal */\r\nexport type MaterialPluginDisposed = {\r\n forceDisposeTextures?: boolean;\r\n};\r\n\r\n/** @internal */\r\nexport type MaterialPluginHasTexture = {\r\n hasTexture: boolean;\r\n texture: BaseTexture;\r\n};\r\n\r\n/** @internal */\r\nexport type MaterialPluginIsReadyForSubMesh = {\r\n isReadyForSubMesh: boolean;\r\n defines: MaterialDefines;\r\n subMesh: SubMesh;\r\n};\r\n\r\n/** @internal */\r\nexport type MaterialPluginGetDefineNames = {\r\n defineNames?: { [name: string]: { type: string; default: any } };\r\n};\r\n\r\n/** @internal */\r\nexport type MaterialPluginPrepareEffect = {\r\n defines: MaterialDefines;\r\n fallbacks: EffectFallbacks;\r\n fallbackRank: number;\r\n customCode?: ShaderCustomProcessingFunction;\r\n attributes: string[];\r\n uniforms: string[];\r\n samplers: string[];\r\n uniformBuffersNames: string[];\r\n mesh: AbstractMesh;\r\n};\r\n\r\n/** @internal */\r\nexport type MaterialPluginPrepareDefines = {\r\n defines: MaterialDefines;\r\n mesh: AbstractMesh;\r\n};\r\n\r\n/** @internal */\r\nexport type MaterialPluginPrepareUniformBuffer = {\r\n ubo: UniformBuffer;\r\n};\r\n\r\n/** @internal */\r\nexport type MaterialPluginBindForSubMesh = {\r\n subMesh: SubMesh;\r\n};\r\n\r\n/** @internal */\r\nexport type MaterialPluginGetAnimatables = {\r\n animatables: IAnimatable[];\r\n};\r\n\r\n/** @internal */\r\nexport type MaterialPluginGetActiveTextures = {\r\n activeTextures: BaseTexture[];\r\n};\r\n\r\n/** @internal */\r\nexport type MaterialPluginFillRenderTargetTextures = {\r\n renderTargets: SmartArray<RenderTargetTexture>;\r\n};\r\n\r\n/** @internal */\r\nexport type MaterialPluginHasRenderTargetTextures = {\r\n hasRenderTargetTextures: boolean;\r\n};\r\n\r\n/** @internal */\r\nexport type MaterialPluginHardBindForSubMesh = {\r\n subMesh: SubMesh;\r\n};\r\n\r\n/**\r\n * @internal\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":["../../../../lts/core/generated/Materials/materialPluginEvent.ts"],"names":[],"mappings":"AA4FA;;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 type { ShaderCustomProcessingFunction } from \"../Engines/Processors/shaderProcessingOptions\";\r\nimport type { SmartArray } from \"../Misc/smartArray\";\r\n\r\nimport type { BaseTexture } from \"./Textures/baseTexture\";\r\nimport type { EffectFallbacks } from \"./effectFallbacks\";\r\nimport type { MaterialDefines } from \"./materialDefines\";\r\nimport type { UniformBuffer } from \"./uniformBuffer\";\r\nimport type { SubMesh } from \"../Meshes/subMesh\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport type { IAnimatable } from \"../Animations/animatable.interface\";\r\nimport type { RenderTargetTexture } from \"./Textures/renderTargetTexture\";\r\n\r\n/** @internal */\r\nexport type MaterialPluginCreated = {};\r\n\r\n/** @internal */\r\nexport type MaterialPluginDisposed = {\r\n forceDisposeTextures?: boolean;\r\n};\r\n\r\n/** @internal */\r\nexport type MaterialPluginHasTexture = {\r\n hasTexture: boolean;\r\n texture: BaseTexture;\r\n};\r\n\r\n/** @internal */\r\nexport type MaterialPluginIsReadyForSubMesh = {\r\n isReadyForSubMesh: boolean;\r\n defines: MaterialDefines;\r\n subMesh: SubMesh;\r\n};\r\n\r\n/** @internal */\r\nexport type MaterialPluginGetDefineNames = {\r\n defineNames?: { [name: string]: { type: string; default: any } };\r\n};\r\n\r\n/** @internal */\r\nexport type MaterialPluginPrepareEffect = {\r\n defines: MaterialDefines;\r\n fallbacks: EffectFallbacks;\r\n fallbackRank: number;\r\n customCode?: ShaderCustomProcessingFunction;\r\n attributes: string[];\r\n uniforms: string[];\r\n samplers: string[];\r\n uniformBuffersNames: string[];\r\n mesh: AbstractMesh;\r\n};\r\n\r\n/** @internal */\r\nexport type MaterialPluginPrepareDefines = {\r\n defines: MaterialDefines;\r\n mesh: AbstractMesh;\r\n};\r\n\r\n/** @internal */\r\nexport type MaterialPluginPrepareUniformBuffer = {\r\n ubo: UniformBuffer;\r\n};\r\n\r\n/** @internal */\r\nexport type MaterialPluginBindForSubMesh = {\r\n subMesh: SubMesh;\r\n};\r\n\r\n/** @internal */\r\nexport type MaterialPluginGetAnimatables = {\r\n animatables: IAnimatable[];\r\n};\r\n\r\n/** @internal */\r\nexport type MaterialPluginGetActiveTextures = {\r\n activeTextures: BaseTexture[];\r\n};\r\n\r\n/** @internal */\r\nexport type MaterialPluginFillRenderTargetTextures = {\r\n renderTargets: SmartArray<RenderTargetTexture>;\r\n};\r\n\r\n/** @internal */\r\nexport type MaterialPluginHasRenderTargetTextures = {\r\n hasRenderTargetTextures: boolean;\r\n};\r\n\r\n/** @internal */\r\nexport type MaterialPluginHardBindForSubMesh = {\r\n subMesh: SubMesh;\r\n};\r\n\r\n/**\r\n * @internal\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,6 +1,6 @@
1
1
  import type { Nullable } from "../types";
2
2
  import type { MaterialPluginBase } from "./materialPluginBase";
3
- declare type Material = import("./material").Material;
3
+ import type { Material } from "./material";
4
4
  /**
5
5
  * Creates an instance of the anisotropic plugin
6
6
  * @param material parent material the plugin will be created for
@@ -43,4 +43,3 @@ export declare function createPBRSubSurfacePlugin(material: Material): Nullable<
43
43
  * @returns the plugin instance or null if the plugin is incompatible with material
44
44
  */
45
45
  export declare function createDetailMapPlugin(material: Material): Nullable<MaterialPluginBase>;
46
- export {};
@@ -1 +1 @@
1
- {"version":3,"file":"materialPluginFactoryExport.js","sourceRoot":"","sources":["../../../../lts/core/generated/Materials/materialPluginFactoryExport.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAE3E,OAAO,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAItD;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CAAC,QAAkB;IACzD,IAAI,QAAQ,YAAY,eAAe,EAAE;QACrC,OAAO,IAAI,2BAA2B,CAAC,QAAQ,CAAC,CAAC;KACpD;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAkB;IAClD,IAAI,QAAQ,YAAY,eAAe,EAAE;QACrC,OAAO,IAAI,oBAAoB,CAAC,QAAQ,CAAC,CAAC;KAC7C;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,QAAkB;IACvD,IAAI,QAAQ,YAAY,eAAe,EAAE;QACrC,OAAO,IAAI,yBAAyB,CAAC,QAAQ,CAAC,CAAC;KAClD;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CAAC,QAAkB;IACzD,IAAI,QAAQ,YAAY,eAAe,EAAE;QACrC,OAAO,IAAI,2BAA2B,CAAC,QAAQ,CAAC,CAAC;KACpD;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAkB;IACnD,IAAI,QAAQ,YAAY,eAAe,EAAE;QACrC,OAAO,IAAI,qBAAqB,CAAC,QAAQ,CAAC,CAAC;KAC9C;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,QAAkB;IACxD,IAAI,QAAQ,YAAY,eAAe,EAAE;QACrC,OAAO,IAAI,0BAA0B,CAAC,QAAQ,CAAC,CAAC;KACnD;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAkB;IACpD,IAAI,QAAQ,YAAY,eAAe,IAAI,QAAQ,YAAY,gBAAgB,EAAE;QAC7E,OAAO,IAAI,sBAAsB,CAAC,QAAQ,CAAC,CAAC;KAC/C;IACD,OAAO,IAAI,CAAC;AAChB,CAAC","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport { DetailMapConfiguration } from \"./material.detailMapConfiguration\";\r\nimport type { MaterialPluginBase } from \"./materialPluginBase\";\r\nimport { PBRAnisotropicConfiguration } from \"./PBR/pbrAnisotropicConfiguration\";\r\nimport { PBRBaseMaterial } from \"./PBR/pbrBaseMaterial\";\r\nimport { PBRBRDFConfiguration } from \"./PBR/pbrBRDFConfiguration\";\r\nimport { PBRClearCoatConfiguration } from \"./PBR/pbrClearCoatConfiguration\";\r\nimport { PBRIridescenceConfiguration } from \"./PBR/pbrIridescenceConfiguration\";\r\nimport { PBRSheenConfiguration } from \"./PBR/pbrSheenConfiguration\";\r\nimport { PBRSubSurfaceConfiguration } from \"./PBR/pbrSubSurfaceConfiguration\";\r\nimport { StandardMaterial } from \"./standardMaterial\";\r\n\r\ndeclare type Material = import(\"./material\").Material;\r\n\r\n/**\r\n * Creates an instance of the anisotropic plugin\r\n * @param material parent material the plugin will be created for\r\n * @returns the plugin instance or null if the plugin is incompatible with material\r\n */\r\nexport function createPBRAnisotropicPlugin(material: Material): Nullable<MaterialPluginBase> {\r\n if (material instanceof PBRBaseMaterial) {\r\n return new PBRAnisotropicConfiguration(material);\r\n }\r\n return null;\r\n}\r\n\r\n/**\r\n * Creates an instance of the brdf plugin\r\n * @param material parent material the plugin will be created for\r\n * @returns the plugin instance or null if the plugin is incompatible with material\r\n */\r\nexport function createPBRBRDFPlugin(material: Material): Nullable<MaterialPluginBase> {\r\n if (material instanceof PBRBaseMaterial) {\r\n return new PBRBRDFConfiguration(material);\r\n }\r\n return null;\r\n}\r\n\r\n/**\r\n * Creates an instance of the clear coat plugin\r\n * @param material parent material the plugin will be created for\r\n * @returns the plugin instance or null if the plugin is incompatible with material\r\n */\r\nexport function createPBRClearCoatPlugin(material: Material): Nullable<MaterialPluginBase> {\r\n if (material instanceof PBRBaseMaterial) {\r\n return new PBRClearCoatConfiguration(material);\r\n }\r\n return null;\r\n}\r\n\r\n/**\r\n * Creates an instance of the iridescence plugin\r\n * @param material parent material the plugin will be created for\r\n * @returns the plugin instance or null if the plugin is incompatible with material\r\n */\r\nexport function createPBRIridescencePlugin(material: Material): Nullable<MaterialPluginBase> {\r\n if (material instanceof PBRBaseMaterial) {\r\n return new PBRIridescenceConfiguration(material);\r\n }\r\n return null;\r\n}\r\n\r\n/**\r\n * Creates an instance of the sheen plugin\r\n * @param material parent material the plugin will be created for\r\n * @returns the plugin instance or null if the plugin is incompatible with material\r\n */\r\nexport function createPBRSheenPlugin(material: Material): Nullable<MaterialPluginBase> {\r\n if (material instanceof PBRBaseMaterial) {\r\n return new PBRSheenConfiguration(material);\r\n }\r\n return null;\r\n}\r\n\r\n/**\r\n * Creates an instance of the sub surface plugin\r\n * @param material parent material the plugin will be created for\r\n * @returns the plugin instance or null if the plugin is incompatible with material\r\n */\r\nexport function createPBRSubSurfacePlugin(material: Material): Nullable<MaterialPluginBase> {\r\n if (material instanceof PBRBaseMaterial) {\r\n return new PBRSubSurfaceConfiguration(material);\r\n }\r\n return null;\r\n}\r\n\r\n/**\r\n * Creates an instance of the detail map plugin\r\n * @param material parent material the plugin will be created for\r\n * @returns the plugin instance or null if the plugin is incompatible with material\r\n */\r\nexport function createDetailMapPlugin(material: Material): Nullable<MaterialPluginBase> {\r\n if (material instanceof PBRBaseMaterial || material instanceof StandardMaterial) {\r\n return new DetailMapConfiguration(material);\r\n }\r\n return null;\r\n}\r\n"]}
1
+ {"version":3,"file":"materialPluginFactoryExport.js","sourceRoot":"","sources":["../../../../lts/core/generated/Materials/materialPluginFactoryExport.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAE3E,OAAO,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAItD;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CAAC,QAAkB;IACzD,IAAI,QAAQ,YAAY,eAAe,EAAE;QACrC,OAAO,IAAI,2BAA2B,CAAC,QAAQ,CAAC,CAAC;KACpD;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAkB;IAClD,IAAI,QAAQ,YAAY,eAAe,EAAE;QACrC,OAAO,IAAI,oBAAoB,CAAC,QAAQ,CAAC,CAAC;KAC7C;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,QAAkB;IACvD,IAAI,QAAQ,YAAY,eAAe,EAAE;QACrC,OAAO,IAAI,yBAAyB,CAAC,QAAQ,CAAC,CAAC;KAClD;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CAAC,QAAkB;IACzD,IAAI,QAAQ,YAAY,eAAe,EAAE;QACrC,OAAO,IAAI,2BAA2B,CAAC,QAAQ,CAAC,CAAC;KACpD;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAkB;IACnD,IAAI,QAAQ,YAAY,eAAe,EAAE;QACrC,OAAO,IAAI,qBAAqB,CAAC,QAAQ,CAAC,CAAC;KAC9C;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,QAAkB;IACxD,IAAI,QAAQ,YAAY,eAAe,EAAE;QACrC,OAAO,IAAI,0BAA0B,CAAC,QAAQ,CAAC,CAAC;KACnD;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAkB;IACpD,IAAI,QAAQ,YAAY,eAAe,IAAI,QAAQ,YAAY,gBAAgB,EAAE;QAC7E,OAAO,IAAI,sBAAsB,CAAC,QAAQ,CAAC,CAAC;KAC/C;IACD,OAAO,IAAI,CAAC;AAChB,CAAC","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport { DetailMapConfiguration } from \"./material.detailMapConfiguration\";\r\nimport type { MaterialPluginBase } from \"./materialPluginBase\";\r\nimport { PBRAnisotropicConfiguration } from \"./PBR/pbrAnisotropicConfiguration\";\r\nimport { PBRBaseMaterial } from \"./PBR/pbrBaseMaterial\";\r\nimport { PBRBRDFConfiguration } from \"./PBR/pbrBRDFConfiguration\";\r\nimport { PBRClearCoatConfiguration } from \"./PBR/pbrClearCoatConfiguration\";\r\nimport { PBRIridescenceConfiguration } from \"./PBR/pbrIridescenceConfiguration\";\r\nimport { PBRSheenConfiguration } from \"./PBR/pbrSheenConfiguration\";\r\nimport { PBRSubSurfaceConfiguration } from \"./PBR/pbrSubSurfaceConfiguration\";\r\nimport { StandardMaterial } from \"./standardMaterial\";\r\n\r\nimport type { Material } from \"./material\";\r\n\r\n/**\r\n * Creates an instance of the anisotropic plugin\r\n * @param material parent material the plugin will be created for\r\n * @returns the plugin instance or null if the plugin is incompatible with material\r\n */\r\nexport function createPBRAnisotropicPlugin(material: Material): Nullable<MaterialPluginBase> {\r\n if (material instanceof PBRBaseMaterial) {\r\n return new PBRAnisotropicConfiguration(material);\r\n }\r\n return null;\r\n}\r\n\r\n/**\r\n * Creates an instance of the brdf plugin\r\n * @param material parent material the plugin will be created for\r\n * @returns the plugin instance or null if the plugin is incompatible with material\r\n */\r\nexport function createPBRBRDFPlugin(material: Material): Nullable<MaterialPluginBase> {\r\n if (material instanceof PBRBaseMaterial) {\r\n return new PBRBRDFConfiguration(material);\r\n }\r\n return null;\r\n}\r\n\r\n/**\r\n * Creates an instance of the clear coat plugin\r\n * @param material parent material the plugin will be created for\r\n * @returns the plugin instance or null if the plugin is incompatible with material\r\n */\r\nexport function createPBRClearCoatPlugin(material: Material): Nullable<MaterialPluginBase> {\r\n if (material instanceof PBRBaseMaterial) {\r\n return new PBRClearCoatConfiguration(material);\r\n }\r\n return null;\r\n}\r\n\r\n/**\r\n * Creates an instance of the iridescence plugin\r\n * @param material parent material the plugin will be created for\r\n * @returns the plugin instance or null if the plugin is incompatible with material\r\n */\r\nexport function createPBRIridescencePlugin(material: Material): Nullable<MaterialPluginBase> {\r\n if (material instanceof PBRBaseMaterial) {\r\n return new PBRIridescenceConfiguration(material);\r\n }\r\n return null;\r\n}\r\n\r\n/**\r\n * Creates an instance of the sheen plugin\r\n * @param material parent material the plugin will be created for\r\n * @returns the plugin instance or null if the plugin is incompatible with material\r\n */\r\nexport function createPBRSheenPlugin(material: Material): Nullable<MaterialPluginBase> {\r\n if (material instanceof PBRBaseMaterial) {\r\n return new PBRSheenConfiguration(material);\r\n }\r\n return null;\r\n}\r\n\r\n/**\r\n * Creates an instance of the sub surface plugin\r\n * @param material parent material the plugin will be created for\r\n * @returns the plugin instance or null if the plugin is incompatible with material\r\n */\r\nexport function createPBRSubSurfacePlugin(material: Material): Nullable<MaterialPluginBase> {\r\n if (material instanceof PBRBaseMaterial) {\r\n return new PBRSubSurfaceConfiguration(material);\r\n }\r\n return null;\r\n}\r\n\r\n/**\r\n * Creates an instance of the detail map plugin\r\n * @param material parent material the plugin will be created for\r\n * @returns the plugin instance or null if the plugin is incompatible with material\r\n */\r\nexport function createDetailMapPlugin(material: Material): Nullable<MaterialPluginBase> {\r\n if (material instanceof PBRBaseMaterial || material instanceof StandardMaterial) {\r\n return new DetailMapConfiguration(material);\r\n }\r\n return null;\r\n}\r\n"]}
@@ -2,9 +2,9 @@ import type { ShaderCustomProcessingFunction } from "../Engines/Processors/shade
2
2
  import type { Nullable } from "../types";
3
3
  import { Material } from "./material";
4
4
  import type { MaterialPluginPrepareEffect, MaterialPluginBindForSubMesh, MaterialPluginDisposed, MaterialPluginGetActiveTextures, MaterialPluginGetAnimatables, MaterialPluginGetDefineNames, MaterialPluginHasTexture, MaterialPluginIsReadyForSubMesh, MaterialPluginPrepareDefines, MaterialPluginPrepareUniformBuffer, MaterialPluginHardBindForSubMesh, MaterialPluginHasRenderTargetTextures, MaterialPluginFillRenderTargetTextures } from "./materialPluginEvent";
5
- declare type Scene = import("../scene").Scene;
6
- declare type Engine = import("../Engines/engine").Engine;
7
- declare type MaterialPluginBase = import("./materialPluginBase").MaterialPluginBase;
5
+ import type { Scene } from "../scene";
6
+ import type { Engine } from "../Engines/engine";
7
+ import type { MaterialPluginBase } from "./materialPluginBase";
8
8
  declare module "./material" {
9
9
  interface Material {
10
10
  /**
@@ -97,4 +97,3 @@ export declare function UnregisterMaterialPlugin(pluginName: string): boolean;
97
97
  * Clear the list of global material plugins
98
98
  */
99
99
  export declare function UnregisterAllMaterialPlugins(): void;
100
- export {};
@@ -1 +1 @@
1
- {"version":3,"file":"materialPluginManager.js","sourceRoot":"","sources":["../../../../lts/core/generated/Materials/materialPluginManager.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ShaderCustomProcessingFunction } from \"../Engines/Processors/shaderProcessingOptions\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Material } from \"./material\";\r\nimport type {\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 MaterialPluginHardBindForSubMesh,\r\n MaterialPluginHasRenderTargetTextures,\r\n MaterialPluginFillRenderTargetTextures,\r\n} from \"./materialPluginEvent\";\r\nimport { MaterialPluginEvent } from \"./materialPluginEvent\";\r\nimport type { Observer } from \"core/Misc/observable\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\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\nconst rxOption = new RegExp(\"^([gimus]+)!\");\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 /** Map a plugin class name to a #define name (used in the vertex/fragment shaders as a marker of the plugin usage) */\r\n private static _MaterialPluginClassToMainDefine: { [name: string]: string } = {};\r\n private static _MaterialPluginCounter: number = 0;\r\n\r\n protected _material: Material;\r\n protected _scene: Scene;\r\n protected _engine: Engine;\r\n /** @internal */\r\n public _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 static {\r\n EngineStore.OnEnginesDisposedObservable.add(() => {\r\n UnregisterAllMaterialPlugins();\r\n });\r\n }\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 /**\r\n * @internal\r\n */\r\n public _addPlugin(plugin: MaterialPluginBase): boolean {\r\n for (let i = 0; i < this._plugins.length; ++i) {\r\n if (this._plugins[i].name === plugin.name) {\r\n return false;\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 const pluginClassName = plugin.getClassName();\r\n if (!MaterialPluginManager._MaterialPluginClassToMainDefine[pluginClassName]) {\r\n MaterialPluginManager._MaterialPluginClassToMainDefine[pluginClassName] = \"MATERIALPLUGIN_\" + ++MaterialPluginManager._MaterialPluginCounter;\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: { [name: string]: { type: string; default: any } } = {};\r\n defineNamesFromPlugins[MaterialPluginManager._MaterialPluginClassToMainDefine[pluginClassName]] = {\r\n type: \"boolean\",\r\n default: true,\r\n };\r\n\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 this._defineNamesFromPlugins = defineNamesFromPlugins;\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\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._callbackPluginEventPrepareDefinesBeforeAttributes = this._handlePluginEventPrepareDefinesBeforeAttributes.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 _handlePluginEventPrepareDefinesBeforeAttributes(eventData: MaterialPluginPrepareDefines): void {\r\n for (const plugin of this._activePlugins) {\r\n plugin.prepareDefinesBeforeAttributes(eventData.defines, this._scene, eventData.mesh);\r\n }\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 plugin.getAttributes(eventData.attributes, this._scene, eventData.mesh);\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 if (uniform.size && uniform.type) {\r\n const arraySize = uniform.arraySize ?? 0;\r\n eventData.ubo.addUniform(uniform.name, uniform.size, arraySize);\r\n this._uboDeclaration += `${uniform.type} ${uniform.name}${arraySize > 0 ? `[${arraySize}]` : \"\"};\\r\\n`;\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 (let 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 pointName = pointName.substring(1);\r\n\r\n let regexFlags = \"g\";\r\n if (pointName.charAt(0) === \"!\") {\r\n // no flags\r\n regexFlags = \"\";\r\n pointName = pointName.substring(1);\r\n } else {\r\n // get the flag(s)\r\n const matchOption = rxOption.exec(pointName);\r\n if (matchOption && matchOption.length >= 2) {\r\n regexFlags = matchOption[1];\r\n pointName = pointName.substring(regexFlags.length + 1);\r\n }\r\n }\r\n\r\n if (regexFlags.indexOf(\"g\") < 0) {\r\n // we force the \"g\" flag so that the regexp object is stateful!\r\n regexFlags += \"g\";\r\n }\r\n\r\n const sourceCode = code;\r\n const rx = new RegExp(pointName, regexFlags);\r\n let match = rx.exec(sourceCode);\r\n while (match !== null) {\r\n let newCode = injectedCode;\r\n for (let i = 0; i < match.length; ++i) {\r\n newCode = newCode.replace(\"$\" + i, match[i]);\r\n }\r\n code = code.replace(match[0], newCode);\r\n match = rx.exec(sourceCode);\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\nconst plugins: Array<[string, PluginMaterialFactory]> = [];\r\nlet inited = false;\r\nlet observer: Nullable<Observer<Material>> = null;\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\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function RegisterMaterialPlugin(pluginName: string, factory: PluginMaterialFactory): void {\r\n if (!inited) {\r\n observer = Material.OnEventObservable.add((material: Material) => {\r\n for (const [, 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\n// eslint-disable-next-line @typescript-eslint/naming-convention\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 if (plugins.length === 0) {\r\n UnregisterAllMaterialPlugins();\r\n }\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\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function UnregisterAllMaterialPlugins(): void {\r\n plugins.length = 0;\r\n inited = false;\r\n Material.OnEventObservable.remove(observer);\r\n observer = null;\r\n}\r\n"]}
1
+ {"version":3,"file":"materialPluginManager.js","sourceRoot":"","sources":["../../../../lts/core/generated/Materials/materialPluginManager.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ShaderCustomProcessingFunction } from \"../Engines/Processors/shaderProcessingOptions\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Material } from \"./material\";\r\nimport type {\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 MaterialPluginHardBindForSubMesh,\r\n MaterialPluginHasRenderTargetTextures,\r\n MaterialPluginFillRenderTargetTextures,\r\n} from \"./materialPluginEvent\";\r\nimport { MaterialPluginEvent } from \"./materialPluginEvent\";\r\nimport type { Observer } from \"core/Misc/observable\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\n\r\nimport type { Scene } from \"../scene\";\r\nimport type { Engine } from \"../Engines/engine\";\r\nimport type { MaterialPluginBase } from \"./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\nconst rxOption = new RegExp(\"^([gimus]+)!\");\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 /** Map a plugin class name to a #define name (used in the vertex/fragment shaders as a marker of the plugin usage) */\r\n private static _MaterialPluginClassToMainDefine: { [name: string]: string } = {};\r\n private static _MaterialPluginCounter: number = 0;\r\n\r\n protected _material: Material;\r\n protected _scene: Scene;\r\n protected _engine: Engine;\r\n /** @internal */\r\n public _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 static {\r\n EngineStore.OnEnginesDisposedObservable.add(() => {\r\n UnregisterAllMaterialPlugins();\r\n });\r\n }\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 /**\r\n * @internal\r\n */\r\n public _addPlugin(plugin: MaterialPluginBase): boolean {\r\n for (let i = 0; i < this._plugins.length; ++i) {\r\n if (this._plugins[i].name === plugin.name) {\r\n return false;\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 const pluginClassName = plugin.getClassName();\r\n if (!MaterialPluginManager._MaterialPluginClassToMainDefine[pluginClassName]) {\r\n MaterialPluginManager._MaterialPluginClassToMainDefine[pluginClassName] = \"MATERIALPLUGIN_\" + ++MaterialPluginManager._MaterialPluginCounter;\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: { [name: string]: { type: string; default: any } } = {};\r\n defineNamesFromPlugins[MaterialPluginManager._MaterialPluginClassToMainDefine[pluginClassName]] = {\r\n type: \"boolean\",\r\n default: true,\r\n };\r\n\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 this._defineNamesFromPlugins = defineNamesFromPlugins;\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\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._callbackPluginEventPrepareDefinesBeforeAttributes = this._handlePluginEventPrepareDefinesBeforeAttributes.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 _handlePluginEventPrepareDefinesBeforeAttributes(eventData: MaterialPluginPrepareDefines): void {\r\n for (const plugin of this._activePlugins) {\r\n plugin.prepareDefinesBeforeAttributes(eventData.defines, this._scene, eventData.mesh);\r\n }\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 plugin.getAttributes(eventData.attributes, this._scene, eventData.mesh);\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 if (uniform.size && uniform.type) {\r\n const arraySize = uniform.arraySize ?? 0;\r\n eventData.ubo.addUniform(uniform.name, uniform.size, arraySize);\r\n this._uboDeclaration += `${uniform.type} ${uniform.name}${arraySize > 0 ? `[${arraySize}]` : \"\"};\\r\\n`;\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 (let 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 pointName = pointName.substring(1);\r\n\r\n let regexFlags = \"g\";\r\n if (pointName.charAt(0) === \"!\") {\r\n // no flags\r\n regexFlags = \"\";\r\n pointName = pointName.substring(1);\r\n } else {\r\n // get the flag(s)\r\n const matchOption = rxOption.exec(pointName);\r\n if (matchOption && matchOption.length >= 2) {\r\n regexFlags = matchOption[1];\r\n pointName = pointName.substring(regexFlags.length + 1);\r\n }\r\n }\r\n\r\n if (regexFlags.indexOf(\"g\") < 0) {\r\n // we force the \"g\" flag so that the regexp object is stateful!\r\n regexFlags += \"g\";\r\n }\r\n\r\n const sourceCode = code;\r\n const rx = new RegExp(pointName, regexFlags);\r\n let match = rx.exec(sourceCode);\r\n while (match !== null) {\r\n let newCode = injectedCode;\r\n for (let i = 0; i < match.length; ++i) {\r\n newCode = newCode.replace(\"$\" + i, match[i]);\r\n }\r\n code = code.replace(match[0], newCode);\r\n match = rx.exec(sourceCode);\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\nconst plugins: Array<[string, PluginMaterialFactory]> = [];\r\nlet inited = false;\r\nlet observer: Nullable<Observer<Material>> = null;\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\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function RegisterMaterialPlugin(pluginName: string, factory: PluginMaterialFactory): void {\r\n if (!inited) {\r\n observer = Material.OnEventObservable.add((material: Material) => {\r\n for (const [, 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\n// eslint-disable-next-line @typescript-eslint/naming-convention\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 if (plugins.length === 0) {\r\n UnregisterAllMaterialPlugins();\r\n }\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\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function UnregisterAllMaterialPlugins(): void {\r\n plugins.length = 0;\r\n inited = false;\r\n Material.OnEventObservable.remove(observer);\r\n observer = null;\r\n}\r\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { IStencilState } from "../States/IStencilState";
2
- declare type Scene = import("../scene").Scene;
2
+ import type { Scene } from "../scene";
3
3
  /**
4
4
  * Class that holds the different stencil states of a material
5
5
  * Usage example: https://playground.babylonjs.com/#CW5PRI#10
@@ -84,4 +84,3 @@ export declare class MaterialStencilState implements IStencilState {
84
84
  */
85
85
  parse(source: any, scene: Scene, rootUrl: string): void;
86
86
  }
87
- export {};
@@ -1 +1 @@
1
- {"version":3,"file":"materialStencilState.js","sourceRoot":"","sources":["../../../../lts/core/generated/Materials/materialStencilState.ts"],"names":[],"mappings":"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","sourcesContent":["import { Constants } from \"../Engines/constants\";\r\nimport { SerializationHelper, serialize } from \"../Misc/decorators\";\r\nimport type { IStencilState } from \"../States/IStencilState\";\r\n\r\ndeclare type Scene = import(\"../scene\").Scene;\r\n\r\n/**\r\n * Class that holds the different stencil states of a material\r\n * Usage example: https://playground.babylonjs.com/#CW5PRI#10\r\n */\r\nexport class MaterialStencilState implements IStencilState {\r\n /**\r\n * Creates a material stencil state instance\r\n */\r\n public constructor() {\r\n this.reset();\r\n }\r\n\r\n /**\r\n * Resets all the stencil states to default values\r\n */\r\n public reset() {\r\n this.enabled = false;\r\n this.mask = 0xff;\r\n\r\n this.func = Constants.ALWAYS;\r\n this.funcRef = 1;\r\n this.funcMask = 0xff;\r\n\r\n this.opStencilFail = Constants.KEEP;\r\n this.opDepthFail = Constants.KEEP;\r\n this.opStencilDepthPass = Constants.REPLACE;\r\n }\r\n\r\n private _func: number;\r\n /**\r\n * Gets or sets the stencil function\r\n */\r\n @serialize()\r\n public get func(): number {\r\n return this._func;\r\n }\r\n\r\n public set func(value: number) {\r\n this._func = value;\r\n }\r\n\r\n private _funcRef: number;\r\n /**\r\n * Gets or sets the stencil function reference\r\n */\r\n @serialize()\r\n public get funcRef(): number {\r\n return this._funcRef;\r\n }\r\n\r\n public set funcRef(value: number) {\r\n this._funcRef = value;\r\n }\r\n\r\n private _funcMask: number;\r\n /**\r\n * Gets or sets the stencil function mask\r\n */\r\n @serialize()\r\n public get funcMask(): number {\r\n return this._funcMask;\r\n }\r\n\r\n public set funcMask(value: number) {\r\n this._funcMask = value;\r\n }\r\n\r\n private _opStencilFail: number;\r\n /**\r\n * Gets or sets the operation when the stencil test fails\r\n */\r\n @serialize()\r\n public get opStencilFail(): number {\r\n return this._opStencilFail;\r\n }\r\n\r\n public set opStencilFail(value: number) {\r\n this._opStencilFail = value;\r\n }\r\n\r\n private _opDepthFail: number;\r\n /**\r\n * Gets or sets the operation when the depth test fails\r\n */\r\n @serialize()\r\n public get opDepthFail(): number {\r\n return this._opDepthFail;\r\n }\r\n\r\n public set opDepthFail(value: number) {\r\n this._opDepthFail = value;\r\n }\r\n\r\n private _opStencilDepthPass: number;\r\n /**\r\n * Gets or sets the operation when the stencil+depth test succeeds\r\n */\r\n @serialize()\r\n public get opStencilDepthPass(): number {\r\n return this._opStencilDepthPass;\r\n }\r\n\r\n public set opStencilDepthPass(value: number) {\r\n this._opStencilDepthPass = value;\r\n }\r\n\r\n private _mask: number;\r\n /**\r\n * Gets or sets the stencil mask\r\n */\r\n @serialize()\r\n public get mask(): number {\r\n return this._mask;\r\n }\r\n\r\n public set mask(value: number) {\r\n this._mask = value;\r\n }\r\n\r\n private _enabled: boolean;\r\n /**\r\n * Enables or disables the stencil test\r\n */\r\n @serialize()\r\n public get enabled(): boolean {\r\n return this._enabled;\r\n }\r\n\r\n public set enabled(value: boolean) {\r\n this._enabled = value;\r\n }\r\n\r\n /**\r\n * Get the current class name, useful for serialization or dynamic coding.\r\n * @returns \"MaterialStencilState\"\r\n */\r\n public getClassName(): string {\r\n return \"MaterialStencilState\";\r\n }\r\n\r\n /**\r\n * Makes a duplicate of the current configuration into another one.\r\n * @param stencilState defines stencil state where to copy the info\r\n */\r\n public copyTo(stencilState: MaterialStencilState): void {\r\n SerializationHelper.Clone(() => stencilState, this);\r\n }\r\n\r\n /**\r\n * Serializes this stencil 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 stencil state 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":"materialStencilState.js","sourceRoot":"","sources":["../../../../lts/core/generated/Materials/materialStencilState.ts"],"names":[],"mappings":"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","sourcesContent":["import { Constants } from \"../Engines/constants\";\r\nimport { SerializationHelper, serialize } from \"../Misc/decorators\";\r\nimport type { IStencilState } from \"../States/IStencilState\";\r\n\r\nimport type { Scene } from \"../scene\";\r\n\r\n/**\r\n * Class that holds the different stencil states of a material\r\n * Usage example: https://playground.babylonjs.com/#CW5PRI#10\r\n */\r\nexport class MaterialStencilState implements IStencilState {\r\n /**\r\n * Creates a material stencil state instance\r\n */\r\n public constructor() {\r\n this.reset();\r\n }\r\n\r\n /**\r\n * Resets all the stencil states to default values\r\n */\r\n public reset() {\r\n this.enabled = false;\r\n this.mask = 0xff;\r\n\r\n this.func = Constants.ALWAYS;\r\n this.funcRef = 1;\r\n this.funcMask = 0xff;\r\n\r\n this.opStencilFail = Constants.KEEP;\r\n this.opDepthFail = Constants.KEEP;\r\n this.opStencilDepthPass = Constants.REPLACE;\r\n }\r\n\r\n private _func: number;\r\n /**\r\n * Gets or sets the stencil function\r\n */\r\n @serialize()\r\n public get func(): number {\r\n return this._func;\r\n }\r\n\r\n public set func(value: number) {\r\n this._func = value;\r\n }\r\n\r\n private _funcRef: number;\r\n /**\r\n * Gets or sets the stencil function reference\r\n */\r\n @serialize()\r\n public get funcRef(): number {\r\n return this._funcRef;\r\n }\r\n\r\n public set funcRef(value: number) {\r\n this._funcRef = value;\r\n }\r\n\r\n private _funcMask: number;\r\n /**\r\n * Gets or sets the stencil function mask\r\n */\r\n @serialize()\r\n public get funcMask(): number {\r\n return this._funcMask;\r\n }\r\n\r\n public set funcMask(value: number) {\r\n this._funcMask = value;\r\n }\r\n\r\n private _opStencilFail: number;\r\n /**\r\n * Gets or sets the operation when the stencil test fails\r\n */\r\n @serialize()\r\n public get opStencilFail(): number {\r\n return this._opStencilFail;\r\n }\r\n\r\n public set opStencilFail(value: number) {\r\n this._opStencilFail = value;\r\n }\r\n\r\n private _opDepthFail: number;\r\n /**\r\n * Gets or sets the operation when the depth test fails\r\n */\r\n @serialize()\r\n public get opDepthFail(): number {\r\n return this._opDepthFail;\r\n }\r\n\r\n public set opDepthFail(value: number) {\r\n this._opDepthFail = value;\r\n }\r\n\r\n private _opStencilDepthPass: number;\r\n /**\r\n * Gets or sets the operation when the stencil+depth test succeeds\r\n */\r\n @serialize()\r\n public get opStencilDepthPass(): number {\r\n return this._opStencilDepthPass;\r\n }\r\n\r\n public set opStencilDepthPass(value: number) {\r\n this._opStencilDepthPass = value;\r\n }\r\n\r\n private _mask: number;\r\n /**\r\n * Gets or sets the stencil mask\r\n */\r\n @serialize()\r\n public get mask(): number {\r\n return this._mask;\r\n }\r\n\r\n public set mask(value: number) {\r\n this._mask = value;\r\n }\r\n\r\n private _enabled: boolean;\r\n /**\r\n * Enables or disables the stencil test\r\n */\r\n @serialize()\r\n public get enabled(): boolean {\r\n return this._enabled;\r\n }\r\n\r\n public set enabled(value: boolean) {\r\n this._enabled = value;\r\n }\r\n\r\n /**\r\n * Get the current class name, useful for serialization or dynamic coding.\r\n * @returns \"MaterialStencilState\"\r\n */\r\n public getClassName(): string {\r\n return \"MaterialStencilState\";\r\n }\r\n\r\n /**\r\n * Makes a duplicate of the current configuration into another one.\r\n * @param stencilState defines stencil state where to copy the info\r\n */\r\n public copyTo(stencilState: MaterialStencilState): void {\r\n SerializationHelper.Clone(() => stencilState, this);\r\n }\r\n\r\n /**\r\n * Serializes this stencil 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 stencil state 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"]}
@@ -12,7 +12,7 @@ import type { UniformBuffer } from "./uniformBuffer";
12
12
  import type { TextureSampler } from "./Textures/textureSampler";
13
13
  import type { StorageBuffer } from "../Buffers/storageBuffer";
14
14
  import { PushMaterial } from "./pushMaterial";
15
- declare type ExternalTexture = import("./Textures/externalTexture").ExternalTexture;
15
+ import type { ExternalTexture } from "./Textures/externalTexture";
16
16
  /**
17
17
  * Defines the options associated with the creation of a shader material.
18
18
  */
@@ -459,4 +459,3 @@ export declare class ShaderMaterial extends PushMaterial {
459
459
  */
460
460
  static CreateFromSnippetAsync: typeof ShaderMaterial.ParseFromSnippetAsync;
461
461
  }
462
- export {};