{"version":3,"file":"index.mjs","sources":["../src/index.ts"],"sourcesContent":["/// <reference path=\"../global.d.ts\" />\nimport { BaseTexture, Matrix, RenderTexture, settings, Texture, utils } from 'pixijs/core';\nimport { DisplayObject } from 'pixijs/display';\nimport { Sprite } from 'pixijs/sprite';\n\nimport type {\n    ICanvasRenderingContext2D,\n    IPointData,\n    IRenderer,\n    MaskData,\n    MSAA_QUALITY,\n    Rectangle,\n    Renderer,\n} from 'pixijs/core';\nimport type { Container, IDestroyOptions } from 'pixijs/display';\n\n// Don't import CanvasRender to remove dependency on this optional package\n// this type should satisify these requirements for cacheAsBitmap types\ninterface CanvasRenderer extends IRenderer\n{\n    canvasContext: {\n        activeContext: ICanvasRenderingContext2D;\n    }\n}\n\nconst _tempMatrix = new Matrix();\n\nDisplayObject.prototype._cacheAsBitmap = false;\nDisplayObject.prototype._cacheData = null;\nDisplayObject.prototype._cacheAsBitmapResolution = null;\nDisplayObject.prototype._cacheAsBitmapMultisample = null;\n\n// figured there's no point adding ALL the extra variables to prototype.\n// this model can hold the information needed. This can also be generated on demand as\n// most objects are not cached as bitmaps.\n/**\n * @class\n * @ignore\n * @private\n */\nexport class CacheData\n{\n    public textureCacheId: string;\n    public originalRender: (renderer: Renderer) => void;\n    public originalRenderCanvas: (renderer: IRenderer) => void;\n    public originalCalculateBounds: () => void;\n    public originalGetLocalBounds: (rect?: Rectangle) => Rectangle;\n    public originalUpdateTransform: () => void;\n    public originalDestroy: (options?: IDestroyOptions | boolean) => void;\n    public originalMask: Container | MaskData;\n    public originalFilterArea: Rectangle;\n    public originalContainsPoint: (point: IPointData) => boolean;\n    public sprite: Sprite;\n\n    constructor()\n    {\n        this.textureCacheId = null;\n\n        this.originalRender = null;\n        this.originalRenderCanvas = null;\n        this.originalCalculateBounds = null;\n        this.originalGetLocalBounds = null;\n\n        this.originalUpdateTransform = null;\n        this.originalDestroy = null;\n        this.originalMask = null;\n        this.originalFilterArea = null;\n        this.originalContainsPoint = null;\n        this.sprite = null;\n    }\n}\n\nObject.defineProperties(DisplayObject.prototype, {\n    /**\n     * The resolution to use for cacheAsBitmap. By default this will use the renderer's resolution\n     * but can be overriden for performance. Lower values will reduce memory usage at the expense\n     * of render quality. A falsey value of `null` or `0` will default to the renderer's resolution.\n     * If `cacheAsBitmap` is set to `true`, this will re-render with the new resolution.\n     * @member {number} cacheAsBitmapResolution\n     * @memberof PIXI.DisplayObject#\n     * @default null\n     */\n    cacheAsBitmapResolution: {\n        get(): number\n        {\n            return this._cacheAsBitmapResolution;\n        },\n        set(resolution: number): void\n        {\n            if (resolution === this._cacheAsBitmapResolution)\n            {\n                return;\n            }\n\n            this._cacheAsBitmapResolution = resolution;\n\n            if (this.cacheAsBitmap)\n            {\n                // Toggle to re-render at the new resolution\n                this.cacheAsBitmap = false;\n                this.cacheAsBitmap = true;\n            }\n        },\n    },\n\n    /**\n     * The number of samples to use for cacheAsBitmap. If set to `null`, the renderer's\n     * sample count is used.\n     * If `cacheAsBitmap` is set to `true`, this will re-render with the new number of samples.\n     * @member {number} cacheAsBitmapMultisample\n     * @memberof PIXI.DisplayObject#\n     * @default null\n     */\n    cacheAsBitmapMultisample: {\n        get(): MSAA_QUALITY\n        {\n            return this._cacheAsBitmapMultisample;\n        },\n        set(multisample: MSAA_QUALITY): void\n        {\n            if (multisample === this._cacheAsBitmapMultisample)\n            {\n                return;\n            }\n\n            this._cacheAsBitmapMultisample = multisample;\n\n            if (this.cacheAsBitmap)\n            {\n                // Toggle to re-render with new multisample\n                this.cacheAsBitmap = false;\n                this.cacheAsBitmap = true;\n            }\n        },\n    },\n\n    /**\n     * Set this to true if you want this display object to be cached as a bitmap.\n     * This basically takes a snapshot of the display object as it is at that moment. It can\n     * provide a performance benefit for complex static displayObjects.\n     * To remove simply set this property to `false`\n     *\n     * IMPORTANT GOTCHA - Make sure that all your textures are preloaded BEFORE setting this property to true\n     * as it will take a snapshot of what is currently there. If the textures have not loaded then they will not appear.\n     * @member {boolean}\n     * @memberof PIXI.DisplayObject#\n     */\n    cacheAsBitmap: {\n        get(): CacheData\n        {\n            return this._cacheAsBitmap;\n        },\n        set(value: CacheData): void\n        {\n            if (this._cacheAsBitmap === value)\n            {\n                return;\n            }\n\n            this._cacheAsBitmap = value;\n\n            let data: CacheData;\n\n            if (value)\n            {\n                if (!this._cacheData)\n                {\n                    this._cacheData = new CacheData();\n                }\n\n                data = this._cacheData;\n\n                data.originalRender = this.render;\n                data.originalRenderCanvas = this.renderCanvas;\n\n                data.originalUpdateTransform = this.updateTransform;\n                data.originalCalculateBounds = this.calculateBounds;\n                data.originalGetLocalBounds = this.getLocalBounds;\n\n                data.originalDestroy = this.destroy;\n\n                data.originalContainsPoint = this.containsPoint;\n\n                data.originalMask = this._mask;\n                data.originalFilterArea = this.filterArea;\n\n                this.render = this._renderCached;\n                this.renderCanvas = this._renderCachedCanvas;\n\n                this.destroy = this._cacheAsBitmapDestroy;\n            }\n            else\n            {\n                data = this._cacheData;\n\n                if (data.sprite)\n                {\n                    this._destroyCachedDisplayObject();\n                }\n\n                this.render = data.originalRender;\n                this.renderCanvas = data.originalRenderCanvas;\n                this.calculateBounds = data.originalCalculateBounds;\n                this.getLocalBounds = data.originalGetLocalBounds;\n\n                this.destroy = data.originalDestroy;\n\n                this.updateTransform = data.originalUpdateTransform;\n                this.containsPoint = data.originalContainsPoint;\n\n                this._mask = data.originalMask;\n                this.filterArea = data.originalFilterArea;\n            }\n        },\n    },\n});\n\n/**\n * Renders a cached version of the sprite with WebGL\n * @private\n * @method _renderCached\n * @memberof PIXI.DisplayObject#\n * @param {PIXI.Renderer} renderer - the WebGL renderer\n */\nDisplayObject.prototype._renderCached = function _renderCached(renderer: Renderer): void\n{\n    if (!this.visible || this.worldAlpha <= 0 || !this.renderable)\n    {\n        return;\n    }\n\n    this._initCachedDisplayObject(renderer);\n\n    this._cacheData.sprite.transform._worldID = this.transform._worldID;\n    this._cacheData.sprite.worldAlpha = this.worldAlpha;\n    (this._cacheData.sprite as any)._render(renderer);\n};\n\n/**\n * Prepares the WebGL renderer to cache the sprite\n * @private\n * @method _initCachedDisplayObject\n * @memberof PIXI.DisplayObject#\n * @param {PIXI.Renderer} renderer - the WebGL renderer\n */\nDisplayObject.prototype._initCachedDisplayObject = function _initCachedDisplayObject(renderer: Renderer): void\n{\n    if (this._cacheData?.sprite)\n    {\n        return;\n    }\n\n    // make sure alpha is set to 1 otherwise it will get rendered as invisible!\n    const cacheAlpha = this.alpha;\n\n    this.alpha = 1;\n\n    // first we flush anything left in the renderer (otherwise it would get rendered to the cached texture)\n    renderer.batch.flush();\n    // this.filters= [];\n\n    // next we find the dimensions of the untransformed object\n    // this function also calls updatetransform on all its children as part of the measuring.\n    // This means we don't need to update the transform again in this function\n    // TODO pass an object to clone too? saves having to create a new one each time!\n    const bounds = (this as Container).getLocalBounds(null, true).clone();\n\n    // add some padding!\n    if (this.filters?.length)\n    {\n        const padding = this.filters[0].padding;\n\n        bounds.pad(padding);\n    }\n\n    bounds.ceil(settings.RESOLUTION);\n\n    // for now we cache the current renderTarget that the WebGL renderer is currently using.\n    // this could be more elegant..\n    const cachedRenderTexture = renderer.renderTexture.current;\n    const cachedSourceFrame = renderer.renderTexture.sourceFrame.clone();\n    const cachedDestinationFrame = renderer.renderTexture.destinationFrame.clone();\n    const cachedProjectionTransform = renderer.projection.transform;\n\n    // We also store the filter stack - I will definitely look to change how this works a little later down the line.\n    // const stack = renderer.filterManager.filterStack;\n\n    // this renderTexture will be used to store the cached DisplayObject\n    const renderTexture = RenderTexture.create({\n        width: bounds.width,\n        height: bounds.height,\n        resolution: this.cacheAsBitmapResolution || renderer.resolution,\n        multisample: this.cacheAsBitmapMultisample ?? renderer.multisample,\n    });\n\n    const textureCacheId = `cacheAsBitmap_${utils.uid()}`;\n\n    this._cacheData.textureCacheId = textureCacheId;\n\n    BaseTexture.addToCache(renderTexture.baseTexture, textureCacheId);\n    Texture.addToCache(renderTexture, textureCacheId);\n\n    // need to set //\n    const m = this.transform.localTransform.copyTo(_tempMatrix).invert().translate(-bounds.x, -bounds.y);\n\n    // set all properties to there original so we can render to a texture\n    this.render = this._cacheData.originalRender;\n\n    renderer.render(this, { renderTexture, clear: true, transform: m, skipUpdateTransform: false });\n    renderer.framebuffer.blit();\n\n    // now restore the state be setting the new properties\n    renderer.projection.transform = cachedProjectionTransform;\n    renderer.renderTexture.bind(cachedRenderTexture, cachedSourceFrame, cachedDestinationFrame);\n\n    // renderer.filterManager.filterStack = stack;\n\n    this.render = this._renderCached;\n    // the rest is the same as for Canvas\n    this.updateTransform = this.displayObjectUpdateTransform;\n    this.calculateBounds = this._calculateCachedBounds;\n    this.getLocalBounds = this._getCachedLocalBounds;\n\n    this._mask = null;\n    this.filterArea = null;\n    this.alpha = cacheAlpha;\n\n    // create our cached sprite\n    const cachedSprite = new Sprite(renderTexture);\n\n    cachedSprite.transform.worldTransform = this.transform.worldTransform;\n    cachedSprite.anchor.x = -(bounds.x / bounds.width);\n    cachedSprite.anchor.y = -(bounds.y / bounds.height);\n    cachedSprite.alpha = cacheAlpha;\n    cachedSprite._bounds = this._bounds;\n\n    this._cacheData.sprite = cachedSprite;\n\n    this.transform._parentID = -1;\n    // restore the transform of the cached sprite to avoid the nasty flicker..\n    if (!this.parent)\n    {\n        this.enableTempParent();\n        this.updateTransform();\n        this.disableTempParent(null);\n    }\n    else\n    {\n        this.updateTransform();\n    }\n\n    // map the hit test..\n    (this as Sprite).containsPoint = cachedSprite.containsPoint.bind(cachedSprite);\n};\n\n/**\n * Renders a cached version of the sprite with canvas\n * @private\n * @method _renderCachedCanvas\n * @memberof PIXI.DisplayObject#\n * @param {PIXI.CanvasRenderer} renderer - The canvas renderer\n */\nDisplayObject.prototype._renderCachedCanvas = function _renderCachedCanvas(renderer: IRenderer): void\n{\n    if (!this.visible || this.worldAlpha <= 0 || !this.renderable)\n    {\n        return;\n    }\n\n    this._initCachedDisplayObjectCanvas(renderer);\n\n    this._cacheData.sprite.worldAlpha = this.worldAlpha;\n    (this._cacheData.sprite as any)._renderCanvas(renderer);\n};\n\n// TODO this can be the same as the WebGL version.. will need to do a little tweaking first though..\n/**\n * Prepares the Canvas renderer to cache the sprite\n * @private\n * @method _initCachedDisplayObjectCanvas\n * @memberof PIXI.DisplayObject#\n * @param {PIXI.CanvasRenderer} renderer - The canvas renderer\n */\nDisplayObject.prototype._initCachedDisplayObjectCanvas = function _initCachedDisplayObjectCanvas(\n    renderer: CanvasRenderer\n): void\n{\n    if (this._cacheData?.sprite)\n    {\n        return;\n    }\n\n    // get bounds actually transforms the object for us already!\n    const bounds = (this as Container).getLocalBounds(null, true);\n\n    const cacheAlpha = this.alpha;\n\n    this.alpha = 1;\n\n    const cachedRenderTarget = renderer.canvasContext.activeContext;\n    const cachedProjectionTransform = (renderer as any)._projTransform;\n\n    bounds.ceil(settings.RESOLUTION);\n\n    const renderTexture = RenderTexture.create({ width: bounds.width, height: bounds.height });\n\n    const textureCacheId = `cacheAsBitmap_${utils.uid()}`;\n\n    this._cacheData.textureCacheId = textureCacheId;\n\n    BaseTexture.addToCache(renderTexture.baseTexture, textureCacheId);\n    Texture.addToCache(renderTexture, textureCacheId);\n\n    // need to set //\n    const m = _tempMatrix;\n\n    this.transform.localTransform.copyTo(m);\n    m.invert();\n\n    m.tx -= bounds.x;\n    m.ty -= bounds.y;\n\n    // m.append(this.transform.worldTransform.)\n    // set all properties to there original so we can render to a texture\n    this.renderCanvas = this._cacheData.originalRenderCanvas;\n\n    renderer.render(this, { renderTexture, clear: true, transform: m, skipUpdateTransform: false });\n    // now restore the state be setting the new properties\n    renderer.canvasContext.activeContext = cachedRenderTarget;\n    (renderer as any)._projTransform = cachedProjectionTransform;\n\n    this.renderCanvas = this._renderCachedCanvas;\n    // the rest is the same as for WebGL\n    this.updateTransform = this.displayObjectUpdateTransform;\n    this.calculateBounds = this._calculateCachedBounds;\n    this.getLocalBounds = this._getCachedLocalBounds;\n\n    this._mask = null;\n    this.filterArea = null;\n    this.alpha = cacheAlpha;\n\n    // create our cached sprite\n    const cachedSprite = new Sprite(renderTexture);\n\n    cachedSprite.transform.worldTransform = this.transform.worldTransform;\n    cachedSprite.anchor.x = -(bounds.x / bounds.width);\n    cachedSprite.anchor.y = -(bounds.y / bounds.height);\n    cachedSprite.alpha = cacheAlpha;\n    cachedSprite._bounds = this._bounds;\n\n    this._cacheData.sprite = cachedSprite;\n\n    this.transform._parentID = -1;\n    // restore the transform of the cached sprite to avoid the nasty flicker..\n    if (!this.parent)\n    {\n        this.parent = (renderer as any)._tempDisplayObjectParent;\n        this.updateTransform();\n        this.parent = null;\n    }\n    else\n    {\n        this.updateTransform();\n    }\n\n    // map the hit test..\n    (this as Sprite).containsPoint = cachedSprite.containsPoint.bind(cachedSprite);\n};\n\n/**\n * Calculates the bounds of the cached sprite\n * @private\n * @method\n */\nDisplayObject.prototype._calculateCachedBounds = function _calculateCachedBounds(): void\n{\n    this._bounds.clear();\n    this._cacheData.sprite.transform._worldID = this.transform._worldID;\n    (this._cacheData.sprite as any)._calculateBounds();\n    this._bounds.updateID = (this as any)._boundsID;\n};\n\n/**\n * Gets the bounds of the cached sprite.\n * @private\n * @method\n * @returns {Rectangle} The local bounds.\n */\nDisplayObject.prototype._getCachedLocalBounds = function _getCachedLocalBounds(): Rectangle\n{\n    return this._cacheData.sprite.getLocalBounds(null);\n};\n\n/**\n * Destroys the cached sprite.\n * @private\n * @method\n */\nDisplayObject.prototype._destroyCachedDisplayObject = function _destroyCachedDisplayObject(): void\n{\n    this._cacheData.sprite._texture.destroy(true);\n    this._cacheData.sprite = null;\n\n    BaseTexture.removeFromCache(this._cacheData.textureCacheId);\n    Texture.removeFromCache(this._cacheData.textureCacheId);\n\n    this._cacheData.textureCacheId = null;\n};\n\n/**\n * Destroys the cached object.\n * @private\n * @method\n * @param {object|boolean} [options] - Options parameter. A boolean will act as if all options\n *  have been set to that value.\n *  Used when destroying containers, see the Container.destroy method.\n */\nDisplayObject.prototype._cacheAsBitmapDestroy = function _cacheAsBitmapDestroy(options?: IDestroyOptions | boolean): void\n{\n    this.cacheAsBitmap = false;\n    this.destroy(options);\n};\n"],"names":[],"mappings":"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"}