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 • 32.3 kB
Source Map (JSON)
{"version":3,"file":"AbstractRenderer.mjs","sources":["../../../../../src/rendering/renderers/shared/system/AbstractRenderer.ts"],"sourcesContent":["import { Color } from '../../../../color/Color';\nimport { loadEnvironmentExtensions } from '../../../../environment/autoDetectEnvironment';\nimport { Container } from '../../../../scene/container/Container';\nimport { unsafeEvalSupported } from '../../../../utils/browser/unsafeEvalSupported';\nimport { uid } from '../../../../utils/data/uid';\nimport { deprecation, v8_0_0 } from '../../../../utils/logging/deprecation';\nimport { GlobalResourceRegistry } from '../../../../utils/pool/GlobalResourceRegistry';\nimport { EventEmitter } from '../../../../utils/utils';\nimport { CLEAR } from '../../gl/const';\nimport { SystemRunner } from './SystemRunner';\n\nimport type { ColorSource, RgbaArray } from '../../../../color/Color';\nimport type { ICanvas } from '../../../../environment/canvas/ICanvas';\nimport type { Matrix } from '../../../../maths/matrix/Matrix';\nimport type { Rectangle } from '../../../../maths/shapes/Rectangle';\nimport type { TypeOrBool } from '../../../../scene/container/destroyTypes';\nimport type { CLEAR_OR_BOOL } from '../../gl/const';\nimport type { Renderer } from '../../types';\nimport type { BackgroundSystem } from '../background/BackgroundSystem';\nimport type { GenerateTextureOptions, GenerateTextureSystem } from '../extract/GenerateTextureSystem';\nimport type { PipeConstructor } from '../instructions/RenderPipe';\nimport type { RenderSurface } from '../renderTarget/RenderTargetSystem';\nimport type { Texture } from '../texture/Texture';\nimport type { ViewSystem, ViewSystemDestroyOptions } from '../view/ViewSystem';\nimport type { SharedRendererOptions } from './SharedSystems';\nimport type { System, SystemConstructor } from './System';\n\n/**\n * The configuration for the renderer.\n * This is used to define the systems and render pipes that will be used by the renderer.\n * @category rendering\n * @advanced\n */\nexport interface RendererConfig\n{\n type: number;\n name: string;\n runners?: string[];\n systems: {name: string, value: SystemConstructor}[];\n renderPipes: {name: string, value: PipeConstructor}[];\n renderPipeAdaptors: {name: string, value: any}[];\n}\n\n/**\n * The options for rendering a view.\n * @category rendering\n * @standard\n */\nexport interface RenderOptions extends ClearOptions\n{\n /** The container to render. */\n container: Container;\n /** the transform to apply to the container. */\n transform?: Matrix;\n}\n\n/**\n * The options for clearing the render target.\n * @category rendering\n * @advanced\n */\nexport interface ClearOptions\n{\n /**\n * The render target to render. if this target is a canvas and you are using the WebGL renderer,\n * please ensure you have set `multiView` to `true` on renderer.\n */\n target?: RenderSurface;\n /** The color to clear with. */\n clearColor?: ColorSource;\n /** The clear mode to use. */\n clear?: CLEAR_OR_BOOL\n\n /**\n * Mip level to render/clear to when the target is a texture-backed render surface.\n * @default 0\n *\n * Note: When rendering to a {@link Texture} target, Pixi renders into the underlying {@link TextureSource}\n * (via an internal {@link RenderTarget}). The texture's `frame` is interpreted in mip 0 space and is scaled/clamped\n * to the requested mip level.\n * @advanced\n */\n mipLevel?: number;\n\n /**\n * Array layer index to render/clear to when the target is an array-backed texture source (e.g. `arrayLayerCount > 1`).\n *\n * This maps to WebGPU's `GPUTextureViewDescriptor.baseArrayLayer` when creating render-attachment views.\n * @default 0\n * @advanced\n */\n layer?: number;\n}\n\n/**\n * Options for destroying the renderer.\n * This can be a boolean or an object.\n * @category rendering\n * @standard\n */\nexport type RendererDestroyOptions = TypeOrBool<ViewSystemDestroyOptions & {\n /** Whether to clean up global resource pools/caches */\n releaseGlobalResources?: boolean;\n}>;\n\nconst defaultRunners = [\n 'init',\n 'destroy',\n 'contextChange',\n 'resolutionChange',\n 'resetState',\n 'renderEnd',\n 'renderStart',\n 'render',\n 'update',\n 'postrender',\n 'prerender'\n] as const;\n\ntype DefaultRunners = typeof defaultRunners[number];\ntype Runners = {[key in DefaultRunners]: SystemRunner} & {\n [K: ({} & string) | ({} & symbol)]: SystemRunner;\n};\n\n/* eslint-disable max-len */\n/**\n * The base class for a PixiJS Renderer. It contains the shared logic for all renderers.\n *\n * You should not use this class directly, but instead use {@link WebGLRenderer}\n * or {@link WebGPURenderer}.\n * Alternatively, you can also use {@link autoDetectRenderer} if you want us to\n * determine the best renderer for you.\n *\n * The renderer is composed of systems that manage specific tasks. The following systems are added by default\n * whenever you create a renderer:\n *\n *\n * | Generic Systems | Systems that manage functionality that all renderer types share |\n * | ------------------------------------ | ----------------------------------------------------------------------------- |\n * | {@link ViewSystem} | This manages the main view of the renderer usually a Canvas |\n * | {@link BackgroundSystem} | This manages the main views background color and alpha |\n * | {@link EventSystem} | This manages UI events. |\n * | {@link AccessibilitySystem} | This manages accessibility features. Requires `import 'pixi.js/accessibility'`|\n *\n * | Core Systems | Provide an optimised, easy to use API to work with WebGL/WebGPU |\n * | ------------------------------------ | ----------------------------------------------------------------------------- |\n * | {@link GlobalUniformSystem} | This manages shaders, programs that run on the GPU to calculate 'em pixels. |\n * | {@link TextureGCSystem} | This will automatically remove textures from the GPU if they are not used. |\n *\n * | PixiJS High-Level Systems | Set of specific systems designed to work with PixiJS objects |\n * | ------------------------------------ | ----------------------------------------------------------------------------- |\n * | {@link HelloSystem} | Says hello, buy printing out the pixi version into the console log (along with the renderer type) |\n * | {@link GenerateTextureSystem} | This adds the ability to generate textures from any Container |\n * | {@link FilterSystem} | This manages the filtering pipeline for post-processing effects. |\n * | {@link PrepareSystem} | This manages uploading assets to the GPU. Requires `import 'pixi.js/prepare'`|\n * | {@link ExtractSystem} | This extracts image data from display objects. |\n *\n * The breadth of the API surface provided by the renderer is contained within these systems.\n * @abstract\n * @category rendering\n * @advanced\n * @property {HelloSystem} hello - HelloSystem instance.\n * @property {TextureGCSystem} textureGC - TextureGCSystem instance.\n * @property {FilterSystem} filter - FilterSystem instance.\n * @property {GlobalUniformSystem} globalUniforms - GlobalUniformSystem instance.\n * @property {TextureSystem} texture - TextureSystem instance.\n * @property {EventSystem} events - EventSystem instance.\n * @property {ExtractSystem} extract - ExtractSystem instance. Requires `import 'pixi.js/extract'`.\n * @property {PrepareSystem} prepare - PrepareSystem instance. Requires `import 'pixi.js/prepare'`.\n * @property {AccessibilitySystem} accessibility - AccessibilitySystem instance. Requires `import 'pixi.js/accessibility'`.\n */\nexport class AbstractRenderer<\n PIPES, OPTIONS extends SharedRendererOptions, CANVAS extends ICanvas = HTMLCanvasElement\n> extends EventEmitter<{resize: [screenWidth: number, screenHeight: number, resolution: number]}>\n{\n /** The default options for the renderer. */\n public static defaultOptions = {\n /**\n * Default resolution / device pixel ratio of the renderer.\n * @default 1\n */\n resolution: 1,\n /**\n * Should the `failIfMajorPerformanceCaveat` flag be enabled as a context option used in the `isWebGLSupported`\n * function. If set to true, a WebGL renderer can fail to be created if the browser thinks there could be\n * performance issues when using WebGL.\n *\n * In PixiJS v6 this has changed from true to false by default, to allow WebGL to work in as many\n * scenarios as possible. However, some users may have a poor experience, for example, if a user has a gpu or\n * driver version blacklisted by the\n * browser.\n *\n * If your application requires high performance rendering, you may wish to set this to false.\n * We recommend one of two options if you decide to set this flag to false:\n *\n * 1: Use the Canvas renderer as a fallback in case high performance WebGL is\n * not supported.\n *\n * 2: Call `isWebGLSupported` (which if found in the utils package) in your code before attempting to create a\n * PixiJS renderer, and show an error message to the user if the function returns false, explaining that their\n * device & browser combination does not support high performance WebGL.\n * This is a much better strategy than trying to create a PixiJS renderer and finding it then fails.\n * @default false\n */\n failIfMajorPerformanceCaveat: false,\n /**\n * Should round pixels be forced when rendering?\n * @default false\n */\n roundPixels: false\n };\n\n /** @internal */\n public readonly type: number;\n /** The name of the renderer. */\n public readonly name: string;\n\n /** The current tick of the renderer. */\n public tick: number = 0;\n\n /** @internal */\n public readonly uid = uid('renderer');\n\n /** @internal */\n public _roundPixels: 0 | 1;\n\n /** @internal */\n public readonly runners: Runners = Object.create(null) as Runners;\n /** @internal */\n public readonly renderPipes = Object.create(null) as PIPES;\n /** The view system manages the main canvas that is attached to the DOM */\n public view!: ViewSystem;\n /** The background system manages the background color and alpha of the main view. */\n public background: BackgroundSystem;\n /** System that manages the generation of textures from the renderer */\n public textureGenerator: GenerateTextureSystem;\n\n protected _initOptions: OPTIONS = {} as OPTIONS;\n protected config: RendererConfig;\n\n private _systemsHash: Record<string, System> = Object.create(null);\n private _lastObjectRendered: Container;\n\n /**\n * Set up a system with a collection of SystemClasses and runners.\n * Systems are attached dynamically to this class when added.\n * @param config - the config for the system manager\n */\n constructor(config: RendererConfig)\n {\n super();\n this.type = config.type;\n this.name = config.name;\n this.config = config;\n\n const combinedRunners = [...defaultRunners, ...(this.config.runners ?? [])];\n\n this._addRunners(...combinedRunners);\n // Validation check that this environment support `new Function`\n this._unsafeEvalCheck();\n }\n\n /**\n * Initialize the renderer.\n * @param options - The options to use to create the renderer.\n */\n public async init(options: Partial<OPTIONS> = {})\n {\n const skip = options.skipExtensionImports === true ? true : options.manageImports === false;\n\n await loadEnvironmentExtensions(skip);\n\n this._addSystems(this.config.systems);\n this._addPipes(this.config.renderPipes, this.config.renderPipeAdaptors);\n\n // loop through all systems...\n for (const systemName in this._systemsHash)\n {\n const system = this._systemsHash[systemName];\n\n const defaultSystemOptions = (system.constructor as any).defaultOptions;\n\n options = { ...defaultSystemOptions, ...options };\n }\n\n options = { ...AbstractRenderer.defaultOptions, ...options };\n this._roundPixels = options.roundPixels ? 1 : 0;\n\n // await emits..\n for (let i = 0; i < this.runners.init.items.length; i++)\n {\n await this.runners.init.items[i].init(options);\n }\n\n // store options\n this._initOptions = options as OPTIONS;\n }\n\n /**\n * Renders the object to its view.\n * @param options - The options to render with.\n * @param options.container - The container to render.\n * @param [options.target] - The target to render to.\n */\n public render(options: RenderOptions | Container): void;\n /** @deprecated since 8.0.0 */\n public render(container: Container, options: {renderTexture: any}): void;\n public render(args: RenderOptions | Container, deprecated?: {renderTexture: any}): void\n {\n this.tick++;\n\n let options = args;\n\n if (options instanceof Container)\n {\n options = { container: options };\n\n if (deprecated)\n {\n // #if _DEBUG\n deprecation(v8_0_0, 'passing a second argument is deprecated, please use render options instead');\n // #endif\n\n options.target = deprecated.renderTexture;\n }\n }\n\n options.target ||= this.view.renderTarget;\n\n // TODO: we should eventually fix events so that it can handle multiple canvas elements\n if (options.target === this.view.renderTarget)\n {\n // TODO get rid of this\n this._lastObjectRendered = options.container;\n\n options.clearColor ??= this.background.colorRgba;\n options.clear ??= this.background.clearBeforeRender;\n }\n\n if (options.clearColor)\n {\n const isRGBAArray = Array.isArray(options.clearColor) && options.clearColor.length === 4;\n\n options.clearColor = isRGBAArray ? options.clearColor : Color.shared.setValue(options.clearColor).toArray();\n }\n\n if (!options.transform)\n {\n options.container.updateLocalTransform();\n options.transform = options.container.localTransform;\n }\n\n // Check if the container is visible before proceeding with rendering\n if (!options.container.visible)\n {\n return;\n }\n\n // lets ensure this object is a render group so we can render it!\n // the renderer only likes to render - render groups.\n options.container.enableRenderGroup();\n\n this.runners.prerender.emit(options);\n this.runners.renderStart.emit(options);\n this.runners.render.emit(options);\n this.runners.renderEnd.emit(options);\n this.runners.postrender.emit(options);\n }\n\n /**\n * Resizes the WebGL view to the specified width and height.\n * @param desiredScreenWidth - The desired width of the screen.\n * @param desiredScreenHeight - The desired height of the screen.\n * @param resolution - The resolution / device pixel ratio of the renderer.\n */\n public resize(desiredScreenWidth: number, desiredScreenHeight: number, resolution?: number): void\n {\n const previousResolution = this.view.resolution;\n\n this.view.resize(desiredScreenWidth, desiredScreenHeight, resolution);\n this.emit('resize', this.view.screen.width, this.view.screen.height, this.view.resolution);\n if (resolution !== undefined && resolution !== previousResolution)\n {\n this.runners.resolutionChange.emit(resolution);\n }\n }\n\n /**\n * Clears the render target.\n * @param options - The options to use when clearing the render target.\n * @param options.target - The render target to clear.\n * @param options.clearColor - The color to clear with.\n * @param options.clear - The clear mode to use.\n * @advanced\n */\n public clear(options: ClearOptions = {}): void\n {\n // override!\n const renderer = this as unknown as Renderer;\n\n options.target ||= renderer.renderTarget.renderTarget;\n options.clearColor ||= this.background.colorRgba;\n options.clear ??= CLEAR.ALL;\n\n const { clear, clearColor, target, mipLevel, layer } = options;\n\n Color.shared.setValue(clearColor ?? this.background.colorRgba);\n\n renderer.renderTarget.clear(target, clear, Color.shared.toArray() as RgbaArray, mipLevel ?? 0, layer ?? 0);\n }\n\n /** The resolution / device pixel ratio of the renderer. */\n get resolution(): number\n {\n return this.view.resolution;\n }\n\n set resolution(value: number)\n {\n this.view.resolution = value;\n this.runners.resolutionChange.emit(value);\n }\n\n /**\n * Same as view.width, actual number of pixels in the canvas by horizontal.\n * @type {number}\n * @readonly\n * @default 800\n */\n get width(): number\n {\n return this.view.texture.frame.width;\n }\n\n /**\n * Same as view.height, actual number of pixels in the canvas by vertical.\n * @default 600\n */\n get height(): number\n {\n return this.view.texture.frame.height;\n }\n\n // NOTE: this was `view` in v7\n /**\n * The canvas element that everything is drawn to.\n * @type {environment.ICanvas}\n */\n get canvas(): CANVAS\n {\n return this.view.canvas as CANVAS;\n }\n\n /**\n * the last object rendered by the renderer. Useful for other plugins like interaction managers\n * @readonly\n */\n get lastObjectRendered(): Container\n {\n return this._lastObjectRendered;\n }\n\n /**\n * Flag if we are rendering to the screen vs renderTexture\n * @readonly\n * @default true\n */\n get renderingToScreen(): boolean\n {\n const renderer = this as unknown as Renderer;\n\n return renderer.renderTarget.renderingToScreen;\n }\n\n /**\n * Measurements of the screen. (0, 0, screenWidth, screenHeight).\n *\n * Its safe to use as filterArea or hitArea for the whole stage.\n */\n get screen(): Rectangle\n {\n return this.view.screen;\n }\n\n /**\n * Create a bunch of runners based of a collection of ids\n * @param runnerIds - the runner ids to add\n */\n private _addRunners(...runnerIds: string[]): void\n {\n runnerIds.forEach((runnerId) =>\n {\n this.runners[runnerId] = new SystemRunner(runnerId);\n });\n }\n\n private _addSystems(systems: RendererConfig['systems']): void\n {\n let i: keyof typeof systems;\n\n for (i in systems)\n {\n const val = systems[i];\n\n this._addSystem(val.value, val.name);\n }\n }\n\n /**\n * Add a new system to the renderer.\n * @param ClassRef - Class reference\n * @param name - Property name for system, if not specified\n * will use a static `name` property on the class itself. This\n * name will be assigned as s property on the Renderer so make\n * sure it doesn't collide with properties on Renderer.\n * @returns Return instance of renderer\n */\n private _addSystem(ClassRef: SystemConstructor, name: string): this\n {\n const system = new ClassRef(this as unknown as Renderer);\n\n if ((this as any)[name])\n {\n throw new Error(`Whoops! The name \"${name}\" is already in use`);\n }\n\n (this as any)[name] = system;\n\n this._systemsHash[name] = system;\n\n for (const i in this.runners)\n {\n this.runners[i].add(system);\n }\n\n return this;\n }\n\n private _addPipes(pipes: RendererConfig['renderPipes'], pipeAdaptors: RendererConfig['renderPipeAdaptors']): void\n {\n const adaptors = pipeAdaptors.reduce((acc, adaptor) =>\n {\n acc[adaptor.name] = adaptor.value;\n\n return acc;\n }, {} as Record<string, any>);\n\n pipes.forEach((pipe) =>\n {\n const PipeClass = pipe.value;\n const name = pipe.name;\n\n const Adaptor = adaptors[name];\n\n // sorry typescript..\n (this.renderPipes as any)[name] = new PipeClass(\n this as unknown as Renderer,\n Adaptor ? new Adaptor() : null\n );\n\n this.runners.destroy.add((this.renderPipes as any)[name]);\n });\n }\n\n public destroy(options: RendererDestroyOptions = false): void\n {\n this.runners.destroy.items.reverse();\n this.runners.destroy.emit(options);\n\n if (options === true || (typeof options === 'object' && options.releaseGlobalResources))\n {\n GlobalResourceRegistry.release();\n }\n\n // destroy all runners\n Object.values(this.runners).forEach((runner) =>\n {\n runner.destroy();\n });\n\n this._systemsHash = null;\n\n // destroy all pipes\n (this.renderPipes as null) = null;\n\n this.removeAllListeners();\n }\n\n /**\n * Generate a texture from a container.\n * @param options - options or container target to use when generating the texture\n * @returns a texture\n */\n public generateTexture(options: GenerateTextureOptions | Container): Texture\n {\n return this.textureGenerator.generateTexture(options);\n }\n\n /**\n * Whether the renderer will round coordinates to whole pixels when rendering.\n * Can be overridden on a per scene item basis.\n */\n get roundPixels(): boolean\n {\n return !!this._roundPixels;\n }\n\n /**\n * Overridable function by `pixi.js/unsafe-eval` to silence\n * throwing an error if platform doesn't support unsafe-evals.\n * @private\n * @ignore\n */\n public _unsafeEvalCheck(): void\n {\n if (!unsafeEvalSupported())\n {\n throw new Error('Current environment does not allow unsafe-eval, '\n + 'please use pixi.js/unsafe-eval module to enable support.');\n }\n }\n /**\n * Resets the rendering state of the renderer.\n * This is useful when you want to use the WebGL context directly and need to ensure PixiJS's internal state\n * stays synchronized. When modifying the WebGL context state externally, calling this method before the next Pixi\n * render will reset all internal caches and ensure it executes correctly.\n *\n * This is particularly useful when combining PixiJS with other rendering engines like Three.js:\n * ```js\n * // Reset Three.js state\n * threeRenderer.resetState();\n *\n * // Render a Three.js scene\n * threeRenderer.render(threeScene, threeCamera);\n *\n * // Reset PixiJS state since Three.js modified the WebGL context\n * pixiRenderer.resetState();\n *\n * // Now render Pixi content\n * pixiRenderer.render(pixiScene);\n * ```\n * @advanced\n */\n public resetState(): void\n {\n this.runners.resetState.emit();\n }\n}\n"],"names":[],"mappings":"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"}