@babylonjs/core
Version:
Getting started? Play directly with the Babylon.js API using our [playground](https://playground.babylonjs.com/). It also contains a lot of samples to learn how to use it.
100 lines (99 loc) • 4.91 kB
TypeScript
import type { ShaderCustomProcessingFunction } from "../Engines/Processors/shaderProcessingOptions.js";
import type { Nullable } from "../types.js";
import { Material } from "./material.js";
import type { MaterialPluginPrepareEffect, MaterialPluginBindForSubMesh, MaterialPluginDisposed, MaterialPluginGetActiveTextures, MaterialPluginGetAnimatables, MaterialPluginGetDefineNames, MaterialPluginHasTexture, MaterialPluginIsReadyForSubMesh, MaterialPluginPrepareDefines, MaterialPluginPrepareUniformBuffer, MaterialPluginHardBindForSubMesh, MaterialPluginHasRenderTargetTextures, MaterialPluginFillRenderTargetTextures } from "./materialPluginEvent.js";
import type { Scene } from "../scene.js";
import type { AbstractEngine } from "../Engines/abstractEngine.js";
import type { MaterialPluginBase } from "./materialPluginBase.js";
declare module "./material.js" {
interface Material {
/**
* Plugin manager for this material
*/
pluginManager?: MaterialPluginManager;
}
}
/**
* Class that manages the plugins of a material
* @since 5.0
*/
export declare class MaterialPluginManager {
/** Map a plugin class name to a #define name (used in the vertex/fragment shaders as a marker of the plugin usage) */
private static _MaterialPluginClassToMainDefine;
private static _MaterialPluginCounter;
protected _material: Material;
protected _scene: Scene;
protected _engine: AbstractEngine;
/** @internal */
_plugins: MaterialPluginBase[];
protected _activePlugins: MaterialPluginBase[];
protected _activePluginsForExtraEvents: MaterialPluginBase[];
protected _codeInjectionPoints: {
[shaderType: string]: {
[codeName: string]: boolean;
};
};
protected _defineNamesFromPlugins?: {
[name: string]: {
type: string;
default: any;
};
};
protected _uboDeclaration: string;
protected _vertexDeclaration: string;
protected _fragmentDeclaration: string;
protected _uniformList: string[];
protected _samplerList: string[];
protected _uboList: string[];
/**
* Creates a new instance of the plugin manager
* @param material material that this manager will manage the plugins for
*/
constructor(material: Material);
/**
* @internal
*/
_addPlugin(plugin: MaterialPluginBase): boolean;
/**
* @internal
*/
_activatePlugin(plugin: MaterialPluginBase): void;
/**
* Gets a plugin from the list of plugins managed by this manager
* @param name name of the plugin
* @returns the plugin if found, else null
*/
getPlugin<T = MaterialPluginBase>(name: string): Nullable<T>;
protected _handlePluginEventIsReadyForSubMesh(eventData: MaterialPluginIsReadyForSubMesh): void;
protected _handlePluginEventPrepareDefinesBeforeAttributes(eventData: MaterialPluginPrepareDefines): void;
protected _handlePluginEventPrepareDefines(eventData: MaterialPluginPrepareDefines): void;
protected _handlePluginEventHardBindForSubMesh(eventData: MaterialPluginHardBindForSubMesh): void;
protected _handlePluginEventBindForSubMesh(eventData: MaterialPluginBindForSubMesh): void;
protected _handlePluginEventHasRenderTargetTextures(eventData: MaterialPluginHasRenderTargetTextures): void;
protected _handlePluginEventFillRenderTargetTextures(eventData: MaterialPluginFillRenderTargetTextures): void;
protected _handlePluginEvent(id: number, info: MaterialPluginGetActiveTextures | MaterialPluginGetAnimatables | MaterialPluginHasTexture | MaterialPluginDisposed | MaterialPluginGetDefineNames | MaterialPluginPrepareEffect | MaterialPluginPrepareUniformBuffer): void;
protected _collectPointNames(shaderType: string, customCode: Nullable<{
[pointName: string]: string;
}> | undefined): void;
protected _injectCustomCode(eventData: MaterialPluginPrepareEffect, existingCallback?: (shaderType: string, code: string) => string): ShaderCustomProcessingFunction;
}
/**
* Type for plugin material factories.
*/
export type PluginMaterialFactory = (material: Material) => Nullable<MaterialPluginBase>;
/**
* Registers a new material plugin through a factory, or updates it. This makes the plugin available to all materials instantiated after its registration.
* @param pluginName The plugin name
* @param factory The factory function which allows to create the plugin
*/
export declare function RegisterMaterialPlugin(pluginName: string, factory: PluginMaterialFactory): void;
/**
* Removes a material plugin from the list of global plugins.
* @param pluginName The plugin name
* @returns true if the plugin has been removed, else false
*/
export declare function UnregisterMaterialPlugin(pluginName: string): boolean;
/**
* Clear the list of global material plugins
*/
export declare function UnregisterAllMaterialPlugins(): void;