Files
nothoughts/node_modules/pixi.js/lib/rendering/renderers/shared/texture/TextureGCSystem.mjs
2025-08-04 18:57:35 +02:00

87 lines
2.4 KiB
JavaScript

import { ExtensionType } from '../../../../extensions/Extensions.mjs';
"use strict";
const _TextureGCSystem = class _TextureGCSystem {
/** @param renderer - The renderer this System works for. */
constructor(renderer) {
this._renderer = renderer;
this.count = 0;
this.checkCount = 0;
}
init(options) {
options = { ..._TextureGCSystem.defaultOptions, ...options };
this.checkCountMax = options.textureGCCheckCountMax;
this.maxIdle = options.textureGCAMaxIdle ?? options.textureGCMaxIdle;
this.active = options.textureGCActive;
}
/**
* Checks to see when the last time a texture was used.
* If the texture has not been used for a specified amount of time, it will be removed from the GPU.
*/
postrender() {
if (!this._renderer.renderingToScreen) {
return;
}
this.count++;
if (!this.active)
return;
this.checkCount++;
if (this.checkCount > this.checkCountMax) {
this.checkCount = 0;
this.run();
}
}
/**
* Checks to see when the last time a texture was used.
* If the texture has not been used for a specified amount of time, it will be removed from the GPU.
*/
run() {
const managedTextures = this._renderer.texture.managedTextures;
for (let i = 0; i < managedTextures.length; i++) {
const texture = managedTextures[i];
if (texture.autoGarbageCollect && texture.resource && texture._touched > -1 && this.count - texture._touched > this.maxIdle) {
texture._touched = -1;
texture.unload();
}
}
}
destroy() {
this._renderer = null;
}
};
/** @ignore */
_TextureGCSystem.extension = {
type: [
ExtensionType.WebGLSystem,
ExtensionType.WebGPUSystem
],
name: "textureGC"
};
/** default options for the TextureGCSystem */
_TextureGCSystem.defaultOptions = {
/**
* If set to true, this will enable the garbage collector on the GPU.
* @default true
*/
textureGCActive: true,
/**
* @deprecated since 8.3.0
* @see {@link TextureGCSystem.textureGCMaxIdle}
*/
textureGCAMaxIdle: null,
/**
* The maximum idle frames before a texture is destroyed by garbage collection.
* @default 60 * 60
*/
textureGCMaxIdle: 60 * 60,
/**
* Frames between two garbage collections.
* @default 600
*/
textureGCCheckCountMax: 600
};
let TextureGCSystem = _TextureGCSystem;
export { TextureGCSystem };
//# sourceMappingURL=TextureGCSystem.mjs.map