UNPKG

@pixi/core

Version:
1 lines 5.73 kB
{"version":3,"file":"SpriteMaskFilter.mjs","sources":["../../../src/filters/spriteMask/SpriteMaskFilter.ts"],"sourcesContent":["import { Matrix } from '@pixi/math';\nimport { TextureMatrix } from '../../textures/TextureMatrix';\nimport { Filter } from '../Filter';\nimport fragment from './spriteMaskFilter.frag';\nimport vertex from './spriteMaskFilter.vert';\n\nimport type { CLEAR_MODES } from '@pixi/constants';\nimport type { Point } from '@pixi/math';\nimport type { Dict } from '@pixi/utils';\nimport type { IMaskTarget } from '../../mask/MaskData';\nimport type { RenderTexture } from '../../renderTexture/RenderTexture';\nimport type { Texture } from '../../textures/Texture';\nimport type { FilterSystem } from '../FilterSystem';\n\nexport interface ISpriteMaskTarget extends IMaskTarget\n{\n _texture: Texture;\n worldAlpha: number;\n anchor: Point;\n}\n\nexport interface ISpriteMaskFilter extends Filter\n{\n maskSprite: IMaskTarget;\n}\n\n/**\n * This handles a Sprite acting as a mask, as opposed to a Graphic.\n *\n * WebGL only.\n * @memberof PIXI\n */\nexport class SpriteMaskFilter extends Filter\n{\n /** @private */\n _maskSprite: IMaskTarget;\n\n /** Mask matrix */\n maskMatrix: Matrix;\n\n /**\n * @param {PIXI.Sprite} sprite - The target sprite.\n */\n constructor(sprite: IMaskTarget);\n\n /**\n * @param vertexSrc - The source of the vertex shader.\n * @param fragmentSrc - The source of the fragment shader.\n * @param uniforms - Custom uniforms to use to augment the built-in ones.\n */\n constructor(vertexSrc?: string, fragmentSrc?: string, uniforms?: Dict<any>);\n\n /** @ignore */\n constructor(vertexSrc?: string | IMaskTarget, fragmentSrc?: string, uniforms?: Dict<any>)\n {\n let sprite = null;\n\n if (typeof vertexSrc !== 'string' && fragmentSrc === undefined && uniforms === undefined)\n {\n sprite = vertexSrc as IMaskTarget;\n vertexSrc = undefined;\n fragmentSrc = undefined;\n uniforms = undefined;\n }\n\n super(vertexSrc as string || vertex, fragmentSrc || fragment, uniforms);\n\n this.maskSprite = sprite;\n this.maskMatrix = new Matrix();\n }\n\n /**\n * Sprite mask\n * @type {PIXI.DisplayObject}\n */\n get maskSprite(): IMaskTarget\n {\n return this._maskSprite;\n }\n\n set maskSprite(value: IMaskTarget)\n {\n this._maskSprite = value;\n\n if (this._maskSprite)\n {\n this._maskSprite.renderable = false;\n }\n }\n\n /**\n * Applies the filter\n * @param filterManager - The renderer to retrieve the filter from\n * @param input - The input render target.\n * @param output - The target to output to.\n * @param clearMode - Should the output be cleared before rendering to it.\n */\n apply(filterManager: FilterSystem, input: RenderTexture, output: RenderTexture, clearMode: CLEAR_MODES): void\n {\n const maskSprite = this._maskSprite as ISpriteMaskTarget;\n const tex = maskSprite._texture;\n\n if (!tex.valid)\n {\n return;\n }\n if (!tex.uvMatrix)\n {\n // margin = 0.0, let it bleed a bit, shader code becomes easier\n // assuming that atlas textures were made with 1-pixel padding\n tex.uvMatrix = new TextureMatrix(tex, 0.0);\n }\n tex.uvMatrix.update();\n\n this.uniforms.npmAlpha = tex.baseTexture.alphaMode ? 0.0 : 1.0;\n this.uniforms.mask = tex;\n // get _normalized sprite texture coords_ and convert them to _normalized atlas texture coords_ with `prepend`\n this.uniforms.otherMatrix = filterManager.calculateSpriteMatrix(this.maskMatrix, maskSprite)\n .prepend(tex.uvMatrix.mapCoord);\n this.uniforms.alpha = maskSprite.worldAlpha;\n this.uniforms.maskClamp = tex.uvMatrix.uClampFrame;\n\n filterManager.applyFilter(this, input, output, clearMode);\n }\n}\n"],"names":[],"mappings":";;;;;;AAgCO,MAAM,yBAAyB,MACtC,CAAA;AAAA,EAoBI,WAAA,CAAY,SAAkC,EAAA,WAAA,EAAsB,QACpE,EAAA;AACI,IAAA,IAAI,MAAS,GAAA,IAAA,CAAA;AAEb,IAAA,IAAI,OAAO,SAAc,KAAA,QAAA,IAAY,WAAgB,KAAA,KAAA,CAAA,IAAa,aAAa,KAC/E,CAAA,EAAA;AACI,MAAS,MAAA,GAAA,SAAA,CAAA;AACT,MAAY,SAAA,GAAA,KAAA,CAAA,CAAA;AACZ,MAAc,WAAA,GAAA,KAAA,CAAA,CAAA;AACd,MAAW,QAAA,GAAA,KAAA,CAAA,CAAA;AAAA,KACf;AAEA,IAAA,KAAA,CAAM,SAAuB,IAAA,MAAA,EAAQ,WAAe,IAAA,QAAA,EAAU,QAAQ,CAAA,CAAA;AAEtE,IAAA,IAAA,CAAK,UAAa,GAAA,MAAA,CAAA;AAClB,IAAK,IAAA,CAAA,UAAA,GAAa,IAAI,MAAO,EAAA,CAAA;AAAA,GACjC;AAAA,EAMA,IAAI,UACJ,GAAA;AACI,IAAA,OAAO,IAAK,CAAA,WAAA,CAAA;AAAA,GAChB;AAAA,EAEA,IAAI,WAAW,KACf,EAAA;AACI,IAAA,IAAA,CAAK,WAAc,GAAA,KAAA,CAAA;AAEnB,IAAA,IAAI,KAAK,WACT,EAAA;AACI,MAAA,IAAA,CAAK,YAAY,UAAa,GAAA,KAAA,CAAA;AAAA,KAClC;AAAA,GACJ;AAAA,EASA,KAAM,CAAA,aAAA,EAA6B,KAAsB,EAAA,MAAA,EAAuB,SAChF,EAAA;AACI,IAAA,MAAM,aAAa,IAAK,CAAA,WAAA,CAAA;AACxB,IAAA,MAAM,MAAM,UAAW,CAAA,QAAA,CAAA;AAEvB,IAAI,IAAA,CAAC,IAAI,KACT,EAAA;AACI,MAAA,OAAA;AAAA,KACJ;AACA,IAAI,IAAA,CAAC,IAAI,QACT,EAAA;AAGI,MAAA,GAAA,CAAI,QAAW,GAAA,IAAI,aAAc,CAAA,GAAA,EAAK,CAAG,CAAA,CAAA;AAAA,KAC7C;AACA,IAAA,GAAA,CAAI,SAAS,MAAO,EAAA,CAAA;AAEpB,IAAA,IAAA,CAAK,QAAS,CAAA,QAAA,GAAW,GAAI,CAAA,WAAA,CAAY,YAAY,CAAM,GAAA,CAAA,CAAA;AAC3D,IAAA,IAAA,CAAK,SAAS,IAAO,GAAA,GAAA,CAAA;AAErB,IAAK,IAAA,CAAA,QAAA,CAAS,WAAc,GAAA,aAAA,CAAc,qBAAsB,CAAA,IAAA,CAAK,UAAY,EAAA,UAAU,CACtF,CAAA,OAAA,CAAQ,GAAI,CAAA,QAAA,CAAS,QAAQ,CAAA,CAAA;AAClC,IAAK,IAAA,CAAA,QAAA,CAAS,QAAQ,UAAW,CAAA,UAAA,CAAA;AACjC,IAAK,IAAA,CAAA,QAAA,CAAS,SAAY,GAAA,GAAA,CAAI,QAAS,CAAA,WAAA,CAAA;AAEvC,IAAA,aAAA,CAAc,WAAY,CAAA,IAAA,EAAM,KAAO,EAAA,MAAA,EAAQ,SAAS,CAAA,CAAA;AAAA,GAC5D;AACJ;;;;"}