UNPKG

pixi.js

Version:

<p align="center"> <a href="https://pixijs.com" target="_blank" rel="noopener noreferrer"> <img height="150" src="https://files.pixijs.download/branding/pixijs-logo-transparent-dark.svg?v=1" alt="PixiJS logo"> </a> </p> <br/> <p align="center">

1 lines 3.65 kB
{"version":3,"file":"StencilMask.mjs","sources":["../../../../src/rendering/mask/stencil/StencilMask.ts"],"sourcesContent":["import { ExtensionType } from '../../../extensions/Extensions';\nimport { Container } from '../../../scene/container/Container';\nimport { addMaskBounds } from '../utils/addMaskBounds';\nimport { addMaskLocalBounds } from '../utils/addMaskLocalBounds';\n\nimport type { ExtensionMetadata } from '../../../extensions/Extensions';\nimport type { Point } from '../../../maths/point/Point';\nimport type { Bounds } from '../../../scene/container/bounds/Bounds';\nimport type { Effect } from '../../../scene/container/Effect';\nimport type { PoolItem } from '../../../utils/pool/Pool';\n\n/**\n * A mask that uses the stencil buffer to clip the rendering of a container.\n * This is useful for complex masks that cannot be achieved with simple shapes.\n * It is more performant than using a `Graphics` mask, but requires WebGL support.\n * It is also useful for masking with `Container` objects that have complex shapes.\n * @category rendering\n * @advanced\n */\nexport class StencilMask implements Effect, PoolItem\n{\n public static extension: ExtensionMetadata = ExtensionType.MaskEffect;\n\n public priority = 0;\n public mask: Container;\n public pipe = 'stencilMask';\n\n constructor(options: {mask: Container})\n {\n if (options?.mask)\n {\n this.init(options.mask);\n }\n }\n\n public init(mask: Container): void\n {\n this.mask = mask;\n this.mask.includeInBuild = false;\n this.mask.measurable = false;\n }\n\n public reset()\n {\n if (this.mask === null) return;\n this.mask.measurable = true;\n this.mask.includeInBuild = true;\n this.mask = null;\n }\n\n public addBounds(bounds: Bounds, skipUpdateTransform: boolean): void\n {\n addMaskBounds(this.mask, bounds, skipUpdateTransform);\n }\n\n public addLocalBounds(bounds: Bounds, localRoot: Container): void\n {\n addMaskLocalBounds(this.mask, bounds, localRoot);\n }\n\n public containsPoint(point: Point, hitTestFn: (container: Container, point: Point) => boolean): boolean\n {\n const mask = this.mask as any;\n\n // if the point is in the mask, yay!\n return hitTestFn(mask, point);\n }\n\n public destroy(): void\n {\n this.reset();\n }\n\n public static test(mask: any): boolean\n {\n return mask instanceof Container;\n }\n}\n"],"names":[],"mappings":";;;;;;AAmBO,MAAM,WAAA,CACb;AAAA,EAOI,YAAY,OAAA,EACZ;AALA,IAAA,IAAA,CAAO,QAAA,GAAW,CAAA;AAElB,IAAA,IAAA,CAAO,IAAA,GAAO,aAAA;AAIV,IAAA,IAAI,SAAS,IAAA,EACb;AACI,MAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,IAAI,CAAA;AAAA,IAC1B;AAAA,EACJ;AAAA,EAEO,KAAK,IAAA,EACZ;AACI,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,KAAK,cAAA,GAAiB,KAAA;AAC3B,IAAA,IAAA,CAAK,KAAK,UAAA,GAAa,KAAA;AAAA,EAC3B;AAAA,EAEO,KAAA,GACP;AACI,IAAA,IAAI,IAAA,CAAK,SAAS,IAAA,EAAM;AACxB,IAAA,IAAA,CAAK,KAAK,UAAA,GAAa,IAAA;AACvB,IAAA,IAAA,CAAK,KAAK,cAAA,GAAiB,IAAA;AAC3B,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,EAChB;AAAA,EAEO,SAAA,CAAU,QAAgB,mBAAA,EACjC;AACI,IAAA,aAAA,CAAc,IAAA,CAAK,IAAA,EAAM,MAAA,EAAQ,mBAAmB,CAAA;AAAA,EACxD;AAAA,EAEO,cAAA,CAAe,QAAgB,SAAA,EACtC;AACI,IAAA,kBAAA,CAAmB,IAAA,CAAK,IAAA,EAAM,MAAA,EAAQ,SAAS,CAAA;AAAA,EACnD;AAAA,EAEO,aAAA,CAAc,OAAc,SAAA,EACnC;AACI,IAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAGlB,IAAA,OAAO,SAAA,CAAU,MAAM,KAAK,CAAA;AAAA,EAChC;AAAA,EAEO,OAAA,GACP;AACI,IAAA,IAAA,CAAK,KAAA,EAAM;AAAA,EACf;AAAA,EAEA,OAAc,KAAK,IAAA,EACnB;AACI,IAAA,OAAO,IAAA,YAAgB,SAAA;AAAA,EAC3B;AACJ;AA1Da,WAAA,CAEK,YAA+B,aAAA,CAAc,UAAA;;;;"}