{"version":3,"file":"TextureGCSystem.mjs","sources":["../../../../../src/rendering/renderers/shared/texture/TextureGCSystem.ts"],"sourcesContent":["import { ExtensionType } from '../../../../extensions/Extensions';\nimport { deprecation } from '../../../../utils/logging/deprecation';\nimport { type Renderer } from '../../types';\n\nimport type { System } from '../system/System';\n\n/**\n * Options for the {@link TextureGCSystem}.\n * @category rendering\n * @advanced\n * @deprecated since 8.15.0\n * @see {@link GCSystem}\n */\nexport interface TextureGCSystemOptions\n{\n    /**\n     * If set to true, this will enable the garbage collector on the GPU.\n     * @default true\n     * @deprecated since 8.15.0\n     */\n    textureGCActive: boolean;\n    /**\n     * @deprecated since 8.3.0\n     * @see {@link TextureGCSystemOptions.textureGCMaxIdle}\n     */\n    textureGCAMaxIdle: number;\n    /**\n     * The maximum idle frames before a texture is destroyed by garbage collection.\n     * @default 60 * 60\n     * @deprecated since 8.15.0\n     */\n    textureGCMaxIdle: number;\n    /**\n     * Frames between two garbage collections.\n     * @default 600\n     * @deprecated since 8.15.0\n     */\n    textureGCCheckCountMax: number;\n}\n/**\n * System plugin to the renderer to manage texture garbage collection on the GPU,\n * ensuring that it does not get clogged up with textures that are no longer being used.\n * @category rendering\n * @advanced\n * @deprecated since 8.15.0\n * @see {@link GCSystem}\n */\nexport class TextureGCSystem implements System<TextureGCSystemOptions>\n{\n    /** @ignore */\n    public static extension = {\n        type: [\n            ExtensionType.WebGLSystem,\n            ExtensionType.WebGPUSystem,\n        ],\n        name: 'textureGC',\n    } as const;\n\n    /**\n     * Default options for the TextureGCSystem\n     * @deprecated since 8.15.0\n     */\n    public static defaultOptions: TextureGCSystemOptions = {\n        /**\n         * If set to true, this will enable the garbage collector on the GPU.\n         * @default true\n         */\n        textureGCActive: true,\n        /**\n         * @deprecated since 8.3.0\n         * @see {@link TextureGCSystemOptions.textureGCMaxIdle}\n         */\n        textureGCAMaxIdle: null,\n        /**\n         * The maximum idle frames before a texture is destroyed by garbage collection.\n         * @default 60 * 60\n         */\n        textureGCMaxIdle: 60 * 60,\n        /**\n         * Frames between two garbage collections.\n         * @default 600\n         */\n        textureGCCheckCountMax: 600,\n    };\n\n    /**\n     * Frame count since started.\n     * @readonly\n     * @deprecated since 8.15.0\n     */\n    public get count() { return this._renderer.tick; }\n\n    /**\n     * Frame count since last garbage collection.\n     * @readonly\n     * @deprecated since 8.15.0\n     */\n    public get checkCount() { return this._checkCount; }\n    public set checkCount(value: number)\n    {\n        // #if _DEBUG\n        deprecation('8.15.0', 'TextureGCSystem.run is deprecated, please use the GCSystem instead.');\n        // #endif\n        this._checkCount = value;\n    }\n    private _checkCount: number;\n\n    /**\n     * Maximum idle frames before a texture is destroyed by garbage collection.\n     * @see TextureGCSystem.defaultMaxIdle\n     * @deprecated since 8.15.0\n     */\n    public get maxIdle() { return (this._renderer.gc.maxUnusedTime / 1000) * 60; }\n    public set maxIdle(value: number)\n    {\n        // #if _DEBUG\n        deprecation('8.15.0', 'TextureGCSystem.run is deprecated, please use the GCSystem instead.');\n        // #endif\n        this._renderer.gc.maxUnusedTime = (value / 60) * 1000;\n    }\n\n    /**\n     * Frames between two garbage collections.\n     * @see TextureGCSystem.defaultCheckCountMax\n     * @deprecated since 8.15.0\n     */\n    // eslint-disable-next-line dot-notation\n    public get checkCountMax() { return Math.floor(this._renderer.gc['_frequency'] / 1000); }\n    public set checkCountMax(_value: number)\n    {\n        // #if _DEBUG\n        deprecation('8.15.0', 'TextureGCSystem.run is deprecated, please use the GCSystem instead.');\n        // #endif\n    }\n\n    /**\n     * Current garbage collection mode.\n     * @see TextureGCSystem.defaultMode\n     * @deprecated since 8.15.0\n     */\n    public get active() { return this._renderer.gc.enabled; }\n    public set active(value: boolean)\n    {\n        // #if _DEBUG\n        deprecation('8.15.0', 'TextureGCSystem.run is deprecated, please use the GCSystem instead.');\n        // #endif\n        this._renderer.gc.enabled = value;\n    }\n\n    private _renderer: Renderer;\n\n    /** @param renderer - The renderer this System works for. */\n    constructor(renderer: Renderer)\n    {\n        this._renderer = renderer;\n        this._checkCount = 0;\n    }\n\n    public init(options: TextureGCSystemOptions): void\n    {\n        if (options.textureGCActive !== TextureGCSystem.defaultOptions.textureGCActive)\n        { this.active = options.textureGCActive; }\n        if (options.textureGCMaxIdle !== TextureGCSystem.defaultOptions.textureGCMaxIdle)\n        { this.maxIdle = options.textureGCMaxIdle; }\n        if (options.textureGCCheckCountMax !== TextureGCSystem.defaultOptions.textureGCCheckCountMax)\n        { this.checkCountMax = options.textureGCCheckCountMax; }\n    }\n\n    /**\n     * Checks to see when the last time a texture was used.\n     * If the texture has not been used for a specified amount of time, it will be removed from the GPU.\n     * @deprecated since 8.15.0\n     */\n    public run(): void\n    {\n        // #if _DEBUG\n        deprecation('8.15.0', 'TextureGCSystem.run is deprecated, please use the GCSystem instead.');\n        // #endif\n        this._renderer.gc.run();\n    }\n\n    public destroy(): void\n    {\n        this._renderer = null as any as Renderer;\n    }\n}\n"],"names":[],"mappings":"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"}