sdfsdfs
This commit is contained in:
115
node_modules/pixi.js/lib/rendering/renderers/shared/texture/TexturePool.js
generated
vendored
Normal file
115
node_modules/pixi.js/lib/rendering/renderers/shared/texture/TexturePool.js
generated
vendored
Normal file
@@ -0,0 +1,115 @@
|
||||
'use strict';
|
||||
|
||||
var pow2 = require('../../../../maths/misc/pow2.js');
|
||||
var TextureSource = require('./sources/TextureSource.js');
|
||||
var Texture = require('./Texture.js');
|
||||
|
||||
"use strict";
|
||||
let count = 0;
|
||||
class TexturePoolClass {
|
||||
/**
|
||||
* @param textureOptions - options that will be passed to BaseRenderTexture constructor
|
||||
* @param {SCALE_MODE} [textureOptions.scaleMode] - See {@link SCALE_MODE} for possible values.
|
||||
*/
|
||||
constructor(textureOptions) {
|
||||
this._poolKeyHash = /* @__PURE__ */ Object.create(null);
|
||||
this._texturePool = {};
|
||||
this.textureOptions = textureOptions || {};
|
||||
this.enableFullScreen = false;
|
||||
}
|
||||
/**
|
||||
* Creates texture with params that were specified in pool constructor.
|
||||
* @param pixelWidth - Width of texture in pixels.
|
||||
* @param pixelHeight - Height of texture in pixels.
|
||||
* @param antialias
|
||||
*/
|
||||
createTexture(pixelWidth, pixelHeight, antialias) {
|
||||
const textureSource = new TextureSource.TextureSource({
|
||||
...this.textureOptions,
|
||||
width: pixelWidth,
|
||||
height: pixelHeight,
|
||||
resolution: 1,
|
||||
antialias,
|
||||
autoGarbageCollect: true
|
||||
});
|
||||
return new Texture.Texture({
|
||||
source: textureSource,
|
||||
label: `texturePool_${count++}`
|
||||
});
|
||||
}
|
||||
/**
|
||||
* Gets a Power-of-Two render texture or fullScreen texture
|
||||
* @param frameWidth - The minimum width of the render texture.
|
||||
* @param frameHeight - The minimum height of the render texture.
|
||||
* @param resolution - The resolution of the render texture.
|
||||
* @param antialias
|
||||
* @returns The new render texture.
|
||||
*/
|
||||
getOptimalTexture(frameWidth, frameHeight, resolution = 1, antialias) {
|
||||
let po2Width = Math.ceil(frameWidth * resolution - 1e-6);
|
||||
let po2Height = Math.ceil(frameHeight * resolution - 1e-6);
|
||||
po2Width = pow2.nextPow2(po2Width);
|
||||
po2Height = pow2.nextPow2(po2Height);
|
||||
const key = (po2Width << 17) + (po2Height << 1) + (antialias ? 1 : 0);
|
||||
if (!this._texturePool[key]) {
|
||||
this._texturePool[key] = [];
|
||||
}
|
||||
let texture = this._texturePool[key].pop();
|
||||
if (!texture) {
|
||||
texture = this.createTexture(po2Width, po2Height, antialias);
|
||||
}
|
||||
texture.source._resolution = resolution;
|
||||
texture.source.width = po2Width / resolution;
|
||||
texture.source.height = po2Height / resolution;
|
||||
texture.source.pixelWidth = po2Width;
|
||||
texture.source.pixelHeight = po2Height;
|
||||
texture.frame.x = 0;
|
||||
texture.frame.y = 0;
|
||||
texture.frame.width = frameWidth;
|
||||
texture.frame.height = frameHeight;
|
||||
texture.updateUvs();
|
||||
this._poolKeyHash[texture.uid] = key;
|
||||
return texture;
|
||||
}
|
||||
/**
|
||||
* Gets extra texture of the same size as input renderTexture
|
||||
* @param texture - The texture to check what size it is.
|
||||
* @param antialias - Whether to use antialias.
|
||||
* @returns A texture that is a power of two
|
||||
*/
|
||||
getSameSizeTexture(texture, antialias = false) {
|
||||
const source = texture.source;
|
||||
return this.getOptimalTexture(texture.width, texture.height, source._resolution, antialias);
|
||||
}
|
||||
/**
|
||||
* Place a render texture back into the pool.
|
||||
* @param renderTexture - The renderTexture to free
|
||||
*/
|
||||
returnTexture(renderTexture) {
|
||||
const key = this._poolKeyHash[renderTexture.uid];
|
||||
this._texturePool[key].push(renderTexture);
|
||||
}
|
||||
/**
|
||||
* Clears the pool.
|
||||
* @param destroyTextures - Destroy all stored textures.
|
||||
*/
|
||||
clear(destroyTextures) {
|
||||
destroyTextures = destroyTextures !== false;
|
||||
if (destroyTextures) {
|
||||
for (const i in this._texturePool) {
|
||||
const textures = this._texturePool[i];
|
||||
if (textures) {
|
||||
for (let j = 0; j < textures.length; j++) {
|
||||
textures[j].destroy(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
this._texturePool = {};
|
||||
}
|
||||
}
|
||||
const TexturePool = new TexturePoolClass();
|
||||
|
||||
exports.TexturePool = TexturePool;
|
||||
exports.TexturePoolClass = TexturePoolClass;
|
||||
//# sourceMappingURL=TexturePool.js.map
|
Reference in New Issue
Block a user