@pixi/core
Version:
Core PixiJS
50 lines (47 loc) • 1.63 kB
JavaScript
import { Matrix } from '@pixi/math';
import { TextureMatrix } from '../../textures/TextureMatrix.mjs';
import { Filter } from '../Filter.mjs';
import fragment from './spriteMaskFilter2.mjs';
import vertex from './spriteMaskFilter3.mjs';
class SpriteMaskFilter extends Filter {
constructor(vertexSrc, fragmentSrc, uniforms) {
let sprite = null;
if (typeof vertexSrc !== "string" && fragmentSrc === void 0 && uniforms === void 0) {
sprite = vertexSrc;
vertexSrc = void 0;
fragmentSrc = void 0;
uniforms = void 0;
}
super(vertexSrc || vertex, fragmentSrc || fragment, uniforms);
this.maskSprite = sprite;
this.maskMatrix = new Matrix();
}
get maskSprite() {
return this._maskSprite;
}
set maskSprite(value) {
this._maskSprite = value;
if (this._maskSprite) {
this._maskSprite.renderable = false;
}
}
apply(filterManager, input, output, clearMode) {
const maskSprite = this._maskSprite;
const tex = maskSprite._texture;
if (!tex.valid) {
return;
}
if (!tex.uvMatrix) {
tex.uvMatrix = new TextureMatrix(tex, 0);
}
tex.uvMatrix.update();
this.uniforms.npmAlpha = tex.baseTexture.alphaMode ? 0 : 1;
this.uniforms.mask = tex;
this.uniforms.otherMatrix = filterManager.calculateSpriteMatrix(this.maskMatrix, maskSprite).prepend(tex.uvMatrix.mapCoord);
this.uniforms.alpha = maskSprite.worldAlpha;
this.uniforms.maskClamp = tex.uvMatrix.uClampFrame;
filterManager.applyFilter(this, input, output, clearMode);
}
}
export { SpriteMaskFilter };
//# sourceMappingURL=SpriteMaskFilter.mjs.map