import type { NodeMaterialConnectionPoint } from "./nodeMaterialBlockConnectionPoint.js";
import type { NodeMaterialBlock } from "./nodeMaterialBlock.js";
import type { InputBlock } from "./Blocks/Input/inputBlock.js";
import type { Scene } from "../../scene.js";
import type { Immutable, Nullable } from "../../types.js";
import type { NodeMaterial, NodeMaterialTextureBlocks } from "./nodeMaterial.js";
/**
 * Class used to store shared data between 2 NodeMaterialBuildState
 */
export declare class NodeMaterialBuildStateSharedData {
    /**
     * The node material we are currently building
     */
    nodeMaterial: NodeMaterial;
    /**
     * Gets the list of emitted varyings
     */
    temps: string[];
    /**
     * Gets the list of emitted varyings
     */
    varyings: string[];
    /**
     * Gets the varying declaration string (for vertex shader)
     */
    varyingDeclaration: string;
    /**
     * Gets the varying declaration string (for fragment shader)
     * This is potentially different from varyingDeclaration only in WebGPU
     */
    varyingDeclarationFragment: string;
    /**
     * Gets the varying initialization string (for fragment shader)
     * Only used in WebGPU, to reconstruct the varying values from the vertex shader if their types is mat4x4f
     */
    varyingInitializationsFragment: string;
    /**
     * List of the fragment output nodes
     */
    fragmentOutputNodes: Immutable<Array<NodeMaterialBlock>>;
    /**
     * Input blocks
     */
    inputBlocks: InputBlock[];
    /**
     * Input blocks
     */
    textureBlocks: NodeMaterialTextureBlocks[];
    /**
     * Bindable blocks (Blocks that need to set data to the effect)
     */
    bindableBlocks: NodeMaterialBlock[];
    /**
     * Bindable blocks (Blocks that need to set data to the effect) that will always be called (by bindForSubMesh), contrary to bindableBlocks that won't be called if _mustRebind() returns false
     */
    forcedBindableBlocks: NodeMaterialBlock[];
    /**
     * List of blocks that can provide a compilation fallback
     */
    blocksWithFallbacks: NodeMaterialBlock[];
    /**
     * List of blocks that can provide a define update
     */
    blocksWithDefines: NodeMaterialBlock[];
    /**
     * List of blocks that can provide a repeatable content
     */
    repeatableContentBlocks: NodeMaterialBlock[];
    /**
     * List of blocks that can provide a dynamic list of uniforms
     */
    dynamicUniformBlocks: NodeMaterialBlock[];
    /**
     * List of blocks that can block the isReady function for the material
     */
    blockingBlocks: NodeMaterialBlock[];
    /**
     * Gets the list of animated inputs
     */
    animatedInputs: InputBlock[];
    /**
     * Configurations used to format the generated code
     */
    formatConfig: {
        getUniformAnnotation: Nullable<(name: string) => string>;
        formatVariablename: (name: string) => string;
    };
    /**
     * Build Id used to avoid multiple recompilations
     */
    buildId: number;
    /** List of emitted variables */
    variableNames: {
        [key: string]: number;
    };
    /** List of emitted defines */
    defineNames: {
        [key: string]: number;
    };
    /** Should emit comments? */
    emitComments: boolean;
    /** Emit build activity */
    verbose: boolean;
    /** Gets or sets the hosting scene */
    scene: Scene;
    /**
     * Gets the compilation hints emitted at compilation time
     */
    hints: {
        needWorldViewMatrix: boolean;
        needWorldViewProjectionMatrix: boolean;
        needAlphaBlending: boolean;
        needAlphaTesting: boolean;
    };
    /**
     * List of compilation checks
     */
    checks: {
        emitVertex: boolean;
        emitFragment: boolean;
        notConnectedNonOptionalInputs: NodeMaterialConnectionPoint[];
        customErrors: string[];
    };
    /**
     * Is vertex program allowed to be empty?
     */
    allowEmptyVertexProgram: boolean;
    /** Creates a new shared data */
    constructor();
    /**
     * Push a new error to the build state, avoiding exceptions that can break the build process
     * @param message defines the error message to push
     */
    raiseBuildError(message: string): void;
    /**
     * Emits console errors and exceptions if there is a failing check
     * @returns true if all checks pass
     */
    emitErrors(): boolean;
}
