sdfsdfs
This commit is contained in:
156
node_modules/pixi.js/lib/rendering/mask/alpha/AlphaMaskPipe.js
generated
vendored
Normal file
156
node_modules/pixi.js/lib/rendering/mask/alpha/AlphaMaskPipe.js
generated
vendored
Normal file
@@ -0,0 +1,156 @@
|
||||
'use strict';
|
||||
|
||||
var Extensions = require('../../../extensions/Extensions.js');
|
||||
var FilterEffect = require('../../../filters/FilterEffect.js');
|
||||
var MaskFilter = require('../../../filters/mask/MaskFilter.js');
|
||||
var Bounds = require('../../../scene/container/bounds/Bounds.js');
|
||||
var getGlobalBounds = require('../../../scene/container/bounds/getGlobalBounds.js');
|
||||
var buildInstructions = require('../../../scene/container/utils/buildInstructions.js');
|
||||
var Sprite = require('../../../scene/sprite/Sprite.js');
|
||||
var PoolGroup = require('../../../utils/pool/PoolGroup.js');
|
||||
var Texture = require('../../renderers/shared/texture/Texture.js');
|
||||
var TexturePool = require('../../renderers/shared/texture/TexturePool.js');
|
||||
var types = require('../../renderers/types.js');
|
||||
|
||||
"use strict";
|
||||
const tempBounds = new Bounds.Bounds();
|
||||
class AlphaMaskEffect extends FilterEffect.FilterEffect {
|
||||
constructor() {
|
||||
super();
|
||||
this.filters = [new MaskFilter.MaskFilter({
|
||||
sprite: new Sprite.Sprite(Texture.Texture.EMPTY),
|
||||
resolution: "inherit",
|
||||
antialias: "inherit"
|
||||
})];
|
||||
}
|
||||
get sprite() {
|
||||
return this.filters[0].sprite;
|
||||
}
|
||||
set sprite(value) {
|
||||
this.filters[0].sprite = value;
|
||||
}
|
||||
}
|
||||
class AlphaMaskPipe {
|
||||
constructor(renderer) {
|
||||
this._activeMaskStage = [];
|
||||
this._renderer = renderer;
|
||||
}
|
||||
push(mask, maskedContainer, instructionSet) {
|
||||
const renderer = this._renderer;
|
||||
renderer.renderPipes.batch.break(instructionSet);
|
||||
instructionSet.add({
|
||||
renderPipeId: "alphaMask",
|
||||
action: "pushMaskBegin",
|
||||
mask,
|
||||
canBundle: false,
|
||||
maskedContainer
|
||||
});
|
||||
if (mask.renderMaskToTexture) {
|
||||
const maskContainer = mask.mask;
|
||||
maskContainer.includeInBuild = true;
|
||||
buildInstructions.collectAllRenderables(
|
||||
maskContainer,
|
||||
instructionSet,
|
||||
renderer
|
||||
);
|
||||
maskContainer.includeInBuild = false;
|
||||
}
|
||||
renderer.renderPipes.batch.break(instructionSet);
|
||||
instructionSet.add({
|
||||
renderPipeId: "alphaMask",
|
||||
action: "pushMaskEnd",
|
||||
mask,
|
||||
maskedContainer,
|
||||
canBundle: false
|
||||
});
|
||||
}
|
||||
pop(mask, _maskedContainer, instructionSet) {
|
||||
const renderer = this._renderer;
|
||||
renderer.renderPipes.batch.break(instructionSet);
|
||||
instructionSet.add({
|
||||
renderPipeId: "alphaMask",
|
||||
action: "popMaskEnd",
|
||||
mask,
|
||||
canBundle: false
|
||||
});
|
||||
}
|
||||
execute(instruction) {
|
||||
const renderer = this._renderer;
|
||||
const renderMask = instruction.mask.renderMaskToTexture;
|
||||
if (instruction.action === "pushMaskBegin") {
|
||||
const filterEffect = PoolGroup.BigPool.get(AlphaMaskEffect);
|
||||
if (renderMask) {
|
||||
instruction.mask.mask.measurable = true;
|
||||
const bounds = getGlobalBounds.getGlobalBounds(instruction.mask.mask, true, tempBounds);
|
||||
instruction.mask.mask.measurable = false;
|
||||
bounds.ceil();
|
||||
const colorTextureSource = renderer.renderTarget.renderTarget.colorTexture.source;
|
||||
const filterTexture = TexturePool.TexturePool.getOptimalTexture(
|
||||
bounds.width,
|
||||
bounds.height,
|
||||
colorTextureSource._resolution,
|
||||
colorTextureSource.antialias
|
||||
);
|
||||
renderer.renderTarget.push(filterTexture, true);
|
||||
renderer.globalUniforms.push({
|
||||
offset: bounds,
|
||||
worldColor: 4294967295
|
||||
});
|
||||
const sprite = filterEffect.sprite;
|
||||
sprite.texture = filterTexture;
|
||||
sprite.worldTransform.tx = bounds.minX;
|
||||
sprite.worldTransform.ty = bounds.minY;
|
||||
this._activeMaskStage.push({
|
||||
filterEffect,
|
||||
maskedContainer: instruction.maskedContainer,
|
||||
filterTexture
|
||||
});
|
||||
} else {
|
||||
filterEffect.sprite = instruction.mask.mask;
|
||||
this._activeMaskStage.push({
|
||||
filterEffect,
|
||||
maskedContainer: instruction.maskedContainer
|
||||
});
|
||||
}
|
||||
} else if (instruction.action === "pushMaskEnd") {
|
||||
const maskData = this._activeMaskStage[this._activeMaskStage.length - 1];
|
||||
if (renderMask) {
|
||||
if (renderer.type === types.RendererType.WEBGL) {
|
||||
renderer.renderTarget.finishRenderPass();
|
||||
}
|
||||
renderer.renderTarget.pop();
|
||||
renderer.globalUniforms.pop();
|
||||
}
|
||||
renderer.filter.push({
|
||||
renderPipeId: "filter",
|
||||
action: "pushFilter",
|
||||
container: maskData.maskedContainer,
|
||||
filterEffect: maskData.filterEffect,
|
||||
canBundle: false
|
||||
});
|
||||
} else if (instruction.action === "popMaskEnd") {
|
||||
renderer.filter.pop();
|
||||
const maskData = this._activeMaskStage.pop();
|
||||
if (renderMask) {
|
||||
TexturePool.TexturePool.returnTexture(maskData.filterTexture);
|
||||
}
|
||||
PoolGroup.BigPool.return(maskData.filterEffect);
|
||||
}
|
||||
}
|
||||
destroy() {
|
||||
this._renderer = null;
|
||||
this._activeMaskStage = null;
|
||||
}
|
||||
}
|
||||
/** @ignore */
|
||||
AlphaMaskPipe.extension = {
|
||||
type: [
|
||||
Extensions.ExtensionType.WebGLPipes,
|
||||
Extensions.ExtensionType.WebGPUPipes,
|
||||
Extensions.ExtensionType.CanvasPipes
|
||||
],
|
||||
name: "alphaMask"
|
||||
};
|
||||
|
||||
exports.AlphaMaskPipe = AlphaMaskPipe;
|
||||
//# sourceMappingURL=AlphaMaskPipe.js.map
|
Reference in New Issue
Block a user