shadow$provide.module$node_modules$pixi_DOT_js$lib$rendering$renderers$shared$texture$TexturePool = function(global, require, module, exports) {
  var pow2 = require("module$node_modules$pixi_DOT_js$lib$maths$misc$pow2");
  global = require("module$node_modules$pixi_DOT_js$lib$utils$pool$GlobalResourceRegistry");
  var TextureSource = require("module$node_modules$pixi_DOT_js$lib$rendering$renderers$shared$texture$sources$TextureSource"), Texture = require("module$node_modules$pixi_DOT_js$lib$rendering$renderers$shared$texture$Texture"), TextureStyle = require("module$node_modules$pixi_DOT_js$lib$rendering$renderers$shared$texture$TextureStyle");
  "use strict";
  let count = 0;
  class TexturePoolClass {
    constructor(textureOptions) {
      this._poolKeyHash = Object.create(null);
      this._texturePool = {};
      this.textureOptions = textureOptions || {};
      this.enableFullScreen = !1;
      this.textureStyle = new TextureStyle.TextureStyle(this.textureOptions);
    }
    createTexture(pixelWidth, pixelHeight, antialias, autoGenerateMipmaps) {
      pixelWidth = new TextureSource.TextureSource({...this.textureOptions, width:pixelWidth, height:pixelHeight, resolution:1, antialias, autoGarbageCollect:!1, autoGenerateMipmaps});
      return new Texture.Texture({source:pixelWidth, label:`texturePool_${count++}`});
    }
    getOptimalTexture(frameWidth, frameHeight, resolution = 1, antialias, autoGenerateMipmaps = !1) {
      let po2Width = Math.ceil(frameWidth * resolution - 1e-6), po2Height = Math.ceil(frameHeight * resolution - 1e-6);
      po2Width = pow2.nextPow2(po2Width);
      po2Height = pow2.nextPow2(po2Height);
      const key = (po2Width << 17) + (po2Height << 2) + ((autoGenerateMipmaps ? 1 : 0) << 1) + (antialias ? 1 : 0);
      this._texturePool[key] || (this._texturePool[key] = []);
      let texture = this._texturePool[key].pop();
      texture || (texture = this.createTexture(po2Width, po2Height, antialias, autoGenerateMipmaps));
      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;
    }
    getSameSizeTexture(texture, antialias = !1) {
      return this.getOptimalTexture(texture.width, texture.height, texture.source._resolution, antialias);
    }
    returnTexture(renderTexture, resetStyle = !1) {
      const key = this._poolKeyHash[renderTexture.uid];
      resetStyle && (renderTexture.source.style = this.textureStyle);
      this._texturePool[key].push(renderTexture);
    }
    clear(destroyTextures) {
      if (!1 !== destroyTextures) {
        for (const i in this._texturePool) {
          if (destroyTextures = this._texturePool[i]) {
            for (let j = 0; j < destroyTextures.length; j++) {
              destroyTextures[j].destroy(!0);
            }
          }
        }
      }
      this._texturePool = {};
    }
  }
  require = new TexturePoolClass();
  global.GlobalResourceRegistry.register(require);
  exports.TexturePool = require;
  exports.TexturePoolClass = TexturePoolClass;
};

//# sourceMappingURL=module$node_modules$pixi_DOT_js$lib$rendering$renderers$shared$texture$TexturePool.js.map
