import type { RENDERER_TYPE } from 'pixijs/constants'; import type { Matrix, Rectangle, Transform } from 'pixijs/math'; import type { ICanvas } from 'pixijs/settings'; import type { IRendererPlugins } from './plugin/PluginSystem'; import type { IGenerateTextureOptions } from './renderTexture/GenerateTextureSystem'; import type { RenderTexture } from './renderTexture/RenderTexture'; import type { SystemManager } from './system/SystemManager'; import type { ImageSource } from './textures/BaseTexture'; /** * Interface for DisplayObject to interface with Renderer. * The minimum APIs needed to implement a renderable object. * @memberof PIXI */ export interface IRenderableObject extends GlobalMixins.IRenderableObject { /** Object must have a parent container */ parent: IRenderableContainer; /** Object must have a transform */ transform: Transform; /** Before method for transform updates */ enableTempParent(): IRenderableContainer; /** Update the transforms */ updateTransform(): void; /** After method for transform updates */ disableTempParent(parent: IRenderableContainer): void; /** Render object directly */ render(renderer: IRenderer): void; } /** * Interface for Container to interface with Renderer. * @memberof PIXI */ export interface IRenderableContainer extends IRenderableObject { /** Get Local bounds for container */ getLocalBounds(rect?: Rectangle, skipChildrenUpdate?: boolean): Rectangle; } /** * Mixed WebGL1 / WebGL2 rendering context. Either it's WebGL2, either it's WebGL1 with PixiJS polyfills on it. * @memberof PIXI */ export interface IRenderingContext extends WebGL2RenderingContext { texImage2D(target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, border: GLint, format: GLenum, type: GLenum, pixels: ArrayBufferView | null): void; texImage2D(target: GLenum, level: GLint, internalformat: GLint, format: GLenum, type: GLenum, source: TexImageSource | ImageSource): void; texImage2D(target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, border: GLint, format: GLenum, type: GLenum, pboOffset: GLintptr): void; texImage2D(target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, border: GLint, format: GLenum, type: GLenum, source: TexImageSource | ImageSource): void; texImage2D(target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, border: GLint, format: GLenum, type: GLenum, srcData: ArrayBufferView, srcOffset: GLuint): void; texSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, type: GLenum, pixels: ArrayBufferView | null): void; texSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, format: GLenum, type: GLenum, source: TexImageSource | ImageSource): void; texSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, type: GLenum, pboOffset: GLintptr): void; texSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, type: GLenum, source: TexImageSource | ImageSource): void; texSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, type: GLenum, srcData: ArrayBufferView, srcOffset: GLuint): void; texSubImage3D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, format: GLenum, type: GLenum, pboOffset: GLintptr): void; texSubImage3D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, format: GLenum, type: GLenum, source: TexImageSource | ImageSource): void; texSubImage3D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, format: GLenum, type: GLenum, srcData: ArrayBufferView | null, srcOffset?: GLuint): void; } /** * Renderer options supplied to constructor. * @memberof PIXI * @see PIXI.settings.RENDER_OPTIONS */ export interface IRendererOptions extends GlobalMixins.IRendererOptions { /** The canvas to use as the view. If omitted, a new canvas will be created. */ view?: ICanvas; /** * The width of the renderer's view. * @default 800 */ width?: number; /** * The height of the renderer's view. * @default 600 */ height?: number; /** * The resolution / device pixel ratio of the renderer. * @default PIXI.settings.RESOLUTION */ resolution?: number; /** * Whether the CSS dimensions of the renderer's view should be resized automatically. * @default false */ autoDensity?: boolean; /** * The background color used to clear the canvas. It accepts hex numbers (e.g. `0xff0000`), * hex strings (e.g. `'#f00'` or `'#ff0000'`) or color names (e.g. `'red'`). * @default 0x000000 */ backgroundColor?: number | string; /** Alias for `backgroundColor`. */ background?: number | string; /** * Transparency of the background color, value from `0` (fully transparent) to `1` (fully opaque). * @default 1 */ backgroundAlpha?: number; /** * **Deprecated since 7.0.0, use `premultipliedAlpha` and `backgroundAlpha` instead.** * * Pass-through value for canvas' context attribute `alpha`. This option is for cases where the * canvas needs to be opaque, possibly for performance reasons on some older devices. * If you want to set transparency, please use `backgroundAlpha`. * * **WebGL Only:** When set to `'notMultiplied'`, the canvas' context attribute `alpha` will be * set to `true` and `premultipliedAlpha` will be to `false`. * @default true * @deprecated since 7.0.0 */ useContextAlpha?: boolean | 'notMultiplied'; /** * Whether to clear the canvas before new render passes. * @default true */ clearBeforeRender?: boolean; /** **WebGL Only.** User-provided WebGL rendering context object. */ context?: IRenderingContext; /** * **WebGL Only.** Whether to enable anti-aliasing. This may affect performance. * @default false */ antialias?: boolean; /** * **WebGL Only.** A hint indicating what configuration of GPU is suitable for the WebGL context, * can be `'default'`, `'high-performance'` or `'low-power'`. * Setting to `'high-performance'` will prioritize rendering performance over power consumption, * while setting to `'low-power'` will prioritize power saving over rendering performance. */ powerPreference?: WebGLPowerPreference; /** * **WebGL Only.** Whether the compositor will assume the drawing buffer contains colors with premultiplied alpha. * @default true */ premultipliedAlpha?: boolean; /** * **WebGL Only.** Whether to enable drawing buffer preservation. If enabled, the drawing buffer will preserve * its value until cleared or overwritten. Enable this if you need to call `toDataUrl` on the WebGL context. * @default false */ preserveDrawingBuffer?: boolean; /** * Whether to log the version and type information of renderer to console. * @default false */ hello?: boolean; } export interface IRendererRenderOptions { renderTexture?: RenderTexture; blit?: boolean; clear?: boolean; transform?: Matrix; skipUpdateTransform?: boolean; } /** * Starard Interface for a Pixi renderer. * @memberof PIXI */ export interface IRenderer extends SystemManager, GlobalMixins.IRenderer { resize(width: number, height: number): void; render(displayObject: IRenderableObject, options?: IRendererRenderOptions): void; generateTexture(displayObject: IRenderableObject, options?: IGenerateTextureOptions): RenderTexture; destroy(removeView?: boolean): void; clear(): void; reset(): void; /** * The type of the renderer. * @see PIXI.RENDERER_TYPE */ readonly type: RENDERER_TYPE; /** * The options passed in to create a new instance of the renderer. * @type {PIXI.IRendererOptions} */ readonly options: IRendererOptions; /** When logging Pixi to the console, this is the name we will show */ readonly rendererLogId: string; /** The canvas element that everything is drawn to.*/ readonly view: VIEW; /** Flag if we are rendering to the screen vs renderTexture */ readonly renderingToScreen: boolean; /** The resolution / device pixel ratio of the renderer. */ resolution: number; /** the width of the screen */ readonly width: number; /** the height of the screen */ readonly height: number; /** * Measurements of the screen. (0, 0, screenWidth, screenHeight). * Its safe to use as filterArea or hitArea for the whole stage. */ readonly screen: Rectangle; /** the last object rendered by the renderer. Useful for other plugins like interaction managers */ readonly lastObjectRendered: IRenderableObject; /** Collection of plugins */ readonly plugins: IRendererPlugins; }