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 8.98 kB
{"version":3,"file":"CanvasGraphicsContextSystem.mjs","sources":["../../../../src/scene/graphics/canvas/CanvasGraphicsContextSystem.ts"],"sourcesContent":["import { ExtensionType } from '../../../extensions/Extensions';\nimport { InstructionSet } from '../../../rendering/renderers/shared/instructions/InstructionSet';\nimport { GCManagedHash } from '../../../utils/data/GCManagedHash';\nimport { type GPUData } from '../../view/ViewContainer';\n\nimport type { System } from '../../../rendering/renderers/shared/system/System';\nimport type { Renderer } from '../../../rendering/renderers/types';\nimport type { GraphicsContext } from '../shared/GraphicsContext';\nimport type { GraphicsContextSystemOptions } from '../shared/GraphicsContextSystem';\n\nclass CanvasGraphicsContext implements GPUData\n{\n /**\n * Whether this context can be batched.\n * @advanced\n */\n public isBatchable = false;\n /**\n * The source GraphicsContext.\n * @advanced\n */\n public context: GraphicsContext;\n /**\n * Render data for this context.\n * @advanced\n */\n public graphicsData: CanvasGraphicsContextRenderData;\n\n /**\n * Reset cached canvas data.\n * @advanced\n */\n public reset()\n {\n this.isBatchable = false;\n this.context = null;\n\n if (this.graphicsData)\n {\n this.graphicsData.destroy();\n this.graphicsData = null;\n }\n }\n\n /**\n * Destroy the cached data.\n * @advanced\n */\n public destroy()\n {\n this.reset();\n }\n}\n\nclass CanvasGraphicsContextRenderData\n{\n /**\n * Instructions for canvas rendering.\n * @advanced\n */\n public instructions = new InstructionSet();\n\n /**\n * Initialize render data.\n * @advanced\n */\n public init(): void\n {\n this.instructions.reset();\n }\n\n /**\n * Destroy render data.\n * @advanced\n */\n public destroy(): void\n {\n this.instructions.destroy();\n (this.instructions as null) = null;\n }\n}\n\n/**\n * A system that manages the rendering of GraphicsContexts for Canvas2D.\n * @category rendering\n * @advanced\n */\nexport class CanvasGraphicsContextSystem implements System<GraphicsContextSystemOptions>\n{\n /** @ignore */\n public static extension = {\n type: [\n ExtensionType.CanvasSystem,\n ],\n name: 'graphicsContext'\n } as const;\n\n /** The default options for the GraphicsContextSystem. */\n public static readonly defaultOptions: GraphicsContextSystemOptions = {\n /**\n * A value from 0 to 1 that controls the smoothness of bezier curves (the higher the smoother)\n * @default 0.5\n */\n bezierSmoothness: 0.5,\n };\n\n private readonly _renderer: Renderer;\n private readonly _managedContexts: GCManagedHash<GraphicsContext>;\n\n constructor(renderer: Renderer)\n {\n this._renderer = renderer;\n this._managedContexts = new GCManagedHash({ renderer, type: 'resource', name: 'graphicsContext' });\n }\n\n /**\n * Runner init called, update the default options\n * @ignore\n */\n public init(options?: GraphicsContextSystemOptions)\n {\n CanvasGraphicsContextSystem.defaultOptions.bezierSmoothness = options?.bezierSmoothness\n ?? CanvasGraphicsContextSystem.defaultOptions.bezierSmoothness;\n }\n\n /**\n * Returns the render data for a given GraphicsContext.\n * @param context - The GraphicsContext to get the render data for.\n * @internal\n */\n public getContextRenderData(context: GraphicsContext): CanvasGraphicsContextRenderData\n {\n const gpuContext = this.getGpuContext(context);\n\n return gpuContext.graphicsData || this._initContextRenderData(context);\n }\n\n /**\n * Updates the GPU context for a given GraphicsContext.\n * @param context - The GraphicsContext to update.\n * @returns The updated CanvasGraphicsContext.\n * @internal\n */\n public updateGpuContext(context: GraphicsContext)\n {\n const gpuData = context._gpuData as unknown as Record<number | string, CanvasGraphicsContext>;\n const hasContext = !!gpuData[this._renderer.uid];\n const gpuContext = gpuData[this._renderer.uid] || this._initContext(context);\n\n if (context.dirty || !hasContext)\n {\n if (hasContext)\n {\n gpuContext.reset();\n }\n\n gpuContext.isBatchable = false;\n context.dirty = false;\n }\n\n return gpuContext;\n }\n\n /**\n * Returns the CanvasGraphicsContext for a given GraphicsContext.\n * If it does not exist, it will initialize a new one.\n * @param context - The GraphicsContext to get the CanvasGraphicsContext for.\n * @returns The CanvasGraphicsContext for the given GraphicsContext.\n * @internal\n */\n public getGpuContext(context: GraphicsContext): CanvasGraphicsContext\n {\n const gpuData = context._gpuData as unknown as Record<number | string, CanvasGraphicsContext>;\n\n return gpuData[this._renderer.uid] || this._initContext(context);\n }\n\n private _initContextRenderData(context: GraphicsContext): CanvasGraphicsContextRenderData\n {\n const renderData = new CanvasGraphicsContextRenderData();\n const gpuContext = this.getGpuContext(context);\n\n gpuContext.graphicsData = renderData;\n\n renderData.init();\n\n return renderData;\n }\n\n private _initContext(context: GraphicsContext): CanvasGraphicsContext\n {\n const gpuContext = new CanvasGraphicsContext();\n\n gpuContext.context = context;\n (context._gpuData as unknown as Record<number | string, CanvasGraphicsContext>)[this._renderer.uid] = gpuContext;\n\n this._managedContexts.add(context);\n\n return gpuContext;\n }\n\n public destroy()\n {\n this._managedContexts.destroy();\n (this._renderer as null) = null;\n }\n}\n"],"names":[],"mappings":"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"}