materialPluginManager.d.ts 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import type { ShaderCustomProcessingFunction } from "../Engines/Processors/shaderProcessingOptions";
  2. import type { Nullable } from "../types";
  3. import { Material } from "./material";
  4. import type { MaterialPluginPrepareEffect, MaterialPluginBindForSubMesh, MaterialPluginDisposed, MaterialPluginGetActiveTextures, MaterialPluginGetAnimatables, MaterialPluginGetDefineNames, MaterialPluginHasTexture, MaterialPluginIsReadyForSubMesh, MaterialPluginPrepareDefines, MaterialPluginPrepareUniformBuffer, MaterialPluginHardBindForSubMesh, MaterialPluginHasRenderTargetTextures, MaterialPluginFillRenderTargetTextures } from "./materialPluginEvent";
  5. import type { Scene } from "../scene";
  6. import type { AbstractEngine } from "../Engines/abstractEngine";
  7. import type { MaterialPluginBase } from "./materialPluginBase";
  8. declare module "./material" {
  9. interface Material {
  10. /**
  11. * Plugin manager for this material
  12. */
  13. pluginManager?: MaterialPluginManager;
  14. }
  15. }
  16. /**
  17. * Class that manages the plugins of a material
  18. * @since 5.0
  19. */
  20. export declare class MaterialPluginManager {
  21. /** Map a plugin class name to a #define name (used in the vertex/fragment shaders as a marker of the plugin usage) */
  22. private static _MaterialPluginClassToMainDefine;
  23. private static _MaterialPluginCounter;
  24. protected _material: Material;
  25. protected _scene: Scene;
  26. protected _engine: AbstractEngine;
  27. /** @internal */
  28. _plugins: MaterialPluginBase[];
  29. protected _activePlugins: MaterialPluginBase[];
  30. protected _activePluginsForExtraEvents: MaterialPluginBase[];
  31. protected _codeInjectionPoints: {
  32. [shaderType: string]: {
  33. [codeName: string]: boolean;
  34. };
  35. };
  36. protected _defineNamesFromPlugins?: {
  37. [name: string]: {
  38. type: string;
  39. default: any;
  40. };
  41. };
  42. protected _uboDeclaration: string;
  43. protected _vertexDeclaration: string;
  44. protected _fragmentDeclaration: string;
  45. protected _uniformList: string[];
  46. protected _samplerList: string[];
  47. protected _uboList: string[];
  48. /**
  49. * Creates a new instance of the plugin manager
  50. * @param material material that this manager will manage the plugins for
  51. */
  52. constructor(material: Material);
  53. /**
  54. * @internal
  55. */
  56. _addPlugin(plugin: MaterialPluginBase): boolean;
  57. /**
  58. * @internal
  59. */
  60. _activatePlugin(plugin: MaterialPluginBase): void;
  61. /**
  62. * Gets a plugin from the list of plugins managed by this manager
  63. * @param name name of the plugin
  64. * @returns the plugin if found, else null
  65. */
  66. getPlugin<T = MaterialPluginBase>(name: string): Nullable<T>;
  67. protected _handlePluginEventIsReadyForSubMesh(eventData: MaterialPluginIsReadyForSubMesh): void;
  68. protected _handlePluginEventPrepareDefinesBeforeAttributes(eventData: MaterialPluginPrepareDefines): void;
  69. protected _handlePluginEventPrepareDefines(eventData: MaterialPluginPrepareDefines): void;
  70. protected _handlePluginEventHardBindForSubMesh(eventData: MaterialPluginHardBindForSubMesh): void;
  71. protected _handlePluginEventBindForSubMesh(eventData: MaterialPluginBindForSubMesh): void;
  72. protected _handlePluginEventHasRenderTargetTextures(eventData: MaterialPluginHasRenderTargetTextures): void;
  73. protected _handlePluginEventFillRenderTargetTextures(eventData: MaterialPluginFillRenderTargetTextures): void;
  74. protected _handlePluginEvent(id: number, info: MaterialPluginGetActiveTextures | MaterialPluginGetAnimatables | MaterialPluginHasTexture | MaterialPluginDisposed | MaterialPluginGetDefineNames | MaterialPluginPrepareEffect | MaterialPluginPrepareUniformBuffer): void;
  75. protected _collectPointNames(shaderType: string, customCode: Nullable<{
  76. [pointName: string]: string;
  77. }> | undefined): void;
  78. protected _injectCustomCode(eventData: MaterialPluginPrepareEffect, existingCallback?: (shaderType: string, code: string) => string): ShaderCustomProcessingFunction;
  79. }
  80. /**
  81. * Type for plugin material factories.
  82. */
  83. export type PluginMaterialFactory = (material: Material) => Nullable<MaterialPluginBase>;
  84. /**
  85. * Registers a new material plugin through a factory, or updates it. This makes the plugin available to all materials instantiated after its registration.
  86. * @param pluginName The plugin name
  87. * @param factory The factory function which allows to create the plugin
  88. */
  89. export declare function RegisterMaterialPlugin(pluginName: string, factory: PluginMaterialFactory): void;
  90. /**
  91. * Removes a material plugin from the list of global plugins.
  92. * @param pluginName The plugin name
  93. * @returns true if the plugin has been removed, else false
  94. */
  95. export declare function UnregisterMaterialPlugin(pluginName: string): boolean;
  96. /**
  97. * Clear the list of global material plugins
  98. */
  99. export declare function UnregisterAllMaterialPlugins(): void;