@onerjs/core 8.26.1 → 8.26.3

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 (269) hide show
  1. package/Engines/abstractEngine.js +2 -2
  2. package/Engines/abstractEngine.js.map +1 -1
  3. package/FrameGraph/Tasks/Rendering/objectRendererTask.js +6 -0
  4. package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
  5. package/FrameGraph/frameGraphContext.d.ts +2 -1
  6. package/FrameGraph/frameGraphContext.js +4 -1
  7. package/FrameGraph/frameGraphContext.js.map +1 -1
  8. package/Lights/Clustered/clusteredLightContainer.d.ts +1 -1
  9. package/Lights/Clustered/clusteredLightContainer.js +4 -5
  10. package/Lights/Clustered/clusteredLightContainer.js.map +1 -1
  11. package/Lights/pointLight.js +4 -4
  12. package/Lights/pointLight.js.map +1 -1
  13. package/Lights/rectAreaLight.js +4 -4
  14. package/Lights/rectAreaLight.js.map +1 -1
  15. package/Lights/spotLight.js +2 -2
  16. package/Lights/spotLight.js.map +1 -1
  17. package/Materials/Background/backgroundMaterial.d.ts +19 -91
  18. package/Materials/Background/backgroundMaterial.js +17 -245
  19. package/Materials/Background/backgroundMaterial.js.map +1 -1
  20. package/Materials/Node/Blocks/Dual/lightBlock.js +15 -4
  21. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  22. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +28 -5
  23. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  24. package/Materials/Node/nodeMaterial.d.ts +57 -69
  25. package/Materials/Node/nodeMaterial.js +9 -86
  26. package/Materials/Node/nodeMaterial.js.map +1 -1
  27. package/Materials/Node/nodeMaterialBuildState.d.ts +3 -1
  28. package/Materials/Node/nodeMaterialBuildState.js +35 -15
  29. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  30. package/Materials/PBR/index.d.ts +5 -0
  31. package/Materials/PBR/index.js +5 -0
  32. package/Materials/PBR/index.js.map +1 -1
  33. package/Materials/PBR/openPbrMaterial.d.ts +998 -0
  34. package/Materials/PBR/openPbrMaterial.js +2069 -0
  35. package/Materials/PBR/openPbrMaterial.js.map +1 -0
  36. package/Materials/PBR/pbrBaseMaterial.d.ts +57 -43
  37. package/Materials/PBR/pbrBaseMaterial.js +21 -304
  38. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  39. package/Materials/PBR/pbrMaterial.d.ts +0 -78
  40. package/Materials/PBR/pbrMaterial.js +0 -110
  41. package/Materials/PBR/pbrMaterial.js.map +1 -1
  42. package/Materials/floatingOriginMatrixOverrides.d.ts +3 -0
  43. package/Materials/floatingOriginMatrixOverrides.js +91 -0
  44. package/Materials/floatingOriginMatrixOverrides.js.map +1 -0
  45. package/Materials/imageProcessing.d.ts +65 -0
  46. package/Materials/imageProcessing.js +162 -0
  47. package/Materials/imageProcessing.js.map +1 -0
  48. package/Materials/imageProcessingConfiguration.defines.d.ts +25 -0
  49. package/Materials/imageProcessingConfiguration.defines.js +27 -0
  50. package/Materials/imageProcessingConfiguration.defines.js.map +1 -1
  51. package/Materials/index.d.ts +2 -0
  52. package/Materials/index.js +2 -0
  53. package/Materials/index.js.map +1 -1
  54. package/Materials/material.d.ts +14 -0
  55. package/Materials/material.js +14 -0
  56. package/Materials/material.js.map +1 -1
  57. package/Materials/materialHelper.functions.d.ts +53 -0
  58. package/Materials/materialHelper.functions.js +297 -0
  59. package/Materials/materialHelper.functions.js.map +1 -1
  60. package/Materials/standardMaterial.d.ts +57 -121
  61. package/Materials/standardMaterial.js +21 -250
  62. package/Materials/standardMaterial.js.map +1 -1
  63. package/Materials/uv.defines.d.ts +22 -0
  64. package/Materials/uv.defines.js +24 -0
  65. package/Materials/uv.defines.js.map +1 -0
  66. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +1 -0
  67. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  68. package/Meshes/transformNode.d.ts +2 -0
  69. package/Meshes/transformNode.js +7 -4
  70. package/Meshes/transformNode.js.map +1 -1
  71. package/Misc/decorators.d.ts +7 -0
  72. package/Misc/decorators.js +34 -0
  73. package/Misc/decorators.js.map +1 -1
  74. package/Particles/Node/Blocks/Emitters/createParticleBlock.js +10 -1
  75. package/Particles/Node/Blocks/Emitters/createParticleBlock.js.map +1 -1
  76. package/Particles/Node/Blocks/index.d.ts +2 -0
  77. package/Particles/Node/Blocks/index.js +2 -0
  78. package/Particles/Node/Blocks/index.js.map +1 -1
  79. package/Particles/Node/Blocks/particleInputBlock.js +4 -1
  80. package/Particles/Node/Blocks/particleInputBlock.js.map +1 -1
  81. package/Particles/Node/Blocks/particleLocalVariableBlock.d.ts +38 -0
  82. package/Particles/Node/Blocks/particleLocalVariableBlock.js +108 -0
  83. package/Particles/Node/Blocks/particleLocalVariableBlock.js.map +1 -0
  84. package/Particles/Node/Blocks/particleVectorLengthBlock.d.ts +26 -0
  85. package/Particles/Node/Blocks/particleVectorLengthBlock.js +50 -0
  86. package/Particles/Node/Blocks/particleVectorLengthBlock.js.map +1 -0
  87. package/Rendering/IBLShadows/iblShadowsPluginMaterial.d.ts +2 -1
  88. package/Rendering/IBLShadows/iblShadowsPluginMaterial.js +45 -0
  89. package/Rendering/IBLShadows/iblShadowsPluginMaterial.js.map +1 -1
  90. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +2 -1
  91. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
  92. package/Rendering/geometryBufferRenderer.js +6 -4
  93. package/Rendering/geometryBufferRenderer.js.map +1 -1
  94. package/Rendering/iblCdfGenerator.js +28 -20
  95. package/Rendering/iblCdfGenerator.js.map +1 -1
  96. package/Rendering/reflectiveShadowMap.d.ts +3 -3
  97. package/Shaders/ShadersInclude/backgroundUboDeclaration.js +1 -1
  98. package/Shaders/ShadersInclude/backgroundUboDeclaration.js.map +1 -1
  99. package/Shaders/ShadersInclude/clusteredLightingFunctions.js +3 -1
  100. package/Shaders/ShadersInclude/clusteredLightingFunctions.js.map +1 -1
  101. package/Shaders/ShadersInclude/defaultUboDeclaration.js +1 -1
  102. package/Shaders/ShadersInclude/defaultUboDeclaration.js.map +1 -1
  103. package/Shaders/ShadersInclude/hdrFilteringFunctions.js +34 -0
  104. package/Shaders/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
  105. package/Shaders/ShadersInclude/helperFunctions.js +1 -1
  106. package/Shaders/ShadersInclude/helperFunctions.js.map +1 -1
  107. package/Shaders/ShadersInclude/importanceSampling.js +4 -0
  108. package/Shaders/ShadersInclude/importanceSampling.js.map +1 -1
  109. package/Shaders/ShadersInclude/lightsFragmentFunctions.js +1 -0
  110. package/Shaders/ShadersInclude/lightsFragmentFunctions.js.map +1 -1
  111. package/Shaders/ShadersInclude/openpbrBaseLayerData.d.ts +5 -0
  112. package/Shaders/ShadersInclude/openpbrBaseLayerData.js +127 -0
  113. package/Shaders/ShadersInclude/openpbrBaseLayerData.js.map +1 -0
  114. package/Shaders/ShadersInclude/openpbrBlockAmbientOcclusion.d.ts +5 -0
  115. package/Shaders/ShadersInclude/openpbrBlockAmbientOcclusion.js +35 -0
  116. package/Shaders/ShadersInclude/openpbrBlockAmbientOcclusion.js.map +1 -0
  117. package/Shaders/ShadersInclude/openpbrBlockNormalFinal.d.ts +5 -0
  118. package/Shaders/ShadersInclude/openpbrBlockNormalFinal.js +25 -0
  119. package/Shaders/ShadersInclude/openpbrBlockNormalFinal.js.map +1 -0
  120. package/Shaders/ShadersInclude/openpbrCoatLayerData.d.ts +5 -0
  121. package/Shaders/ShadersInclude/openpbrCoatLayerData.js +59 -0
  122. package/Shaders/ShadersInclude/openpbrCoatLayerData.js.map +1 -0
  123. package/Shaders/ShadersInclude/openpbrConductorReflectance.d.ts +5 -0
  124. package/Shaders/ShadersInclude/openpbrConductorReflectance.js +19 -0
  125. package/Shaders/ShadersInclude/openpbrConductorReflectance.js.map +1 -0
  126. package/Shaders/ShadersInclude/openpbrDielectricReflectance.d.ts +5 -0
  127. package/Shaders/ShadersInclude/openpbrDielectricReflectance.js +30 -0
  128. package/Shaders/ShadersInclude/openpbrDielectricReflectance.js.map +1 -0
  129. package/Shaders/ShadersInclude/openpbrDirectLighting.d.ts +5 -0
  130. package/Shaders/ShadersInclude/openpbrDirectLighting.js +69 -0
  131. package/Shaders/ShadersInclude/openpbrDirectLighting.js.map +1 -0
  132. package/Shaders/ShadersInclude/openpbrDirectLightingInit.d.ts +5 -0
  133. package/Shaders/ShadersInclude/openpbrDirectLightingInit.js +80 -0
  134. package/Shaders/ShadersInclude/openpbrDirectLightingInit.js.map +1 -0
  135. package/Shaders/ShadersInclude/openpbrDirectLightingShadow.d.ts +5 -0
  136. package/Shaders/ShadersInclude/openpbrDirectLightingShadow.js +129 -0
  137. package/Shaders/ShadersInclude/openpbrDirectLightingShadow.js.map +1 -0
  138. package/Shaders/ShadersInclude/openpbrEnvironmentLighting.d.ts +5 -0
  139. package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js +106 -0
  140. package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -0
  141. package/Shaders/ShadersInclude/openpbrFragmentDeclaration.d.ts +6 -0
  142. package/Shaders/ShadersInclude/openpbrFragmentDeclaration.js +115 -0
  143. package/Shaders/ShadersInclude/openpbrFragmentDeclaration.js.map +1 -0
  144. package/Shaders/ShadersInclude/openpbrFragmentSamplersDeclaration.d.ts +6 -0
  145. package/Shaders/ShadersInclude/openpbrFragmentSamplersDeclaration.js +72 -0
  146. package/Shaders/ShadersInclude/openpbrFragmentSamplersDeclaration.js.map +1 -0
  147. package/Shaders/ShadersInclude/openpbrGeometryInfo.d.ts +5 -0
  148. package/Shaders/ShadersInclude/openpbrGeometryInfo.js +46 -0
  149. package/Shaders/ShadersInclude/openpbrGeometryInfo.js.map +1 -0
  150. package/Shaders/ShadersInclude/openpbrIblFunctions.d.ts +5 -0
  151. package/Shaders/ShadersInclude/openpbrIblFunctions.js +221 -0
  152. package/Shaders/ShadersInclude/openpbrIblFunctions.js.map +1 -0
  153. package/Shaders/ShadersInclude/openpbrNormalMapFragment.d.ts +5 -0
  154. package/Shaders/ShadersInclude/openpbrNormalMapFragment.js +64 -0
  155. package/Shaders/ShadersInclude/openpbrNormalMapFragment.js.map +1 -0
  156. package/Shaders/ShadersInclude/openpbrNormalMapFragmentFunctions.d.ts +6 -0
  157. package/Shaders/ShadersInclude/openpbrNormalMapFragmentFunctions.js +45 -0
  158. package/Shaders/ShadersInclude/openpbrNormalMapFragmentFunctions.js.map +1 -0
  159. package/Shaders/ShadersInclude/openpbrNormalMapFragmentMainFunctions.d.ts +5 -0
  160. package/Shaders/ShadersInclude/openpbrNormalMapFragmentMainFunctions.js +72 -0
  161. package/Shaders/ShadersInclude/openpbrNormalMapFragmentMainFunctions.js.map +1 -0
  162. package/Shaders/ShadersInclude/openpbrNormalMapVertex.d.ts +5 -0
  163. package/Shaders/ShadersInclude/openpbrNormalMapVertex.js +16 -0
  164. package/Shaders/ShadersInclude/openpbrNormalMapVertex.js.map +1 -0
  165. package/Shaders/ShadersInclude/openpbrNormalMapVertexDeclaration.d.ts +5 -0
  166. package/Shaders/ShadersInclude/openpbrNormalMapVertexDeclaration.js +16 -0
  167. package/Shaders/ShadersInclude/openpbrNormalMapVertexDeclaration.js.map +1 -0
  168. package/Shaders/ShadersInclude/openpbrUboDeclaration.d.ts +7 -0
  169. package/Shaders/ShadersInclude/openpbrUboDeclaration.js +18 -0
  170. package/Shaders/ShadersInclude/openpbrUboDeclaration.js.map +1 -0
  171. package/Shaders/ShadersInclude/openpbrVertexDeclaration.d.ts +6 -0
  172. package/Shaders/ShadersInclude/openpbrVertexDeclaration.js +103 -0
  173. package/Shaders/ShadersInclude/openpbrVertexDeclaration.js.map +1 -0
  174. package/Shaders/ShadersInclude/pbrBRDFFunctions.js +1 -1
  175. package/Shaders/ShadersInclude/pbrBRDFFunctions.js.map +1 -1
  176. package/Shaders/ShadersInclude/pbrClusteredLightingFunctions.js +1 -0
  177. package/Shaders/ShadersInclude/pbrClusteredLightingFunctions.js.map +1 -1
  178. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js +3 -1
  179. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
  180. package/Shaders/ShadersInclude/pbrHelperFunctions.js +2 -0
  181. package/Shaders/ShadersInclude/pbrHelperFunctions.js.map +1 -1
  182. package/Shaders/ShadersInclude/pbrUboDeclaration.js +1 -1
  183. package/Shaders/ShadersInclude/pbrUboDeclaration.js.map +1 -1
  184. package/Shaders/openpbr.fragment.d.ts +54 -0
  185. package/Shaders/openpbr.fragment.js +206 -0
  186. package/Shaders/openpbr.fragment.js.map +1 -0
  187. package/Shaders/openpbr.vertex.d.ts +39 -0
  188. package/Shaders/openpbr.vertex.js +238 -0
  189. package/Shaders/openpbr.vertex.js.map +1 -0
  190. package/ShadersWGSL/ShadersInclude/backgroundUboDeclaration.js +1 -1
  191. package/ShadersWGSL/ShadersInclude/backgroundUboDeclaration.js.map +1 -1
  192. package/ShadersWGSL/ShadersInclude/defaultUboDeclaration.js +1 -1
  193. package/ShadersWGSL/ShadersInclude/defaultUboDeclaration.js.map +1 -1
  194. package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js +28 -0
  195. package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
  196. package/ShadersWGSL/ShadersInclude/importanceSampling.js +4 -0
  197. package/ShadersWGSL/ShadersInclude/importanceSampling.js.map +1 -1
  198. package/ShadersWGSL/ShadersInclude/openpbrBaseLayerData.d.ts +5 -0
  199. package/ShadersWGSL/ShadersInclude/openpbrBaseLayerData.js +126 -0
  200. package/ShadersWGSL/ShadersInclude/openpbrBaseLayerData.js.map +1 -0
  201. package/ShadersWGSL/ShadersInclude/openpbrBlockAmbientOcclusion.d.ts +5 -0
  202. package/ShadersWGSL/ShadersInclude/openpbrBlockAmbientOcclusion.js +36 -0
  203. package/ShadersWGSL/ShadersInclude/openpbrBlockAmbientOcclusion.js.map +1 -0
  204. package/ShadersWGSL/ShadersInclude/openpbrBlockNormalFinal.d.ts +5 -0
  205. package/ShadersWGSL/ShadersInclude/openpbrBlockNormalFinal.js +25 -0
  206. package/ShadersWGSL/ShadersInclude/openpbrBlockNormalFinal.js.map +1 -0
  207. package/ShadersWGSL/ShadersInclude/openpbrCoatLayerData.d.ts +5 -0
  208. package/ShadersWGSL/ShadersInclude/openpbrCoatLayerData.js +59 -0
  209. package/ShadersWGSL/ShadersInclude/openpbrCoatLayerData.js.map +1 -0
  210. package/ShadersWGSL/ShadersInclude/openpbrConductorReflectance.d.ts +5 -0
  211. package/ShadersWGSL/ShadersInclude/openpbrConductorReflectance.js +19 -0
  212. package/ShadersWGSL/ShadersInclude/openpbrConductorReflectance.js.map +1 -0
  213. package/ShadersWGSL/ShadersInclude/openpbrDielectricReflectance.d.ts +5 -0
  214. package/ShadersWGSL/ShadersInclude/openpbrDielectricReflectance.js +33 -0
  215. package/ShadersWGSL/ShadersInclude/openpbrDielectricReflectance.js.map +1 -0
  216. package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.d.ts +5 -0
  217. package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js +69 -0
  218. package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js.map +1 -0
  219. package/ShadersWGSL/ShadersInclude/openpbrDirectLightingInit.d.ts +5 -0
  220. package/ShadersWGSL/ShadersInclude/openpbrDirectLightingInit.js +80 -0
  221. package/ShadersWGSL/ShadersInclude/openpbrDirectLightingInit.js.map +1 -0
  222. package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.d.ts +5 -0
  223. package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js +112 -0
  224. package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -0
  225. package/ShadersWGSL/ShadersInclude/openpbrFragmentSamplersDeclaration.d.ts +6 -0
  226. package/ShadersWGSL/ShadersInclude/openpbrFragmentSamplersDeclaration.js +68 -0
  227. package/ShadersWGSL/ShadersInclude/openpbrFragmentSamplersDeclaration.js.map +1 -0
  228. package/ShadersWGSL/ShadersInclude/openpbrGeometryInfo.d.ts +5 -0
  229. package/ShadersWGSL/ShadersInclude/openpbrGeometryInfo.js +54 -0
  230. package/ShadersWGSL/ShadersInclude/openpbrGeometryInfo.js.map +1 -0
  231. package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.d.ts +5 -0
  232. package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js +218 -0
  233. package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js.map +1 -0
  234. package/ShadersWGSL/ShadersInclude/openpbrNormalMapFragment.d.ts +5 -0
  235. package/ShadersWGSL/ShadersInclude/openpbrNormalMapFragment.js +64 -0
  236. package/ShadersWGSL/ShadersInclude/openpbrNormalMapFragment.js.map +1 -0
  237. package/ShadersWGSL/ShadersInclude/openpbrNormalMapFragmentFunctions.d.ts +6 -0
  238. package/ShadersWGSL/ShadersInclude/openpbrNormalMapFragmentFunctions.js +45 -0
  239. package/ShadersWGSL/ShadersInclude/openpbrNormalMapFragmentFunctions.js.map +1 -0
  240. package/ShadersWGSL/ShadersInclude/openpbrNormalMapFragmentMainFunctions.d.ts +5 -0
  241. package/ShadersWGSL/ShadersInclude/openpbrNormalMapFragmentMainFunctions.js +51 -0
  242. package/ShadersWGSL/ShadersInclude/openpbrNormalMapFragmentMainFunctions.js.map +1 -0
  243. package/ShadersWGSL/ShadersInclude/openpbrNormalMapVertex.d.ts +5 -0
  244. package/ShadersWGSL/ShadersInclude/openpbrNormalMapVertex.js +16 -0
  245. package/ShadersWGSL/ShadersInclude/openpbrNormalMapVertex.js.map +1 -0
  246. package/ShadersWGSL/ShadersInclude/openpbrNormalMapVertexDeclaration.d.ts +5 -0
  247. package/ShadersWGSL/ShadersInclude/openpbrNormalMapVertexDeclaration.js +16 -0
  248. package/ShadersWGSL/ShadersInclude/openpbrNormalMapVertexDeclaration.js.map +1 -0
  249. package/ShadersWGSL/ShadersInclude/openpbrUboDeclaration.d.ts +7 -0
  250. package/ShadersWGSL/ShadersInclude/openpbrUboDeclaration.js +17 -0
  251. package/ShadersWGSL/ShadersInclude/openpbrUboDeclaration.js.map +1 -0
  252. package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.js +1 -1
  253. package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.js.map +1 -1
  254. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js +3 -1
  255. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
  256. package/ShadersWGSL/ShadersInclude/pbrHelperFunctions.js +2 -0
  257. package/ShadersWGSL/ShadersInclude/pbrHelperFunctions.js.map +1 -1
  258. package/ShadersWGSL/ShadersInclude/pbrUboDeclaration.js +1 -1
  259. package/ShadersWGSL/ShadersInclude/pbrUboDeclaration.js.map +1 -1
  260. package/ShadersWGSL/openpbr.fragment.d.ts +52 -0
  261. package/ShadersWGSL/openpbr.fragment.js +193 -0
  262. package/ShadersWGSL/openpbr.fragment.js.map +1 -0
  263. package/ShadersWGSL/openpbr.vertex.d.ts +37 -0
  264. package/ShadersWGSL/openpbr.vertex.js +227 -0
  265. package/ShadersWGSL/openpbr.vertex.js.map +1 -0
  266. package/package.json +1 -1
  267. package/scene.d.ts +21 -0
  268. package/scene.js +29 -3
  269. package/scene.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"material.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/material.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAItC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAKhD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAG5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AA2B9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAGvE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AA6BpD;;GAEG;AACH,MAAM,OAAO,QAAQ;IA6JjB;;;OAGG;IACH,IAAW,gBAAgB;QACvB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAClC,CAAC;IAED,IAAW,gBAAgB,CAAC,KAAc;QACtC,IAAI,IAAI,CAAC,iBAAiB,KAAK,KAAK,EAAE,CAAC;YACnC,OAAO;QACX,CAAC;QAED,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC7C,CAAC;IAED,gBAAgB;IAChB,IAAW,iBAAiB;QACxB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,gBAAgB;IAChB,IAAW,gBAAgB,CAAC,KAAc;QACtC,kBAAkB;IACtB,CAAC;IAED;;OAEG;IACH,IAAW,cAAc;QACrB,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IAuDD;;OAEG;IACH,IAAW,cAAc;QACrB,mDAAmD;QACnD,iEAAiE;QACjE,OAAO,KAAK,CAAC;IACjB,CAAC;IAcD;;OAEG;IACH,IAAW,KAAK,CAAC,KAAa;QAC1B,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YACxB,OAAO;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QAEpB,kEAAkE;QAClE,IAAI,QAAQ,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC;QACzE,CAAC;IACL,CAAC;IAED;;OAEG;IACH,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAQD;;OAEG;IACH,IAAW,eAAe,CAAC,KAAc;QACrC,IAAI,IAAI,CAAC,gBAAgB,KAAK,KAAK,EAAE,CAAC;YAClC,OAAO;QACX,CAAC;QACD,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,IAAW,eAAe;QACtB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;IAQD;;OAEG;IACH,IAAW,aAAa,CAAC,KAAc;QACnC,IAAI,IAAI,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;YAChC,OAAO;QACX,CAAC;QACD,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAID;;;OAGG;IACH,IAAW,mBAAmB;QAC1B,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACrC,CAAC;IAED,IAAW,mBAAmB,CAAC,KAAc;QACzC,IAAI,IAAI,CAAC,oBAAoB,KAAK,KAAK,EAAE,CAAC;YACtC,OAAO;QACX,CAAC;QAED,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;QAElC,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,IAAI,CAAC,SAAS,EAAE,CAAC;QACrB,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACI,qBAAqB,CAAC,QAAkC;QAC3D,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;gBAAS,CAAC;YACP,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACrC,CAAC;IACL,CAAC;IAuBD;;OAEG;IACH,IAAW,uBAAuB;QAC9B,IAAI,CAAC,UAAU,CAAC,uBAAuB,GAAG,KAAK,CAAC;QAChD,IAAI,CAAC,2CAA2C,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC;IACnD,CAAC;IA4BD;;OAEG;IACH,IAAW,SAAS,CAAC,QAAoB;QACrC,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACrE,CAAC;IAID;;OAEG;IACH,IAAW,gBAAgB;QACvB,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC1B,IAAI,CAAC,iBAAiB,GAAG,IAAI,UAAU,EAAgB,CAAC;QAC5D,CAAC;QAED,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAClC,CAAC;IAOD;;OAEG;IACH,IAAW,MAAM,CAAC,QAAsC;QACpD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACvD,CAAC;QACD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACH,IAAW,kBAAkB;QACzB,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC5B,IAAI,CAAC,mBAAmB,GAAG,IAAI,UAAU,EAAY,CAAC;QAC1D,CAAC;QAED,OAAO,IAAI,CAAC,mBAAmB,CAAC;IACpC,CAAC;IAID;;OAEG;IACH,IAAW,yBAAyB;QAChC,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC;YACnC,IAAI,CAAC,0BAA0B,GAAG,IAAI,UAAU,EAAkD,CAAC;QACvG,CAAC;QAED,OAAO,IAAI,CAAC,0BAA0B,CAAC;IAC3C,CAAC;IAQD;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,IAAW,SAAS,CAAC,KAAa;QAC9B,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;YAC/B,OAAO;QACX,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACI,YAAY,CAAC,KAAa,EAAE,cAAsB,CAAC;QACtD,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,KAAK,EAAE,CAAC;YACzC,OAAO;QACX,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC;QACrC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAChD,CAAC;IAQD;;OAEG;IACH,IAAW,gBAAgB,CAAC,KAAc;QACtC,IAAI,IAAI,CAAC,iBAAiB,KAAK,KAAK,EAAE,CAAC;YACnC,OAAO;QACX,CAAC;QACD,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QACtC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,IAAW,gBAAgB;QACvB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,IAAW,gBAAgB;QACvB,OAAO,KAAK,CAAC;IACjB,CAAC;IAsCD;;OAEG;IACH,IAAW,UAAU,CAAC,KAAc;QAChC,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;YAC7B,OAAO;QACX,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAoBD,IAAW,SAAS;QAChB,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;YACrB,KAAK,QAAQ,CAAC,iBAAiB,CAAC;YAChC,KAAK,QAAQ,CAAC,gBAAgB,CAAC;YAC/B,KAAK,QAAQ,CAAC,gBAAgB,CAAC;YAC/B,KAAK,QAAQ,CAAC,iBAAiB;gBAC3B,OAAO,IAAI,CAAC;QACpB,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,IAAW,SAAS,CAAC,KAAc;QAC/B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IACnF,CAAC;IAED;;OAEG;IAEH,IAAW,WAAW;QAClB,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;YACrB,KAAK,QAAQ,CAAC,aAAa,CAAC;YAC5B,KAAK,QAAQ,CAAC,iBAAiB;gBAC3B,OAAO,IAAI,CAAC;QACpB,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,IAAW,WAAW,CAAC,KAAc;QACjC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IAC/E,CAAC;IAED;;OAEG;IAEH,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,IAAW,QAAQ,CAAC,KAAa;QAC7B,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;YAC3B,OAAO;QACX,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC7C,CAAC;IAuCD;;;;OAIG;IAEH,IAAW,mBAAmB;QAC1B,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACrC,CAAC;IAED,IAAW,mBAAmB,CAAC,KAAc;QACzC,MAAM,sBAAsB,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,CAAC,sBAAsB,CAAC;QAE5F,IAAI,KAAK,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC,0FAA0F,CAAC,CAAC;QAC5G,CAAC;QAED,IAAI,CAAC,oBAAoB,GAAG,KAAK,IAAI,sBAAsB,CAAC;QAE5D,IAAI,CAAC,4BAA4B,EAAE,CAAC;IACxC,CAAC;IAID;;;;;;OAMG;IACH,IAAW,wBAAwB;QAC/B,OAAO,IAAI,CAAC,yBAAyB,CAAC;IAC1C,CAAC;IAED,IAAW,wBAAwB,CAAC,KAAc;QAC9C,IAAI,IAAI,CAAC,yBAAyB,KAAK,KAAK,EAAE,CAAC;YAC3C,OAAO;QACX,CAAC;QAED,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC;QACvC,IAAI,CAAC,4BAA4B,EAAE,CAAC;IACxC,CAAC;IASD,gBAAgB;IACT,eAAe;QAClB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IACD;;OAEG;IACI,eAAe,CAAC,WAAwB;QAC3C,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;IACpC,CAAC;IAgGD;;;;;;OAMG;IACH,YAAY,IAAY,EAAE,KAAuB,EAAE,QAAkB,EAAE,SAAS,GAAG,KAAK;QAnxBxF;;WAEG;QACI,uBAAkB,GAAiC,IAAI,CAAC;QAE/D;;;;WAIG;QACI,2BAAsB,GAAG,IAAI,CAAC;QAErC,2CAA2C;QACjC,oBAAe,+BAAuB;QAEtC,eAAU,GAAG,KAAK,CAAC;QAEnB,sBAAiB,GAAG,KAAK,CAAC;QAwDpC;;WAEG;QAEI,aAAQ,GAAQ,IAAI,CAAC;QAK5B;;WAEG;QACI,sBAAiB,GAAQ,IAAI,CAAC;QAErC;;WAEG;QAEI,0BAAqB,GAAG,KAAK,CAAC;QAErC;;WAEG;QAEI,uBAAkB,GAAG,KAAK,CAAC;QAElC;;WAEG;QAEI,UAAK,GAAG,EAAE,CAAC;QAWlB;;WAEG;QAEO,WAAM,GAAG,GAAG,CAAC;QAgCvB;;WAEG;QAEO,qBAAgB,GAAG,IAAI,CAAC;QAoBlC;;WAEG;QAEO,mBAAc,GAAG,IAAI,CAAC;QAoBxB,yBAAoB,GAAG,KAAK,CAAC;QAqCrC;;WAEG;QAEI,oBAAe,GAAqB,IAAI,CAAC;QAEhD;;WAEG;QACI,eAAU,GAAuC,IAAI,CAAC;QAE7D;;WAEG;QACI,YAAO,GAAuD,IAAI,CAAC;QAE1E;;WAEG;QACI,4BAAuB,GAAoD,IAAI,CAAC;QAWvF;;WAEG;QACI,mBAAc,GAAG,KAAK,CAAC;QAE9B;;WAEG;QACI,4BAAuB,GAAG,KAAK,CAAC;QAEvC;;WAEG;QACI,eAAU,GAA+B,IAAI,CAAC;QAErD;;WAEG;QACI,wBAAmB,GAAG,IAAI,UAAU,EAAY,CAAC;QAExD;;WAEG;QACK,uBAAkB,GAAiC,IAAI,CAAC;QACxD,wBAAmB,GAAmC,IAAI,CAAC;QAyBnE;;WAEG;QACK,oBAAe,GAAqC,IAAI,CAAC;QAoCjE;;WAEG;QAEK,eAAU,GAAa,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAiEzD;;WAEG;QAEK,sBAAiB,GAAG,KAAK,CAAC;QA6BlC;;WAEG;QAEI,sBAAiB,GAAG,KAAK,CAAC;QAEjC;;WAEG;QAEI,sBAAiB,GAAG,KAAK,CAAC;QAEjC;;WAEG;QAEI,oBAAe,GAAG,KAAK,CAAC;QAE/B;;WAEG;QAEI,kBAAa,GAAG,CAAC,CAAC;QAEzB;;WAEG;QAEI,wBAAmB,GAAG,KAAK,CAAC;QAEnC;;WAEG;QAEK,gBAAW,GAAG,IAAI,CAAC;QAoB3B;;WAEG;QAEI,cAAS,GAAG,GAAG,CAAC;QAEvB;;WAEG;QAEI,YAAO,GAAG,CAAC,CAAC;QAEnB;;WAEG;QAEI,iBAAY,GAAG,CAAC,CAAC;QA4FxB;;WAEG;QACa,YAAO,GAAG,IAAI,oBAAoB,EAAE,CAAC;QA2B3C,8BAAyB,GAAG,KAAK,CAAC;QAuC5C;;WAEG;QACK,YAAO,GAAY,KAAK,CAAC;QAQjC;;WAEG;QACK,cAAS,GAAG,QAAQ,CAAC,gBAAgB,CAAC;QAE9C;;WAEG;QACK,2BAAsB,GAAY,KAAK,CAAC;QAEhD;;WAEG;QACK,2BAAsB,GAAY,KAAK,CAAC;QAEhD;;WAEG;QACK,8BAAyB,GAAW,CAAC,CAAC;QAQ9C,gBAAgB;QACT,+BAA0B,GAAG,CAAC,CAAC,CAAC;QAEvC,gBAAgB;QACT,YAAO,GAAyD,IAAI,CAAC;QAE5E,gBAAgB;QACT,qBAAgB,GAA8B,IAAI,CAAC;QAK1D,gBAAgB;QACT,8BAAyB,GAAG,KAAK,CAAC;QAE/B,eAAU,GAamB,EAAS,CAAC,CAAC,qDAAqD;QAEvG,gBAAgB;QACT,gCAA2B,GAUtB,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;QACzB,gBAAgB;QACT,0CAAqC,GAAyD,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;QAClH,gBAAgB;QACT,uCAAkC,GAAsD,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;QAC5G,gBAAgB;QACT,uDAAkD,GAAsD,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;QAC5H,gBAAgB;QACT,2CAAsC,GAA0D,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;QACpH,gBAAgB;QACT,uCAAkC,GAAsD,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;QAC5G,gBAAgB;QACT,gDAA2C,GAA+D,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;QAC9H,gBAAgB;QACT,iDAA4C,GAAgE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;QAsKhI;;WAEG;QACO,sBAAiB,GAAqB,IAAI,CAAC;QA/JjD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,MAAM,QAAQ,GAAG,KAAK,IAAI,WAAW,CAAC,gBAAgB,CAAC;QACvD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,OAAO;QACX,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;QACvB,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAE5B,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,yBAAyB,CAAC,GAAG,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7G,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,uBAAuB,CAAC,GAAG,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,yBAAyB,CAAC,GAAG,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5G,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,4BAA4B,CAAC,GAAG,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClH,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,sBAAsB,CAAC,GAAG,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,yBAAyB,CAAC,GAAG,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5G,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,qBAAqB,CAAC,GAAG,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEpG,IAAI,CAAC,EAAE,GAAG,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAC1C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,qBAAqB,EAAE,CAAC;QACxE,IAAI,CAAC,YAAY,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC,CAAC;QACpE,IAAI,CAAC,YAAY,CAAC,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAE1D,IAAI,CAAC,cAAc,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QAC7F,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,CAAC,sBAAsB,CAAC;QAElE,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QACtB,CAAC;QAED,QAAQ,CAAC,iBAAiB,CAAC,eAAe,CAAC,IAAI,sCAA8B,CAAC;IAClF,CAAC;IAED,gBAAgB;IACT,oBAAoB;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,CAAC;QAE3C,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC;QAE/B,IAAI,MAAM,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACtC,mEAAmE;YACnE,IAAI,CAAC,cAAc,GAAG,IAAI,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACvF,IAAI,CAAC,eAAe,8BAAsB,CAAC;QAC/C,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,cAAc,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACtG,CAAC;QAED,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC;IAC3C,CAAC;IAED;;;;OAIG;IACH,6DAA6D;IACtD,QAAQ,CAAC,WAAqB;QACjC,MAAM,GAAG,GAAG,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;QACjC,OAAO,GAAG,CAAC;IACf,CAAC;IAED;;;OAGG;IACI,YAAY;QACf,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,gBAAgB;IAChB,IAAW,WAAW;QAClB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACnC,CAAC;IAED;;OAEG;IACI,MAAM;QACT,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;IACnC,CAAC;IAED;;OAEG;IACI,QAAQ;QACX,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;IACpC,CAAC;IAED;;;;;OAKG;IACH,6DAA6D;IACtD,OAAO,CAAC,IAAmB,EAAE,YAAsB;QACtD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;;OAMG;IACH,6DAA6D;IACtD,iBAAiB,CAAC,IAAkB,EAAE,OAAgB,EAAE,YAAsB;QACjF,MAAM,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC;QACxC,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,iBAAiB,GAAG,IAAI,CAAC;QACzC,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;QAClC,IAAI,CAAC,qCAAqC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE5D,OAAO,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC;IAC7C,CAAC;IAED;;;OAGG;IACI,SAAS;QACZ,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;IACpC,CAAC;IAED;;;OAGG;IACI,QAAQ;QACX,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,gBAAgB;IACT,wBAAwB,CAAC,IAAU;QACtC,OAAO,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC;IACvF,CAAC;IAOD;;OAEG;IAEH,IAAW,gBAAgB;QACvB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAClC,CAAC;IAED;;;;;;;;;;OAUG;IACH,IAAW,gBAAgB,CAAC,KAAuB;QAC/C,IAAI,IAAI,CAAC,iBAAiB,KAAK,KAAK,EAAE,CAAC;YACnC,OAAO;QACX,CAAC;QAED,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAE/B,IAAI,CAAC,uCAAuC,EAAE,CAAC;IACnD,CAAC;IAED,IAAc,oBAAoB;QAC9B,OAAO,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC;IAC1C,CAAC;IAED,IAAc,wBAAwB;QAClC,OAAO,IAAI,CAAC,iBAAiB,KAAK,QAAQ,CAAC,mBAAmB,IAAI,IAAI,CAAC,iBAAiB,KAAK,QAAQ,CAAC,0BAA0B,CAAC;IACrI,CAAC;IAED,IAAc,uBAAuB;QACjC,OAAO,IAAI,CAAC,iBAAiB,KAAK,QAAQ,CAAC,kBAAkB,IAAI,IAAI,CAAC,iBAAiB,KAAK,QAAQ,CAAC,0BAA0B,CAAC;IACpI,CAAC;IAED;;OAEG;IACH,IAAc,qBAAqB;QAC/B,OAAO,IAAI,CAAC,iBAAiB,KAAK,QAAQ,CAAC,eAAe,IAAI,IAAI,CAAC,iBAAiB,KAAK,QAAQ,CAAC,kBAAkB,CAAC;IACzH,CAAC;IAED;;;;OAIG;IACI,iBAAiB;QACpB,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,wBAAwB,CAAC;QACzC,CAAC;QAED,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,OAAO,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACI,wBAAwB,CAAC,IAAkB;QAC9C,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,wBAAwB,CAAC;QACzC,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,OAAO,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3D,CAAC;IAED;;;;OAIG;IACI,gBAAgB;QACnB,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,uBAAuB,CAAC;QACxC,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACI,uBAAuB,CAAC,IAAkB;QAC7C,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,uBAAuB,CAAC;QACxC,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC3E,CAAC;IAED;;;OAGG;IACI,mBAAmB;QACtB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;OAGG;IACI,SAAS,CAAC,kBAAkB,GAAG,KAAK;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC;QACtC,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBAClB,SAAS;YACb,CAAC;YACD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnC,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC;oBACjC,SAAS;gBACb,CAAC;gBAED,KAAK,MAAM,WAAW,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;oBAC9C,IAAI,CAAC,WAAW,EAAE,CAAC;wBACf,SAAS;oBACb,CAAC;oBACD,IAAI,IAAI,CAAC,gBAAgB,KAAK,WAAW,CAAC,eAAe,EAAE,CAAC;wBACxD,WAAW,CAAC,mBAAmB,GAAG,KAAK,CAAC;wBACxC,WAAW,CAAC,4BAA4B,GAAG,IAAI,CAAC;wBAChD,WAAW,CAAC,sBAAsB,GAAG,kBAAkB,CAAC;oBAC5D,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QAED,IAAI,kBAAkB,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAC5C,CAAC;IACL,CAAC;IAED;;OAEG;IACI,QAAQ,CAAC,MAA6B,EAAE,sBAAwC,IAAI;QACvF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QAEvC,MAAM,WAAW,GAAG,mBAAmB,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,mBAAmB,CAAC;QAC7F,MAAM,OAAO,GAAG,WAAW,KAAK,QAAQ,CAAC,wBAAwB,CAAC;QAElE,MAAM,oBAAoB,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;QAEtE,IAAI,SAAS,CAAC,oBAAoB,CAAC,IAAI,oBAAoB,CAAC,eAAe,EAAE,CAAC;YAC1E,oBAAoB,CAAC,eAAe,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAClF,CAAC;QAED,MAAM,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC;QAC1C,MAAM,CAAC,QAAQ,CACX,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,OAAO,EACZ,KAAK,EACL,OAAO,EACP,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,EAC9E,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,YAAY,CACpB,CAAC;QAEF,OAAO,OAAO,CAAC;IACnB,CAAC;IAED;;;;OAIG;IACH,6DAA6D;IACtD,IAAI,CAAC,KAAa,EAAE,IAAW,IAAS,CAAC;IAEhD;;OAEG;IACI,kBAAkB;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC;QAEhC,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC;QAC1B,IAAI,CAAC,2BAA2B,mDAA2C,IAAI,CAAC,UAAU,CAAC,CAAC;QAE5F,GAAG,CAAC,MAAM,EAAE,CAAC;QAEb,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;IAC1C,CAAC;IAED;;;;;OAKG;IACI,cAAc,CAAC,KAAa,EAAE,IAAU,EAAE,OAAgB;QAC7D,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;QAEzC,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;QAClC,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzD,WAAW,CAAC,sBAAsB,GAAG,KAAK,CAAC;IAC/C,CAAC;IAED;;;OAGG;IACH,6DAA6D;IACtD,mBAAmB,CAAC,KAAa,IAAS,CAAC;IAElD;;;OAGG;IACI,QAAQ,CAAC,MAAc;QAC1B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QACpC,CAAC;IACL,CAAC;IAED;;;OAGG;IACI,kBAAkB,CAAC,MAAc;QACpC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,MAAM,CAAC,SAAS,CAAC,gBAAgB,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,kBAAkB,EAAE,CAAC,CAAC;YACzE,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,mBAAmB,EAAE,CAAC,CAAC;QAC1E,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QACpC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACI,eAAe,CAAC,MAAc,EAAE,YAAqB;QACxD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QACtD,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QACpC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACO,UAAU,CAAC,IAAmB,EAAE,SAA2B,IAAI,EAAE,QAAkB;QACzF,IAAI,CAAC,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC;QACnC,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,IAAI,MAAM,EAAE,CAAC;gBACT,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;gBACjC,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,qBAAqB,EAAE,CAAC,CAAC;gBACxE,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;YACnC,CAAC;QACL,CAAC;QACD,IAAI,IAAI,EAAE,CAAC;YACP,IAAI,CAAC,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC;QACpD,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,MAAM,CAAC,iBAAiB,GAAG,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,EAAE,CAAC;YACjC,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACvC,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;YACrD,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QAED,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACvC,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;YACrD,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QAED,IAAI,IAAI,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACvC,IAAI,CAAC,yBAAyB,GAAG,MAAM,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;YAChE,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAChD,CAAC;IACL,CAAC;IAED;;OAEG;IACI,MAAM;QACT,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC,YAAY,EAAE,CAAC;QAEnD,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,IAAI,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACvC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACvC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACvC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACtD,CAAC;IACL,CAAC;IAED;;;OAGG;IACI,cAAc;QACjB,IAAI,CAAC,UAAU,CAAC,WAAW,GAAG,EAAE,CAAC;QACjC,IAAI,CAAC,2BAA2B,+CAAqC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtF,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;IACvC,CAAC;IAED;;;OAGG;IACI,iBAAiB;QACpB,IAAI,CAAC,UAAU,CAAC,cAAc,GAAG,EAAE,CAAC;QACpC,IAAI,CAAC,2BAA2B,kDAAwC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzF,OAAO,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC;IAC1C,CAAC;IAED;;;;OAIG;IACI,UAAU,CAAC,OAAoB;QAClC,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,KAAK,CAAC;QACnC,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;QAClC,IAAI,CAAC,2BAA2B,4CAAiC,IAAI,CAAC,UAAU,CAAC,CAAC;QAClF,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;IACtC,CAAC;IAED;;;;OAIG;IACH,6DAA6D;IACtD,KAAK,CAAC,IAAY;QACrB,OAAO,IAAI,CAAC;IAChB,CAAC;IAES,aAAa,CAAC,cAAwB,EAAE,OAAe;QAC7D,MAAM,mBAAmB,GAAQ,EAAE,CAAC;QAEpC,4DAA4D;QAC5D,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;QAE5C,QAAQ,CAAC,aAAa,CAAC,mBAAmB,EAAE,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAElF,8EAA8E;QAC9E,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;gBAC/C,MAAM,YAAY,GAAG,cAAc,CAAC,aAAc,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC1E,IAAI,YAAY,EAAE,CAAC;oBACf,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAChC,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED;;;OAGG;IACI,eAAe;QAClB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,MAAM,MAAM,GAAmB,EAAE,CAAC;YAClC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBAChC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAClC,IAAI,IAAI,EAAE,CAAC;oBACP,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtB,CAAC;YACL,CAAC;YACD,OAAO,MAAM,CAAC;QAClB,CAAC;aAAM,CAAC;YACJ,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YAClC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;QAC3D,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACI,gBAAgB,CACnB,IAAkB,EAClB,UAAyC,EACzC,OAA8C,EAC9C,OAAkC;QAElC,MAAM,YAAY,GAAG;YACjB,SAAS,EAAE,KAAK;YAChB,YAAY,EAAE,KAAK;YACnB,GAAG,OAAO;SACb,CAAC;QAEF,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,CAAC;QAC3D,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC,CAAC,2DAA2D;QAEhG,MAAM,UAAU,GAAG,GAAG,EAAE;YACpB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC;gBAC3C,OAAO;YACX,CAAC;YAED,MAAM,cAAc,GAAG,KAAK,CAAC,SAAS,CAAC;YAEvC,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC;gBACzB,KAAK,CAAC,SAAS,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5C,CAAC;YAED,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;gBAC/B,IAAI,OAAO,GAAG,IAAI,EACd,SAAS,GAAG,IAAI,CAAC;gBACrB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBACjB,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;oBAC9E,IAAI,WAAW,CAAC,eAAe,EAAE,CAAC;wBAC9B,WAAW,CAAC,eAAe,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;oBAC/C,CAAC;oBACD,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC;wBACxE,IAAI,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC,mBAAmB,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,qBAAqB,EAAE,EAAE,CAAC;4BAC/G,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;wBACzD,CAAC;6BAAM,CAAC;4BACJ,OAAO,GAAG,KAAK,CAAC;4BAChB,UAAU,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;wBAC/B,CAAC;oBACL,CAAC;gBACL,CAAC;gBACD,IAAI,OAAO,EAAE,CAAC;oBACV,IAAI,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;oBACrD,IAAI,SAAS,EAAE,CAAC;wBACZ,IAAI,OAAO,EAAE,CAAC;4BACV,OAAO,CAAC,SAAS,CAAC,CAAC;wBACvB,CAAC;oBACL,CAAC;oBACD,IAAI,UAAU,EAAE,CAAC;wBACb,UAAU,CAAC,IAAI,CAAC,CAAC;oBACrB,CAAC;gBACL,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;oBACjB,IAAI,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;oBACrD,IAAI,UAAU,EAAE,CAAC;wBACb,UAAU,CAAC,IAAI,CAAC,CAAC;oBACrB,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACJ,UAAU,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;gBAC/B,CAAC;YACL,CAAC;YAED,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC;gBACzB,KAAK,CAAC,SAAS,GAAG,cAAc,CAAC;YACrC,CAAC;QACL,CAAC,CAAC;QAEF,UAAU,EAAE,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,qBAAqB,CAAC,IAAkB,EAAE,OAA8C;QACjG,OAAO,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACzC,IAAI,CAAC,gBAAgB,CACjB,IAAI,EACJ,GAAG,EAAE;gBACD,OAAO,EAAE,CAAC;YACd,CAAC,EACD,OAAO,EACP,CAAC,MAAM,EAAE,EAAE;gBACP,2EAA2E;gBAC3E,MAAM,CAAC,MAAM,CAAC,CAAC;YACnB,CAAC,CACJ,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;IA4BD;;;OAGG;IACI,WAAW,CAAC,IAAY;QAC3B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,2BAA2B,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC3E,OAAO;QACX,CAAC;QAED,QAAQ,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAAC;QAExC,IAAI,IAAI,GAAG,QAAQ,CAAC,wBAAwB,EAAE,CAAC;YAC3C,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,6BAA6B,CAAC,CAAC;QAC9E,CAAC;QAED,IAAI,IAAI,GAAG,QAAQ,CAAC,gBAAgB,EAAE,CAAC;YACnC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;QACtE,CAAC;QAED,IAAI,IAAI,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC;YACjC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;QACrE,CAAC;QAED,IAAI,IAAI,GAAG,QAAQ,CAAC,gBAAgB,EAAE,CAAC;YACnC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;QACtE,CAAC;QAED,IAAI,IAAI,GAAG,QAAQ,CAAC,mBAAmB,EAAE,CAAC;YACtC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;QACxE,CAAC;QAED,IAAI,IAAI,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC;YAChC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;QACnE,CAAC;QAED,IAAI,IAAI,GAAG,QAAQ,CAAC,gBAAgB,EAAE,CAAC;YACnC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;QACtE,CAAC;QAED,IAAI,QAAQ,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC;YACtC,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;QAC/D,CAAC;QAED,IAAI,CAAC,QAAQ,EAAE,CAAC,mBAAmB,EAAE,CAAC;IAC1C,CAAC;IAED;;OAEG;IACI,cAAc;QACjB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC;QACtC,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBAClB,SAAS;YACb,CAAC;YACD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnC,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC;oBACjC,SAAS;gBACb,CAAC;gBAED,OAAO,CAAC,cAAc,EAAE,CAAC;YAC7B,CAAC;QACL,CAAC;IACL,CAAC;IAED;;;OAGG;IACO,wBAAwB,CAAC,IAAwC;QACvE,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,IAAI,KAAK,CAAC,2BAA2B,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACjE,OAAO;QACX,CAAC;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBAClB,SAAS;YACb,CAAC;YACD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnC,+GAA+G;gBAC/G,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACrG,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;oBACpB,SAAS;gBACb,CAAC;gBAED,KAAK,MAAM,WAAW,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;oBAC9C,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,CAAE,WAAW,CAAC,OAA2B,CAAC,cAAc,EAAE,CAAC;wBACnG,SAAS;oBACb,CAAC;oBACD,IAAI,IAAI,CAAC,gBAAgB,KAAK,WAAW,CAAC,eAAe,EAAE,CAAC;wBACxD,IAAI,CAAC,WAAW,CAAC,OAA0B,CAAC,CAAC;oBACjD,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED;;OAEG;IACO,sBAAsB;QAC5B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,2BAA2B,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC3E,OAAO;QACX,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,qBAAqB,EAAE,CAAC;QAChE,IAAI,eAAe,EAAE,CAAC;YAClB,eAAe,CAAC,WAAW,EAAE,CAAC;QAClC,CAAC;IACL,CAAC;IAED;;OAEG;IACO,2BAA2B;QACjC,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC9D,CAAC;IAED;;OAEG;IACO,uCAAuC;QAC7C,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,6BAA6B,CAAC,CAAC;IAC1E,CAAC;IAED;;OAEG;IACO,gCAAgC;QACtC,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACO,+BAA+B;QACrC,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACO,sCAAsC;QAC5C,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAAC;IACzE,CAAC;IAED;;OAEG;IACO,8BAA8B;QACpC,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IACjE,CAAC;IAED;;OAEG;IACO,kCAAkC;QACxC,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;IACpE,CAAC;IAED;;OAEG;IACO,4BAA4B;QAClC,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACO,+BAA+B;QACrC,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACO,uCAAuC;QAC7C,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAAC;IACzE,CAAC;IAES,8BAA8B;QACpC,IAAI,IAAI,CAAC,MAAM,CAAC,mBAAmB,wDAAgD,EAAE,CAAC;YAClF,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAC/B,iDAAiD;YACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,2CAA2C,CAAC,OAAO,CAAC,GAAG,EAAE;gBAClF,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;YACpC,CAAC,CAAC,CAAC;YACH,kFAAkF;YAClF,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,EAAE;gBAC9B,IAAI,CAAC,MAAM,CAAC,2CAA2C,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC7E,CAAC,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,6DAA6D;IACtD,kBAAkB,CAAC,eAAgC;QACtD,wBAAwB;QACxB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACI,OAAO,CAAC,mBAA6B,EAAE,oBAA8B,EAAE,cAAwB;QAClG,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,aAAa;QACb,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC1B,KAAK,CAAC,sBAAsB,EAAE,CAAC;QAE/B,oBAAoB;QACpB,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAE3B,IAAI,CAAC,UAAU,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QAC5D,IAAI,CAAC,2BAA2B,uCAA+B,IAAI,CAAC,UAAU,CAAC,CAAC;QAEhF,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC5D,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;gBACb,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACrD,CAAC;YACD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QACjC,CAAC;QAED,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;YAC1B,qBAAqB;YACrB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBAChC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBAClC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;gBACrC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;gBAC5B,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;oBACxB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;gBACrC,CAAC;YACL,CAAC;QACL,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;QAE9B,kGAAkG;QAClG,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC;gBAChC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACvC,CAAC;YAED,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC;QACpC,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,WAAW;QACX,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAE/C,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;QACnC,CAAC;QAED,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;QACrC,CAAC;QAED,IAAI,IAAI,CAAC,0BAA0B,EAAE,CAAC;YAClC,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,CAAC;QAC5C,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,IAAI,CAAC,UAAU,GAAG,EAAS,CAAC;QAChC,CAAC;IACL,CAAC;IAEO,qBAAqB,CAAC,IAA8B;QACxD,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,OAAO;QACX,CAAC;QAED,MAAM,QAAQ,GAAU,IAAK,CAAC,QAAQ,CAAC;QACvC,MAAM,qBAAqB,GAAG,IAAI,CAAC,6BAA6B,CAAC,sBAAsB,CAAC;QACxF,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAC/B,IAAI,IAAI,CAAC,SAAS,IAAI,qBAAqB,EAAE,CAAC;gBAC1C,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBACnC,MAAM,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;oBAC3C,KAAK,IAAI,eAAe,GAAG,CAAC,EAAE,eAAe,GAAG,YAAY,CAAC,MAAM,EAAE,eAAe,EAAE,EAAE,CAAC;wBACrF,MAAM,MAAM,GAAG,YAAY,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;wBACrD,IAAI,CAAC,MAAM,EAAE,CAAC;4BACV,SAAS;wBACb,CAAC;wBACD,MAAM,QAAQ,GAAG,qBAAqB,CAAC,eAAe,CAAC,CAAC;wBACxD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;4BACpB,QAAQ,EAAE,yBAAyB,CAAC,MAAM,CAAC,CAAC;4BAC5C,OAAO,CAAC,kBAAkB,CAAC,eAAe,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;wBAC5D,CAAC;oBACL,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,QAAQ,EAAE,yBAAyB,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAE,IAAsB,CAAC,UAAU,EAAE,CAAC;YAChE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACzB,CAAC;IACL,CAAC;IAED;;;OAGG;IACI,SAAS;QACZ,MAAM,mBAAmB,GAAG,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAEhE,mBAAmB,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QACvD,mBAAmB,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE7C,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;QAE5C,OAAO,mBAAmB,CAAC;IAC/B,CAAC;IAES,iBAAiB,CAAC,mBAAwB;QAChD,mBAAmB,CAAC,OAAO,GAAG,EAAE,CAAC;QAEjC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;gBAC/C,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;oBACzB,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;gBAC5E,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,cAAc,CAAC,cAAmB,EAAE,QAAkB;QAChE,IAAI,cAAc,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAC1C,QAAQ,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAC7H,CAAC;aAAM,IAAI,cAAc,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAChD,QAAQ,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAC1H,CAAC;aAAM,CAAC;YACJ,QAAQ,CAAC,UAAU,GAAG,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACpD,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,KAAK,CAAC,cAAmB,EAAE,KAAY,EAAE,OAAe;QAClE,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;YAC7B,cAAc,CAAC,UAAU,GAAG,0BAA0B,CAAC;QAC3D,CAAC;aAAM,IAAI,cAAc,CAAC,UAAU,KAAK,qBAAqB,IAAI,cAAc,CAAC,gBAAgB,EAAE,CAAC;YAChG,cAAc,CAAC,UAAU,GAAG,2BAA2B,CAAC;YACxD,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;gBAC7B,MAAM,CAAC,KAAK,CAAC,kHAAkH,CAAC,CAAC;gBACjI,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;QAED,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QACpE,QAAQ,CAAC,eAAe,GAAG,cAAc,CAAC,QAAQ,CAAC;QAEnD,QAAQ,CAAC,cAAc,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAElD,OAAO,QAAQ,CAAC;IACpB,CAAC;IAES,MAAM,CAAC,aAAa,CAAC,mBAAwB,EAAE,QAAkB,EAAE,KAAY,EAAE,OAAe;QACtG,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC;YAC/B,OAAO;QACX,CAAC;QAED,KAAK,MAAM,eAAe,IAAI,mBAAmB,CAAC,OAAO,EAAE,CAAC;YACxD,MAAM,UAAU,GAAG,mBAAmB,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YAEhE,IAAI,MAAM,GAAG,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAEhE,IAAI,CAAC,MAAM,EAAE,CAAC;gBACV,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,CAAC,UAAU,GAAG,eAAe,CAAC,CAAC;gBACxE,IAAI,eAAe,EAAE,CAAC;oBAClB,MAAM,GAAG,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC;gBAC3C,CAAC;YACL,CAAC;YAED,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;IACL,CAAC;;AAl/DD;;GAEG;AACoB,yBAAgB,GAAG,SAAS,CAAC,yBAAyB,AAAtC,CAAuC;AAC9E;;GAEG;AACoB,0BAAiB,GAAG,SAAS,CAAC,0BAA0B,AAAvC,CAAwC;AAChF;;GAEG;AACoB,sBAAa,GAAG,SAAS,CAAC,sBAAsB,AAAnC,CAAoC;AACxE;;GAEG;AACoB,0BAAiB,GAAG,SAAS,CAAC,0BAA0B,AAAvC,CAAwC;AAChF;;GAEG;AACoB,yBAAgB,GAAG,SAAS,CAAC,yBAAyB,AAAtC,CAAuC;AAC9E;;GAEG;AACoB,yBAAgB,GAAG,SAAS,CAAC,yBAAyB,AAAtC,CAAuC;AAC9E;;GAEG;AACoB,0BAAiB,GAAG,SAAS,CAAC,0BAA0B,AAAvC,CAAwC;AAChF;;GAEG;AACoB,8BAAqB,GAAG,SAAS,CAAC,8BAA8B,AAA3C,CAA4C;AACxF;;GAEG;AACoB,4BAAmB,GAAG,SAAS,CAAC,4BAA4B,AAAzC,CAA0C;AAEpF;;GAEG;AACoB,iCAAwB,GAAG,SAAS,CAAC,iCAAiC,AAA9C,CAA+C;AAE9F;;GAEG;AACoB,wCAA+B,GAAG,SAAS,CAAC,wCAAwC,AAArD,CAAsD;AAE5G;;GAEG;AACoB,iCAAwB,GAAG,SAAS,CAAC,iCAAiC,AAA9C,CAA+C;AAE9F;;GAEG;AACoB,yBAAgB,GAAG,SAAS,CAAC,yBAAyB,AAAtC,CAAuC;AAE9E;;GAEG;AACoB,uBAAc,GAAG,SAAS,CAAC,uBAAuB,AAApC,CAAqC;AAE1E;;GAEG;AACoB,yBAAgB,GAAG,SAAS,CAAC,yBAAyB,AAAtC,CAAuC;AAE9E;;GAEG;AACoB,4BAAmB,GAAG,SAAS,CAAC,4BAA4B,AAAzC,CAA0C;AAEpF;;GAEG;AACoB,sBAAa,GAAG,SAAS,CAAC,sBAAsB,AAAnC,CAAoC;AAExE;;GAEG;AACoB,yBAAgB,GAAG,SAAS,CAAC,yBAAyB,AAAtC,CAAuC;AAE9E;;GAEG;AACoB,qBAAY,GAAG,SAAS,CAAC,qBAAqB,AAAlC,CAAmC;AAEtE;;GAEG;AACoB,wBAAe,GAAG,CAAC,AAAJ,CAAK;AAE3C;;GAEG;AACoB,2BAAkB,GAAG,CAAC,AAAJ,CAAK;AAE9C;;GAEG;AACoB,4BAAmB,GAAG,CAAC,AAAJ,CAAK;AAE/C;;;GAGG;AACoB,mCAA0B,GAAG,CAAC,AAAJ,CAAK;AAEtD;;;GAGG;AACoB,4CAAmC,GAAG,CAAC,AAAJ,CAAK;AAE/D;;;GAGG;AACoB,uCAA8B,GAAG,CAAC,AAAJ,CAAK;AAE1D;;GAEG;AACW,0BAAiB,GAAG,IAAI,UAAU,EAAY,AAA7B,CAA8B;AAy8CrC,0BAAiB,GAAG,CAAC,OAAwB,EAAE,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,AAAzD,CAA0D;AAC3E,sCAA6B,GAAG,CAAC,OAAwB,EAAE,EAAE,CAAC,OAAO,CAAC,0BAA0B,EAAE,AAArE,CAAsE;AACnG,8BAAqB,GAAG,CAAC,OAAwB,EAAE,EAAE,CAAC,OAAO,CAAC,mBAAmB,EAAE,AAA9D,CAA+D;AACpF,8BAAqB,GAAG,CAAC,OAAwB,EAAE,EAAE,CAAC,OAAO,CAAC,kBAAkB,EAAE,AAA7D,CAA8D;AACnF,2BAAkB,GAAG,CAAC,OAAwB,EAAE,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,AAA1D,CAA2D;AAC7E,8BAAqB,GAAG,CAAC,OAAwB,EAAE,EAAE,CAAC,OAAO,CAAC,kBAAkB,EAAE,AAA7D,CAA8D;AACnF,6BAAoB,GAAG,CAAC,OAAwB,EAAE,EAAE,CAAC,OAAO,CAAC,gBAAgB,EAAE,AAA3D,CAA4D;AAChF,gCAAuB,GAAG,CAAC,OAAwB,EAAE,EAAE,CAAC,OAAO,CAAC,qBAAqB,EAAE,AAAhE,CAAiE;AAEjG,qCAA4B,GAAG,CAAC,OAAwB,EAAE,EAAE;IACvE,QAAQ,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACxC,QAAQ,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACzC,CAAC,AAH0C,CAGzC;AAEa,qCAA4B,GAAG,CAAC,OAAwB,EAAE,EAAE;IACvE,QAAQ,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACxC,QAAQ,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACzC,CAAC,AAH0C,CAGzC;AAEsB,4BAAmB,GAA8C,EAAE,AAAhD,CAAiD;AACpE,2BAAkB,GAAG,CAAC,OAAwB,EAAE,EAAE;IACtE,KAAK,MAAM,EAAE,IAAI,QAAQ,CAAC,mBAAmB,EAAE,CAAC;QAC5C,EAAE,CAAC,OAAO,CAAC,CAAC;IAChB,CAAC;AACL,CAAC,AAJyC,CAIxC;AA15CK;IADN,SAAS,EAAE;oCACM;AAMX;IADN,SAAS,EAAE;0CACY;AASjB;IADN,SAAS,EAAE;sCACQ;AAMb;IADN,SAAS,EAAE;0CACgB;AAcrB;IADN,SAAS,EAAE;uDACyB;AAM9B;IADN,SAAS,EAAE;oDACsB;AAM3B;IADN,SAAS,EAAE;uCACM;AAeR;IADT,SAAS,CAAC,OAAO,CAAC;wCACI;AAoCb;IADT,SAAS,CAAC,iBAAiB,CAAC;kDACK;AAwBxB;IADT,SAAS,CAAC,eAAe,CAAC;gDACK;AA6DzB;IADN,SAAS,EAAE;iDACoC;AAsHxC;IADP,SAAS,EAAE;4CAC6C;AAqEjD;IADP,SAAS,EAAE;mDACsB;AAiC3B;IADN,SAAS,EAAE;mDACqB;AAM1B;IADN,SAAS,EAAE;mDACqB;AAM1B;IADN,SAAS,EAAE;iDACmB;AAMxB;IADN,SAAS,EAAE;+CACa;AAMlB;IADN,SAAS,EAAE;qDACuB;AAM3B;IADP,SAAS,CAAC,YAAY,CAAC;6CACG;AAwBpB;IADN,SAAS,EAAE;2CACW;AAMhB;IADN,SAAS,EAAE;yCACO;AAMZ;IADN,SAAS,EAAE;8CACY;AAyBxB;IADC,SAAS,EAAE;2CASX;AAaD;IADC,SAAS,EAAE;wCAGX;AAyDD;IADC,SAAS,EAAE;mDAGX;AAeS;IADT,SAAS,EAAE;2DACgC;AAkT5C;IADC,SAAS,EAAE;gDAGX","sourcesContent":["import { serialize } from \"../Misc/decorators\";\r\nimport { Tools } from \"../Misc/tools\";\r\nimport type { IAnimatable } from \"../Animations/animatable.interface\";\r\nimport type { SmartArray } from \"../Misc/smartArray\";\r\nimport type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Immutable, Nullable } from \"../types\";\r\nimport type { Matrix } from \"../Maths/math.vector\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport { SubMesh } from \"../Meshes/subMesh\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { UniformBuffer } from \"./uniformBuffer\";\r\nimport type { Effect } from \"./effect\";\r\nimport type { BaseTexture } from \"../Materials/Textures/baseTexture\";\r\nimport type { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport type { MaterialDefines } from \"./materialDefines\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport type { IInspectable } from \"../Misc/iInspectable\";\r\nimport { Plane } from \"../Maths/math.plane\";\r\nimport type { ShadowDepthWrapper } from \"./shadowDepthWrapper\";\r\nimport type { IMaterialContext } from \"../Engines/IMaterialContext\";\r\nimport { DrawWrapper } from \"./drawWrapper\";\r\nimport { MaterialStencilState } from \"./materialStencilState\";\r\nimport { ScenePerformancePriority } from \"../scene\";\r\nimport type { Scene } from \"../scene\";\r\nimport type {\r\n MaterialPluginDisposed,\r\n MaterialPluginIsReadyForSubMesh,\r\n MaterialPluginGetDefineNames,\r\n MaterialPluginBindForSubMesh,\r\n MaterialPluginGetActiveTextures,\r\n MaterialPluginHasTexture,\r\n MaterialPluginGetAnimatables,\r\n MaterialPluginPrepareDefines,\r\n MaterialPluginPrepareEffect,\r\n MaterialPluginPrepareUniformBuffer,\r\n MaterialPluginCreated,\r\n MaterialPluginFillRenderTargetTextures,\r\n MaterialPluginHasRenderTargetTextures,\r\n MaterialPluginHardBindForSubMesh,\r\n} from \"./materialPluginEvent\";\r\nimport { MaterialPluginEvent } from \"./materialPluginEvent\";\r\nimport type { ShaderCustomProcessingFunction } from \"../Engines/Processors/shaderProcessingOptions\";\r\nimport type { IClipPlanesHolder } from \"../Misc/interfaces/iClipPlanesHolder\";\r\n\r\nimport type { PrePassRenderer } from \"../Rendering/prePassRenderer\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport type { Animation } from \"../Animations/animation\";\r\nimport type { InstancedMesh } from \"../Meshes/instancedMesh\";\r\nimport { BindSceneUniformBuffer } from \"./materialHelper.functions\";\r\nimport { SerializationHelper } from \"../Misc/decorators.serialization\";\r\nimport { ShaderLanguage } from \"./shaderLanguage\";\r\nimport type { IAssetContainer } from \"core/IAssetContainer\";\r\nimport { IsWrapper } from \"./drawWrapper.functions\";\r\n\r\ndeclare let BABYLON: any;\r\n\r\n/**\r\n * Options for compiling materials.\r\n */\r\nexport interface IMaterialCompilationOptions {\r\n /**\r\n * Defines whether clip planes are enabled.\r\n */\r\n clipPlane: boolean;\r\n\r\n /**\r\n * Defines whether instances are enabled.\r\n */\r\n useInstances: boolean;\r\n}\r\n\r\n/**\r\n * Options passed when calling customShaderNameResolve\r\n */\r\nexport interface ICustomShaderNameResolveOptions {\r\n /**\r\n * If provided, will be called two times with the vertex and fragment code so that this code can be updated before it is compiled by the GPU\r\n */\r\n processFinalCode?: Nullable<ShaderCustomProcessingFunction>;\r\n}\r\n\r\n/**\r\n * Base class for the main features of a material in Babylon.js\r\n */\r\nexport class Material implements IAnimatable, IClipPlanesHolder {\r\n /**\r\n * Returns the triangle fill mode\r\n */\r\n public static readonly TriangleFillMode = Constants.MATERIAL_TriangleFillMode;\r\n /**\r\n * Returns the wireframe mode\r\n */\r\n public static readonly WireFrameFillMode = Constants.MATERIAL_WireFrameFillMode;\r\n /**\r\n * Returns the point fill mode\r\n */\r\n public static readonly PointFillMode = Constants.MATERIAL_PointFillMode;\r\n /**\r\n * Returns the point list draw mode\r\n */\r\n public static readonly PointListDrawMode = Constants.MATERIAL_PointListDrawMode;\r\n /**\r\n * Returns the line list draw mode\r\n */\r\n public static readonly LineListDrawMode = Constants.MATERIAL_LineListDrawMode;\r\n /**\r\n * Returns the line loop draw mode\r\n */\r\n public static readonly LineLoopDrawMode = Constants.MATERIAL_LineLoopDrawMode;\r\n /**\r\n * Returns the line strip draw mode\r\n */\r\n public static readonly LineStripDrawMode = Constants.MATERIAL_LineStripDrawMode;\r\n /**\r\n * Returns the triangle strip draw mode\r\n */\r\n public static readonly TriangleStripDrawMode = Constants.MATERIAL_TriangleStripDrawMode;\r\n /**\r\n * Returns the triangle fan draw mode\r\n */\r\n public static readonly TriangleFanDrawMode = Constants.MATERIAL_TriangleFanDrawMode;\r\n\r\n /**\r\n * Stores the clock-wise side orientation\r\n */\r\n public static readonly ClockWiseSideOrientation = Constants.MATERIAL_ClockWiseSideOrientation;\r\n\r\n /**\r\n * Stores the counter clock-wise side orientation\r\n */\r\n public static readonly CounterClockWiseSideOrientation = Constants.MATERIAL_CounterClockWiseSideOrientation;\r\n\r\n /**\r\n * The dirty image processing flag value\r\n */\r\n public static readonly ImageProcessingDirtyFlag = Constants.MATERIAL_ImageProcessingDirtyFlag;\r\n\r\n /**\r\n * The dirty texture flag value\r\n */\r\n public static readonly TextureDirtyFlag = Constants.MATERIAL_TextureDirtyFlag;\r\n\r\n /**\r\n * The dirty light flag value\r\n */\r\n public static readonly LightDirtyFlag = Constants.MATERIAL_LightDirtyFlag;\r\n\r\n /**\r\n * The dirty fresnel flag value\r\n */\r\n public static readonly FresnelDirtyFlag = Constants.MATERIAL_FresnelDirtyFlag;\r\n\r\n /**\r\n * The dirty attribute flag value\r\n */\r\n public static readonly AttributesDirtyFlag = Constants.MATERIAL_AttributesDirtyFlag;\r\n\r\n /**\r\n * The dirty misc flag value\r\n */\r\n public static readonly MiscDirtyFlag = Constants.MATERIAL_MiscDirtyFlag;\r\n\r\n /**\r\n * The dirty prepass flag value\r\n */\r\n public static readonly PrePassDirtyFlag = Constants.MATERIAL_PrePassDirtyFlag;\r\n\r\n /**\r\n * The all dirty flag value\r\n */\r\n public static readonly AllDirtyFlag = Constants.MATERIAL_AllDirtyFlag;\r\n\r\n /**\r\n * MaterialTransparencyMode: No transparency mode, Alpha channel is not use.\r\n */\r\n public static readonly MATERIAL_OPAQUE = 0;\r\n\r\n /**\r\n * MaterialTransparencyMode: Alpha Test mode, pixel are discarded below a certain threshold defined by the alpha cutoff value.\r\n */\r\n public static readonly MATERIAL_ALPHATEST = 1;\r\n\r\n /**\r\n * MaterialTransparencyMode: Pixels are blended (according to the alpha mode) with the already drawn pixels in the current frame buffer.\r\n */\r\n public static readonly MATERIAL_ALPHABLEND = 2;\r\n\r\n /**\r\n * MaterialTransparencyMode: Pixels are blended (according to the alpha mode) with the already drawn pixels in the current frame buffer.\r\n * They are also discarded below the alpha cutoff threshold to improve performances.\r\n */\r\n public static readonly MATERIAL_ALPHATESTANDBLEND = 3;\r\n\r\n /**\r\n * The Whiteout method is used to blend normals.\r\n * Details of the algorithm can be found here: https://blog.selfshadow.com/publications/blending-in-detail/\r\n */\r\n public static readonly MATERIAL_NORMALBLENDMETHOD_WHITEOUT = 0;\r\n\r\n /**\r\n * The Reoriented Normal Mapping method is used to blend normals.\r\n * Details of the algorithm can be found here: https://blog.selfshadow.com/publications/blending-in-detail/\r\n */\r\n public static readonly MATERIAL_NORMALBLENDMETHOD_RNM = 1;\r\n\r\n /**\r\n * Event observable which raises global events common to all materials (like MaterialPluginEvent.Created)\r\n */\r\n public static OnEventObservable = new Observable<Material>();\r\n\r\n /**\r\n * Custom callback helping to override the default shader used in the material.\r\n */\r\n public customShaderNameResolve: (\r\n shaderName: string,\r\n uniforms: string[],\r\n uniformBuffers: string[],\r\n samplers: string[],\r\n defines: MaterialDefines | string[],\r\n attributes?: string[],\r\n options?: ICustomShaderNameResolveOptions\r\n ) => string;\r\n\r\n /**\r\n * Custom shadow depth material to use for shadow rendering instead of the in-built one\r\n */\r\n public shadowDepthWrapper: Nullable<ShadowDepthWrapper> = null;\r\n\r\n /**\r\n * Gets or sets a boolean indicating that the material is allowed (if supported) to do shader hot swapping.\r\n * This means that the material can keep using a previous shader while a new one is being compiled.\r\n * This is mostly used when shader parallel compilation is supported (true by default)\r\n */\r\n public allowShaderHotSwapping = true;\r\n\r\n /** Shader language used by the material */\r\n protected _shaderLanguage = ShaderLanguage.GLSL;\r\n\r\n protected _forceGLSL = false;\r\n\r\n protected _useVertexPulling = false;\r\n /**\r\n * Tells the engine to draw geometry using vertex pulling instead of index drawing. This will automatically\r\n * set the vertex buffers as storage buffers and make them accessible to the vertex shader (WebGPU only).\r\n */\r\n public get useVertexPulling() {\r\n return this._useVertexPulling;\r\n }\r\n\r\n public set useVertexPulling(value: boolean) {\r\n if (this._useVertexPulling === value) {\r\n return;\r\n }\r\n\r\n this._useVertexPulling = value;\r\n this.markAsDirty(Material.MiscDirtyFlag);\r\n }\r\n\r\n /** @internal */\r\n public get _supportGlowLayer() {\r\n return false;\r\n }\r\n\r\n /** @internal */\r\n public set _glowModeEnabled(value: boolean) {\r\n // Do nothing here\r\n }\r\n\r\n /**\r\n * Gets the shader language used in this material.\r\n */\r\n public get shaderLanguage(): ShaderLanguage {\r\n return this._shaderLanguage;\r\n }\r\n\r\n /**\r\n * The ID of the material\r\n */\r\n @serialize()\r\n public id: string;\r\n\r\n /**\r\n * Gets or sets the unique id of the material\r\n */\r\n @serialize()\r\n public uniqueId: number;\r\n\r\n /** @internal */\r\n public _loadedUniqueId: string;\r\n\r\n /**\r\n * The name of the material\r\n */\r\n @serialize()\r\n public name: string;\r\n\r\n /**\r\n * Gets or sets user defined metadata\r\n */\r\n @serialize()\r\n public metadata: any = null;\r\n\r\n /** @internal */\r\n public _internalMetadata: any;\r\n\r\n /**\r\n * For internal use only. Please do not use.\r\n */\r\n public reservedDataStore: any = null;\r\n\r\n /**\r\n * Specifies if the ready state should be checked on each call\r\n */\r\n @serialize()\r\n public checkReadyOnEveryCall = false;\r\n\r\n /**\r\n * Specifies if the ready state should be checked once\r\n */\r\n @serialize()\r\n public checkReadyOnlyOnce = false;\r\n\r\n /**\r\n * The state of the material\r\n */\r\n @serialize()\r\n public state = \"\";\r\n\r\n /**\r\n * If the material can be rendered to several textures with MRT extension\r\n */\r\n public get canRenderToMRT(): boolean {\r\n // By default, shaders are not compatible with MRTs\r\n // Base classes should override that if their shader supports MRT\r\n return false;\r\n }\r\n\r\n /**\r\n * The alpha value of the material\r\n */\r\n @serialize(\"alpha\")\r\n protected _alpha = 1.0;\r\n\r\n /**\r\n * List of inspectable custom properties (used by the Inspector)\r\n * @see https://doc.babylonjs.com/toolsAndResources/inspector#extensibility\r\n */\r\n public inspectableCustomProperties: IInspectable[];\r\n\r\n /**\r\n * Sets the alpha value of the material\r\n */\r\n public set alpha(value: number) {\r\n if (this._alpha === value) {\r\n return;\r\n }\r\n\r\n const oldValue = this._alpha;\r\n this._alpha = value;\r\n\r\n // Only call dirty when there is a state change (no alpha / alpha)\r\n if (oldValue === 1 || value === 1) {\r\n this.markAsDirty(Material.MiscDirtyFlag + Material.PrePassDirtyFlag);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the alpha value of the material\r\n */\r\n public get alpha(): number {\r\n return this._alpha;\r\n }\r\n\r\n /**\r\n * Specifies if back face culling is enabled\r\n */\r\n @serialize(\"backFaceCulling\")\r\n protected _backFaceCulling = true;\r\n\r\n /**\r\n * Sets the culling state (true to enable culling, false to disable)\r\n */\r\n public set backFaceCulling(value: boolean) {\r\n if (this._backFaceCulling === value) {\r\n return;\r\n }\r\n this._backFaceCulling = value;\r\n this.markAsDirty(Material.TextureDirtyFlag);\r\n }\r\n\r\n /**\r\n * Gets the culling state\r\n */\r\n public get backFaceCulling(): boolean {\r\n return this._backFaceCulling;\r\n }\r\n\r\n /**\r\n * Specifies if back or front faces should be culled (when culling is enabled)\r\n */\r\n @serialize(\"cullBackFaces\")\r\n protected _cullBackFaces = true;\r\n\r\n /**\r\n * Sets the type of faces that should be culled (true for back faces, false for front faces)\r\n */\r\n public set cullBackFaces(value: boolean) {\r\n if (this._cullBackFaces === value) {\r\n return;\r\n }\r\n this._cullBackFaces = value;\r\n this.markAsDirty(Material.TextureDirtyFlag);\r\n }\r\n\r\n /**\r\n * Gets the type of faces that should be culled\r\n */\r\n public get cullBackFaces(): boolean {\r\n return this._cullBackFaces;\r\n }\r\n\r\n private _blockDirtyMechanism = false;\r\n\r\n /**\r\n * Block the dirty-mechanism for this specific material\r\n * When set to false after being true the material will be marked as dirty.\r\n */\r\n public get blockDirtyMechanism(): boolean {\r\n return this._blockDirtyMechanism;\r\n }\r\n\r\n public set blockDirtyMechanism(value: boolean) {\r\n if (this._blockDirtyMechanism === value) {\r\n return;\r\n }\r\n\r\n this._blockDirtyMechanism = value;\r\n\r\n if (!value) {\r\n this.markDirty();\r\n }\r\n }\r\n\r\n /**\r\n * This allows you to modify the material without marking it as dirty after every change.\r\n * This function should be used if you need to make more than one dirty-enabling change to the material - adding a texture, setting a new fill mode and so on.\r\n * The callback will pass the material as an argument, so you can make your changes to it.\r\n * @param callback the callback to be executed that will update the material\r\n */\r\n public atomicMaterialsUpdate(callback: (material: this) => void): void {\r\n this.blockDirtyMechanism = true;\r\n try {\r\n callback(this);\r\n } finally {\r\n this.blockDirtyMechanism = false;\r\n }\r\n }\r\n\r\n /**\r\n * Stores the value for side orientation\r\n */\r\n @serialize()\r\n public sideOrientation: Nullable<number> = null;\r\n\r\n /**\r\n * Callback triggered when the material is compiled\r\n */\r\n public onCompiled: Nullable<(effect: Effect) => void> = null;\r\n\r\n /**\r\n * Callback triggered when an error occurs\r\n */\r\n public onError: Nullable<(effect: Effect, errors: string) => void> = null;\r\n\r\n /**\r\n * Callback triggered to get the render target textures\r\n */\r\n public getRenderTargetTextures: Nullable<() => SmartArray<RenderTargetTexture>> = null;\r\n\r\n /**\r\n * Gets a boolean indicating that current material needs to register RTT\r\n */\r\n public get hasRenderTargetTextures(): boolean {\r\n this._eventInfo.hasRenderTargetTextures = false;\r\n this._callbackPluginEventHasRenderTargetTextures(this._eventInfo);\r\n return this._eventInfo.hasRenderTargetTextures;\r\n }\r\n\r\n /**\r\n * Specifies if the material should be serialized\r\n */\r\n public doNotSerialize = false;\r\n\r\n /**\r\n * @internal\r\n */\r\n public _storeEffectOnSubMeshes = false;\r\n\r\n /**\r\n * Stores the animations for the material\r\n */\r\n public animations: Nullable<Array<Animation>> = null;\r\n\r\n /**\r\n * An event triggered when the material is disposed\r\n */\r\n public onDisposeObservable = new Observable<Material>();\r\n\r\n /**\r\n * An observer which watches for dispose events\r\n */\r\n private _onDisposeObserver: Nullable<Observer<Material>> = null;\r\n private _onUnBindObservable: Nullable<Observable<Material>> = null;\r\n\r\n /**\r\n * Called during a dispose event\r\n */\r\n public set onDispose(callback: () => void) {\r\n if (this._onDisposeObserver) {\r\n this.onDisposeObservable.remove(this._onDisposeObserver);\r\n }\r\n this._onDisposeObserver = this.onDisposeObservable.add(callback);\r\n }\r\n\r\n private _onBindObservable: Nullable<Observable<AbstractMesh>>;\r\n\r\n /**\r\n * An event triggered when the material is bound\r\n */\r\n public get onBindObservable(): Observable<AbstractMesh> {\r\n if (!this._onBindObservable) {\r\n this._onBindObservable = new Observable<AbstractMesh>();\r\n }\r\n\r\n return this._onBindObservable;\r\n }\r\n\r\n /**\r\n * An observer which watches for bind events\r\n */\r\n private _onBindObserver: Nullable<Observer<AbstractMesh>> = null;\r\n\r\n /**\r\n * Called during a bind event\r\n */\r\n public set onBind(callback: (Mesh: AbstractMesh) => void) {\r\n if (this._onBindObserver) {\r\n this.onBindObservable.remove(this._onBindObserver);\r\n }\r\n this._onBindObserver = this.onBindObservable.add(callback);\r\n }\r\n\r\n /**\r\n * An event triggered when the material is unbound\r\n */\r\n public get onUnBindObservable(): Observable<Material> {\r\n if (!this._onUnBindObservable) {\r\n this._onUnBindObservable = new Observable<Material>();\r\n }\r\n\r\n return this._onUnBindObservable;\r\n }\r\n\r\n protected _onEffectCreatedObservable: Nullable<Observable<{ effect: Effect; subMesh: Nullable<SubMesh> }>>;\r\n\r\n /**\r\n * An event triggered when the effect is (re)created\r\n */\r\n public get onEffectCreatedObservable(): Observable<{ effect: Effect; subMesh: Nullable<SubMesh> }> {\r\n if (!this._onEffectCreatedObservable) {\r\n this._onEffectCreatedObservable = new Observable<{ effect: Effect; subMesh: Nullable<SubMesh> }>();\r\n }\r\n\r\n return this._onEffectCreatedObservable;\r\n }\r\n\r\n /**\r\n * Stores the value of the alpha mode\r\n */\r\n @serialize()\r\n private _alphaMode: number[] = [Constants.ALPHA_COMBINE];\r\n\r\n /**\r\n * Sets the value of the alpha mode.\r\n *\r\n * | Value | Type | Description |\r\n * | --- | --- | --- |\r\n * | 0 | ALPHA_DISABLE | |\r\n * | 1 | ALPHA_ADD | Defines that alpha blending is COLOR=SRC_ALPHA * SRC + DEST, ALPHA=DEST_ALPHA |\r\n * | 2 | ALPHA_COMBINE | Defines that alpha blending is COLOR=SRC_ALPHA * SRC + (1 - SRC_ALPHA) * DEST, ALPHA=SRC_ALPHA + DEST_ALPHA |\r\n * | 3 | ALPHA_SUBTRACT | Defines that alpha blending is COLOR=(1 - SRC) * DEST, ALPHA=SRC_ALPHA - DEST_ALPHA |\r\n * | 4 | ALPHA_MULTIPLY | Defines that alpha blending is COLOR=DEST * SRC, ALPHA=SRC_ALPHA + DEST_ALPHA |\r\n * | 5 | ALPHA_MAXIMIZED | Defines that alpha blending is COLOR=SRC_ALPHA * SRC + (1 - SRC) * DEST, ALPHA=SRC_ALPHA + DEST_ALPHA |\r\n * | 6 | ALPHA_ONEONE | Defines that alpha blending is COLOR=SRC + DEST, ALPHA=DEST_ALPHA |\r\n * | 7 | ALPHA_PREMULTIPLIED | Defines that alpha blending is COLOR=SRC + (1 - SRC_ALPHA) * DEST, ALPHA=SRC_ALPHA + DEST_ALPHA |\r\n * | 8 | ALPHA_PREMULTIPLIED_PORTERDUFF | Defines that alpha blending is COLOR=SRC + (1 - SRC_ALPHA) * DEST, ALPHA=SRC_ALPHA + (1 - SRC_ALPHA) * DEST_ALPHA |\r\n * | 9 | ALPHA_INTERPOLATE | Defines that alpha blending is COLOR=CST * SRC + (1 - CST) * DEST, ALPHA=CST_ALPHA * SRC + (1 - CST_ALPHA) * DEST_ALPHA |\r\n * | 10 | ALPHA_SCREENMODE | Defines that alpha blending is COLOR=SRC + (1 - SRC) * DEST, ALPHA=SRC_ALPHA + (1 - SRC_ALPHA) * DEST_ALPHA |\r\n * | 11 | ALPHA_ONEONE_ONEONE | Defines that alpha blending is COLOR=SRC + DST, ALPHA=SRC_ALPHA + DEST_ALPHA |\r\n * | 12 | ALPHA_ALPHATOCOLOR | Defines that alpha blending is COLOR=DEST_ALPHA * SRC + DST, ALPHA=0 |\r\n * | 13 | ALPHA_REVERSEONEMINUS | Defines that alpha blending is COLOR=(1 - DEST) * SRC + (1 - SRC) * DEST, ALPHA=(1 - DEST_ALPHA) * SRC_ALPHA + (1 - SRC_ALPHA) * DEST_ALPHA |\r\n * | 14 | ALPHA_SRC_DSTONEMINUSSRCALPHA | Defines that alpha blending is ALPHA=SRC + (1 - SRC ALPHA) * DEST, ALPHA=SRC_ALPHA + (1 - SRC ALPHA) * DEST_ALPHA |\r\n * | 15 | ALPHA_ONEONE_ONEZERO | Defines that alpha blending is COLOR=SRC + DST, ALPHA=SRC_ALPHA |\r\n * | 16 | ALPHA_EXCLUSION | Defines that alpha blending is COLOR=(1 - DEST) * SRC + (1 - SRC) * DEST, ALPHA=DEST_ALPHA |\r\n * | 17 | ALPHA_LAYER_ACCUMULATE | Defines that alpha blending is COLOR=SRC_ALPHA * SRC + (1 - SRC ALPHA) * DEST, ALPHA=SRC_ALPHA + (1 - SRC_ALPHA) * DEST_ALPHA |\r\n * | 18 | ALPHA_MIN | Defines that alpha blending is COLOR=MIN(SRC, DEST), ALPHA=MIN(SRC_ALPHA, DEST_ALPHA) |\r\n * | 19 | ALPHA_MAX | Defines that alpha blending is COLOR=MAX(SRC, DEST), ALPHA=MAX(SRC_ALPHA, DEST_ALPHA) |\r\n * | 20 | ALPHA_DUAL_SRC0_ADD_SRC1xDST | Defines that alpha blending uses dual source blending and is COLOR=SRC + SRC1 * DEST, ALPHA=DST_ALPHA |\r\n *\r\n */\r\n public set alphaMode(value: number) {\r\n if (this._alphaMode[0] === value) {\r\n return;\r\n }\r\n this._alphaMode[0] = value;\r\n this.markAsDirty(Material.TextureDirtyFlag);\r\n }\r\n\r\n /**\r\n * Gets the value of the alpha mode\r\n */\r\n public get alphaMode(): number {\r\n return this._alphaMode[0];\r\n }\r\n\r\n /**\r\n * Gets the list of alpha modes (length greater than 1 for multi-targets)\r\n */\r\n public get alphaModes(): Immutable<number[]> {\r\n return this._alphaMode;\r\n }\r\n\r\n /**\r\n * Sets the value of the alpha mode for a specific target index.\r\n * @param value The alpha mode value to set.\r\n * @param targetIndex The index of the target to set the alpha mode for. Defaults to 0.\r\n */\r\n public setAlphaMode(value: number, targetIndex: number = 0): void {\r\n if (this._alphaMode[targetIndex] === value) {\r\n return;\r\n }\r\n this._alphaMode[targetIndex] = value;\r\n this.markAsDirty(Material.TextureDirtyFlag);\r\n }\r\n\r\n /**\r\n * Stores the state of the need depth pre-pass value\r\n */\r\n @serialize()\r\n private _needDepthPrePass = false;\r\n\r\n /**\r\n * Sets the need depth pre-pass value\r\n */\r\n public set needDepthPrePass(value: boolean) {\r\n if (this._needDepthPrePass === value) {\r\n return;\r\n }\r\n this._needDepthPrePass = value;\r\n if (this._needDepthPrePass) {\r\n this.checkReadyOnEveryCall = true;\r\n }\r\n }\r\n\r\n /**\r\n * Gets the depth pre-pass value\r\n */\r\n public get needDepthPrePass(): boolean {\r\n return this._needDepthPrePass;\r\n }\r\n\r\n /**\r\n * Can this material render to prepass\r\n */\r\n public get isPrePassCapable(): boolean {\r\n return false;\r\n }\r\n\r\n /**\r\n * Specifies if depth writing should be disabled\r\n */\r\n @serialize()\r\n public disableDepthWrite = false;\r\n\r\n /**\r\n * Specifies if color writing should be disabled\r\n */\r\n @serialize()\r\n public disableColorWrite = false;\r\n\r\n /**\r\n * Specifies if depth writing should be forced\r\n */\r\n @serialize()\r\n public forceDepthWrite = false;\r\n\r\n /**\r\n * Specifies the depth function that should be used. 0 means the default engine function\r\n */\r\n @serialize()\r\n public depthFunction = 0;\r\n\r\n /**\r\n * Specifies if there should be a separate pass for culling\r\n */\r\n @serialize()\r\n public separateCullingPass = false;\r\n\r\n /**\r\n * Stores the state specifying if fog should be enabled\r\n */\r\n @serialize(\"fogEnabled\")\r\n private _fogEnabled = true;\r\n\r\n /**\r\n * Sets the state for enabling fog\r\n */\r\n public set fogEnabled(value: boolean) {\r\n if (this._fogEnabled === value) {\r\n return;\r\n }\r\n this._fogEnabled = value;\r\n this.markAsDirty(Material.MiscDirtyFlag);\r\n }\r\n\r\n /**\r\n * Gets the value of the fog enabled state\r\n */\r\n public get fogEnabled(): boolean {\r\n return this._fogEnabled;\r\n }\r\n\r\n /**\r\n * Stores the size of points\r\n */\r\n @serialize()\r\n public pointSize = 1.0;\r\n\r\n /**\r\n * Stores the z offset Factor value\r\n */\r\n @serialize()\r\n public zOffset = 0;\r\n\r\n /**\r\n * Stores the z offset Units value\r\n */\r\n @serialize()\r\n public zOffsetUnits = 0;\r\n\r\n public get wireframe(): boolean {\r\n switch (this._fillMode) {\r\n case Material.WireFrameFillMode:\r\n case Material.LineListDrawMode:\r\n case Material.LineLoopDrawMode:\r\n case Material.LineStripDrawMode:\r\n return true;\r\n }\r\n\r\n return this._scene.forceWireframe;\r\n }\r\n\r\n /**\r\n * Sets the state of wireframe mode\r\n */\r\n public set wireframe(value: boolean) {\r\n this.fillMode = value ? Material.WireFrameFillMode : Material.TriangleFillMode;\r\n }\r\n\r\n /**\r\n * Gets the value specifying if point clouds are enabled\r\n */\r\n @serialize()\r\n public get pointsCloud(): boolean {\r\n switch (this._fillMode) {\r\n case Material.PointFillMode:\r\n case Material.PointListDrawMode:\r\n return true;\r\n }\r\n\r\n return this._scene.forcePointsCloud;\r\n }\r\n\r\n /**\r\n * Sets the state of point cloud mode\r\n */\r\n public set pointsCloud(value: boolean) {\r\n this.fillMode = value ? Material.PointFillMode : Material.TriangleFillMode;\r\n }\r\n\r\n /**\r\n * Gets the material fill mode\r\n */\r\n @serialize()\r\n public get fillMode(): number {\r\n return this._fillMode;\r\n }\r\n\r\n /**\r\n * Sets the material fill mode\r\n */\r\n public set fillMode(value: number) {\r\n if (this._fillMode === value) {\r\n return;\r\n }\r\n\r\n this._fillMode = value;\r\n this.markAsDirty(Material.MiscDirtyFlag);\r\n }\r\n\r\n /**\r\n * Gets or sets the active clipplane 1\r\n */\r\n public clipPlane: Nullable<Plane>;\r\n\r\n /**\r\n * Gets or sets the active clipplane 2\r\n */\r\n public clipPlane2: Nullable<Plane>;\r\n\r\n /**\r\n * Gets or sets the active clipplane 3\r\n */\r\n public clipPlane3: Nullable<Plane>;\r\n\r\n /**\r\n * Gets or sets the active clipplane 4\r\n */\r\n public clipPlane4: Nullable<Plane>;\r\n\r\n /**\r\n * Gets or sets the active clipplane 5\r\n */\r\n public clipPlane5: Nullable<Plane>;\r\n\r\n /**\r\n * Gets or sets the active clipplane 6\r\n */\r\n public clipPlane6: Nullable<Plane>;\r\n\r\n /**\r\n * Gives access to the stencil properties of the material\r\n */\r\n public readonly stencil = new MaterialStencilState();\r\n\r\n protected _useLogarithmicDepth: boolean;\r\n\r\n /**\r\n * In case the depth buffer does not allow enough depth precision for your scene (might be the case in large scenes)\r\n * You can try switching to logarithmic depth.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/advanced/logarithmicDepthBuffer\r\n */\r\n @serialize()\r\n public get useLogarithmicDepth(): boolean {\r\n return this._useLogarithmicDepth;\r\n }\r\n\r\n public set useLogarithmicDepth(value: boolean) {\r\n const fragmentDepthSupported = this.getScene().getEngine().getCaps().fragmentDepthSupported;\r\n\r\n if (value && !fragmentDepthSupported) {\r\n Logger.Warn(\"Logarithmic depth has been requested for a material on a device that doesn't support it.\");\r\n }\r\n\r\n this._useLogarithmicDepth = value && fragmentDepthSupported;\r\n\r\n this._markAllSubMeshesAsMiscDirty();\r\n }\r\n\r\n @serialize()\r\n protected _setVertexOutputInvariant = false;\r\n /**\r\n * Gets or sets the vertex output invariant state\r\n * Setting this property to true will force the shader compiler to disable some optimization to make sure the vertex output is always calculated\r\n * the same way across different compilation units.\r\n * You may need to enable this option if you are seeing some depth artifacts when using a depth pre-pass, for e.g.\r\n * Note that this may have an impact on performance, so leave this option disabled if not needed.\r\n */\r\n public get setVertexOutputInvariant(): boolean {\r\n return this._setVertexOutputInvariant;\r\n }\r\n\r\n public set setVertexOutputInvariant(value: boolean) {\r\n if (this._setVertexOutputInvariant === value) {\r\n return;\r\n }\r\n\r\n this._setVertexOutputInvariant = value;\r\n this._markAllSubMeshesAsMiscDirty();\r\n }\r\n\r\n /**\r\n * @internal\r\n * Stores the effects for the material\r\n */\r\n public _materialContext: IMaterialContext | undefined;\r\n\r\n protected _drawWrapper: DrawWrapper;\r\n /** @internal */\r\n public _getDrawWrapper(): DrawWrapper {\r\n return this._drawWrapper;\r\n }\r\n /**\r\n * @internal\r\n */\r\n public _setDrawWrapper(drawWrapper: DrawWrapper) {\r\n this._drawWrapper = drawWrapper;\r\n }\r\n\r\n /**\r\n * Specifies if uniform buffers should be used\r\n */\r\n private _useUBO: boolean = false;\r\n\r\n /**\r\n * Stores a reference to the scene\r\n */\r\n private _scene: Scene;\r\n protected _needToBindSceneUbo: boolean;\r\n\r\n /**\r\n * Stores the fill mode state\r\n */\r\n private _fillMode = Material.TriangleFillMode;\r\n\r\n /**\r\n * Specifies if the depth write state should be cached\r\n */\r\n private _cachedDepthWriteState: boolean = false;\r\n\r\n /**\r\n * Specifies if the color write state should be cached\r\n */\r\n private _cachedColorWriteState: boolean = false;\r\n\r\n /**\r\n * Specifies if the depth function state should be cached\r\n */\r\n private _cachedDepthFunctionState: number = 0;\r\n\r\n /**\r\n * Stores the uniform buffer\r\n * @internal\r\n */\r\n public _uniformBuffer: UniformBuffer;\r\n\r\n /** @internal */\r\n public _indexInSceneMaterialArray = -1;\r\n\r\n /** @internal */\r\n public meshMap: Nullable<{ [id: string]: AbstractMesh | undefined }> = null;\r\n\r\n /** @internal */\r\n public _parentContainer: Nullable<IAssetContainer> = null;\r\n\r\n /** @internal */\r\n public _dirtyCallbacks: { [code: number]: () => void };\r\n\r\n /** @internal */\r\n public _uniformBufferLayoutBuilt = false;\r\n\r\n protected _eventInfo: MaterialPluginCreated &\r\n MaterialPluginDisposed &\r\n MaterialPluginHasTexture &\r\n MaterialPluginIsReadyForSubMesh &\r\n MaterialPluginGetDefineNames &\r\n MaterialPluginPrepareEffect &\r\n MaterialPluginPrepareDefines &\r\n MaterialPluginPrepareUniformBuffer &\r\n MaterialPluginBindForSubMesh &\r\n MaterialPluginGetAnimatables &\r\n MaterialPluginGetActiveTextures &\r\n MaterialPluginFillRenderTargetTextures &\r\n MaterialPluginHasRenderTargetTextures &\r\n MaterialPluginHardBindForSubMesh = {} as any; // will be initialized before each event notification\r\n\r\n /** @internal */\r\n public _callbackPluginEventGeneric: (\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 = () => void 0;\r\n /** @internal */\r\n public _callbackPluginEventIsReadyForSubMesh: (eventData: MaterialPluginIsReadyForSubMesh) => void = () => void 0;\r\n /** @internal */\r\n public _callbackPluginEventPrepareDefines: (eventData: MaterialPluginPrepareDefines) => void = () => void 0;\r\n /** @internal */\r\n public _callbackPluginEventPrepareDefinesBeforeAttributes: (eventData: MaterialPluginPrepareDefines) => void = () => void 0;\r\n /** @internal */\r\n public _callbackPluginEventHardBindForSubMesh: (eventData: MaterialPluginHardBindForSubMesh) => void = () => void 0;\r\n /** @internal */\r\n public _callbackPluginEventBindForSubMesh: (eventData: MaterialPluginBindForSubMesh) => void = () => void 0;\r\n /** @internal */\r\n public _callbackPluginEventHasRenderTargetTextures: (eventData: MaterialPluginHasRenderTargetTextures) => void = () => void 0;\r\n /** @internal */\r\n public _callbackPluginEventFillRenderTargetTextures: (eventData: MaterialPluginFillRenderTargetTextures) => void = () => void 0;\r\n\r\n /**\r\n * Creates a material instance\r\n * @param name defines the name of the material\r\n * @param scene defines the scene to reference\r\n * @param doNotAdd specifies if the material should be added to the scene\r\n * @param forceGLSL Use the GLSL code generation for the shader (even on WebGPU). Default is false\r\n */\r\n constructor(name: string, scene?: Nullable<Scene>, doNotAdd?: boolean, forceGLSL = false) {\r\n this.name = name;\r\n const setScene = scene || EngineStore.LastCreatedScene;\r\n if (!setScene) {\r\n return;\r\n }\r\n this._scene = setScene;\r\n this._dirtyCallbacks = {};\r\n this._forceGLSL = forceGLSL;\r\n\r\n this._dirtyCallbacks[Constants.MATERIAL_TextureDirtyFlag] = this._markAllSubMeshesAsTexturesDirty.bind(this);\r\n this._dirtyCallbacks[Constants.MATERIAL_LightDirtyFlag] = this._markAllSubMeshesAsLightsDirty.bind(this);\r\n this._dirtyCallbacks[Constants.MATERIAL_FresnelDirtyFlag] = this._markAllSubMeshesAsFresnelDirty.bind(this);\r\n this._dirtyCallbacks[Constants.MATERIAL_AttributesDirtyFlag] = this._markAllSubMeshesAsAttributesDirty.bind(this);\r\n this._dirtyCallbacks[Constants.MATERIAL_MiscDirtyFlag] = this._markAllSubMeshesAsMiscDirty.bind(this);\r\n this._dirtyCallbacks[Constants.MATERIAL_PrePassDirtyFlag] = this._markAllSubMeshesAsPrePassDirty.bind(this);\r\n this._dirtyCallbacks[Constants.MATERIAL_AllDirtyFlag] = this._markAllSubMeshesAsAllDirty.bind(this);\r\n\r\n this.id = name || Tools.RandomId();\r\n this.uniqueId = this._scene.getUniqueId();\r\n this._materialContext = this._scene.getEngine().createMaterialContext();\r\n this._drawWrapper = new DrawWrapper(this._scene.getEngine(), false);\r\n this._drawWrapper.materialContext = this._materialContext;\r\n\r\n this._uniformBuffer = new UniformBuffer(this._scene.getEngine(), undefined, undefined, name);\r\n this._useUBO = this.getScene().getEngine().supportsUniformBuffers;\r\n\r\n this._createUniformBuffer();\r\n\r\n if (!doNotAdd) {\r\n this._scene.addMaterial(this);\r\n }\r\n\r\n if (this._scene.useMaterialMeshMap) {\r\n this.meshMap = {};\r\n }\r\n\r\n Material.OnEventObservable.notifyObservers(this, MaterialPluginEvent.Created);\r\n }\r\n\r\n /** @internal */\r\n public _createUniformBuffer() {\r\n const engine = this.getScene().getEngine();\r\n\r\n this._uniformBuffer?.dispose();\r\n\r\n if (engine.isWebGPU && !this._forceGLSL) {\r\n // Switch main UBO to non UBO to connect to leftovers UBO in webgpu\r\n this._uniformBuffer = new UniformBuffer(engine, undefined, undefined, this.name, true);\r\n this._shaderLanguage = ShaderLanguage.WGSL;\r\n } else {\r\n this._uniformBuffer = new UniformBuffer(this._scene.getEngine(), undefined, undefined, this.name);\r\n }\r\n\r\n this._uniformBufferLayoutBuilt = false;\r\n }\r\n\r\n /**\r\n * Returns a string representation of the current material\r\n * @param fullDetails defines a boolean indicating which levels of logging is desired\r\n * @returns a string with material information\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public toString(fullDetails?: boolean): string {\r\n const ret = \"Name: \" + this.name;\r\n return ret;\r\n }\r\n\r\n /**\r\n * Gets the class name of the material\r\n * @returns a string with the class name of the material\r\n */\r\n public getClassName(): string {\r\n return \"Material\";\r\n }\r\n\r\n /** @internal */\r\n public get _isMaterial() {\r\n return true;\r\n }\r\n\r\n /**\r\n * Specifies if updates for the material been locked\r\n */\r\n public get isFrozen(): boolean {\r\n return this.checkReadyOnlyOnce;\r\n }\r\n\r\n /**\r\n * Locks updates for the material\r\n */\r\n public freeze(): void {\r\n this.markDirty();\r\n this.checkReadyOnlyOnce = true;\r\n }\r\n\r\n /**\r\n * Unlocks updates for the material\r\n */\r\n public unfreeze(): void {\r\n this.markDirty();\r\n this.checkReadyOnlyOnce = false;\r\n }\r\n\r\n /**\r\n * Specifies if the material is ready to be used\r\n * @param mesh defines the mesh to check\r\n * @param useInstances specifies if instances should be used\r\n * @returns a boolean indicating if the material is ready to be used\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public isReady(mesh?: AbstractMesh, useInstances?: boolean): boolean {\r\n return true;\r\n }\r\n\r\n /**\r\n * Specifies that the submesh is ready to be used\r\n * @param mesh defines the mesh to check\r\n * @param subMesh defines which submesh to check\r\n * @param useInstances specifies that instances should be used\r\n * @returns a boolean indicating that the submesh is ready or not\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public isReadyForSubMesh(mesh: AbstractMesh, subMesh: SubMesh, useInstances?: boolean): boolean {\r\n const defines = subMesh.materialDefines;\r\n if (!defines) {\r\n return false;\r\n }\r\n\r\n this._eventInfo.isReadyForSubMesh = true;\r\n this._eventInfo.defines = defines;\r\n this._callbackPluginEventIsReadyForSubMesh(this._eventInfo);\r\n\r\n return this._eventInfo.isReadyForSubMesh;\r\n }\r\n\r\n /**\r\n * Returns the material effect\r\n * @returns the effect associated with the material\r\n */\r\n public getEffect(): Nullable<Effect> {\r\n return this._drawWrapper.effect;\r\n }\r\n\r\n /**\r\n * Returns the current scene\r\n * @returns a Scene\r\n */\r\n public getScene(): Scene {\r\n return this._scene;\r\n }\r\n\r\n /** @internal */\r\n public _getEffectiveOrientation(mesh: Mesh): number {\r\n return this.sideOrientation !== null ? this.sideOrientation : mesh.sideOrientation;\r\n }\r\n\r\n /**\r\n * The transparency mode of the material.\r\n */\r\n protected _transparencyMode: Nullable<number> = null;\r\n\r\n /**\r\n * Gets the current transparency mode.\r\n */\r\n @serialize()\r\n public get transparencyMode(): Nullable<number> {\r\n return this._transparencyMode;\r\n }\r\n\r\n /**\r\n * Sets the transparency mode of the material.\r\n *\r\n * | Value | Type | Description |\r\n * | ----- | ----------------------------------- | ----------- |\r\n * | 0 | OPAQUE | |\r\n * | 1 | ALPHATEST | |\r\n * | 2 | ALPHABLEND | |\r\n * | 3 | ALPHATESTANDBLEND | |\r\n *\r\n */\r\n public set transparencyMode(value: Nullable<number>) {\r\n if (this._transparencyMode === value) {\r\n return;\r\n }\r\n\r\n this._transparencyMode = value;\r\n\r\n this._markAllSubMeshesAsTexturesAndMiscDirty();\r\n }\r\n\r\n protected get _hasTransparencyMode(): boolean {\r\n return this._transparencyMode != null;\r\n }\r\n\r\n protected get _transparencyModeIsBlend(): boolean {\r\n return this._transparencyMode === Material.MATERIAL_ALPHABLEND || this._transparencyMode === Material.MATERIAL_ALPHATESTANDBLEND;\r\n }\r\n\r\n protected get _transparencyModeIsTest(): boolean {\r\n return this._transparencyMode === Material.MATERIAL_ALPHATEST || this._transparencyMode === Material.MATERIAL_ALPHATESTANDBLEND;\r\n }\r\n\r\n /**\r\n * Returns true if alpha blending should be disabled.\r\n */\r\n protected get _disableAlphaBlending(): boolean {\r\n return this._transparencyMode === Material.MATERIAL_OPAQUE || this._transparencyMode === Material.MATERIAL_ALPHATEST;\r\n }\r\n\r\n /**\r\n * Specifies whether or not this material should be rendered in alpha blend mode.\r\n * @returns a boolean specifying if alpha blending is needed\r\n * @deprecated Please use needAlphaBlendingForMesh instead\r\n */\r\n public needAlphaBlending(): boolean {\r\n if (this._hasTransparencyMode) {\r\n return this._transparencyModeIsBlend;\r\n }\r\n\r\n if (this._disableAlphaBlending) {\r\n return false;\r\n }\r\n\r\n return this.alpha < 1.0;\r\n }\r\n\r\n /**\r\n * Specifies if the mesh will require alpha blending\r\n * @param mesh defines the mesh to check\r\n * @returns a boolean specifying if alpha blending is needed for the mesh\r\n */\r\n public needAlphaBlendingForMesh(mesh: AbstractMesh): boolean {\r\n if (this._hasTransparencyMode) {\r\n return this._transparencyModeIsBlend;\r\n }\r\n\r\n if (mesh.visibility < 1.0) {\r\n return true;\r\n }\r\n\r\n if (this._disableAlphaBlending) {\r\n return false;\r\n }\r\n\r\n return mesh.hasVertexAlpha || this.needAlphaBlending();\r\n }\r\n\r\n /**\r\n * Specifies whether or not this material should be rendered in alpha test mode.\r\n * @returns a boolean specifying if an alpha test is needed.\r\n * @deprecated Please use needAlphaTestingForMesh instead\r\n */\r\n public needAlphaTesting(): boolean {\r\n if (this._hasTransparencyMode) {\r\n return this._transparencyModeIsTest;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Specifies if material alpha testing should be turned on for the mesh\r\n * @param mesh defines the mesh to check\r\n * @returns a boolean specifying if alpha testing should be turned on for the mesh\r\n */\r\n public needAlphaTestingForMesh(mesh: AbstractMesh): boolean {\r\n if (this._hasTransparencyMode) {\r\n return this._transparencyModeIsTest;\r\n }\r\n\r\n return !this.needAlphaBlendingForMesh(mesh) && this.needAlphaTesting();\r\n }\r\n\r\n /**\r\n * Gets the texture used for the alpha test\r\n * @returns the texture to use for alpha testing\r\n */\r\n public getAlphaTestTexture(): Nullable<BaseTexture> {\r\n return null;\r\n }\r\n\r\n /**\r\n * Marks the material to indicate that it needs to be re-calculated\r\n * @param forceMaterialDirty - Forces the material to be marked as dirty for all components (same as this.markAsDirty(Material.AllDirtyFlag)). You should use this flag if the material is frozen and you want to force a recompilation.\r\n */\r\n public markDirty(forceMaterialDirty = false): void {\r\n const meshes = this.getScene().meshes;\r\n for (const mesh of meshes) {\r\n if (!mesh.subMeshes) {\r\n continue;\r\n }\r\n for (const subMesh of mesh.subMeshes) {\r\n if (subMesh.getMaterial() !== this) {\r\n continue;\r\n }\r\n\r\n for (const drawWrapper of subMesh._drawWrappers) {\r\n if (!drawWrapper) {\r\n continue;\r\n }\r\n if (this._materialContext === drawWrapper.materialContext) {\r\n drawWrapper._wasPreviouslyReady = false;\r\n drawWrapper._wasPreviouslyUsingInstances = null;\r\n drawWrapper._forceRebindOnNextCall = forceMaterialDirty;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (forceMaterialDirty) {\r\n this.markAsDirty(Material.AllDirtyFlag);\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _preBind(effect?: Effect | DrawWrapper, overrideOrientation: Nullable<number> = null): boolean {\r\n const engine = this._scene.getEngine();\r\n\r\n const orientation = overrideOrientation == null ? this.sideOrientation : overrideOrientation;\r\n const reverse = orientation === Material.ClockWiseSideOrientation;\r\n\r\n const effectiveDrawWrapper = effect ? effect : this._getDrawWrapper();\r\n\r\n if (IsWrapper(effectiveDrawWrapper) && effectiveDrawWrapper.materialContext) {\r\n effectiveDrawWrapper.materialContext.useVertexPulling = this.useVertexPulling;\r\n }\r\n\r\n engine.enableEffect(effectiveDrawWrapper);\r\n engine.setState(\r\n this.backFaceCulling,\r\n this.zOffset,\r\n false,\r\n reverse,\r\n this._scene._mirroredCameraPosition ? !this.cullBackFaces : this.cullBackFaces,\r\n this.stencil,\r\n this.zOffsetUnits\r\n );\r\n\r\n return reverse;\r\n }\r\n\r\n /**\r\n * Binds the material to the mesh\r\n * @param world defines the world transformation matrix\r\n * @param mesh defines the mesh to bind the material to\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public bind(world: Matrix, mesh?: Mesh): void {}\r\n\r\n /**\r\n * Initializes the uniform buffer layout for the shader.\r\n */\r\n public buildUniformLayout(): void {\r\n const ubo = this._uniformBuffer;\r\n\r\n this._eventInfo.ubo = ubo;\r\n this._callbackPluginEventGeneric(MaterialPluginEvent.PrepareUniformBuffer, this._eventInfo);\r\n\r\n ubo.create();\r\n\r\n this._uniformBufferLayoutBuilt = true;\r\n }\r\n\r\n /**\r\n * Binds the submesh to the material\r\n * @param world defines the world transformation matrix\r\n * @param mesh defines the mesh containing the submesh\r\n * @param subMesh defines the submesh to bind the material to\r\n */\r\n public bindForSubMesh(world: Matrix, mesh: Mesh, subMesh: SubMesh): void {\r\n const drawWrapper = subMesh._drawWrapper;\r\n\r\n this._eventInfo.subMesh = subMesh;\r\n this._callbackPluginEventBindForSubMesh(this._eventInfo);\r\n drawWrapper._forceRebindOnNextCall = false;\r\n }\r\n\r\n /**\r\n * Binds the world matrix to the material\r\n * @param world defines the world transformation matrix\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public bindOnlyWorldMatrix(world: Matrix): void {}\r\n\r\n /**\r\n * Binds the view matrix to the effect\r\n * @param effect defines the effect to bind the view matrix to\r\n */\r\n public bindView(effect: Effect): void {\r\n if (!this._useUBO) {\r\n effect.setMatrix(\"view\", this.getScene().getViewMatrix());\r\n } else {\r\n this._needToBindSceneUbo = true;\r\n }\r\n }\r\n\r\n /**\r\n * Binds the view projection and projection matrices to the effect\r\n * @param effect defines the effect to bind the view projection and projection matrices to\r\n */\r\n public bindViewProjection(effect: Effect): void {\r\n if (!this._useUBO) {\r\n effect.setMatrix(\"viewProjection\", this.getScene().getTransformMatrix());\r\n effect.setMatrix(\"projection\", this.getScene().getProjectionMatrix());\r\n } else {\r\n this._needToBindSceneUbo = true;\r\n }\r\n }\r\n\r\n /**\r\n * Binds the view matrix to the effect\r\n * @param effect defines the effect to bind the view matrix to\r\n * @param variableName name of the shader variable that will hold the eye position\r\n */\r\n public bindEyePosition(effect: Effect, variableName?: string): void {\r\n if (!this._useUBO) {\r\n this._scene.bindEyePosition(effect, variableName);\r\n } else {\r\n this._needToBindSceneUbo = true;\r\n }\r\n }\r\n\r\n /**\r\n * Processes to execute after binding the material to a mesh\r\n * @param mesh defines the rendered mesh\r\n * @param effect defines the effect used to bind the material\r\n * @param _subMesh defines the subMesh that the material has been bound for\r\n */\r\n protected _afterBind(mesh?: AbstractMesh, effect: Nullable<Effect> = null, _subMesh?: SubMesh): void {\r\n this._scene._cachedMaterial = this;\r\n if (this._needToBindSceneUbo) {\r\n if (effect) {\r\n this._needToBindSceneUbo = false;\r\n BindSceneUniformBuffer(effect, this.getScene().getSceneUniformBuffer());\r\n this._scene.finalizeSceneUbo();\r\n }\r\n }\r\n if (mesh) {\r\n this._scene._cachedVisibility = mesh.visibility;\r\n } else {\r\n this._scene._cachedVisibility = 1;\r\n }\r\n\r\n if (this._onBindObservable && mesh) {\r\n this._onBindObservable.notifyObservers(mesh);\r\n }\r\n\r\n if (this.disableDepthWrite) {\r\n const engine = this._scene.getEngine();\r\n this._cachedDepthWriteState = engine.getDepthWrite();\r\n engine.setDepthWrite(false);\r\n }\r\n\r\n if (this.disableColorWrite) {\r\n const engine = this._scene.getEngine();\r\n this._cachedColorWriteState = engine.getColorWrite();\r\n engine.setColorWrite(false);\r\n }\r\n\r\n if (this.depthFunction !== 0) {\r\n const engine = this._scene.getEngine();\r\n this._cachedDepthFunctionState = engine.getDepthFunction() || 0;\r\n engine.setDepthFunction(this.depthFunction);\r\n }\r\n }\r\n\r\n /**\r\n * Unbinds the material from the mesh\r\n */\r\n public unbind(): void {\r\n this._scene.getSceneUniformBuffer().unbindEffect();\r\n\r\n if (this._onUnBindObservable) {\r\n this._onUnBindObservable.notifyObservers(this);\r\n }\r\n\r\n if (this.depthFunction !== 0) {\r\n const engine = this._scene.getEngine();\r\n engine.setDepthFunction(this._cachedDepthFunctionState);\r\n }\r\n\r\n if (this.disableDepthWrite) {\r\n const engine = this._scene.getEngine();\r\n engine.setDepthWrite(this._cachedDepthWriteState);\r\n }\r\n\r\n if (this.disableColorWrite) {\r\n const engine = this._scene.getEngine();\r\n engine.setColorWrite(this._cachedColorWriteState);\r\n }\r\n }\r\n\r\n /**\r\n * Returns the animatable textures.\r\n * @returns - Array of animatable textures.\r\n */\r\n public getAnimatables(): IAnimatable[] {\r\n this._eventInfo.animatables = [];\r\n this._callbackPluginEventGeneric(MaterialPluginEvent.GetAnimatables, this._eventInfo);\r\n return this._eventInfo.animatables;\r\n }\r\n\r\n /**\r\n * Gets the active textures from the material\r\n * @returns an array of textures\r\n */\r\n public getActiveTextures(): BaseTexture[] {\r\n this._eventInfo.activeTextures = [];\r\n this._callbackPluginEventGeneric(MaterialPluginEvent.GetActiveTextures, this._eventInfo);\r\n return this._eventInfo.activeTextures;\r\n }\r\n\r\n /**\r\n * Specifies if the material uses a texture\r\n * @param texture defines the texture to check against the material\r\n * @returns a boolean specifying if the material uses the texture\r\n */\r\n public hasTexture(texture: BaseTexture): boolean {\r\n this._eventInfo.hasTexture = false;\r\n this._eventInfo.texture = texture;\r\n this._callbackPluginEventGeneric(MaterialPluginEvent.HasTexture, this._eventInfo);\r\n return this._eventInfo.hasTexture;\r\n }\r\n\r\n /**\r\n * Makes a duplicate of the material, and gives it a new name\r\n * @param name defines the new name for the duplicated material\r\n * @returns the cloned material\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public clone(name: string): Nullable<Material> {\r\n return null;\r\n }\r\n\r\n protected _clonePlugins(targetMaterial: Material, rootUrl: string) {\r\n const serializationObject: any = {};\r\n\r\n // Create plugins in targetMaterial in case they don't exist\r\n this._serializePlugins(serializationObject);\r\n\r\n Material._ParsePlugins(serializationObject, targetMaterial, this._scene, rootUrl);\r\n\r\n // Copy the properties of the current plugins to the cloned material's plugins\r\n if (this.pluginManager) {\r\n for (const plugin of this.pluginManager._plugins) {\r\n const targetPlugin = targetMaterial.pluginManager!.getPlugin(plugin.name);\r\n if (targetPlugin) {\r\n plugin.copyTo(targetPlugin);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets the meshes bound to the material\r\n * @returns an array of meshes bound to the material\r\n */\r\n public getBindedMeshes(): AbstractMesh[] {\r\n if (this.meshMap) {\r\n const result: AbstractMesh[] = [];\r\n for (const meshId in this.meshMap) {\r\n const mesh = this.meshMap[meshId];\r\n if (mesh) {\r\n result.push(mesh);\r\n }\r\n }\r\n return result;\r\n } else {\r\n const meshes = this._scene.meshes;\r\n return meshes.filter((mesh) => mesh.material === this);\r\n }\r\n }\r\n\r\n /**\r\n * Force shader compilation\r\n * @param mesh defines the mesh associated with this material\r\n * @param onCompiled defines a function to execute once the material is compiled\r\n * @param options defines the options to configure the compilation\r\n * @param onError defines a function to execute if the material fails compiling\r\n */\r\n public forceCompilation(\r\n mesh: AbstractMesh,\r\n onCompiled?: (material: Material) => void,\r\n options?: Partial<IMaterialCompilationOptions>,\r\n onError?: (reason: string) => void\r\n ): void {\r\n const localOptions = {\r\n clipPlane: false,\r\n useInstances: false,\r\n ...options,\r\n };\r\n\r\n const scene = this.getScene();\r\n const currentHotSwapingState = this.allowShaderHotSwapping;\r\n this.allowShaderHotSwapping = false; // Turned off to let us evaluate the real compilation state\r\n\r\n const checkReady = () => {\r\n if (!this._scene || !this._scene.getEngine()) {\r\n return;\r\n }\r\n\r\n const clipPlaneState = scene.clipPlane;\r\n\r\n if (localOptions.clipPlane) {\r\n scene.clipPlane = new Plane(0, 0, 0, 1);\r\n }\r\n\r\n if (this._storeEffectOnSubMeshes) {\r\n let allDone = true,\r\n lastError = null;\r\n if (mesh.subMeshes) {\r\n const tempSubMesh = new SubMesh(0, 0, 0, 0, 0, mesh, undefined, false, false);\r\n if (tempSubMesh.materialDefines) {\r\n tempSubMesh.materialDefines._renderId = -1;\r\n }\r\n if (!this.isReadyForSubMesh(mesh, tempSubMesh, localOptions.useInstances)) {\r\n if (tempSubMesh.effect && tempSubMesh.effect.getCompilationError() && tempSubMesh.effect.allFallbacksProcessed()) {\r\n lastError = tempSubMesh.effect.getCompilationError();\r\n } else {\r\n allDone = false;\r\n setTimeout(checkReady, 16);\r\n }\r\n }\r\n }\r\n if (allDone) {\r\n this.allowShaderHotSwapping = currentHotSwapingState;\r\n if (lastError) {\r\n if (onError) {\r\n onError(lastError);\r\n }\r\n }\r\n if (onCompiled) {\r\n onCompiled(this);\r\n }\r\n }\r\n } else {\r\n if (this.isReady()) {\r\n this.allowShaderHotSwapping = currentHotSwapingState;\r\n if (onCompiled) {\r\n onCompiled(this);\r\n }\r\n } else {\r\n setTimeout(checkReady, 16);\r\n }\r\n }\r\n\r\n if (localOptions.clipPlane) {\r\n scene.clipPlane = clipPlaneState;\r\n }\r\n };\r\n\r\n checkReady();\r\n }\r\n\r\n /**\r\n * Force shader compilation\r\n * @param mesh defines the mesh that will use this material\r\n * @param options defines additional options for compiling the shaders\r\n * @returns a promise that resolves when the compilation completes\r\n */\r\n public async forceCompilationAsync(mesh: AbstractMesh, options?: Partial<IMaterialCompilationOptions>): Promise<void> {\r\n return await new Promise((resolve, reject) => {\r\n this.forceCompilation(\r\n mesh,\r\n () => {\r\n resolve();\r\n },\r\n options,\r\n (reason) => {\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n reject(reason);\r\n }\r\n );\r\n });\r\n }\r\n\r\n private static readonly _AllDirtyCallBack = (defines: MaterialDefines) => defines.markAllAsDirty();\r\n private static readonly _ImageProcessingDirtyCallBack = (defines: MaterialDefines) => defines.markAsImageProcessingDirty();\r\n private static readonly _TextureDirtyCallBack = (defines: MaterialDefines) => defines.markAsTexturesDirty();\r\n private static readonly _FresnelDirtyCallBack = (defines: MaterialDefines) => defines.markAsFresnelDirty();\r\n private static readonly _MiscDirtyCallBack = (defines: MaterialDefines) => defines.markAsMiscDirty();\r\n private static readonly _PrePassDirtyCallBack = (defines: MaterialDefines) => defines.markAsPrePassDirty();\r\n private static readonly _LightsDirtyCallBack = (defines: MaterialDefines) => defines.markAsLightDirty();\r\n private static readonly _AttributeDirtyCallBack = (defines: MaterialDefines) => defines.markAsAttributesDirty();\r\n\r\n private static _FresnelAndMiscDirtyCallBack = (defines: MaterialDefines) => {\r\n Material._FresnelDirtyCallBack(defines);\r\n Material._MiscDirtyCallBack(defines);\r\n };\r\n\r\n private static _TextureAndMiscDirtyCallBack = (defines: MaterialDefines) => {\r\n Material._TextureDirtyCallBack(defines);\r\n Material._MiscDirtyCallBack(defines);\r\n };\r\n\r\n private static readonly _DirtyCallbackArray: Array<(defines: MaterialDefines) => void> = [];\r\n private static readonly _RunDirtyCallBacks = (defines: MaterialDefines) => {\r\n for (const cb of Material._DirtyCallbackArray) {\r\n cb(defines);\r\n }\r\n };\r\n\r\n /**\r\n * Marks a define in the material to indicate that it needs to be re-computed\r\n * @param flag defines a flag used to determine which parts of the material have to be marked as dirty\r\n */\r\n public markAsDirty(flag: number): void {\r\n if (this.getScene().blockMaterialDirtyMechanism || this._blockDirtyMechanism) {\r\n return;\r\n }\r\n\r\n Material._DirtyCallbackArray.length = 0;\r\n\r\n if (flag & Material.ImageProcessingDirtyFlag) {\r\n Material._DirtyCallbackArray.push(Material._ImageProcessingDirtyCallBack);\r\n }\r\n\r\n if (flag & Material.TextureDirtyFlag) {\r\n Material._DirtyCallbackArray.push(Material._TextureDirtyCallBack);\r\n }\r\n\r\n if (flag & Material.LightDirtyFlag) {\r\n Material._DirtyCallbackArray.push(Material._LightsDirtyCallBack);\r\n }\r\n\r\n if (flag & Material.FresnelDirtyFlag) {\r\n Material._DirtyCallbackArray.push(Material._FresnelDirtyCallBack);\r\n }\r\n\r\n if (flag & Material.AttributesDirtyFlag) {\r\n Material._DirtyCallbackArray.push(Material._AttributeDirtyCallBack);\r\n }\r\n\r\n if (flag & Material.MiscDirtyFlag) {\r\n Material._DirtyCallbackArray.push(Material._MiscDirtyCallBack);\r\n }\r\n\r\n if (flag & Material.PrePassDirtyFlag) {\r\n Material._DirtyCallbackArray.push(Material._PrePassDirtyCallBack);\r\n }\r\n\r\n if (Material._DirtyCallbackArray.length) {\r\n this._markAllSubMeshesAsDirty(Material._RunDirtyCallBacks);\r\n }\r\n\r\n this.getScene().resetCachedMaterial();\r\n }\r\n\r\n /**\r\n * Resets the draw wrappers cache for all submeshes that are using this material\r\n */\r\n public resetDrawCache(): void {\r\n const meshes = this.getScene().meshes;\r\n for (const mesh of meshes) {\r\n if (!mesh.subMeshes) {\r\n continue;\r\n }\r\n for (const subMesh of mesh.subMeshes) {\r\n if (subMesh.getMaterial() !== this) {\r\n continue;\r\n }\r\n\r\n subMesh.resetDrawCache();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Marks all submeshes of a material to indicate that their material defines need to be re-calculated\r\n * @param func defines a function which checks material defines against the submeshes\r\n */\r\n protected _markAllSubMeshesAsDirty(func: (defines: MaterialDefines) => void) {\r\n const scene = this.getScene();\r\n if (scene.blockMaterialDirtyMechanism || this._blockDirtyMechanism) {\r\n return;\r\n }\r\n\r\n const meshes = scene.meshes;\r\n for (const mesh of meshes) {\r\n if (!mesh.subMeshes) {\r\n continue;\r\n }\r\n for (const subMesh of mesh.subMeshes) {\r\n // We want to skip the submeshes which are not using this material or which have not yet rendered at least once\r\n const material = subMesh.getMaterial() || (scene._hasDefaultMaterial ? scene.defaultMaterial : null);\r\n if (material !== this) {\r\n continue;\r\n }\r\n\r\n for (const drawWrapper of subMesh._drawWrappers) {\r\n if (!drawWrapper || !drawWrapper.defines || !(drawWrapper.defines as MaterialDefines).markAllAsDirty) {\r\n continue;\r\n }\r\n if (this._materialContext === drawWrapper.materialContext) {\r\n func(drawWrapper.defines as MaterialDefines);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Indicates that the scene should check if the rendering now needs a prepass\r\n */\r\n protected _markScenePrePassDirty() {\r\n if (this.getScene().blockMaterialDirtyMechanism || this._blockDirtyMechanism) {\r\n return;\r\n }\r\n\r\n const prePassRenderer = this.getScene().enablePrePassRenderer();\r\n if (prePassRenderer) {\r\n prePassRenderer.markAsDirty();\r\n }\r\n }\r\n\r\n /**\r\n * Indicates that we need to re-calculated for all submeshes\r\n */\r\n protected _markAllSubMeshesAsAllDirty() {\r\n this._markAllSubMeshesAsDirty(Material._AllDirtyCallBack);\r\n }\r\n\r\n /**\r\n * Indicates that image processing needs to be re-calculated for all submeshes\r\n */\r\n protected _markAllSubMeshesAsImageProcessingDirty() {\r\n this._markAllSubMeshesAsDirty(Material._ImageProcessingDirtyCallBack);\r\n }\r\n\r\n /**\r\n * Indicates that textures need to be re-calculated for all submeshes\r\n */\r\n protected _markAllSubMeshesAsTexturesDirty() {\r\n this._markAllSubMeshesAsDirty(Material._TextureDirtyCallBack);\r\n }\r\n\r\n /**\r\n * Indicates that fresnel needs to be re-calculated for all submeshes\r\n */\r\n protected _markAllSubMeshesAsFresnelDirty() {\r\n this._markAllSubMeshesAsDirty(Material._FresnelDirtyCallBack);\r\n }\r\n\r\n /**\r\n * Indicates that fresnel and misc need to be re-calculated for all submeshes\r\n */\r\n protected _markAllSubMeshesAsFresnelAndMiscDirty() {\r\n this._markAllSubMeshesAsDirty(Material._FresnelAndMiscDirtyCallBack);\r\n }\r\n\r\n /**\r\n * Indicates that lights need to be re-calculated for all submeshes\r\n */\r\n protected _markAllSubMeshesAsLightsDirty() {\r\n this._markAllSubMeshesAsDirty(Material._LightsDirtyCallBack);\r\n }\r\n\r\n /**\r\n * Indicates that attributes need to be re-calculated for all submeshes\r\n */\r\n protected _markAllSubMeshesAsAttributesDirty() {\r\n this._markAllSubMeshesAsDirty(Material._AttributeDirtyCallBack);\r\n }\r\n\r\n /**\r\n * Indicates that misc needs to be re-calculated for all submeshes\r\n */\r\n protected _markAllSubMeshesAsMiscDirty() {\r\n this._markAllSubMeshesAsDirty(Material._MiscDirtyCallBack);\r\n }\r\n\r\n /**\r\n * Indicates that prepass needs to be re-calculated for all submeshes\r\n */\r\n protected _markAllSubMeshesAsPrePassDirty() {\r\n this._markAllSubMeshesAsDirty(Material._PrePassDirtyCallBack);\r\n }\r\n\r\n /**\r\n * Indicates that textures and misc need to be re-calculated for all submeshes\r\n */\r\n protected _markAllSubMeshesAsTexturesAndMiscDirty() {\r\n this._markAllSubMeshesAsDirty(Material._TextureAndMiscDirtyCallBack);\r\n }\r\n\r\n protected _checkScenePerformancePriority() {\r\n if (this._scene.performancePriority !== ScenePerformancePriority.BackwardCompatible) {\r\n this.checkReadyOnlyOnce = true;\r\n // re-set the flag when the perf priority changes\r\n const observer = this._scene.onScenePerformancePriorityChangedObservable.addOnce(() => {\r\n this.checkReadyOnlyOnce = false;\r\n });\r\n // if this material is disposed before the scene is disposed, cleanup the observer\r\n this.onDisposeObservable.add(() => {\r\n this._scene.onScenePerformancePriorityChangedObservable.remove(observer);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Sets the required values to the prepass renderer.\r\n * @param prePassRenderer defines the prepass renderer to setup.\r\n * @returns true if the pre pass is needed.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public setPrePassRenderer(prePassRenderer: PrePassRenderer): boolean {\r\n // Do Nothing by default\r\n return false;\r\n }\r\n\r\n /**\r\n * Disposes the material\r\n * @param _forceDisposeEffect kept for backward compat. We reference count the effect now.\r\n * @param forceDisposeTextures specifies if textures should be forcefully disposed\r\n * @param notBoundToMesh specifies if the material that is being disposed is known to be not bound to any mesh\r\n */\r\n public dispose(_forceDisposeEffect?: boolean, forceDisposeTextures?: boolean, notBoundToMesh?: boolean): void {\r\n const scene = this.getScene();\r\n // Animations\r\n scene.stopAnimation(this);\r\n scene.freeProcessedMaterials();\r\n\r\n // Remove from scene\r\n scene.removeMaterial(this);\r\n\r\n this._eventInfo.forceDisposeTextures = forceDisposeTextures;\r\n this._callbackPluginEventGeneric(MaterialPluginEvent.Disposed, this._eventInfo);\r\n\r\n if (this._parentContainer) {\r\n const index = this._parentContainer.materials.indexOf(this);\r\n if (index > -1) {\r\n this._parentContainer.materials.splice(index, 1);\r\n }\r\n this._parentContainer = null;\r\n }\r\n\r\n if (notBoundToMesh !== true) {\r\n // Remove from meshes\r\n if (this.meshMap) {\r\n for (const meshId in this.meshMap) {\r\n const mesh = this.meshMap[meshId];\r\n this._disposeMeshResources(mesh);\r\n }\r\n } else {\r\n const meshes = scene.meshes;\r\n for (const mesh of meshes) {\r\n this._disposeMeshResources(mesh);\r\n }\r\n }\r\n }\r\n\r\n this._uniformBuffer.dispose();\r\n\r\n // Shader are kept in cache for further use but we can get rid of this by using forceDisposeEffect\r\n if (this._drawWrapper.effect) {\r\n if (!this._storeEffectOnSubMeshes) {\r\n this._drawWrapper.effect.dispose();\r\n }\r\n\r\n this._drawWrapper.effect = null;\r\n }\r\n\r\n this.metadata = null;\r\n\r\n // Callback\r\n this.onDisposeObservable.notifyObservers(this);\r\n\r\n this.onDisposeObservable.clear();\r\n if (this._onBindObservable) {\r\n this._onBindObservable.clear();\r\n }\r\n\r\n if (this._onUnBindObservable) {\r\n this._onUnBindObservable.clear();\r\n }\r\n\r\n if (this._onEffectCreatedObservable) {\r\n this._onEffectCreatedObservable.clear();\r\n }\r\n\r\n if (this._eventInfo) {\r\n this._eventInfo = {} as any;\r\n }\r\n }\r\n\r\n private _disposeMeshResources(mesh: AbstractMesh | undefined) {\r\n if (!mesh) {\r\n return;\r\n }\r\n\r\n const geometry = (<Mesh>mesh).geometry;\r\n const materialForRenderPass = mesh._internalAbstractMeshDataInfo._materialForRenderPass;\r\n if (this._storeEffectOnSubMeshes) {\r\n if (mesh.subMeshes && materialForRenderPass) {\r\n for (const subMesh of mesh.subMeshes) {\r\n const drawWrappers = subMesh._drawWrappers;\r\n for (let renderPassIndex = 0; renderPassIndex < drawWrappers.length; renderPassIndex++) {\r\n const effect = drawWrappers[renderPassIndex]?.effect;\r\n if (!effect) {\r\n continue;\r\n }\r\n const material = materialForRenderPass[renderPassIndex];\r\n if (material === this) {\r\n geometry?._releaseVertexArrayObject(effect);\r\n subMesh._removeDrawWrapper(renderPassIndex, true, true);\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n geometry?._releaseVertexArrayObject(this._drawWrapper.effect);\r\n }\r\n\r\n if (mesh.material === this && !(mesh as InstancedMesh).sourceMesh) {\r\n mesh.material = null;\r\n }\r\n }\r\n\r\n /**\r\n * Serializes this material\r\n * @returns the serialized material object\r\n */\r\n public serialize(): any {\r\n const serializationObject = SerializationHelper.Serialize(this);\r\n\r\n serializationObject.stencil = this.stencil.serialize();\r\n serializationObject.uniqueId = this.uniqueId;\r\n\r\n this._serializePlugins(serializationObject);\r\n\r\n return serializationObject;\r\n }\r\n\r\n protected _serializePlugins(serializationObject: any) {\r\n serializationObject.plugins = {};\r\n\r\n if (this.pluginManager) {\r\n for (const plugin of this.pluginManager._plugins) {\r\n if (!plugin.doNotSerialize) {\r\n serializationObject.plugins[plugin.getClassName()] = plugin.serialize();\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Parses the alpha mode from the material data to parse\r\n * @param parsedMaterial defines the material data to parse\r\n * @param material defines the material to update\r\n */\r\n public static ParseAlphaMode(parsedMaterial: any, material: Material) {\r\n if (parsedMaterial._alphaMode !== undefined) {\r\n material._alphaMode = Array.isArray(parsedMaterial._alphaMode) ? parsedMaterial._alphaMode : [parsedMaterial._alphaMode];\r\n } else if (parsedMaterial.alphaMode !== undefined) {\r\n material._alphaMode = Array.isArray(parsedMaterial.alphaMode) ? parsedMaterial.alphaMode : [parsedMaterial.alphaMode];\r\n } else {\r\n material._alphaMode = [Constants.ALPHA_COMBINE];\r\n }\r\n }\r\n\r\n /**\r\n * Creates a material from parsed material data\r\n * @param parsedMaterial defines parsed material data\r\n * @param scene defines the hosting scene\r\n * @param rootUrl defines the root URL to use to load textures\r\n * @returns a new material\r\n */\r\n public static Parse(parsedMaterial: any, scene: Scene, rootUrl: string): Nullable<Material> {\r\n if (!parsedMaterial.customType) {\r\n parsedMaterial.customType = \"BABYLON.StandardMaterial\";\r\n } else if (parsedMaterial.customType === \"BABYLON.PBRMaterial\" && parsedMaterial.overloadedAlbedo) {\r\n parsedMaterial.customType = \"BABYLON.LegacyPBRMaterial\";\r\n if (!BABYLON.LegacyPBRMaterial) {\r\n Logger.Error(\"Your scene is trying to load a legacy version of the PBRMaterial, please, include it from the materials library.\");\r\n return null;\r\n }\r\n }\r\n\r\n const materialType = Tools.Instantiate(parsedMaterial.customType);\r\n const material = materialType.Parse(parsedMaterial, scene, rootUrl);\r\n material._loadedUniqueId = parsedMaterial.uniqueId;\r\n\r\n Material.ParseAlphaMode(parsedMaterial, material);\r\n\r\n return material;\r\n }\r\n\r\n protected static _ParsePlugins(serializationObject: any, material: Material, scene: Scene, rootUrl: string) {\r\n if (!serializationObject.plugins) {\r\n return;\r\n }\r\n\r\n for (const pluginClassName in serializationObject.plugins) {\r\n const pluginData = serializationObject.plugins[pluginClassName];\r\n\r\n let plugin = material.pluginManager?.getPlugin(pluginData.name);\r\n\r\n if (!plugin) {\r\n const pluginClassType = Tools.Instantiate(\"BABYLON.\" + pluginClassName);\r\n if (pluginClassType) {\r\n plugin = new pluginClassType(material);\r\n }\r\n }\r\n\r\n plugin?.parse(pluginData, scene, rootUrl);\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"material.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/material.ts"],"names":[],"mappings":"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","sourcesContent":["import { serialize } from \"../Misc/decorators\";\r\nimport { Tools } from \"../Misc/tools\";\r\nimport type { IAnimatable } from \"../Animations/animatable.interface\";\r\nimport type { SmartArray } from \"../Misc/smartArray\";\r\nimport type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Immutable, Nullable } from \"../types\";\r\nimport type { Matrix } from \"../Maths/math.vector\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport { SubMesh } from \"../Meshes/subMesh\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { UniformBuffer } from \"./uniformBuffer\";\r\nimport type { Effect } from \"./effect\";\r\nimport type { BaseTexture } from \"../Materials/Textures/baseTexture\";\r\nimport type { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport type { MaterialDefines } from \"./materialDefines\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport type { IInspectable } from \"../Misc/iInspectable\";\r\nimport { Plane } from \"../Maths/math.plane\";\r\nimport type { ShadowDepthWrapper } from \"./shadowDepthWrapper\";\r\nimport type { IMaterialContext } from \"../Engines/IMaterialContext\";\r\nimport { DrawWrapper } from \"./drawWrapper\";\r\nimport { MaterialStencilState } from \"./materialStencilState\";\r\nimport { ScenePerformancePriority } from \"../scene\";\r\nimport type { Scene } from \"../scene\";\r\nimport type {\r\n MaterialPluginDisposed,\r\n MaterialPluginIsReadyForSubMesh,\r\n MaterialPluginGetDefineNames,\r\n MaterialPluginBindForSubMesh,\r\n MaterialPluginGetActiveTextures,\r\n MaterialPluginHasTexture,\r\n MaterialPluginGetAnimatables,\r\n MaterialPluginPrepareDefines,\r\n MaterialPluginPrepareEffect,\r\n MaterialPluginPrepareUniformBuffer,\r\n MaterialPluginCreated,\r\n MaterialPluginFillRenderTargetTextures,\r\n MaterialPluginHasRenderTargetTextures,\r\n MaterialPluginHardBindForSubMesh,\r\n} from \"./materialPluginEvent\";\r\nimport { MaterialPluginEvent } from \"./materialPluginEvent\";\r\nimport type { ShaderCustomProcessingFunction } from \"../Engines/Processors/shaderProcessingOptions\";\r\nimport type { IClipPlanesHolder } from \"../Misc/interfaces/iClipPlanesHolder\";\r\n\r\nimport type { PrePassRenderer } from \"../Rendering/prePassRenderer\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport type { Animation } from \"../Animations/animation\";\r\nimport type { InstancedMesh } from \"../Meshes/instancedMesh\";\r\nimport { BindSceneUniformBuffer } from \"./materialHelper.functions\";\r\nimport { SerializationHelper } from \"../Misc/decorators.serialization\";\r\nimport { ShaderLanguage } from \"./shaderLanguage\";\r\nimport type { IAssetContainer } from \"core/IAssetContainer\";\r\nimport { IsWrapper } from \"./drawWrapper.functions\";\r\n\r\ndeclare let BABYLON: any;\r\n\r\n/**\r\n * Options for compiling materials.\r\n */\r\nexport interface IMaterialCompilationOptions {\r\n /**\r\n * Defines whether clip planes are enabled.\r\n */\r\n clipPlane: boolean;\r\n\r\n /**\r\n * Defines whether instances are enabled.\r\n */\r\n useInstances: boolean;\r\n}\r\n\r\n/**\r\n * Options passed when calling customShaderNameResolve\r\n */\r\nexport interface ICustomShaderNameResolveOptions {\r\n /**\r\n * If provided, will be called two times with the vertex and fragment code so that this code can be updated before it is compiled by the GPU\r\n */\r\n processFinalCode?: Nullable<ShaderCustomProcessingFunction>;\r\n}\r\n\r\n/**\r\n * Base class for the main features of a material in Babylon.js\r\n */\r\nexport class Material implements IAnimatable, IClipPlanesHolder {\r\n /**\r\n * Returns the triangle fill mode\r\n */\r\n public static readonly TriangleFillMode = Constants.MATERIAL_TriangleFillMode;\r\n /**\r\n * Returns the wireframe mode\r\n */\r\n public static readonly WireFrameFillMode = Constants.MATERIAL_WireFrameFillMode;\r\n /**\r\n * Returns the point fill mode\r\n */\r\n public static readonly PointFillMode = Constants.MATERIAL_PointFillMode;\r\n /**\r\n * Returns the point list draw mode\r\n */\r\n public static readonly PointListDrawMode = Constants.MATERIAL_PointListDrawMode;\r\n /**\r\n * Returns the line list draw mode\r\n */\r\n public static readonly LineListDrawMode = Constants.MATERIAL_LineListDrawMode;\r\n /**\r\n * Returns the line loop draw mode\r\n */\r\n public static readonly LineLoopDrawMode = Constants.MATERIAL_LineLoopDrawMode;\r\n /**\r\n * Returns the line strip draw mode\r\n */\r\n public static readonly LineStripDrawMode = Constants.MATERIAL_LineStripDrawMode;\r\n /**\r\n * Returns the triangle strip draw mode\r\n */\r\n public static readonly TriangleStripDrawMode = Constants.MATERIAL_TriangleStripDrawMode;\r\n /**\r\n * Returns the triangle fan draw mode\r\n */\r\n public static readonly TriangleFanDrawMode = Constants.MATERIAL_TriangleFanDrawMode;\r\n\r\n /**\r\n * Stores the clock-wise side orientation\r\n */\r\n public static readonly ClockWiseSideOrientation = Constants.MATERIAL_ClockWiseSideOrientation;\r\n\r\n /**\r\n * Stores the counter clock-wise side orientation\r\n */\r\n public static readonly CounterClockWiseSideOrientation = Constants.MATERIAL_CounterClockWiseSideOrientation;\r\n\r\n /**\r\n * The dirty image processing flag value\r\n */\r\n public static readonly ImageProcessingDirtyFlag = Constants.MATERIAL_ImageProcessingDirtyFlag;\r\n\r\n /**\r\n * The dirty texture flag value\r\n */\r\n public static readonly TextureDirtyFlag = Constants.MATERIAL_TextureDirtyFlag;\r\n\r\n /**\r\n * The dirty light flag value\r\n */\r\n public static readonly LightDirtyFlag = Constants.MATERIAL_LightDirtyFlag;\r\n\r\n /**\r\n * The dirty fresnel flag value\r\n */\r\n public static readonly FresnelDirtyFlag = Constants.MATERIAL_FresnelDirtyFlag;\r\n\r\n /**\r\n * The dirty attribute flag value\r\n */\r\n public static readonly AttributesDirtyFlag = Constants.MATERIAL_AttributesDirtyFlag;\r\n\r\n /**\r\n * The dirty misc flag value\r\n */\r\n public static readonly MiscDirtyFlag = Constants.MATERIAL_MiscDirtyFlag;\r\n\r\n /**\r\n * The dirty prepass flag value\r\n */\r\n public static readonly PrePassDirtyFlag = Constants.MATERIAL_PrePassDirtyFlag;\r\n\r\n /**\r\n * The all dirty flag value\r\n */\r\n public static readonly AllDirtyFlag = Constants.MATERIAL_AllDirtyFlag;\r\n\r\n /**\r\n * MaterialTransparencyMode: No transparency mode, Alpha channel is not use.\r\n */\r\n public static readonly MATERIAL_OPAQUE = 0;\r\n\r\n /**\r\n * MaterialTransparencyMode: Alpha Test mode, pixel are discarded below a certain threshold defined by the alpha cutoff value.\r\n */\r\n public static readonly MATERIAL_ALPHATEST = 1;\r\n\r\n /**\r\n * MaterialTransparencyMode: Pixels are blended (according to the alpha mode) with the already drawn pixels in the current frame buffer.\r\n */\r\n public static readonly MATERIAL_ALPHABLEND = 2;\r\n\r\n /**\r\n * MaterialTransparencyMode: Pixels are blended (according to the alpha mode) with the already drawn pixels in the current frame buffer.\r\n * They are also discarded below the alpha cutoff threshold to improve performances.\r\n */\r\n public static readonly MATERIAL_ALPHATESTANDBLEND = 3;\r\n\r\n /**\r\n * The Whiteout method is used to blend normals.\r\n * Details of the algorithm can be found here: https://blog.selfshadow.com/publications/blending-in-detail/\r\n */\r\n public static readonly MATERIAL_NORMALBLENDMETHOD_WHITEOUT = 0;\r\n\r\n /**\r\n * The Reoriented Normal Mapping method is used to blend normals.\r\n * Details of the algorithm can be found here: https://blog.selfshadow.com/publications/blending-in-detail/\r\n */\r\n public static readonly MATERIAL_NORMALBLENDMETHOD_RNM = 1;\r\n\r\n /**\r\n * PBRMaterialLightFalloff Physical: light is falling off following the inverse squared distance law.\r\n */\r\n public static readonly LIGHTFALLOFF_PHYSICAL = 0;\r\n\r\n /**\r\n * PBRMaterialLightFalloff gltf: light is falling off as described in the gltf moving to PBR document\r\n * to enhance interoperability with other engines.\r\n */\r\n public static readonly LIGHTFALLOFF_GLTF = 1;\r\n\r\n /**\r\n * PBRMaterialLightFalloff Standard: light is falling off like in the standard material\r\n * to enhance interoperability with other materials.\r\n */\r\n public static readonly LIGHTFALLOFF_STANDARD = 2;\r\n\r\n /**\r\n * Event observable which raises global events common to all materials (like MaterialPluginEvent.Created)\r\n */\r\n public static OnEventObservable = new Observable<Material>();\r\n\r\n /**\r\n * Custom callback helping to override the default shader used in the material.\r\n */\r\n public customShaderNameResolve: (\r\n shaderName: string,\r\n uniforms: string[],\r\n uniformBuffers: string[],\r\n samplers: string[],\r\n defines: MaterialDefines | string[],\r\n attributes?: string[],\r\n options?: ICustomShaderNameResolveOptions\r\n ) => string;\r\n\r\n /**\r\n * Custom shadow depth material to use for shadow rendering instead of the in-built one\r\n */\r\n public shadowDepthWrapper: Nullable<ShadowDepthWrapper> = null;\r\n\r\n /**\r\n * Gets or sets a boolean indicating that the material is allowed (if supported) to do shader hot swapping.\r\n * This means that the material can keep using a previous shader while a new one is being compiled.\r\n * This is mostly used when shader parallel compilation is supported (true by default)\r\n */\r\n public allowShaderHotSwapping = true;\r\n\r\n /** Shader language used by the material */\r\n protected _shaderLanguage = ShaderLanguage.GLSL;\r\n\r\n protected _forceGLSL = false;\r\n\r\n protected _useVertexPulling = false;\r\n /**\r\n * Tells the engine to draw geometry using vertex pulling instead of index drawing. This will automatically\r\n * set the vertex buffers as storage buffers and make them accessible to the vertex shader (WebGPU only).\r\n */\r\n public get useVertexPulling() {\r\n return this._useVertexPulling;\r\n }\r\n\r\n public set useVertexPulling(value: boolean) {\r\n if (this._useVertexPulling === value) {\r\n return;\r\n }\r\n\r\n this._useVertexPulling = value;\r\n this.markAsDirty(Material.MiscDirtyFlag);\r\n }\r\n\r\n /** @internal */\r\n public get _supportGlowLayer() {\r\n return false;\r\n }\r\n\r\n /** @internal */\r\n public set _glowModeEnabled(value: boolean) {\r\n // Do nothing here\r\n }\r\n\r\n /**\r\n * Gets the shader language used in this material.\r\n */\r\n public get shaderLanguage(): ShaderLanguage {\r\n return this._shaderLanguage;\r\n }\r\n\r\n /**\r\n * The ID of the material\r\n */\r\n @serialize()\r\n public id: string;\r\n\r\n /**\r\n * Gets or sets the unique id of the material\r\n */\r\n @serialize()\r\n public uniqueId: number;\r\n\r\n /** @internal */\r\n public _loadedUniqueId: string;\r\n\r\n /**\r\n * The name of the material\r\n */\r\n @serialize()\r\n public name: string;\r\n\r\n /**\r\n * Gets or sets user defined metadata\r\n */\r\n @serialize()\r\n public metadata: any = null;\r\n\r\n /** @internal */\r\n public _internalMetadata: any;\r\n\r\n /**\r\n * For internal use only. Please do not use.\r\n */\r\n public reservedDataStore: any = null;\r\n\r\n /**\r\n * Specifies if the ready state should be checked on each call\r\n */\r\n @serialize()\r\n public checkReadyOnEveryCall = false;\r\n\r\n /**\r\n * Specifies if the ready state should be checked once\r\n */\r\n @serialize()\r\n public checkReadyOnlyOnce = false;\r\n\r\n /**\r\n * The state of the material\r\n */\r\n @serialize()\r\n public state = \"\";\r\n\r\n /**\r\n * If the material can be rendered to several textures with MRT extension\r\n */\r\n public get canRenderToMRT(): boolean {\r\n // By default, shaders are not compatible with MRTs\r\n // Base classes should override that if their shader supports MRT\r\n return false;\r\n }\r\n\r\n /**\r\n * The alpha value of the material\r\n */\r\n @serialize(\"alpha\")\r\n protected _alpha = 1.0;\r\n\r\n /**\r\n * List of inspectable custom properties (used by the Inspector)\r\n * @see https://doc.babylonjs.com/toolsAndResources/inspector#extensibility\r\n */\r\n public inspectableCustomProperties: IInspectable[];\r\n\r\n /**\r\n * Sets the alpha value of the material\r\n */\r\n public set alpha(value: number) {\r\n if (this._alpha === value) {\r\n return;\r\n }\r\n\r\n const oldValue = this._alpha;\r\n this._alpha = value;\r\n\r\n // Only call dirty when there is a state change (no alpha / alpha)\r\n if (oldValue === 1 || value === 1) {\r\n this.markAsDirty(Material.MiscDirtyFlag + Material.PrePassDirtyFlag);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the alpha value of the material\r\n */\r\n public get alpha(): number {\r\n return this._alpha;\r\n }\r\n\r\n /**\r\n * Specifies if back face culling is enabled\r\n */\r\n @serialize(\"backFaceCulling\")\r\n protected _backFaceCulling = true;\r\n\r\n /**\r\n * Sets the culling state (true to enable culling, false to disable)\r\n */\r\n public set backFaceCulling(value: boolean) {\r\n if (this._backFaceCulling === value) {\r\n return;\r\n }\r\n this._backFaceCulling = value;\r\n this.markAsDirty(Material.TextureDirtyFlag);\r\n }\r\n\r\n /**\r\n * Gets the culling state\r\n */\r\n public get backFaceCulling(): boolean {\r\n return this._backFaceCulling;\r\n }\r\n\r\n /**\r\n * Specifies if back or front faces should be culled (when culling is enabled)\r\n */\r\n @serialize(\"cullBackFaces\")\r\n protected _cullBackFaces = true;\r\n\r\n /**\r\n * Sets the type of faces that should be culled (true for back faces, false for front faces)\r\n */\r\n public set cullBackFaces(value: boolean) {\r\n if (this._cullBackFaces === value) {\r\n return;\r\n }\r\n this._cullBackFaces = value;\r\n this.markAsDirty(Material.TextureDirtyFlag);\r\n }\r\n\r\n /**\r\n * Gets the type of faces that should be culled\r\n */\r\n public get cullBackFaces(): boolean {\r\n return this._cullBackFaces;\r\n }\r\n\r\n private _blockDirtyMechanism = false;\r\n\r\n /**\r\n * Block the dirty-mechanism for this specific material\r\n * When set to false after being true the material will be marked as dirty.\r\n */\r\n public get blockDirtyMechanism(): boolean {\r\n return this._blockDirtyMechanism;\r\n }\r\n\r\n public set blockDirtyMechanism(value: boolean) {\r\n if (this._blockDirtyMechanism === value) {\r\n return;\r\n }\r\n\r\n this._blockDirtyMechanism = value;\r\n\r\n if (!value) {\r\n this.markDirty();\r\n }\r\n }\r\n\r\n /**\r\n * This allows you to modify the material without marking it as dirty after every change.\r\n * This function should be used if you need to make more than one dirty-enabling change to the material - adding a texture, setting a new fill mode and so on.\r\n * The callback will pass the material as an argument, so you can make your changes to it.\r\n * @param callback the callback to be executed that will update the material\r\n */\r\n public atomicMaterialsUpdate(callback: (material: this) => void): void {\r\n this.blockDirtyMechanism = true;\r\n try {\r\n callback(this);\r\n } finally {\r\n this.blockDirtyMechanism = false;\r\n }\r\n }\r\n\r\n /**\r\n * Stores the value for side orientation\r\n */\r\n @serialize()\r\n public sideOrientation: Nullable<number> = null;\r\n\r\n /**\r\n * Callback triggered when the material is compiled\r\n */\r\n public onCompiled: Nullable<(effect: Effect) => void> = null;\r\n\r\n /**\r\n * Callback triggered when an error occurs\r\n */\r\n public onError: Nullable<(effect: Effect, errors: string) => void> = null;\r\n\r\n /**\r\n * Callback triggered to get the render target textures\r\n */\r\n public getRenderTargetTextures: Nullable<() => SmartArray<RenderTargetTexture>> = null;\r\n\r\n /**\r\n * Gets a boolean indicating that current material needs to register RTT\r\n */\r\n public get hasRenderTargetTextures(): boolean {\r\n this._eventInfo.hasRenderTargetTextures = false;\r\n this._callbackPluginEventHasRenderTargetTextures(this._eventInfo);\r\n return this._eventInfo.hasRenderTargetTextures;\r\n }\r\n\r\n /**\r\n * Specifies if the material should be serialized\r\n */\r\n public doNotSerialize = false;\r\n\r\n /**\r\n * @internal\r\n */\r\n public _storeEffectOnSubMeshes = false;\r\n\r\n /**\r\n * Stores the animations for the material\r\n */\r\n public animations: Nullable<Array<Animation>> = null;\r\n\r\n /**\r\n * An event triggered when the material is disposed\r\n */\r\n public onDisposeObservable = new Observable<Material>();\r\n\r\n /**\r\n * An observer which watches for dispose events\r\n */\r\n private _onDisposeObserver: Nullable<Observer<Material>> = null;\r\n private _onUnBindObservable: Nullable<Observable<Material>> = null;\r\n\r\n /**\r\n * Called during a dispose event\r\n */\r\n public set onDispose(callback: () => void) {\r\n if (this._onDisposeObserver) {\r\n this.onDisposeObservable.remove(this._onDisposeObserver);\r\n }\r\n this._onDisposeObserver = this.onDisposeObservable.add(callback);\r\n }\r\n\r\n private _onBindObservable: Nullable<Observable<AbstractMesh>>;\r\n\r\n /**\r\n * An event triggered when the material is bound\r\n */\r\n public get onBindObservable(): Observable<AbstractMesh> {\r\n if (!this._onBindObservable) {\r\n this._onBindObservable = new Observable<AbstractMesh>();\r\n }\r\n\r\n return this._onBindObservable;\r\n }\r\n\r\n /**\r\n * An observer which watches for bind events\r\n */\r\n private _onBindObserver: Nullable<Observer<AbstractMesh>> = null;\r\n\r\n /**\r\n * Called during a bind event\r\n */\r\n public set onBind(callback: (Mesh: AbstractMesh) => void) {\r\n if (this._onBindObserver) {\r\n this.onBindObservable.remove(this._onBindObserver);\r\n }\r\n this._onBindObserver = this.onBindObservable.add(callback);\r\n }\r\n\r\n /**\r\n * An event triggered when the material is unbound\r\n */\r\n public get onUnBindObservable(): Observable<Material> {\r\n if (!this._onUnBindObservable) {\r\n this._onUnBindObservable = new Observable<Material>();\r\n }\r\n\r\n return this._onUnBindObservable;\r\n }\r\n\r\n protected _onEffectCreatedObservable: Nullable<Observable<{ effect: Effect; subMesh: Nullable<SubMesh> }>>;\r\n\r\n /**\r\n * An event triggered when the effect is (re)created\r\n */\r\n public get onEffectCreatedObservable(): Observable<{ effect: Effect; subMesh: Nullable<SubMesh> }> {\r\n if (!this._onEffectCreatedObservable) {\r\n this._onEffectCreatedObservable = new Observable<{ effect: Effect; subMesh: Nullable<SubMesh> }>();\r\n }\r\n\r\n return this._onEffectCreatedObservable;\r\n }\r\n\r\n /**\r\n * Stores the value of the alpha mode\r\n */\r\n @serialize()\r\n private _alphaMode: number[] = [Constants.ALPHA_COMBINE];\r\n\r\n /**\r\n * Sets the value of the alpha mode.\r\n *\r\n * | Value | Type | Description |\r\n * | --- | --- | --- |\r\n * | 0 | ALPHA_DISABLE | |\r\n * | 1 | ALPHA_ADD | Defines that alpha blending is COLOR=SRC_ALPHA * SRC + DEST, ALPHA=DEST_ALPHA |\r\n * | 2 | ALPHA_COMBINE | Defines that alpha blending is COLOR=SRC_ALPHA * SRC + (1 - SRC_ALPHA) * DEST, ALPHA=SRC_ALPHA + DEST_ALPHA |\r\n * | 3 | ALPHA_SUBTRACT | Defines that alpha blending is COLOR=(1 - SRC) * DEST, ALPHA=SRC_ALPHA - DEST_ALPHA |\r\n * | 4 | ALPHA_MULTIPLY | Defines that alpha blending is COLOR=DEST * SRC, ALPHA=SRC_ALPHA + DEST_ALPHA |\r\n * | 5 | ALPHA_MAXIMIZED | Defines that alpha blending is COLOR=SRC_ALPHA * SRC + (1 - SRC) * DEST, ALPHA=SRC_ALPHA + DEST_ALPHA |\r\n * | 6 | ALPHA_ONEONE | Defines that alpha blending is COLOR=SRC + DEST, ALPHA=DEST_ALPHA |\r\n * | 7 | ALPHA_PREMULTIPLIED | Defines that alpha blending is COLOR=SRC + (1 - SRC_ALPHA) * DEST, ALPHA=SRC_ALPHA + DEST_ALPHA |\r\n * | 8 | ALPHA_PREMULTIPLIED_PORTERDUFF | Defines that alpha blending is COLOR=SRC + (1 - SRC_ALPHA) * DEST, ALPHA=SRC_ALPHA + (1 - SRC_ALPHA) * DEST_ALPHA |\r\n * | 9 | ALPHA_INTERPOLATE | Defines that alpha blending is COLOR=CST * SRC + (1 - CST) * DEST, ALPHA=CST_ALPHA * SRC + (1 - CST_ALPHA) * DEST_ALPHA |\r\n * | 10 | ALPHA_SCREENMODE | Defines that alpha blending is COLOR=SRC + (1 - SRC) * DEST, ALPHA=SRC_ALPHA + (1 - SRC_ALPHA) * DEST_ALPHA |\r\n * | 11 | ALPHA_ONEONE_ONEONE | Defines that alpha blending is COLOR=SRC + DST, ALPHA=SRC_ALPHA + DEST_ALPHA |\r\n * | 12 | ALPHA_ALPHATOCOLOR | Defines that alpha blending is COLOR=DEST_ALPHA * SRC + DST, ALPHA=0 |\r\n * | 13 | ALPHA_REVERSEONEMINUS | Defines that alpha blending is COLOR=(1 - DEST) * SRC + (1 - SRC) * DEST, ALPHA=(1 - DEST_ALPHA) * SRC_ALPHA + (1 - SRC_ALPHA) * DEST_ALPHA |\r\n * | 14 | ALPHA_SRC_DSTONEMINUSSRCALPHA | Defines that alpha blending is ALPHA=SRC + (1 - SRC ALPHA) * DEST, ALPHA=SRC_ALPHA + (1 - SRC ALPHA) * DEST_ALPHA |\r\n * | 15 | ALPHA_ONEONE_ONEZERO | Defines that alpha blending is COLOR=SRC + DST, ALPHA=SRC_ALPHA |\r\n * | 16 | ALPHA_EXCLUSION | Defines that alpha blending is COLOR=(1 - DEST) * SRC + (1 - SRC) * DEST, ALPHA=DEST_ALPHA |\r\n * | 17 | ALPHA_LAYER_ACCUMULATE | Defines that alpha blending is COLOR=SRC_ALPHA * SRC + (1 - SRC ALPHA) * DEST, ALPHA=SRC_ALPHA + (1 - SRC_ALPHA) * DEST_ALPHA |\r\n * | 18 | ALPHA_MIN | Defines that alpha blending is COLOR=MIN(SRC, DEST), ALPHA=MIN(SRC_ALPHA, DEST_ALPHA) |\r\n * | 19 | ALPHA_MAX | Defines that alpha blending is COLOR=MAX(SRC, DEST), ALPHA=MAX(SRC_ALPHA, DEST_ALPHA) |\r\n * | 20 | ALPHA_DUAL_SRC0_ADD_SRC1xDST | Defines that alpha blending uses dual source blending and is COLOR=SRC + SRC1 * DEST, ALPHA=DST_ALPHA |\r\n *\r\n */\r\n public set alphaMode(value: number) {\r\n if (this._alphaMode[0] === value) {\r\n return;\r\n }\r\n this._alphaMode[0] = value;\r\n this.markAsDirty(Material.TextureDirtyFlag);\r\n }\r\n\r\n /**\r\n * Gets the value of the alpha mode\r\n */\r\n public get alphaMode(): number {\r\n return this._alphaMode[0];\r\n }\r\n\r\n /**\r\n * Gets the list of alpha modes (length greater than 1 for multi-targets)\r\n */\r\n public get alphaModes(): Immutable<number[]> {\r\n return this._alphaMode;\r\n }\r\n\r\n /**\r\n * Sets the value of the alpha mode for a specific target index.\r\n * @param value The alpha mode value to set.\r\n * @param targetIndex The index of the target to set the alpha mode for. Defaults to 0.\r\n */\r\n public setAlphaMode(value: number, targetIndex: number = 0): void {\r\n if (this._alphaMode[targetIndex] === value) {\r\n return;\r\n }\r\n this._alphaMode[targetIndex] = value;\r\n this.markAsDirty(Material.TextureDirtyFlag);\r\n }\r\n\r\n /**\r\n * Stores the state of the need depth pre-pass value\r\n */\r\n @serialize()\r\n private _needDepthPrePass = false;\r\n\r\n /**\r\n * Sets the need depth pre-pass value\r\n */\r\n public set needDepthPrePass(value: boolean) {\r\n if (this._needDepthPrePass === value) {\r\n return;\r\n }\r\n this._needDepthPrePass = value;\r\n if (this._needDepthPrePass) {\r\n this.checkReadyOnEveryCall = true;\r\n }\r\n }\r\n\r\n /**\r\n * Gets the depth pre-pass value\r\n */\r\n public get needDepthPrePass(): boolean {\r\n return this._needDepthPrePass;\r\n }\r\n\r\n /**\r\n * Can this material render to prepass\r\n */\r\n public get isPrePassCapable(): boolean {\r\n return false;\r\n }\r\n\r\n /**\r\n * Specifies if depth writing should be disabled\r\n */\r\n @serialize()\r\n public disableDepthWrite = false;\r\n\r\n /**\r\n * Specifies if color writing should be disabled\r\n */\r\n @serialize()\r\n public disableColorWrite = false;\r\n\r\n /**\r\n * Specifies if depth writing should be forced\r\n */\r\n @serialize()\r\n public forceDepthWrite = false;\r\n\r\n /**\r\n * Specifies the depth function that should be used. 0 means the default engine function\r\n */\r\n @serialize()\r\n public depthFunction = 0;\r\n\r\n /**\r\n * Specifies if there should be a separate pass for culling\r\n */\r\n @serialize()\r\n public separateCullingPass = false;\r\n\r\n /**\r\n * Stores the state specifying if fog should be enabled\r\n */\r\n @serialize(\"fogEnabled\")\r\n private _fogEnabled = true;\r\n\r\n /**\r\n * Sets the state for enabling fog\r\n */\r\n public set fogEnabled(value: boolean) {\r\n if (this._fogEnabled === value) {\r\n return;\r\n }\r\n this._fogEnabled = value;\r\n this.markAsDirty(Material.MiscDirtyFlag);\r\n }\r\n\r\n /**\r\n * Gets the value of the fog enabled state\r\n */\r\n public get fogEnabled(): boolean {\r\n return this._fogEnabled;\r\n }\r\n\r\n /**\r\n * Stores the size of points\r\n */\r\n @serialize()\r\n public pointSize = 1.0;\r\n\r\n /**\r\n * Stores the z offset Factor value\r\n */\r\n @serialize()\r\n public zOffset = 0;\r\n\r\n /**\r\n * Stores the z offset Units value\r\n */\r\n @serialize()\r\n public zOffsetUnits = 0;\r\n\r\n public get wireframe(): boolean {\r\n switch (this._fillMode) {\r\n case Material.WireFrameFillMode:\r\n case Material.LineListDrawMode:\r\n case Material.LineLoopDrawMode:\r\n case Material.LineStripDrawMode:\r\n return true;\r\n }\r\n\r\n return this._scene.forceWireframe;\r\n }\r\n\r\n /**\r\n * Sets the state of wireframe mode\r\n */\r\n public set wireframe(value: boolean) {\r\n this.fillMode = value ? Material.WireFrameFillMode : Material.TriangleFillMode;\r\n }\r\n\r\n /**\r\n * Gets the value specifying if point clouds are enabled\r\n */\r\n @serialize()\r\n public get pointsCloud(): boolean {\r\n switch (this._fillMode) {\r\n case Material.PointFillMode:\r\n case Material.PointListDrawMode:\r\n return true;\r\n }\r\n\r\n return this._scene.forcePointsCloud;\r\n }\r\n\r\n /**\r\n * Sets the state of point cloud mode\r\n */\r\n public set pointsCloud(value: boolean) {\r\n this.fillMode = value ? Material.PointFillMode : Material.TriangleFillMode;\r\n }\r\n\r\n /**\r\n * Gets the material fill mode\r\n */\r\n @serialize()\r\n public get fillMode(): number {\r\n return this._fillMode;\r\n }\r\n\r\n /**\r\n * Sets the material fill mode\r\n */\r\n public set fillMode(value: number) {\r\n if (this._fillMode === value) {\r\n return;\r\n }\r\n\r\n this._fillMode = value;\r\n this.markAsDirty(Material.MiscDirtyFlag);\r\n }\r\n\r\n /**\r\n * Gets or sets the active clipplane 1\r\n */\r\n public clipPlane: Nullable<Plane>;\r\n\r\n /**\r\n * Gets or sets the active clipplane 2\r\n */\r\n public clipPlane2: Nullable<Plane>;\r\n\r\n /**\r\n * Gets or sets the active clipplane 3\r\n */\r\n public clipPlane3: Nullable<Plane>;\r\n\r\n /**\r\n * Gets or sets the active clipplane 4\r\n */\r\n public clipPlane4: Nullable<Plane>;\r\n\r\n /**\r\n * Gets or sets the active clipplane 5\r\n */\r\n public clipPlane5: Nullable<Plane>;\r\n\r\n /**\r\n * Gets or sets the active clipplane 6\r\n */\r\n public clipPlane6: Nullable<Plane>;\r\n\r\n /**\r\n * Gives access to the stencil properties of the material\r\n */\r\n public readonly stencil = new MaterialStencilState();\r\n\r\n protected _useLogarithmicDepth: boolean;\r\n\r\n /**\r\n * In case the depth buffer does not allow enough depth precision for your scene (might be the case in large scenes)\r\n * You can try switching to logarithmic depth.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/advanced/logarithmicDepthBuffer\r\n */\r\n @serialize()\r\n public get useLogarithmicDepth(): boolean {\r\n return this._useLogarithmicDepth;\r\n }\r\n\r\n public set useLogarithmicDepth(value: boolean) {\r\n const fragmentDepthSupported = this.getScene().getEngine().getCaps().fragmentDepthSupported;\r\n\r\n if (value && !fragmentDepthSupported) {\r\n Logger.Warn(\"Logarithmic depth has been requested for a material on a device that doesn't support it.\");\r\n }\r\n\r\n this._useLogarithmicDepth = value && fragmentDepthSupported;\r\n\r\n this._markAllSubMeshesAsMiscDirty();\r\n }\r\n\r\n @serialize()\r\n protected _setVertexOutputInvariant = false;\r\n /**\r\n * Gets or sets the vertex output invariant state\r\n * Setting this property to true will force the shader compiler to disable some optimization to make sure the vertex output is always calculated\r\n * the same way across different compilation units.\r\n * You may need to enable this option if you are seeing some depth artifacts when using a depth pre-pass, for e.g.\r\n * Note that this may have an impact on performance, so leave this option disabled if not needed.\r\n */\r\n public get setVertexOutputInvariant(): boolean {\r\n return this._setVertexOutputInvariant;\r\n }\r\n\r\n public set setVertexOutputInvariant(value: boolean) {\r\n if (this._setVertexOutputInvariant === value) {\r\n return;\r\n }\r\n\r\n this._setVertexOutputInvariant = value;\r\n this._markAllSubMeshesAsMiscDirty();\r\n }\r\n\r\n /**\r\n * @internal\r\n * Stores the effects for the material\r\n */\r\n public _materialContext: IMaterialContext | undefined;\r\n\r\n protected _drawWrapper: DrawWrapper;\r\n /** @internal */\r\n public _getDrawWrapper(): DrawWrapper {\r\n return this._drawWrapper;\r\n }\r\n /**\r\n * @internal\r\n */\r\n public _setDrawWrapper(drawWrapper: DrawWrapper) {\r\n this._drawWrapper = drawWrapper;\r\n }\r\n\r\n /**\r\n * Specifies if uniform buffers should be used\r\n */\r\n private _useUBO: boolean = false;\r\n\r\n /**\r\n * Stores a reference to the scene\r\n */\r\n private _scene: Scene;\r\n protected _needToBindSceneUbo: boolean;\r\n\r\n /**\r\n * Stores the fill mode state\r\n */\r\n private _fillMode = Material.TriangleFillMode;\r\n\r\n /**\r\n * Specifies if the depth write state should be cached\r\n */\r\n private _cachedDepthWriteState: boolean = false;\r\n\r\n /**\r\n * Specifies if the color write state should be cached\r\n */\r\n private _cachedColorWriteState: boolean = false;\r\n\r\n /**\r\n * Specifies if the depth function state should be cached\r\n */\r\n private _cachedDepthFunctionState: number = 0;\r\n\r\n /**\r\n * Stores the uniform buffer\r\n * @internal\r\n */\r\n public _uniformBuffer: UniformBuffer;\r\n\r\n /** @internal */\r\n public _indexInSceneMaterialArray = -1;\r\n\r\n /** @internal */\r\n public meshMap: Nullable<{ [id: string]: AbstractMesh | undefined }> = null;\r\n\r\n /** @internal */\r\n public _parentContainer: Nullable<IAssetContainer> = null;\r\n\r\n /** @internal */\r\n public _dirtyCallbacks: { [code: number]: () => void };\r\n\r\n /** @internal */\r\n public _uniformBufferLayoutBuilt = false;\r\n\r\n protected _eventInfo: MaterialPluginCreated &\r\n MaterialPluginDisposed &\r\n MaterialPluginHasTexture &\r\n MaterialPluginIsReadyForSubMesh &\r\n MaterialPluginGetDefineNames &\r\n MaterialPluginPrepareEffect &\r\n MaterialPluginPrepareDefines &\r\n MaterialPluginPrepareUniformBuffer &\r\n MaterialPluginBindForSubMesh &\r\n MaterialPluginGetAnimatables &\r\n MaterialPluginGetActiveTextures &\r\n MaterialPluginFillRenderTargetTextures &\r\n MaterialPluginHasRenderTargetTextures &\r\n MaterialPluginHardBindForSubMesh = {} as any; // will be initialized before each event notification\r\n\r\n /** @internal */\r\n public _callbackPluginEventGeneric: (\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 = () => void 0;\r\n /** @internal */\r\n public _callbackPluginEventIsReadyForSubMesh: (eventData: MaterialPluginIsReadyForSubMesh) => void = () => void 0;\r\n /** @internal */\r\n public _callbackPluginEventPrepareDefines: (eventData: MaterialPluginPrepareDefines) => void = () => void 0;\r\n /** @internal */\r\n public _callbackPluginEventPrepareDefinesBeforeAttributes: (eventData: MaterialPluginPrepareDefines) => void = () => void 0;\r\n /** @internal */\r\n public _callbackPluginEventHardBindForSubMesh: (eventData: MaterialPluginHardBindForSubMesh) => void = () => void 0;\r\n /** @internal */\r\n public _callbackPluginEventBindForSubMesh: (eventData: MaterialPluginBindForSubMesh) => void = () => void 0;\r\n /** @internal */\r\n public _callbackPluginEventHasRenderTargetTextures: (eventData: MaterialPluginHasRenderTargetTextures) => void = () => void 0;\r\n /** @internal */\r\n public _callbackPluginEventFillRenderTargetTextures: (eventData: MaterialPluginFillRenderTargetTextures) => void = () => void 0;\r\n\r\n /**\r\n * Creates a material instance\r\n * @param name defines the name of the material\r\n * @param scene defines the scene to reference\r\n * @param doNotAdd specifies if the material should be added to the scene\r\n * @param forceGLSL Use the GLSL code generation for the shader (even on WebGPU). Default is false\r\n */\r\n constructor(name: string, scene?: Nullable<Scene>, doNotAdd?: boolean, forceGLSL = false) {\r\n this.name = name;\r\n const setScene = scene || EngineStore.LastCreatedScene;\r\n if (!setScene) {\r\n return;\r\n }\r\n this._scene = setScene;\r\n this._dirtyCallbacks = {};\r\n this._forceGLSL = forceGLSL;\r\n\r\n this._dirtyCallbacks[Constants.MATERIAL_TextureDirtyFlag] = this._markAllSubMeshesAsTexturesDirty.bind(this);\r\n this._dirtyCallbacks[Constants.MATERIAL_LightDirtyFlag] = this._markAllSubMeshesAsLightsDirty.bind(this);\r\n this._dirtyCallbacks[Constants.MATERIAL_FresnelDirtyFlag] = this._markAllSubMeshesAsFresnelDirty.bind(this);\r\n this._dirtyCallbacks[Constants.MATERIAL_AttributesDirtyFlag] = this._markAllSubMeshesAsAttributesDirty.bind(this);\r\n this._dirtyCallbacks[Constants.MATERIAL_MiscDirtyFlag] = this._markAllSubMeshesAsMiscDirty.bind(this);\r\n this._dirtyCallbacks[Constants.MATERIAL_PrePassDirtyFlag] = this._markAllSubMeshesAsPrePassDirty.bind(this);\r\n this._dirtyCallbacks[Constants.MATERIAL_AllDirtyFlag] = this._markAllSubMeshesAsAllDirty.bind(this);\r\n\r\n this.id = name || Tools.RandomId();\r\n this.uniqueId = this._scene.getUniqueId();\r\n this._materialContext = this._scene.getEngine().createMaterialContext();\r\n this._drawWrapper = new DrawWrapper(this._scene.getEngine(), false);\r\n this._drawWrapper.materialContext = this._materialContext;\r\n\r\n this._uniformBuffer = new UniformBuffer(this._scene.getEngine(), undefined, undefined, name);\r\n this._useUBO = this.getScene().getEngine().supportsUniformBuffers;\r\n\r\n this._createUniformBuffer();\r\n\r\n if (!doNotAdd) {\r\n this._scene.addMaterial(this);\r\n }\r\n\r\n if (this._scene.useMaterialMeshMap) {\r\n this.meshMap = {};\r\n }\r\n\r\n Material.OnEventObservable.notifyObservers(this, MaterialPluginEvent.Created);\r\n }\r\n\r\n /** @internal */\r\n public _createUniformBuffer() {\r\n const engine = this.getScene().getEngine();\r\n\r\n this._uniformBuffer?.dispose();\r\n\r\n if (engine.isWebGPU && !this._forceGLSL) {\r\n // Switch main UBO to non UBO to connect to leftovers UBO in webgpu\r\n this._uniformBuffer = new UniformBuffer(engine, undefined, undefined, this.name, true);\r\n this._shaderLanguage = ShaderLanguage.WGSL;\r\n } else {\r\n this._uniformBuffer = new UniformBuffer(this._scene.getEngine(), undefined, undefined, this.name);\r\n }\r\n\r\n this._uniformBufferLayoutBuilt = false;\r\n }\r\n\r\n /**\r\n * Returns a string representation of the current material\r\n * @param fullDetails defines a boolean indicating which levels of logging is desired\r\n * @returns a string with material information\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public toString(fullDetails?: boolean): string {\r\n const ret = \"Name: \" + this.name;\r\n return ret;\r\n }\r\n\r\n /**\r\n * Gets the class name of the material\r\n * @returns a string with the class name of the material\r\n */\r\n public getClassName(): string {\r\n return \"Material\";\r\n }\r\n\r\n /** @internal */\r\n public get _isMaterial() {\r\n return true;\r\n }\r\n\r\n /**\r\n * Specifies if updates for the material been locked\r\n */\r\n public get isFrozen(): boolean {\r\n return this.checkReadyOnlyOnce;\r\n }\r\n\r\n /**\r\n * Locks updates for the material\r\n */\r\n public freeze(): void {\r\n this.markDirty();\r\n this.checkReadyOnlyOnce = true;\r\n }\r\n\r\n /**\r\n * Unlocks updates for the material\r\n */\r\n public unfreeze(): void {\r\n this.markDirty();\r\n this.checkReadyOnlyOnce = false;\r\n }\r\n\r\n /**\r\n * Specifies if the material is ready to be used\r\n * @param mesh defines the mesh to check\r\n * @param useInstances specifies if instances should be used\r\n * @returns a boolean indicating if the material is ready to be used\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public isReady(mesh?: AbstractMesh, useInstances?: boolean): boolean {\r\n return true;\r\n }\r\n\r\n /**\r\n * Specifies that the submesh is ready to be used\r\n * @param mesh defines the mesh to check\r\n * @param subMesh defines which submesh to check\r\n * @param useInstances specifies that instances should be used\r\n * @returns a boolean indicating that the submesh is ready or not\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public isReadyForSubMesh(mesh: AbstractMesh, subMesh: SubMesh, useInstances?: boolean): boolean {\r\n const defines = subMesh.materialDefines;\r\n if (!defines) {\r\n return false;\r\n }\r\n\r\n this._eventInfo.isReadyForSubMesh = true;\r\n this._eventInfo.defines = defines;\r\n this._callbackPluginEventIsReadyForSubMesh(this._eventInfo);\r\n\r\n return this._eventInfo.isReadyForSubMesh;\r\n }\r\n\r\n /**\r\n * Returns the material effect\r\n * @returns the effect associated with the material\r\n */\r\n public getEffect(): Nullable<Effect> {\r\n return this._drawWrapper.effect;\r\n }\r\n\r\n /**\r\n * Returns the current scene\r\n * @returns a Scene\r\n */\r\n public getScene(): Scene {\r\n return this._scene;\r\n }\r\n\r\n /** @internal */\r\n public _getEffectiveOrientation(mesh: Mesh): number {\r\n return this.sideOrientation !== null ? this.sideOrientation : mesh.sideOrientation;\r\n }\r\n\r\n /**\r\n * The transparency mode of the material.\r\n */\r\n protected _transparencyMode: Nullable<number> = null;\r\n\r\n /**\r\n * Gets the current transparency mode.\r\n */\r\n @serialize()\r\n public get transparencyMode(): Nullable<number> {\r\n return this._transparencyMode;\r\n }\r\n\r\n /**\r\n * Sets the transparency mode of the material.\r\n *\r\n * | Value | Type | Description |\r\n * | ----- | ----------------------------------- | ----------- |\r\n * | 0 | OPAQUE | |\r\n * | 1 | ALPHATEST | |\r\n * | 2 | ALPHABLEND | |\r\n * | 3 | ALPHATESTANDBLEND | |\r\n *\r\n */\r\n public set transparencyMode(value: Nullable<number>) {\r\n if (this._transparencyMode === value) {\r\n return;\r\n }\r\n\r\n this._transparencyMode = value;\r\n\r\n this._markAllSubMeshesAsTexturesAndMiscDirty();\r\n }\r\n\r\n protected get _hasTransparencyMode(): boolean {\r\n return this._transparencyMode != null;\r\n }\r\n\r\n protected get _transparencyModeIsBlend(): boolean {\r\n return this._transparencyMode === Material.MATERIAL_ALPHABLEND || this._transparencyMode === Material.MATERIAL_ALPHATESTANDBLEND;\r\n }\r\n\r\n protected get _transparencyModeIsTest(): boolean {\r\n return this._transparencyMode === Material.MATERIAL_ALPHATEST || this._transparencyMode === Material.MATERIAL_ALPHATESTANDBLEND;\r\n }\r\n\r\n /**\r\n * Returns true if alpha blending should be disabled.\r\n */\r\n protected get _disableAlphaBlending(): boolean {\r\n return this._transparencyMode === Material.MATERIAL_OPAQUE || this._transparencyMode === Material.MATERIAL_ALPHATEST;\r\n }\r\n\r\n /**\r\n * Specifies whether or not this material should be rendered in alpha blend mode.\r\n * @returns a boolean specifying if alpha blending is needed\r\n * @deprecated Please use needAlphaBlendingForMesh instead\r\n */\r\n public needAlphaBlending(): boolean {\r\n if (this._hasTransparencyMode) {\r\n return this._transparencyModeIsBlend;\r\n }\r\n\r\n if (this._disableAlphaBlending) {\r\n return false;\r\n }\r\n\r\n return this.alpha < 1.0;\r\n }\r\n\r\n /**\r\n * Specifies if the mesh will require alpha blending\r\n * @param mesh defines the mesh to check\r\n * @returns a boolean specifying if alpha blending is needed for the mesh\r\n */\r\n public needAlphaBlendingForMesh(mesh: AbstractMesh): boolean {\r\n if (this._hasTransparencyMode) {\r\n return this._transparencyModeIsBlend;\r\n }\r\n\r\n if (mesh.visibility < 1.0) {\r\n return true;\r\n }\r\n\r\n if (this._disableAlphaBlending) {\r\n return false;\r\n }\r\n\r\n return mesh.hasVertexAlpha || this.needAlphaBlending();\r\n }\r\n\r\n /**\r\n * Specifies whether or not this material should be rendered in alpha test mode.\r\n * @returns a boolean specifying if an alpha test is needed.\r\n * @deprecated Please use needAlphaTestingForMesh instead\r\n */\r\n public needAlphaTesting(): boolean {\r\n if (this._hasTransparencyMode) {\r\n return this._transparencyModeIsTest;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Specifies if material alpha testing should be turned on for the mesh\r\n * @param mesh defines the mesh to check\r\n * @returns a boolean specifying if alpha testing should be turned on for the mesh\r\n */\r\n public needAlphaTestingForMesh(mesh: AbstractMesh): boolean {\r\n if (this._hasTransparencyMode) {\r\n return this._transparencyModeIsTest;\r\n }\r\n\r\n return !this.needAlphaBlendingForMesh(mesh) && this.needAlphaTesting();\r\n }\r\n\r\n /**\r\n * Gets the texture used for the alpha test\r\n * @returns the texture to use for alpha testing\r\n */\r\n public getAlphaTestTexture(): Nullable<BaseTexture> {\r\n return null;\r\n }\r\n\r\n /**\r\n * Marks the material to indicate that it needs to be re-calculated\r\n * @param forceMaterialDirty - Forces the material to be marked as dirty for all components (same as this.markAsDirty(Material.AllDirtyFlag)). You should use this flag if the material is frozen and you want to force a recompilation.\r\n */\r\n public markDirty(forceMaterialDirty = false): void {\r\n const meshes = this.getScene().meshes;\r\n for (const mesh of meshes) {\r\n if (!mesh.subMeshes) {\r\n continue;\r\n }\r\n for (const subMesh of mesh.subMeshes) {\r\n if (subMesh.getMaterial() !== this) {\r\n continue;\r\n }\r\n\r\n for (const drawWrapper of subMesh._drawWrappers) {\r\n if (!drawWrapper) {\r\n continue;\r\n }\r\n if (this._materialContext === drawWrapper.materialContext) {\r\n drawWrapper._wasPreviouslyReady = false;\r\n drawWrapper._wasPreviouslyUsingInstances = null;\r\n drawWrapper._forceRebindOnNextCall = forceMaterialDirty;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (forceMaterialDirty) {\r\n this.markAsDirty(Material.AllDirtyFlag);\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _preBind(effect?: Effect | DrawWrapper, overrideOrientation: Nullable<number> = null): boolean {\r\n const engine = this._scene.getEngine();\r\n\r\n const orientation = overrideOrientation == null ? this.sideOrientation : overrideOrientation;\r\n const reverse = orientation === Material.ClockWiseSideOrientation;\r\n\r\n const effectiveDrawWrapper = effect ? effect : this._getDrawWrapper();\r\n\r\n if (IsWrapper(effectiveDrawWrapper) && effectiveDrawWrapper.materialContext) {\r\n effectiveDrawWrapper.materialContext.useVertexPulling = this.useVertexPulling;\r\n }\r\n\r\n engine.enableEffect(effectiveDrawWrapper);\r\n engine.setState(\r\n this.backFaceCulling,\r\n this.zOffset,\r\n false,\r\n reverse,\r\n this._scene._mirroredCameraPosition ? !this.cullBackFaces : this.cullBackFaces,\r\n this.stencil,\r\n this.zOffsetUnits\r\n );\r\n\r\n return reverse;\r\n }\r\n\r\n /**\r\n * Binds the material to the mesh\r\n * @param world defines the world transformation matrix\r\n * @param mesh defines the mesh to bind the material to\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public bind(world: Matrix, mesh?: Mesh): void {}\r\n\r\n /**\r\n * Initializes the uniform buffer layout for the shader.\r\n */\r\n public buildUniformLayout(): void {\r\n const ubo = this._uniformBuffer;\r\n\r\n this._eventInfo.ubo = ubo;\r\n this._callbackPluginEventGeneric(MaterialPluginEvent.PrepareUniformBuffer, this._eventInfo);\r\n\r\n ubo.create();\r\n\r\n this._uniformBufferLayoutBuilt = true;\r\n }\r\n\r\n /**\r\n * Binds the submesh to the material\r\n * @param world defines the world transformation matrix\r\n * @param mesh defines the mesh containing the submesh\r\n * @param subMesh defines the submesh to bind the material to\r\n */\r\n public bindForSubMesh(world: Matrix, mesh: Mesh, subMesh: SubMesh): void {\r\n const drawWrapper = subMesh._drawWrapper;\r\n\r\n this._eventInfo.subMesh = subMesh;\r\n this._callbackPluginEventBindForSubMesh(this._eventInfo);\r\n drawWrapper._forceRebindOnNextCall = false;\r\n }\r\n\r\n /**\r\n * Binds the world matrix to the material\r\n * @param world defines the world transformation matrix\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public bindOnlyWorldMatrix(world: Matrix): void {}\r\n\r\n /**\r\n * Binds the view matrix to the effect\r\n * @param effect defines the effect to bind the view matrix to\r\n */\r\n public bindView(effect: Effect): void {\r\n if (!this._useUBO) {\r\n effect.setMatrix(\"view\", this.getScene().getViewMatrix());\r\n } else {\r\n this._needToBindSceneUbo = true;\r\n }\r\n }\r\n\r\n /**\r\n * Binds the view projection and projection matrices to the effect\r\n * @param effect defines the effect to bind the view projection and projection matrices to\r\n */\r\n public bindViewProjection(effect: Effect): void {\r\n if (!this._useUBO) {\r\n effect.setMatrix(\"viewProjection\", this.getScene().getTransformMatrix());\r\n effect.setMatrix(\"projection\", this.getScene().getProjectionMatrix());\r\n } else {\r\n this._needToBindSceneUbo = true;\r\n }\r\n }\r\n\r\n /**\r\n * Binds the view matrix to the effect\r\n * @param effect defines the effect to bind the view matrix to\r\n * @param variableName name of the shader variable that will hold the eye position\r\n */\r\n public bindEyePosition(effect: Effect, variableName?: string): void {\r\n if (!this._useUBO) {\r\n this._scene.bindEyePosition(effect, variableName);\r\n } else {\r\n this._needToBindSceneUbo = true;\r\n }\r\n }\r\n\r\n /**\r\n * Processes to execute after binding the material to a mesh\r\n * @param mesh defines the rendered mesh\r\n * @param effect defines the effect used to bind the material\r\n * @param _subMesh defines the subMesh that the material has been bound for\r\n */\r\n protected _afterBind(mesh?: AbstractMesh, effect: Nullable<Effect> = null, _subMesh?: SubMesh): void {\r\n this._scene._cachedMaterial = this;\r\n if (this._needToBindSceneUbo) {\r\n if (effect) {\r\n this._needToBindSceneUbo = false;\r\n BindSceneUniformBuffer(effect, this.getScene().getSceneUniformBuffer());\r\n this._scene.finalizeSceneUbo();\r\n }\r\n }\r\n if (mesh) {\r\n this._scene._cachedVisibility = mesh.visibility;\r\n } else {\r\n this._scene._cachedVisibility = 1;\r\n }\r\n\r\n if (this._onBindObservable && mesh) {\r\n this._onBindObservable.notifyObservers(mesh);\r\n }\r\n\r\n if (this.disableDepthWrite) {\r\n const engine = this._scene.getEngine();\r\n this._cachedDepthWriteState = engine.getDepthWrite();\r\n engine.setDepthWrite(false);\r\n }\r\n\r\n if (this.disableColorWrite) {\r\n const engine = this._scene.getEngine();\r\n this._cachedColorWriteState = engine.getColorWrite();\r\n engine.setColorWrite(false);\r\n }\r\n\r\n if (this.depthFunction !== 0) {\r\n const engine = this._scene.getEngine();\r\n this._cachedDepthFunctionState = engine.getDepthFunction() || 0;\r\n engine.setDepthFunction(this.depthFunction);\r\n }\r\n }\r\n\r\n /**\r\n * Unbinds the material from the mesh\r\n */\r\n public unbind(): void {\r\n this._scene.getSceneUniformBuffer().unbindEffect();\r\n\r\n if (this._onUnBindObservable) {\r\n this._onUnBindObservable.notifyObservers(this);\r\n }\r\n\r\n if (this.depthFunction !== 0) {\r\n const engine = this._scene.getEngine();\r\n engine.setDepthFunction(this._cachedDepthFunctionState);\r\n }\r\n\r\n if (this.disableDepthWrite) {\r\n const engine = this._scene.getEngine();\r\n engine.setDepthWrite(this._cachedDepthWriteState);\r\n }\r\n\r\n if (this.disableColorWrite) {\r\n const engine = this._scene.getEngine();\r\n engine.setColorWrite(this._cachedColorWriteState);\r\n }\r\n }\r\n\r\n /**\r\n * Returns the animatable textures.\r\n * @returns - Array of animatable textures.\r\n */\r\n public getAnimatables(): IAnimatable[] {\r\n this._eventInfo.animatables = [];\r\n this._callbackPluginEventGeneric(MaterialPluginEvent.GetAnimatables, this._eventInfo);\r\n return this._eventInfo.animatables;\r\n }\r\n\r\n /**\r\n * Gets the active textures from the material\r\n * @returns an array of textures\r\n */\r\n public getActiveTextures(): BaseTexture[] {\r\n this._eventInfo.activeTextures = [];\r\n this._callbackPluginEventGeneric(MaterialPluginEvent.GetActiveTextures, this._eventInfo);\r\n return this._eventInfo.activeTextures;\r\n }\r\n\r\n /**\r\n * Specifies if the material uses a texture\r\n * @param texture defines the texture to check against the material\r\n * @returns a boolean specifying if the material uses the texture\r\n */\r\n public hasTexture(texture: BaseTexture): boolean {\r\n this._eventInfo.hasTexture = false;\r\n this._eventInfo.texture = texture;\r\n this._callbackPluginEventGeneric(MaterialPluginEvent.HasTexture, this._eventInfo);\r\n return this._eventInfo.hasTexture;\r\n }\r\n\r\n /**\r\n * Makes a duplicate of the material, and gives it a new name\r\n * @param name defines the new name for the duplicated material\r\n * @returns the cloned material\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public clone(name: string): Nullable<Material> {\r\n return null;\r\n }\r\n\r\n protected _clonePlugins(targetMaterial: Material, rootUrl: string) {\r\n const serializationObject: any = {};\r\n\r\n // Create plugins in targetMaterial in case they don't exist\r\n this._serializePlugins(serializationObject);\r\n\r\n Material._ParsePlugins(serializationObject, targetMaterial, this._scene, rootUrl);\r\n\r\n // Copy the properties of the current plugins to the cloned material's plugins\r\n if (this.pluginManager) {\r\n for (const plugin of this.pluginManager._plugins) {\r\n const targetPlugin = targetMaterial.pluginManager!.getPlugin(plugin.name);\r\n if (targetPlugin) {\r\n plugin.copyTo(targetPlugin);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets the meshes bound to the material\r\n * @returns an array of meshes bound to the material\r\n */\r\n public getBindedMeshes(): AbstractMesh[] {\r\n if (this.meshMap) {\r\n const result: AbstractMesh[] = [];\r\n for (const meshId in this.meshMap) {\r\n const mesh = this.meshMap[meshId];\r\n if (mesh) {\r\n result.push(mesh);\r\n }\r\n }\r\n return result;\r\n } else {\r\n const meshes = this._scene.meshes;\r\n return meshes.filter((mesh) => mesh.material === this);\r\n }\r\n }\r\n\r\n /**\r\n * Force shader compilation\r\n * @param mesh defines the mesh associated with this material\r\n * @param onCompiled defines a function to execute once the material is compiled\r\n * @param options defines the options to configure the compilation\r\n * @param onError defines a function to execute if the material fails compiling\r\n */\r\n public forceCompilation(\r\n mesh: AbstractMesh,\r\n onCompiled?: (material: Material) => void,\r\n options?: Partial<IMaterialCompilationOptions>,\r\n onError?: (reason: string) => void\r\n ): void {\r\n const localOptions = {\r\n clipPlane: false,\r\n useInstances: false,\r\n ...options,\r\n };\r\n\r\n const scene = this.getScene();\r\n const currentHotSwapingState = this.allowShaderHotSwapping;\r\n this.allowShaderHotSwapping = false; // Turned off to let us evaluate the real compilation state\r\n\r\n const checkReady = () => {\r\n if (!this._scene || !this._scene.getEngine()) {\r\n return;\r\n }\r\n\r\n const clipPlaneState = scene.clipPlane;\r\n\r\n if (localOptions.clipPlane) {\r\n scene.clipPlane = new Plane(0, 0, 0, 1);\r\n }\r\n\r\n if (this._storeEffectOnSubMeshes) {\r\n let allDone = true,\r\n lastError = null;\r\n if (mesh.subMeshes) {\r\n const tempSubMesh = new SubMesh(0, 0, 0, 0, 0, mesh, undefined, false, false);\r\n if (tempSubMesh.materialDefines) {\r\n tempSubMesh.materialDefines._renderId = -1;\r\n }\r\n if (!this.isReadyForSubMesh(mesh, tempSubMesh, localOptions.useInstances)) {\r\n if (tempSubMesh.effect && tempSubMesh.effect.getCompilationError() && tempSubMesh.effect.allFallbacksProcessed()) {\r\n lastError = tempSubMesh.effect.getCompilationError();\r\n } else {\r\n allDone = false;\r\n setTimeout(checkReady, 16);\r\n }\r\n }\r\n }\r\n if (allDone) {\r\n this.allowShaderHotSwapping = currentHotSwapingState;\r\n if (lastError) {\r\n if (onError) {\r\n onError(lastError);\r\n }\r\n }\r\n if (onCompiled) {\r\n onCompiled(this);\r\n }\r\n }\r\n } else {\r\n if (this.isReady()) {\r\n this.allowShaderHotSwapping = currentHotSwapingState;\r\n if (onCompiled) {\r\n onCompiled(this);\r\n }\r\n } else {\r\n setTimeout(checkReady, 16);\r\n }\r\n }\r\n\r\n if (localOptions.clipPlane) {\r\n scene.clipPlane = clipPlaneState;\r\n }\r\n };\r\n\r\n checkReady();\r\n }\r\n\r\n /**\r\n * Force shader compilation\r\n * @param mesh defines the mesh that will use this material\r\n * @param options defines additional options for compiling the shaders\r\n * @returns a promise that resolves when the compilation completes\r\n */\r\n public async forceCompilationAsync(mesh: AbstractMesh, options?: Partial<IMaterialCompilationOptions>): Promise<void> {\r\n return await new Promise((resolve, reject) => {\r\n this.forceCompilation(\r\n mesh,\r\n () => {\r\n resolve();\r\n },\r\n options,\r\n (reason) => {\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n reject(reason);\r\n }\r\n );\r\n });\r\n }\r\n\r\n private static readonly _AllDirtyCallBack = (defines: MaterialDefines) => defines.markAllAsDirty();\r\n private static readonly _ImageProcessingDirtyCallBack = (defines: MaterialDefines) => defines.markAsImageProcessingDirty();\r\n private static readonly _TextureDirtyCallBack = (defines: MaterialDefines) => defines.markAsTexturesDirty();\r\n private static readonly _FresnelDirtyCallBack = (defines: MaterialDefines) => defines.markAsFresnelDirty();\r\n private static readonly _MiscDirtyCallBack = (defines: MaterialDefines) => defines.markAsMiscDirty();\r\n private static readonly _PrePassDirtyCallBack = (defines: MaterialDefines) => defines.markAsPrePassDirty();\r\n private static readonly _LightsDirtyCallBack = (defines: MaterialDefines) => defines.markAsLightDirty();\r\n private static readonly _AttributeDirtyCallBack = (defines: MaterialDefines) => defines.markAsAttributesDirty();\r\n\r\n private static _FresnelAndMiscDirtyCallBack = (defines: MaterialDefines) => {\r\n Material._FresnelDirtyCallBack(defines);\r\n Material._MiscDirtyCallBack(defines);\r\n };\r\n\r\n private static _TextureAndMiscDirtyCallBack = (defines: MaterialDefines) => {\r\n Material._TextureDirtyCallBack(defines);\r\n Material._MiscDirtyCallBack(defines);\r\n };\r\n\r\n private static readonly _DirtyCallbackArray: Array<(defines: MaterialDefines) => void> = [];\r\n private static readonly _RunDirtyCallBacks = (defines: MaterialDefines) => {\r\n for (const cb of Material._DirtyCallbackArray) {\r\n cb(defines);\r\n }\r\n };\r\n\r\n /**\r\n * Marks a define in the material to indicate that it needs to be re-computed\r\n * @param flag defines a flag used to determine which parts of the material have to be marked as dirty\r\n */\r\n public markAsDirty(flag: number): void {\r\n if (this.getScene().blockMaterialDirtyMechanism || this._blockDirtyMechanism) {\r\n return;\r\n }\r\n\r\n Material._DirtyCallbackArray.length = 0;\r\n\r\n if (flag & Material.ImageProcessingDirtyFlag) {\r\n Material._DirtyCallbackArray.push(Material._ImageProcessingDirtyCallBack);\r\n }\r\n\r\n if (flag & Material.TextureDirtyFlag) {\r\n Material._DirtyCallbackArray.push(Material._TextureDirtyCallBack);\r\n }\r\n\r\n if (flag & Material.LightDirtyFlag) {\r\n Material._DirtyCallbackArray.push(Material._LightsDirtyCallBack);\r\n }\r\n\r\n if (flag & Material.FresnelDirtyFlag) {\r\n Material._DirtyCallbackArray.push(Material._FresnelDirtyCallBack);\r\n }\r\n\r\n if (flag & Material.AttributesDirtyFlag) {\r\n Material._DirtyCallbackArray.push(Material._AttributeDirtyCallBack);\r\n }\r\n\r\n if (flag & Material.MiscDirtyFlag) {\r\n Material._DirtyCallbackArray.push(Material._MiscDirtyCallBack);\r\n }\r\n\r\n if (flag & Material.PrePassDirtyFlag) {\r\n Material._DirtyCallbackArray.push(Material._PrePassDirtyCallBack);\r\n }\r\n\r\n if (Material._DirtyCallbackArray.length) {\r\n this._markAllSubMeshesAsDirty(Material._RunDirtyCallBacks);\r\n }\r\n\r\n this.getScene().resetCachedMaterial();\r\n }\r\n\r\n /**\r\n * Resets the draw wrappers cache for all submeshes that are using this material\r\n */\r\n public resetDrawCache(): void {\r\n const meshes = this.getScene().meshes;\r\n for (const mesh of meshes) {\r\n if (!mesh.subMeshes) {\r\n continue;\r\n }\r\n for (const subMesh of mesh.subMeshes) {\r\n if (subMesh.getMaterial() !== this) {\r\n continue;\r\n }\r\n\r\n subMesh.resetDrawCache();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Marks all submeshes of a material to indicate that their material defines need to be re-calculated\r\n * @param func defines a function which checks material defines against the submeshes\r\n */\r\n protected _markAllSubMeshesAsDirty(func: (defines: MaterialDefines) => void) {\r\n const scene = this.getScene();\r\n if (scene.blockMaterialDirtyMechanism || this._blockDirtyMechanism) {\r\n return;\r\n }\r\n\r\n const meshes = scene.meshes;\r\n for (const mesh of meshes) {\r\n if (!mesh.subMeshes) {\r\n continue;\r\n }\r\n for (const subMesh of mesh.subMeshes) {\r\n // We want to skip the submeshes which are not using this material or which have not yet rendered at least once\r\n const material = subMesh.getMaterial() || (scene._hasDefaultMaterial ? scene.defaultMaterial : null);\r\n if (material !== this) {\r\n continue;\r\n }\r\n\r\n for (const drawWrapper of subMesh._drawWrappers) {\r\n if (!drawWrapper || !drawWrapper.defines || !(drawWrapper.defines as MaterialDefines).markAllAsDirty) {\r\n continue;\r\n }\r\n if (this._materialContext === drawWrapper.materialContext) {\r\n func(drawWrapper.defines as MaterialDefines);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Indicates that the scene should check if the rendering now needs a prepass\r\n */\r\n protected _markScenePrePassDirty() {\r\n if (this.getScene().blockMaterialDirtyMechanism || this._blockDirtyMechanism) {\r\n return;\r\n }\r\n\r\n const prePassRenderer = this.getScene().enablePrePassRenderer();\r\n if (prePassRenderer) {\r\n prePassRenderer.markAsDirty();\r\n }\r\n }\r\n\r\n /**\r\n * Indicates that we need to re-calculated for all submeshes\r\n */\r\n protected _markAllSubMeshesAsAllDirty() {\r\n this._markAllSubMeshesAsDirty(Material._AllDirtyCallBack);\r\n }\r\n\r\n /**\r\n * Indicates that image processing needs to be re-calculated for all submeshes\r\n */\r\n protected _markAllSubMeshesAsImageProcessingDirty() {\r\n this._markAllSubMeshesAsDirty(Material._ImageProcessingDirtyCallBack);\r\n }\r\n\r\n /**\r\n * Indicates that textures need to be re-calculated for all submeshes\r\n */\r\n protected _markAllSubMeshesAsTexturesDirty() {\r\n this._markAllSubMeshesAsDirty(Material._TextureDirtyCallBack);\r\n }\r\n\r\n /**\r\n * Indicates that fresnel needs to be re-calculated for all submeshes\r\n */\r\n protected _markAllSubMeshesAsFresnelDirty() {\r\n this._markAllSubMeshesAsDirty(Material._FresnelDirtyCallBack);\r\n }\r\n\r\n /**\r\n * Indicates that fresnel and misc need to be re-calculated for all submeshes\r\n */\r\n protected _markAllSubMeshesAsFresnelAndMiscDirty() {\r\n this._markAllSubMeshesAsDirty(Material._FresnelAndMiscDirtyCallBack);\r\n }\r\n\r\n /**\r\n * Indicates that lights need to be re-calculated for all submeshes\r\n */\r\n protected _markAllSubMeshesAsLightsDirty() {\r\n this._markAllSubMeshesAsDirty(Material._LightsDirtyCallBack);\r\n }\r\n\r\n /**\r\n * Indicates that attributes need to be re-calculated for all submeshes\r\n */\r\n protected _markAllSubMeshesAsAttributesDirty() {\r\n this._markAllSubMeshesAsDirty(Material._AttributeDirtyCallBack);\r\n }\r\n\r\n /**\r\n * Indicates that misc needs to be re-calculated for all submeshes\r\n */\r\n protected _markAllSubMeshesAsMiscDirty() {\r\n this._markAllSubMeshesAsDirty(Material._MiscDirtyCallBack);\r\n }\r\n\r\n /**\r\n * Indicates that prepass needs to be re-calculated for all submeshes\r\n */\r\n protected _markAllSubMeshesAsPrePassDirty() {\r\n this._markAllSubMeshesAsDirty(Material._PrePassDirtyCallBack);\r\n }\r\n\r\n /**\r\n * Indicates that textures and misc need to be re-calculated for all submeshes\r\n */\r\n protected _markAllSubMeshesAsTexturesAndMiscDirty() {\r\n this._markAllSubMeshesAsDirty(Material._TextureAndMiscDirtyCallBack);\r\n }\r\n\r\n protected _checkScenePerformancePriority() {\r\n if (this._scene.performancePriority !== ScenePerformancePriority.BackwardCompatible) {\r\n this.checkReadyOnlyOnce = true;\r\n // re-set the flag when the perf priority changes\r\n const observer = this._scene.onScenePerformancePriorityChangedObservable.addOnce(() => {\r\n this.checkReadyOnlyOnce = false;\r\n });\r\n // if this material is disposed before the scene is disposed, cleanup the observer\r\n this.onDisposeObservable.add(() => {\r\n this._scene.onScenePerformancePriorityChangedObservable.remove(observer);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Sets the required values to the prepass renderer.\r\n * @param prePassRenderer defines the prepass renderer to setup.\r\n * @returns true if the pre pass is needed.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public setPrePassRenderer(prePassRenderer: PrePassRenderer): boolean {\r\n // Do Nothing by default\r\n return false;\r\n }\r\n\r\n /**\r\n * Disposes the material\r\n * @param _forceDisposeEffect kept for backward compat. We reference count the effect now.\r\n * @param forceDisposeTextures specifies if textures should be forcefully disposed\r\n * @param notBoundToMesh specifies if the material that is being disposed is known to be not bound to any mesh\r\n */\r\n public dispose(_forceDisposeEffect?: boolean, forceDisposeTextures?: boolean, notBoundToMesh?: boolean): void {\r\n const scene = this.getScene();\r\n // Animations\r\n scene.stopAnimation(this);\r\n scene.freeProcessedMaterials();\r\n\r\n // Remove from scene\r\n scene.removeMaterial(this);\r\n\r\n this._eventInfo.forceDisposeTextures = forceDisposeTextures;\r\n this._callbackPluginEventGeneric(MaterialPluginEvent.Disposed, this._eventInfo);\r\n\r\n if (this._parentContainer) {\r\n const index = this._parentContainer.materials.indexOf(this);\r\n if (index > -1) {\r\n this._parentContainer.materials.splice(index, 1);\r\n }\r\n this._parentContainer = null;\r\n }\r\n\r\n if (notBoundToMesh !== true) {\r\n // Remove from meshes\r\n if (this.meshMap) {\r\n for (const meshId in this.meshMap) {\r\n const mesh = this.meshMap[meshId];\r\n this._disposeMeshResources(mesh);\r\n }\r\n } else {\r\n const meshes = scene.meshes;\r\n for (const mesh of meshes) {\r\n this._disposeMeshResources(mesh);\r\n }\r\n }\r\n }\r\n\r\n this._uniformBuffer.dispose();\r\n\r\n // Shader are kept in cache for further use but we can get rid of this by using forceDisposeEffect\r\n if (this._drawWrapper.effect) {\r\n if (!this._storeEffectOnSubMeshes) {\r\n this._drawWrapper.effect.dispose();\r\n }\r\n\r\n this._drawWrapper.effect = null;\r\n }\r\n\r\n this.metadata = null;\r\n\r\n // Callback\r\n this.onDisposeObservable.notifyObservers(this);\r\n\r\n this.onDisposeObservable.clear();\r\n if (this._onBindObservable) {\r\n this._onBindObservable.clear();\r\n }\r\n\r\n if (this._onUnBindObservable) {\r\n this._onUnBindObservable.clear();\r\n }\r\n\r\n if (this._onEffectCreatedObservable) {\r\n this._onEffectCreatedObservable.clear();\r\n }\r\n\r\n if (this._eventInfo) {\r\n this._eventInfo = {} as any;\r\n }\r\n }\r\n\r\n private _disposeMeshResources(mesh: AbstractMesh | undefined) {\r\n if (!mesh) {\r\n return;\r\n }\r\n\r\n const geometry = (<Mesh>mesh).geometry;\r\n const materialForRenderPass = mesh._internalAbstractMeshDataInfo._materialForRenderPass;\r\n if (this._storeEffectOnSubMeshes) {\r\n if (mesh.subMeshes && materialForRenderPass) {\r\n for (const subMesh of mesh.subMeshes) {\r\n const drawWrappers = subMesh._drawWrappers;\r\n for (let renderPassIndex = 0; renderPassIndex < drawWrappers.length; renderPassIndex++) {\r\n const effect = drawWrappers[renderPassIndex]?.effect;\r\n if (!effect) {\r\n continue;\r\n }\r\n const material = materialForRenderPass[renderPassIndex];\r\n if (material === this) {\r\n geometry?._releaseVertexArrayObject(effect);\r\n subMesh._removeDrawWrapper(renderPassIndex, true, true);\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n geometry?._releaseVertexArrayObject(this._drawWrapper.effect);\r\n }\r\n\r\n if (mesh.material === this && !(mesh as InstancedMesh).sourceMesh) {\r\n mesh.material = null;\r\n }\r\n }\r\n\r\n /**\r\n * Serializes this material\r\n * @returns the serialized material object\r\n */\r\n public serialize(): any {\r\n const serializationObject = SerializationHelper.Serialize(this);\r\n\r\n serializationObject.stencil = this.stencil.serialize();\r\n serializationObject.uniqueId = this.uniqueId;\r\n\r\n this._serializePlugins(serializationObject);\r\n\r\n return serializationObject;\r\n }\r\n\r\n protected _serializePlugins(serializationObject: any) {\r\n serializationObject.plugins = {};\r\n\r\n if (this.pluginManager) {\r\n for (const plugin of this.pluginManager._plugins) {\r\n if (!plugin.doNotSerialize) {\r\n serializationObject.plugins[plugin.getClassName()] = plugin.serialize();\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Parses the alpha mode from the material data to parse\r\n * @param parsedMaterial defines the material data to parse\r\n * @param material defines the material to update\r\n */\r\n public static ParseAlphaMode(parsedMaterial: any, material: Material) {\r\n if (parsedMaterial._alphaMode !== undefined) {\r\n material._alphaMode = Array.isArray(parsedMaterial._alphaMode) ? parsedMaterial._alphaMode : [parsedMaterial._alphaMode];\r\n } else if (parsedMaterial.alphaMode !== undefined) {\r\n material._alphaMode = Array.isArray(parsedMaterial.alphaMode) ? parsedMaterial.alphaMode : [parsedMaterial.alphaMode];\r\n } else {\r\n material._alphaMode = [Constants.ALPHA_COMBINE];\r\n }\r\n }\r\n\r\n /**\r\n * Creates a material from parsed material data\r\n * @param parsedMaterial defines parsed material data\r\n * @param scene defines the hosting scene\r\n * @param rootUrl defines the root URL to use to load textures\r\n * @returns a new material\r\n */\r\n public static Parse(parsedMaterial: any, scene: Scene, rootUrl: string): Nullable<Material> {\r\n if (!parsedMaterial.customType) {\r\n parsedMaterial.customType = \"BABYLON.StandardMaterial\";\r\n } else if (parsedMaterial.customType === \"BABYLON.PBRMaterial\" && parsedMaterial.overloadedAlbedo) {\r\n parsedMaterial.customType = \"BABYLON.LegacyPBRMaterial\";\r\n if (!BABYLON.LegacyPBRMaterial) {\r\n Logger.Error(\"Your scene is trying to load a legacy version of the PBRMaterial, please, include it from the materials library.\");\r\n return null;\r\n }\r\n }\r\n\r\n const materialType = Tools.Instantiate(parsedMaterial.customType);\r\n const material = materialType.Parse(parsedMaterial, scene, rootUrl);\r\n material._loadedUniqueId = parsedMaterial.uniqueId;\r\n\r\n Material.ParseAlphaMode(parsedMaterial, material);\r\n\r\n return material;\r\n }\r\n\r\n protected static _ParsePlugins(serializationObject: any, material: Material, scene: Scene, rootUrl: string) {\r\n if (!serializationObject.plugins) {\r\n return;\r\n }\r\n\r\n for (const pluginClassName in serializationObject.plugins) {\r\n const pluginData = serializationObject.plugins[pluginClassName];\r\n\r\n let plugin = material.pluginManager?.getPlugin(pluginData.name);\r\n\r\n if (!plugin) {\r\n const pluginClassType = Tools.Instantiate(\"BABYLON.\" + pluginClassName);\r\n if (pluginClassType) {\r\n plugin = new pluginClassType(material);\r\n }\r\n }\r\n\r\n plugin?.parse(pluginData, scene, rootUrl);\r\n }\r\n }\r\n}\r\n"]}