1 line
28 KiB
Plaintext
1 line
28 KiB
Plaintext
{"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 { deprecation, v8_0_0 } from '../../../../utils/logging/deprecation';\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\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 * @memberof rendering\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 * @memberof rendering\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\nexport type RendererDestroyOptions = TypeOrBool<ViewSystemDestroyOptions>;\n\nconst defaultRunners = [\n 'init',\n 'destroy',\n 'contextChange',\n 'resolutionChange',\n 'reset',\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 // eslint-disable-next-line @typescript-eslint/ban-types\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 {@linkrendering.WebGLRenderer}\n * or {@link rendering.WebGPURenderer}.\n * Alternatively, you can also use {@link rendering.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 rendering.ViewSystem} | This manages the main view of the renderer usually a Canvas |\n * | {@link rendering.BackgroundSystem} | This manages the main views background color and alpha |\n * | {@link events.EventSystem} | This manages UI events. |\n * | {@link accessibility.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 rendering.RenderGroupSystem} | This manages the what what we are rendering to (eg - canvas or texture) |\n * | {@link rendering.GlobalUniformSystem} | This manages shaders, programs that run on the GPU to calculate 'em pixels. |\n * | {@link rendering.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 rendering.HelloSystem} | Says hello, buy printing out the pixi version into the console log (along with the renderer type) |\n * | {@link rendering.GenerateTextureSystem} | This adds the ability to generate textures from any Container |\n * | {@link rendering.FilterSystem} | This manages the filtering pipeline for post-processing effects. |\n * | {@link rendering.PrepareSystem} | This manages uploading assets to the GPU. Requires `import 'pixi.js/prepare'`|\n * | {@link rendering.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 * @memberof rendering\n * @property {rendering.HelloSystem} hello - HelloSystem instance.\n * @property {rendering.RenderGroupSystem} renderGroup - RenderGroupSystem instance.\n * @property {rendering.TextureGCSystem} textureGC - TextureGCSystem instance.\n * @property {rendering.FilterSystem} filter - FilterSystem instance.\n * @property {rendering.GlobalUniformSystem} globalUniforms - GlobalUniformSystem instance.\n * @property {rendering.TextureSystem} texture - TextureSystem instance.\n * @property {rendering.EventSystem} events - EventSystem instance.\n * @property {rendering.ExtractSystem} extract - ExtractSystem instance. Requires `import 'pixi.js/extract'`.\n * @property {rendering.PrepareSystem} prepare - PrepareSystem instance. Requires `import 'pixi.js/prepare'`.\n * @property {rendering.AccessibilitySystem} accessibility - AccessibilitySystem instance. Requires `import 'pixi.js/accessibility'`.\n */\n/* eslint-enable max-len */\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 public readonly type: number;\n /** The name of the renderer. */\n public readonly name: string;\n\n public _roundPixels: 0 | 1;\n\n public readonly runners: Runners = Object.create(null) as Runners;\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 let options = args;\n\n if (options instanceof Container)\n {\n options = { container: options };\n\n if (deprecated)\n {\n // #if _DEBUG\n // eslint-disable-next-line max-len\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 options.clearColor = this.background.colorRgba;\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 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 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 } = options;\n\n Color.shared.setValue(clearColor ?? this.background.colorRgba);\n\n renderer.renderTarget.clear(target, clear, Color.shared.toArray() as RgbaArray);\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 * @member {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 }\n\n public destroy(options: RendererDestroyOptions = false): void\n {\n this.runners.destroy.items.reverse();\n this.runners.destroy.emit(options);\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\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"],"names":[],"mappings":"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"} |