/**
 * @file ShaderResourceManager.ts
 * @description Manages shader resources with pooling, caching, and performance monitoring.
 * Optimizes GPU resource usage by sharing shader programs across filters.
 */
import { GlProgram, Filter } from 'pixi.js';
/**
 * Configuration options for the ShaderResourceManager
 */
interface ShaderManagerOptions {
    /** Enable performance tracking */
    enableMetrics?: boolean;
    /** Enable debug logging */
    debug?: boolean;
    /** Maximum number of shaders to keep in the pool */
    maxPoolSize?: number;
}
/**
 * Manager for shader program resources with pooling and performance metrics
 *
 * Provides:
 * - Shader program pooling to share across filter instances
 * - Performance metrics tracking for shader compilation and usage
 * - Automatic cleanup of unused shaders
 */
export declare class ShaderResourceManager {
    /** Singleton instance of the shader manager */
    private static instance;
    /** Pool of shader programs indexed by hash */
    private shaderPool;
    /** Map of filters to their associated shader hashes */
    private filterShaderMap;
    /** Manager configuration */
    private options;
    /** Is debug logging enabled */
    private debug;
    /**
     * Creates a new ShaderResourceManager instance
     *
     * @param options - Configuration options
     */
    private constructor();
    /**
     * Get the singleton instance of the ShaderResourceManager
     *
     * @param options - Optional configuration options
     * @returns The singleton instance
     */
    static getInstance(options?: ShaderManagerOptions): ShaderResourceManager;
    /**
     * Log a message if debug is enabled
     *
     * @param message - Message to log
     */
    private log;
    /**
     * Generate a hash for a shader program based on its source code
     *
     * @param vertexSrc - Vertex shader source code
     * @param fragmentSrc - Fragment shader source code
     * @returns A hash string uniquely identifying the shader program
     */
    private generateShaderHash;
    /**
     * Simplified method to get or create a shader program from a filter
     * This method extracts the shader source from the filter if available
     *
     * @param key - Unique identifier for the shader configuration
     * @param filter - The filter instance to extract shader from
     * @returns The shader program or undefined if extraction failed
     */
    getShaderProgram(key: string, filter: Filter): GlProgram | undefined;
    /**
     * Internal implementation of getShaderProgram with all parameters
     */
    private getShaderProgramInternal;
    /**
     * Release a shader program by key
     *
     * @param key - The key used when getting the shader
     */
    releaseShader(key: string): void;
    /**
     * Release a shader program associated with a filter
     *
     * @param filter - The filter instance
     */
    private releaseShaderByFilter;
    /**
     * Prune the shader pool by removing the least recently used shaders
     * when the pool exceeds the maximum size
     */
    pruneShaderPool(): void;
    /**
     * Get statistics about shader usage and the shader pool
     *
     * @returns Statistics object
     */
    getStats(): Record<string, any>;
    /**
     * Registers a filter with the shader manager for tracking and optimization
     *
     * @param filter - The filter to register
     * @param key - Optional unique key to identify this filter's shader
     * @returns True if registration was successful
     */
    registerFilter(filter: Filter, key?: string): boolean;
    /**
     * Releases a filter from the shader manager
     *
     * @param filter - The filter to release
     * @param key - Optional key that was used to register the filter
     */
    releaseFilter(filter: Filter, key?: string): void;
}
export {};
