import "@babylonjs/core/Shaders/outline.fragment";
import "@babylonjs/core/Shaders/outline.vertex";
import type { _InstancesBatch } from "@babylonjs/core/Meshes/mesh";
import type { SubMesh } from "@babylonjs/core/Meshes/subMesh";
import { Scene } from "@babylonjs/core/scene";
import type { ISceneComponent } from "@babylonjs/core/sceneComponent";
declare module "@babylonjs/core/scene" {
    interface Scene {
        /** @internal */
        _mmdOutlineRenderer: MmdOutlineRenderer;
        /**
         * Gets the outline renderer associated with the scene
         * @returns a MmdOutlineRenderer
         */
        getMmdOutlineRenderer(): MmdOutlineRenderer;
    }
}
/**
 * This class is responsible to draw the outline/overlay of meshes.
 * It should not be used directly but through the available method on mesh.
 */
export declare class MmdOutlineRenderer implements ISceneComponent {
    /**
     * The name of the component. Each component must have a unique name.
     */
    name: string;
    /**
     * The scene the component belongs to.
     */
    scene: Scene;
    private readonly _engine;
    private readonly _passIdForDrawWrapper;
    /**
     * Instantiates a new outline renderer. (There could be only one per scene).
     * @param scene Defines the scene it belongs to
     */
    constructor(scene: Scene);
    /**
     * Register the component to one instance of a scene.
     */
    register(): void;
    /**
     * Rebuilds the elements related to this component in case of
     * context lost for instance.
     */
    rebuild(): void;
    /**
     * Disposes the component and the associated resources.
     */
    dispose(): void;
    private static readonly _ViewMatrix;
    private static readonly _InverseViewProjectionMatrix;
    /**
     * Renders the outline in the canvas.
     * @param subMesh Defines the sumesh to render
     * @param batch Defines the batch of meshes in case of instances
     * @param renderPassId Render pass id to use to render the mesh
     */
    render(subMesh: SubMesh, batch: _InstancesBatch, renderPassId?: number): void;
    /**
     * Returns whether or not the outline renderer is ready for a given submesh.
     * All the dependencies e.g. submeshes, texture, effect... mus be ready
     * @param subMesh Defines the submesh to check readiness for
     * @param useInstances Defines whether wee are trying to render instances or not
     * @param renderPassId Render pass id to use to render the mesh
     * @returns true if ready otherwise false
     */
    isReady(subMesh: SubMesh, useInstances: boolean, renderPassId?: number): boolean;
    private _afterRenderingMesh;
}
