From 9794ece302bb5bbb4bcc84eab4adb0c43708c34c Mon Sep 17 00:00:00 2001 From: Matt Karl Date: Thu, 23 Jun 2022 09:05:10 -0400 Subject: [PATCH] Chore: Convert systems into extensions (#8423) --- .../src/CanvasContextSystem.ts | 8 +- .../canvas-renderer/src/CanvasMaskSystem.ts | 8 +- .../src/CanvasObjectRendererSystem.ts | 15 +++- .../canvas-renderer/src/CanvasRenderer.ts | 31 +++---- packages/core/src/Renderer.ts | 81 ++++++++++--------- .../core/src/background/BackgroundSystem.ts | 10 +++ packages/core/src/batch/BatchSystem.ts | 7 ++ packages/core/src/context/ContextSystem.ts | 7 ++ packages/core/src/extensions.ts | 2 + packages/core/src/filters/FilterSystem.ts | 7 ++ .../core/src/framebuffer/FramebufferSystem.ts | 7 ++ .../core/src/framebuffer/MultisampleSystem.ts | 7 ++ packages/core/src/geometry/BufferSystem.ts | 7 ++ packages/core/src/geometry/GeometrySystem.ts | 7 ++ packages/core/src/mask/MaskSystem.ts | 7 ++ packages/core/src/mask/ScissorSystem.ts | 7 ++ packages/core/src/mask/StencilSystem.ts | 7 ++ packages/core/src/plugin/PluginSystem.ts | 10 +++ .../core/src/projection/ProjectionSystem.ts | 7 ++ .../core/src/render/ObjectRendererSystem.ts | 7 ++ .../renderTexture/GenerateTextureSystem.ts | 10 +++ .../src/renderTexture/RenderTextureSystem.ts | 9 ++- packages/core/src/shader/ShaderSystem.ts | 7 ++ packages/core/src/startup/StartupSystem.ts | 10 +++ packages/core/src/state/StateSystem.ts | 7 ++ packages/core/src/textures/TextureGCSystem.ts | 7 ++ packages/core/src/textures/TextureSystem.ts | 7 ++ packages/core/src/view/ViewSystem.ts | 10 +++ 28 files changed, 259 insertions(+), 57 deletions(-) diff --git a/packages/canvas-renderer/src/CanvasContextSystem.ts b/packages/canvas-renderer/src/CanvasContextSystem.ts index ddcfd02d2d..61a9db59d1 100644 --- a/packages/canvas-renderer/src/CanvasContextSystem.ts +++ b/packages/canvas-renderer/src/CanvasContextSystem.ts @@ -1,7 +1,7 @@ import { Matrix } from '@pixi/math'; import type { CanvasRenderer } from './CanvasRenderer'; -import type { ISystem } from '@pixi/core'; +import { ExtensionMetadata, ExtensionType, ISystem } from '@pixi/core'; import { mapCanvasBlendModesToPixi } from './utils/mapCanvasBlendModesToPixi'; import { BLEND_MODES, SCALE_MODES } from '@pixi/constants'; import { settings } from '@pixi/settings'; @@ -38,6 +38,12 @@ export type SmoothingEnabledProperties = */ export class CanvasContextSystem implements ISystem { + /** @ignore */ + static extension: ExtensionMetadata = { + type: ExtensionType.CanvasRendererSystem, + name: 'canvasContext', + }; + /** A reference to the current renderer */ private renderer: CanvasRenderer; diff --git a/packages/canvas-renderer/src/CanvasMaskSystem.ts b/packages/canvas-renderer/src/CanvasMaskSystem.ts index e29b66f188..4e24e2d39e 100644 --- a/packages/canvas-renderer/src/CanvasMaskSystem.ts +++ b/packages/canvas-renderer/src/CanvasMaskSystem.ts @@ -2,7 +2,7 @@ import { Polygon, SHAPES } from '@pixi/math'; import type { CanvasRenderer } from './CanvasRenderer'; import type { Graphics } from '@pixi/graphics'; -import type { ISystem, MaskData } from '@pixi/core'; +import { ExtensionMetadata, ExtensionType, ISystem, MaskData } from '@pixi/core'; import type { Container } from '@pixi/display'; /** @@ -14,6 +14,12 @@ import type { Container } from '@pixi/display'; */ export class CanvasMaskSystem implements ISystem { + /** @ignore */ + static extension: ExtensionMetadata = { + type: ExtensionType.CanvasRendererSystem, + name: 'mask', + }; + /** A reference to the current renderer */ private renderer: CanvasRenderer; private _foundShapes: Array = []; diff --git a/packages/canvas-renderer/src/CanvasObjectRendererSystem.ts b/packages/canvas-renderer/src/CanvasObjectRendererSystem.ts index 654878726b..45fe680a27 100644 --- a/packages/canvas-renderer/src/CanvasObjectRendererSystem.ts +++ b/packages/canvas-renderer/src/CanvasObjectRendererSystem.ts @@ -1,7 +1,14 @@ import { Matrix } from '@pixi/math'; import type { CanvasRenderer } from './CanvasRenderer'; -import { BaseRenderTexture, CanvasResource, IRendererRenderOptions, ISystem, RenderTexture } from '@pixi/core'; +import { + BaseRenderTexture, + CanvasResource, + ExtensionMetadata, + ExtensionType, + IRendererRenderOptions, + ISystem, + RenderTexture } from '@pixi/core'; import { BLEND_MODES } from '@pixi/constants'; import { CanvasRenderTarget, hex2string, rgb2hex } from '@pixi/utils'; import { DisplayObject } from 'pixi.js'; @@ -14,6 +21,12 @@ import { CrossPlatformCanvasRenderingContext2D } from './CanvasContextSystem'; */ export class CanvasObjectRendererSystem implements ISystem { + /** @ignore */ + static extension: ExtensionMetadata = { + type: ExtensionType.CanvasRendererSystem, + name: 'objectRenderer', + }; + /** A reference to the current renderer */ private renderer: CanvasRenderer; renderingToScreen: boolean; diff --git a/packages/canvas-renderer/src/CanvasRenderer.ts b/packages/canvas-renderer/src/CanvasRenderer.ts index a5fee41d9e..0b20141137 100644 --- a/packages/canvas-renderer/src/CanvasRenderer.ts +++ b/packages/canvas-renderer/src/CanvasRenderer.ts @@ -165,19 +165,7 @@ export class CanvasRenderer extends SystemManager implements IRe const systemConfig = { runners: ['init', 'destroy', 'contextChange', 'reset', 'update', 'postrender', 'prerender', 'resize'], - systems: { - // systems shared by all renderers.. - textureGenerator: GenerateTextureSystem, - background: BackgroundSystem, - _view: ViewSystem, - _plugin: PluginSystem, - startup: StartupSystem, - - // canvas systems.. - mask: CanvasMaskSystem, - canvasContext: CanvasContextSystem, - objectRenderer: CanvasObjectRendererSystem, - } + systems: CanvasRenderer.__systems, }; this.setup(systemConfig); @@ -558,7 +546,11 @@ export class CanvasRenderer extends SystemManager implements IRe return false; } - static __plugins: IRendererPlugins = {}; + /** @private */ + static readonly __plugins: IRendererPlugins = {}; + + /** @private */ + static readonly __systems: Record = {}; /** * Collection of installed plugins. These are included by default in PIXI, but can be excluded @@ -578,3 +570,14 @@ extensions.handle( (extension) => { CanvasRenderer.__plugins[extension.name] = extension.ref; }, (extension) => { delete CanvasRenderer.__plugins[extension.name]; } ); +extensions.handle( + ExtensionType.CanvasRendererSystem, + (extension) => { CanvasRenderer.__systems[extension.name] = extension.ref; }, + (extension) => { delete CanvasRenderer.__systems[extension.name]; } +); + +extensions.add( + CanvasMaskSystem, + CanvasContextSystem, + CanvasObjectRendererSystem +); diff --git a/packages/core/src/Renderer.ts b/packages/core/src/Renderer.ts index f191a6c801..e2ad492a98 100644 --- a/packages/core/src/Renderer.ts +++ b/packages/core/src/Renderer.ts @@ -318,35 +318,7 @@ export class Renderer extends SystemManager implements IRenderer const systemConfig = { runners: ['init', 'destroy', 'contextChange', 'reset', 'update', 'postrender', 'prerender', 'resize'], - systems: { - // systems shared by all renderers.. - textureGenerator: GenerateTextureSystem, - background: BackgroundSystem, - _view: ViewSystem, - _plugin: PluginSystem, - startup: StartupSystem, - - // low level WebGL systems - context: ContextSystem, - state: StateSystem, - shader: ShaderSystem, - texture: TextureSystem, - buffer: BufferSystem, - geometry: GeometrySystem, - framebuffer: FramebufferSystem, - - // high level pixi specific rendering - mask: MaskSystem, - scissor: ScissorSystem, - stencil: StencilSystem, - projection: ProjectionSystem, - textureGC: TextureGCSystem, - filter: FilterSystem, - renderTexture: RenderTextureSystem, - batch: BatchSystem, - objectRenderer: ObjectRendererSystem, - _multisample: MultisampleSystem, - } + systems: Renderer.__systems, }; this.setup(systemConfig); @@ -647,16 +619,15 @@ export class Renderer extends SystemManager implements IRenderer * Collection of installed plugins. These are included by default in PIXI, but can be excluded * by creating a custom build. Consult the README for more information about creating custom * builds and excluding plugins. - * @readonly - * @property {PIXI.AccessibilityManager} accessibility Support tabbing interactive elements. - * @property {PIXI.Extract} extract Extract image data from renderer. - * @property {PIXI.InteractionManager} interaction Handles mouse, touch and pointer events. - * @property {PIXI.ParticleRenderer} particle Renderer for ParticleContainer objects. - * @property {PIXI.Prepare} prepare Pre-render display objects. - * @property {PIXI.BatchRenderer} batch Batching of Sprite, Graphics and Mesh objects. - * @property {PIXI.TilingSpriteRenderer} tilingSprite Renderer for TilingSprite objects. - */ - static __plugins: IRendererPlugins = {}; + * @private + */ + static readonly __plugins: IRendererPlugins = {}; + + /** + * The collection of installed systems. + * @private + */ + static readonly __systems: Record = {}; } // Handle registration of extensions @@ -665,3 +636,35 @@ extensions.handle( (extension) => { Renderer.__plugins[extension.name] = extension.ref; }, (extension) => { delete Renderer.__plugins[extension.name]; } ); +extensions.handle( + ExtensionType.RendererSystem, + (extension) => { Renderer.__systems[extension.name] = extension.ref; }, + (extension) => { delete Renderer.__systems[extension.name]; } +); + +extensions.add( + GenerateTextureSystem, + BackgroundSystem, + ViewSystem, + PluginSystem, + StartupSystem, + // low level WebGL systems + ContextSystem, + StateSystem, + ShaderSystem, + TextureSystem, + BufferSystem, + GeometrySystem, + FramebufferSystem, + // high level pixi specific rendering + MaskSystem, + ScissorSystem, + StencilSystem, + ProjectionSystem, + TextureGCSystem, + FilterSystem, + RenderTextureSystem, + BatchSystem, + ObjectRendererSystem, + MultisampleSystem +); diff --git a/packages/core/src/background/BackgroundSystem.ts b/packages/core/src/background/BackgroundSystem.ts index a96b012cc1..d3f98c789e 100644 --- a/packages/core/src/background/BackgroundSystem.ts +++ b/packages/core/src/background/BackgroundSystem.ts @@ -1,4 +1,5 @@ import { hex2rgb, hex2string } from '@pixi/utils'; +import { ExtensionMetadata, ExtensionType } from '../extensions'; import { ISystem } from '../system/ISystem'; export interface BackgroundOptions @@ -17,6 +18,15 @@ export interface BackgroundOptions */ export class BackgroundSystem implements ISystem { + /** @ignore */ + static extension: ExtensionMetadata = { + type: [ + ExtensionType.RendererSystem, + ExtensionType.CanvasRendererSystem + ], + name: 'background', + }; + /** * This sets if the CanvasRenderer will clear the canvas or not before the new render pass. * If the scene is NOT transparent PixiJS will use a canvas sized fillRect operation every diff --git a/packages/core/src/batch/BatchSystem.ts b/packages/core/src/batch/BatchSystem.ts index 0750cc0284..72350a7577 100644 --- a/packages/core/src/batch/BatchSystem.ts +++ b/packages/core/src/batch/BatchSystem.ts @@ -4,6 +4,7 @@ import type { ISystem } from '../system/ISystem'; import type { Renderer } from '../Renderer'; import type { BaseTexture } from '../textures/BaseTexture'; import type { BatchTextureArray } from './BatchTextureArray'; +import { ExtensionMetadata, ExtensionType } from '../extensions'; /** * System plugin to the renderer to manage batching. @@ -11,6 +12,12 @@ import type { BatchTextureArray } from './BatchTextureArray'; */ export class BatchSystem implements ISystem { + /** @ignore */ + static extension: ExtensionMetadata = { + type: ExtensionType.RendererSystem, + name: 'batch', + }; + /** An empty renderer. */ public readonly emptyRenderer: ObjectRenderer; diff --git a/packages/core/src/context/ContextSystem.ts b/packages/core/src/context/ContextSystem.ts index b9a716e642..5adf9098c1 100644 --- a/packages/core/src/context/ContextSystem.ts +++ b/packages/core/src/context/ContextSystem.ts @@ -5,6 +5,7 @@ import type { ISystem } from '../system/ISystem'; import type { Renderer } from '../Renderer'; import type { WebGLExtensions } from './WebGLExtensions'; import { IRenderingContext } from '../IRenderer'; +import { ExtensionMetadata, ExtensionType } from '../extensions'; let CONTEXT_UID_COUNTER = 0; @@ -33,6 +34,12 @@ export interface ContextOptions */ export class ContextSystem implements ISystem { + /** @ignore */ + static extension: ExtensionMetadata = { + type: ExtensionType.RendererSystem, + name: 'context', + }; + /** * Either 1 or 2 to reflect the WebGL version being used. * @readonly diff --git a/packages/core/src/extensions.ts b/packages/core/src/extensions.ts index 6b38b0964e..7384be2af0 100644 --- a/packages/core/src/extensions.ts +++ b/packages/core/src/extensions.ts @@ -10,7 +10,9 @@ enum ExtensionType // eslint-disable-next-line @typescript-eslint/indent { Application = 'application', + RendererSystem = 'renderer-webgl-system', RendererPlugin = 'renderer-webgl-plugin', + CanvasRendererSystem = 'renderer-canvas-system', CanvasRendererPlugin = 'renderer-canvas-plugin', Loader = 'loader', } diff --git a/packages/core/src/filters/FilterSystem.ts b/packages/core/src/filters/FilterSystem.ts index 177ea0993d..334633648e 100644 --- a/packages/core/src/filters/FilterSystem.ts +++ b/packages/core/src/filters/FilterSystem.ts @@ -12,6 +12,7 @@ import type { IFilterTarget } from './IFilterTarget'; import type { ISpriteMaskTarget } from './spriteMask/SpriteMaskFilter'; import type { RenderTexture } from '../renderTexture/RenderTexture'; import type { Renderer } from '../Renderer'; +import { ExtensionMetadata, ExtensionType } from '../extensions'; const tempPoints = [new Point(), new Point(), new Point(), new Point()]; const tempMatrix = new Matrix(); @@ -43,6 +44,12 @@ const tempMatrix = new Matrix(); */ export class FilterSystem implements ISystem { + /** @ignore */ + static extension: ExtensionMetadata = { + type: ExtensionType.RendererSystem, + name: 'filter', + }; + /** * List of filters for the FilterSystem * @member {object[]} diff --git a/packages/core/src/framebuffer/FramebufferSystem.ts b/packages/core/src/framebuffer/FramebufferSystem.ts index fdcfcb0036..559f851ec5 100644 --- a/packages/core/src/framebuffer/FramebufferSystem.ts +++ b/packages/core/src/framebuffer/FramebufferSystem.ts @@ -7,6 +7,7 @@ import { GLFramebuffer } from './GLFramebuffer'; import type { ISystem } from '../system/ISystem'; import type { Renderer } from '../Renderer'; import { IRenderingContext } from '../IRenderer'; +import { ExtensionMetadata, ExtensionType } from '../extensions'; const tempRectangle = new Rectangle(); @@ -16,6 +17,12 @@ const tempRectangle = new Rectangle(); */ export class FramebufferSystem implements ISystem { + /** @ignore */ + static extension: ExtensionMetadata = { + type: ExtensionType.RendererSystem, + name: 'framebuffer', + }; + /** A list of managed framebuffers. */ public readonly managedFramebuffers: Array; public current: Framebuffer; diff --git a/packages/core/src/framebuffer/MultisampleSystem.ts b/packages/core/src/framebuffer/MultisampleSystem.ts index 81442951e0..fffc9f36c7 100644 --- a/packages/core/src/framebuffer/MultisampleSystem.ts +++ b/packages/core/src/framebuffer/MultisampleSystem.ts @@ -2,6 +2,7 @@ import { MSAA_QUALITY } from '@pixi/constants'; import { ISystem } from '../system/ISystem'; import { Renderer } from '../Renderer'; import { IRenderingContext } from '../IRenderer'; +import { ExtensionMetadata, ExtensionType } from '../extensions'; /** * System that manages the multisample property on the WebGL renderer @@ -9,6 +10,12 @@ import { IRenderingContext } from '../IRenderer'; */ export class MultisampleSystem implements ISystem { + /** @ignore */ + static extension: ExtensionMetadata = { + type: ExtensionType.RendererSystem, + name: '_multisample', + }; + /** * The number of msaa samples of the canvas. * @readonly diff --git a/packages/core/src/geometry/BufferSystem.ts b/packages/core/src/geometry/BufferSystem.ts index 19d9a07b13..06407357b7 100644 --- a/packages/core/src/geometry/BufferSystem.ts +++ b/packages/core/src/geometry/BufferSystem.ts @@ -4,6 +4,7 @@ import type { Renderer } from '../Renderer'; import type { Buffer } from './Buffer'; import type { ISystem } from '../system/ISystem'; import { IRenderingContext } from '../IRenderer'; +import { ExtensionMetadata, ExtensionType } from '../extensions'; /** * System plugin to the renderer to manage buffers. @@ -24,6 +25,12 @@ import { IRenderingContext } from '../IRenderer'; */ export class BufferSystem implements ISystem { + /** @ignore */ + static extension: ExtensionMetadata = { + type: ExtensionType.RendererSystem, + name: 'buffer', + }; + CONTEXT_UID: number; gl: IRenderingContext; diff --git a/packages/core/src/geometry/GeometrySystem.ts b/packages/core/src/geometry/GeometrySystem.ts index cbe2e1b054..bc4272248f 100644 --- a/packages/core/src/geometry/GeometrySystem.ts +++ b/packages/core/src/geometry/GeometrySystem.ts @@ -10,6 +10,7 @@ import type { Shader } from '../shader/Shader'; import type { Program } from '../shader/Program'; import type { Dict } from '@pixi/utils'; import { IRenderingContext } from '../IRenderer'; +import { ExtensionMetadata, ExtensionType } from '../extensions'; const byteSizeMap: {[key: number]: number} = { 5126: 4, 5123: 2, 5121: 1 }; @@ -19,6 +20,12 @@ const byteSizeMap: {[key: number]: number} = { 5126: 4, 5123: 2, 5121: 1 }; */ export class GeometrySystem implements ISystem { + /** @ignore */ + static extension: ExtensionMetadata = { + type: ExtensionType.RendererSystem, + name: 'geometry', + }; + /** * `true` if we has `*_vertex_array_object` extension. * @readonly diff --git a/packages/core/src/mask/MaskSystem.ts b/packages/core/src/mask/MaskSystem.ts index 8b9eab18af..85457502a0 100644 --- a/packages/core/src/mask/MaskSystem.ts +++ b/packages/core/src/mask/MaskSystem.ts @@ -5,6 +5,7 @@ import { MASK_TYPES } from '@pixi/constants'; import type { ISystem } from '../system/ISystem'; import type { IMaskTarget } from './MaskData'; import type { Renderer } from '../Renderer'; +import { ExtensionMetadata, ExtensionType } from '../extensions'; /** * System plugin to the renderer to manage masks. @@ -31,6 +32,12 @@ import type { Renderer } from '../Renderer'; */ export class MaskSystem implements ISystem { + /** @ignore */ + static extension: ExtensionMetadata = { + type: ExtensionType.RendererSystem, + name: 'mask', + }; + /** * Flag to enable scissor masking. * @default true diff --git a/packages/core/src/mask/ScissorSystem.ts b/packages/core/src/mask/ScissorSystem.ts index 8b6fb594d6..3323bba6d3 100644 --- a/packages/core/src/mask/ScissorSystem.ts +++ b/packages/core/src/mask/ScissorSystem.ts @@ -3,6 +3,7 @@ import { AbstractMaskSystem } from './AbstractMaskSystem'; import type { Renderer } from '../Renderer'; import type { MaskData } from './MaskData'; import { Matrix, Rectangle } from '@pixi/math'; +import { ExtensionMetadata, ExtensionType } from '../extensions'; const tempMatrix = new Matrix(); const rectPool: Rectangle[] = []; @@ -17,6 +18,12 @@ const rectPool: Rectangle[] = []; */ export class ScissorSystem extends AbstractMaskSystem { + /** @ignore */ + static extension: ExtensionMetadata = { + type: ExtensionType.RendererSystem, + name: 'scissor', + }; + /** * @param {PIXI.Renderer} renderer - The renderer this System works for. */ diff --git a/packages/core/src/mask/StencilSystem.ts b/packages/core/src/mask/StencilSystem.ts index e5537e804a..6f72a8fa36 100644 --- a/packages/core/src/mask/StencilSystem.ts +++ b/packages/core/src/mask/StencilSystem.ts @@ -2,6 +2,7 @@ import { AbstractMaskSystem } from './AbstractMaskSystem'; import type { Renderer } from '../Renderer'; import type { IMaskTarget, MaskData } from './MaskData'; +import { ExtensionMetadata, ExtensionType } from '../extensions'; /** * System plugin to the renderer to manage stencils (used for masks). @@ -9,6 +10,12 @@ import type { IMaskTarget, MaskData } from './MaskData'; */ export class StencilSystem extends AbstractMaskSystem { + /** @ignore */ + static extension: ExtensionMetadata = { + type: ExtensionType.RendererSystem, + name: 'stencil', + }; + /** * @param renderer - The renderer this System works for. */ diff --git a/packages/core/src/plugin/PluginSystem.ts b/packages/core/src/plugin/PluginSystem.ts index a6cb8135a4..4ba2eaca76 100644 --- a/packages/core/src/plugin/PluginSystem.ts +++ b/packages/core/src/plugin/PluginSystem.ts @@ -1,3 +1,4 @@ +import { ExtensionMetadata, ExtensionType } from '../extensions'; import { IRenderer } from '../IRenderer'; import { Renderer } from '../Renderer'; import { ISystem } from '../system/ISystem'; @@ -23,6 +24,15 @@ export interface IRendererPluginConstructor */ export class PluginSystem implements ISystem { + /** @ignore */ + static extension: ExtensionMetadata = { + type: [ + ExtensionType.RendererSystem, + ExtensionType.CanvasRendererSystem + ], + name: '_plugin', + }; + /** * Collection of plugins. * @readonly diff --git a/packages/core/src/projection/ProjectionSystem.ts b/packages/core/src/projection/ProjectionSystem.ts index 8c1390e66c..8b661c9165 100644 --- a/packages/core/src/projection/ProjectionSystem.ts +++ b/packages/core/src/projection/ProjectionSystem.ts @@ -3,6 +3,7 @@ import { Matrix } from '@pixi/math'; import type { ISystem } from '../system/ISystem'; import type { Rectangle } from '@pixi/math'; import type { Renderer } from '../Renderer'; +import { ExtensionMetadata, ExtensionType } from '../extensions'; /** * System plugin to the renderer to manage the projection matrix. @@ -13,6 +14,12 @@ import type { Renderer } from '../Renderer'; */ export class ProjectionSystem implements ISystem { + /** @ignore */ + static extension: ExtensionMetadata = { + type: ExtensionType.RendererSystem, + name: 'projection', + }; + /** * The destination frame used to calculate the current projection matrix. * diff --git a/packages/core/src/render/ObjectRendererSystem.ts b/packages/core/src/render/ObjectRendererSystem.ts index c4b88dcbcd..04e1c8570b 100644 --- a/packages/core/src/render/ObjectRendererSystem.ts +++ b/packages/core/src/render/ObjectRendererSystem.ts @@ -3,6 +3,7 @@ import { IRenderableObject, IRendererRenderOptions } from '../IRenderer'; import { ISystem } from '../system/ISystem'; import { Renderer } from '../Renderer'; import { RenderTexture } from '../renderTexture/RenderTexture'; +import { ExtensionMetadata, ExtensionType } from '../extensions'; /** * system that provides a render function that focussing on rendering Pixi Scene Graph objects @@ -11,6 +12,12 @@ import { RenderTexture } from '../renderTexture/RenderTexture'; */ export class ObjectRendererSystem implements ISystem { + /** @ignore */ + static extension: ExtensionMetadata = { + type: ExtensionType.RendererSystem, + name: 'objectRenderer', + }; + renderer: Renderer; /** diff --git a/packages/core/src/renderTexture/GenerateTextureSystem.ts b/packages/core/src/renderTexture/GenerateTextureSystem.ts index 84a4a9219c..6650cc4579 100644 --- a/packages/core/src/renderTexture/GenerateTextureSystem.ts +++ b/packages/core/src/renderTexture/GenerateTextureSystem.ts @@ -1,5 +1,6 @@ import { MSAA_QUALITY, SCALE_MODES } from '@pixi/constants'; import { Matrix, Rectangle, Transform } from '@pixi/math'; +import { ExtensionMetadata, ExtensionType } from '../extensions'; import { IRenderer, IRenderableContainer, IRenderableObject } from '../IRenderer'; import { ISystem } from '../system/ISystem'; import { RenderTexture } from './RenderTexture'; @@ -28,6 +29,15 @@ export interface IGenerateTextureOptions */ export class GenerateTextureSystem implements ISystem { + /** @ignore */ + static extension: ExtensionMetadata = { + type: [ + ExtensionType.RendererSystem, + ExtensionType.CanvasRendererSystem + ], + name: 'textureGenerator', + }; + renderer: IRenderer; private readonly _tempMatrix: Matrix; diff --git a/packages/core/src/renderTexture/RenderTextureSystem.ts b/packages/core/src/renderTexture/RenderTextureSystem.ts index f386afae0c..6188872006 100644 --- a/packages/core/src/renderTexture/RenderTextureSystem.ts +++ b/packages/core/src/renderTexture/RenderTextureSystem.ts @@ -7,6 +7,7 @@ import type { RenderTexture } from './RenderTexture'; import type { BaseRenderTexture } from './BaseRenderTexture'; import type { MaskData } from '../mask/MaskData'; import type { ISize } from '@pixi/math'; +import { ExtensionMetadata, ExtensionType } from '../extensions'; // Temporary rectangle for assigned sourceFrame or destinationFrame const tempRect = new Rectangle(); @@ -34,7 +35,13 @@ const tempRect2 = new Rectangle(); */ export class RenderTextureSystem implements ISystem { -/* eslint-enable max-len */ + /** @ignore */ + static extension: ExtensionMetadata = { + type: ExtensionType.RendererSystem, + name: 'renderTexture', + }; + + /* eslint-enable max-len */ /** * List of masks for the {@link PIXI.StencilSystem}. diff --git a/packages/core/src/shader/ShaderSystem.ts b/packages/core/src/shader/ShaderSystem.ts index f3fda3d3b2..0228a3c205 100644 --- a/packages/core/src/shader/ShaderSystem.ts +++ b/packages/core/src/shader/ShaderSystem.ts @@ -12,6 +12,7 @@ import { generateUniformBufferSync } from './utils/generateUniformBufferSync'; import { generateProgram } from './utils/generateProgram'; import { IRenderingContext } from '../IRenderer'; +import { ExtensionMetadata, ExtensionType } from '../extensions'; let UID = 0; // default sync data so we don't create a new one each time! @@ -23,6 +24,12 @@ const defaultSyncData = { textureCount: 0, uboCount: 0 }; */ export class ShaderSystem implements ISystem { + /** @ignore */ + static extension: ExtensionMetadata = { + type: ExtensionType.RendererSystem, + name: 'shader', + }; + /** * The current WebGL rendering context. * @member {WebGLRenderingContext} diff --git a/packages/core/src/startup/StartupSystem.ts b/packages/core/src/startup/StartupSystem.ts index 0a8e38f5e9..8f2143041d 100644 --- a/packages/core/src/startup/StartupSystem.ts +++ b/packages/core/src/startup/StartupSystem.ts @@ -5,6 +5,7 @@ import type { IRendererPlugins } from '../plugin/PluginSystem'; import { IRenderer } from '../IRenderer'; import { ISystem } from '../system/ISystem'; import { ContextOptions } from '../systems'; +import { ExtensionMetadata, ExtensionType } from '../extensions'; // TODO this can be infered by good use of generics in the future.. export interface StartupOptions extends Record @@ -20,6 +21,15 @@ export interface StartupOptions extends Record * @memberof PIXI */export class StartupSystem implements ISystem { + /** @ignore */ + static extension: ExtensionMetadata = { + type: [ + ExtensionType.RendererSystem, + ExtensionType.CanvasRendererSystem + ], + name: 'startup', + }; + readonly renderer: IRenderer; constructor(renderer: IRenderer) diff --git a/packages/core/src/state/StateSystem.ts b/packages/core/src/state/StateSystem.ts index 91aa6deba5..be7fcd9e29 100644 --- a/packages/core/src/state/StateSystem.ts +++ b/packages/core/src/state/StateSystem.ts @@ -4,6 +4,7 @@ import { BLEND_MODES } from '@pixi/constants'; import type { ISystem } from '../system/ISystem'; import { IRenderingContext } from '../IRenderer'; +import { ExtensionMetadata, ExtensionType } from '../extensions'; const BLEND = 0; const OFFSET = 1; @@ -18,6 +19,12 @@ const DEPTH_MASK = 5; */ export class StateSystem implements ISystem { + /** @ignore */ + static extension: ExtensionMetadata = { + type: ExtensionType.RendererSystem, + name: 'state', + }; + /** * State ID * @readonly diff --git a/packages/core/src/textures/TextureGCSystem.ts b/packages/core/src/textures/TextureGCSystem.ts index 4f2bc76268..38eb9316df 100644 --- a/packages/core/src/textures/TextureGCSystem.ts +++ b/packages/core/src/textures/TextureGCSystem.ts @@ -5,6 +5,7 @@ import type { ISystem } from '../system/ISystem'; import type { Renderer } from '../Renderer'; import type { Texture } from './Texture'; import type { RenderTexture } from '../renderTexture/RenderTexture'; +import { ExtensionMetadata, ExtensionType } from '../extensions'; export interface IUnloadableTexture { @@ -19,6 +20,12 @@ export interface IUnloadableTexture */ export class TextureGCSystem implements ISystem { + /** @ignore */ + static extension: ExtensionMetadata = { + type: ExtensionType.RendererSystem, + name: 'textureGC', + }; + /** * Count * @readonly diff --git a/packages/core/src/textures/TextureSystem.ts b/packages/core/src/textures/TextureSystem.ts index 3f27ba4f1f..493b29bcd4 100644 --- a/packages/core/src/textures/TextureSystem.ts +++ b/packages/core/src/textures/TextureSystem.ts @@ -9,6 +9,7 @@ import type { Texture } from './Texture'; import type { Renderer } from '../Renderer'; import { IRenderingContext } from '../IRenderer'; +import { ExtensionMetadata, ExtensionType } from '../extensions'; /** * System plugin to the renderer to manage textures. @@ -16,6 +17,12 @@ import { IRenderingContext } from '../IRenderer'; */ export class TextureSystem implements ISystem { + /** @ignore */ + static extension: ExtensionMetadata = { + type: ExtensionType.RendererSystem, + name: 'texture', + }; + /** * Bound textures. * @readonly diff --git a/packages/core/src/view/ViewSystem.ts b/packages/core/src/view/ViewSystem.ts index 9c1dcc4eab..d3dd0e518f 100644 --- a/packages/core/src/view/ViewSystem.ts +++ b/packages/core/src/view/ViewSystem.ts @@ -1,5 +1,6 @@ import { Rectangle } from '@pixi/math'; import { settings } from '@pixi/settings'; +import { ExtensionMetadata, ExtensionType } from '../extensions'; import { IRenderer } from '../IRenderer'; import { ISystem } from '../system/ISystem'; @@ -28,6 +29,15 @@ export interface ViewOptions */ export class ViewSystem implements ISystem { + /** @ignore */ + static extension: ExtensionMetadata = { + type: [ + ExtensionType.RendererSystem, + ExtensionType.CanvasRendererSystem + ], + name: '_view', + }; + private renderer: IRenderer; /**