shadow$provide.module$node_modules$pixi_DOT_js$lib$rendering$renderers$canvas$utils$canvasUtils = function(global, require, module, exports) {
  var Color = require("module$node_modules$pixi_DOT_js$lib$color$Color"), adapter = require("module$node_modules$pixi_DOT_js$lib$environment$adapter"), groupD8 = require("module$node_modules$pixi_DOT_js$lib$maths$matrix$groupD8");
  global = require("module$node_modules$pixi_DOT_js$lib$rendering$renderers$canvas$utils$canUseNewCanvasBlendModes");
  "use strict";
  const canvasUtils = {canvas:null, convertTintToImage:!1, cacheStepsPerColorChannel:8, canUseMultiply:global.canUseNewCanvasBlendModes(), tintMethod:null, _canvasSourceCache:new WeakMap(), _unpremultipliedCache:new WeakMap(), getCanvasSource:texture => {
    texture = texture.source;
    var resource = texture?.resource;
    if (!resource) {
      return null;
    }
    var isPMA = "premultiplied-alpha" === texture.alphaMode, resourceHeight = texture.resourceHeight ?? texture.pixelHeight;
    resourceHeight = (texture.resourceWidth ?? texture.pixelWidth) !== texture.pixelWidth || resourceHeight !== texture.pixelHeight;
    if (isPMA) {
      if ((resource instanceof HTMLCanvasElement || "undefined" !== typeof OffscreenCanvas && resource instanceof OffscreenCanvas) && !resourceHeight) {
        return resource;
      }
      var cached = canvasUtils._unpremultipliedCache.get(texture);
      if (cached?.resourceId === texture._resourceId) {
        return cached.canvas;
      }
    }
    if (resource instanceof Uint8Array || resource instanceof Uint8ClampedArray || resource instanceof Int8Array || resource instanceof Uint16Array || resource instanceof Int16Array || resource instanceof Uint32Array || resource instanceof Int32Array || resource instanceof Float32Array || resource instanceof ArrayBuffer) {
      isPMA = canvasUtils._canvasSourceCache.get(texture);
      if (isPMA?.resourceId === texture._resourceId) {
        return isPMA.canvas;
      }
      isPMA = adapter.DOMAdapter.get().createCanvas(texture.pixelWidth, texture.pixelHeight);
      resourceHeight = isPMA.getContext("2d");
      cached = resourceHeight.createImageData(texture.pixelWidth, texture.pixelHeight);
      var data = cached.data;
      resource = resource instanceof ArrayBuffer ? new Uint8Array(resource) : new Uint8Array(resource.buffer, resource.byteOffset, resource.byteLength);
      if ("bgra8unorm" === texture.format) {
        for (var i = 0; i < data.length && i + 3 < resource.length; i += 4) {
          data[i] = resource[i + 2], data[i + 1] = resource[i + 1], data[i + 2] = resource[i], data[i + 3] = resource[i + 3];
        }
      } else {
        data.set(resource.subarray(0, data.length));
      }
      resourceHeight.putImageData(cached, 0, 0);
      canvasUtils._canvasSourceCache.set(texture, {canvas:isPMA, resourceId:texture._resourceId});
      return isPMA;
    }
    if (isPMA) {
      isPMA = adapter.DOMAdapter.get().createCanvas(texture.pixelWidth, texture.pixelHeight);
      resourceHeight = isPMA.getContext("2d", {willReadFrequently:!0});
      isPMA.width = texture.pixelWidth;
      isPMA.height = texture.pixelHeight;
      resourceHeight.drawImage(resource, 0, 0);
      resource = resourceHeight.getImageData(0, 0, isPMA.width, isPMA.height);
      cached = resource.data;
      for (data = 0; data < cached.length; data += 4) {
        i = cached[data + 3], 0 < i && (i = 255 / i, cached[data] = Math.min(255, cached[data] * i + 0.5), cached[data + 1] = Math.min(255, cached[data + 1] * i + 0.5), cached[data + 2] = Math.min(255, cached[data + 2] * i + 0.5));
      }
      resourceHeight.putImageData(resource, 0, 0);
      canvasUtils._unpremultipliedCache.set(texture, {canvas:isPMA, resourceId:texture._resourceId});
      return isPMA;
    }
    if (resourceHeight) {
      isPMA = canvasUtils._canvasSourceCache.get(texture);
      if (isPMA?.resourceId === texture._resourceId) {
        return isPMA.canvas;
      }
      isPMA = adapter.DOMAdapter.get().createCanvas(texture.pixelWidth, texture.pixelHeight);
      resourceHeight = isPMA.getContext("2d");
      isPMA.width = texture.pixelWidth;
      isPMA.height = texture.pixelHeight;
      resourceHeight.drawImage(resource, 0, 0);
      canvasUtils._canvasSourceCache.set(texture, {canvas:isPMA, resourceId:texture._resourceId});
      return isPMA;
    }
    return resource;
  }, getTintedCanvas:(sprite, color) => {
    const texture = sprite.texture;
    sprite = Color.Color.shared.setValue(color).toHex();
    const cache = texture.tintCache || (texture.tintCache = {});
    var cachedCanvas = cache[sprite];
    const resourceId = texture.source._resourceId;
    if (cachedCanvas?.tintId === resourceId) {
      return cachedCanvas;
    }
    cachedCanvas = cachedCanvas && "getContext" in cachedCanvas ? cachedCanvas : adapter.DOMAdapter.get().createCanvas();
    canvasUtils.tintMethod(texture, color, cachedCanvas);
    cachedCanvas.tintId = resourceId;
    canvasUtils.convertTintToImage && void 0 !== cachedCanvas.toDataURL ? (color = adapter.DOMAdapter.get().createImage(), color.src = cachedCanvas.toDataURL(), color.tintId = resourceId, cache[sprite] = color) : cache[sprite] = cachedCanvas;
    return cache[sprite];
  }, getTintedPattern:(texture, color) => {
    const stringColor = Color.Color.shared.setValue(color).toHex(), cache = texture.patternCache || (texture.patternCache = {}), resourceId = texture.source._resourceId;
    let pattern = cache[stringColor];
    if (pattern?.tintId === resourceId) {
      return pattern;
    }
    canvasUtils.canvas || (canvasUtils.canvas = adapter.DOMAdapter.get().createCanvas());
    canvasUtils.tintMethod(texture, color, canvasUtils.canvas);
    pattern = canvasUtils.canvas.getContext("2d").createPattern(canvasUtils.canvas, "repeat");
    pattern.tintId = resourceId;
    return cache[stringColor] = pattern;
  }, applyPatternTransform:(pattern, matrix, invert = !0) => {
    if (matrix && pattern.setTransform) {
      var DOMMatrixCtor = globalThis.DOMMatrix;
      DOMMatrixCtor && (matrix = new DOMMatrixCtor([matrix.a, matrix.b, matrix.c, matrix.d, matrix.tx, matrix.ty]), pattern.setTransform(invert ? matrix.inverse() : matrix));
    }
  }, tintWithMultiply:(texture, color, canvas) => {
    const context = canvas.getContext("2d"), crop = texture.frame.clone();
    var resolution = texture.source._resolution ?? texture.source.resolution ?? 1;
    const rotate = texture.rotate;
    crop.x *= resolution;
    crop.y *= resolution;
    crop.width *= resolution;
    crop.height *= resolution;
    var isVertical = groupD8.groupD8.isVertical(rotate);
    resolution = isVertical ? crop.height : crop.width;
    isVertical = isVertical ? crop.width : crop.height;
    canvas.width = Math.ceil(resolution);
    canvas.height = Math.ceil(isVertical);
    context.save();
    context.fillStyle = Color.Color.shared.setValue(color).toHex();
    context.fillRect(0, 0, resolution, isVertical);
    context.globalCompositeOperation = "multiply";
    if (texture = canvasUtils.getCanvasSource(texture)) {
      rotate && canvasUtils._applyInverseRotation(context, rotate, crop.width, crop.height), context.drawImage(texture, crop.x, crop.y, crop.width, crop.height, 0, 0, crop.width, crop.height), context.globalCompositeOperation = "destination-atop", context.drawImage(texture, crop.x, crop.y, crop.width, crop.height, 0, 0, crop.width, crop.height);
    }
    context.restore();
  }, tintWithOverlay:(texture, color, canvas) => {
    const context = canvas.getContext("2d"), crop = texture.frame.clone();
    var resolution = texture.source._resolution ?? texture.source.resolution ?? 1;
    const rotate = texture.rotate;
    crop.x *= resolution;
    crop.y *= resolution;
    crop.width *= resolution;
    crop.height *= resolution;
    var isVertical = groupD8.groupD8.isVertical(rotate);
    resolution = isVertical ? crop.height : crop.width;
    isVertical = isVertical ? crop.width : crop.height;
    canvas.width = Math.ceil(resolution);
    canvas.height = Math.ceil(isVertical);
    context.save();
    context.globalCompositeOperation = "copy";
    context.fillStyle = Color.Color.shared.setValue(color).toHex();
    context.fillRect(0, 0, resolution, isVertical);
    context.globalCompositeOperation = "destination-atop";
    if (texture = canvasUtils.getCanvasSource(texture)) {
      rotate && canvasUtils._applyInverseRotation(context, rotate, crop.width, crop.height), context.drawImage(texture, crop.x, crop.y, crop.width, crop.height, 0, 0, crop.width, crop.height);
    }
    context.restore();
  }, tintWithPerPixel:(texture, color, canvas) => {
    const context = canvas.getContext("2d");
    var crop = texture.frame.clone(), resolution = texture.source._resolution ?? texture.source.resolution ?? 1, rotate = texture.rotate;
    crop.x *= resolution;
    crop.y *= resolution;
    crop.width *= resolution;
    crop.height *= resolution;
    var isVertical = groupD8.groupD8.isVertical(rotate);
    resolution = isVertical ? crop.height : crop.width;
    isVertical = isVertical ? crop.width : crop.height;
    canvas.width = Math.ceil(resolution);
    canvas.height = Math.ceil(isVertical);
    context.save();
    context.globalCompositeOperation = "copy";
    if (texture = canvasUtils.getCanvasSource(texture)) {
      rotate && canvasUtils._applyInverseRotation(context, rotate, crop.width, crop.height);
      context.drawImage(texture, crop.x, crop.y, crop.width, crop.height, 0, 0, crop.width, crop.height);
      context.restore();
      crop = color >> 16 & 255;
      rotate = color >> 8 & 255;
      color &= 255;
      resolution = context.getImageData(0, 0, resolution, isVertical);
      isVertical = resolution.data;
      for (texture = 0; texture < isVertical.length; texture += 4) {
        isVertical[texture] = isVertical[texture] * crop / 255, isVertical[texture + 1] = isVertical[texture + 1] * rotate / 255, isVertical[texture + 2] = isVertical[texture + 2] * color / 255;
      }
      context.putImageData(resolution, 0, 0);
    } else {
      context.restore();
    }
  }, _applyInverseRotation:(context, rotate, srcWidth, srcHeight) => {
    var inv = groupD8.groupD8.inv(rotate);
    rotate = groupD8.groupD8.uX(inv);
    const b = groupD8.groupD8.uY(inv), c = groupD8.groupD8.vX(inv);
    inv = groupD8.groupD8.vY(inv);
    context.transform(rotate, b, c, inv, -Math.min(0, rotate * srcWidth, c * srcHeight, rotate * srcWidth + c * srcHeight), -Math.min(0, b * srcWidth, inv * srcHeight, b * srcWidth + inv * srcHeight));
  }};
  canvasUtils.tintMethod = canvasUtils.canUseMultiply ? canvasUtils.tintWithMultiply : canvasUtils.tintWithPerPixel;
  exports.canvasUtils = canvasUtils;
};

//# sourceMappingURL=module$node_modules$pixi_DOT_js$lib$rendering$renderers$canvas$utils$canvasUtils.js.map
