Core PixiJS WebGL rendering library providing essential 2D graphics infrastructure and hardware-accelerated rendering capabilities.
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Core rendering functionality providing WebGL context management, render loops, and automatic renderer detection. The rendering system is the foundation of @pixi/core, handling the WebGL pipeline and providing fallback to Canvas when needed.
Abstract base class that defines the common interface for all renderers, providing basic functionality like canvas management, resolution handling, and plugin support.
/**
* Abstract base class for renderers extending EventEmitter
* Provides common functionality for WebGL and Canvas renderers
*/
abstract class AbstractRenderer extends EventEmitter {
/** The resolution/device pixel ratio of the renderer */
resolution: number;
/** Whether to clear the canvas before rendering */
clearBeforeRender?: boolean;
/** Renderer configuration options */
options: IRendererOptions;
/** The renderer type (WEBGL or CANVAS) */
type: RENDERER_TYPE;
/** Screen dimensions as Rectangle */
screen: Rectangle;
/** The HTML canvas element */
view: HTMLCanvasElement;
/** Collection of renderer plugins */
plugins: IRendererPlugins;
/** Context alpha setting */
useContextAlpha: boolean | 'notMultiplied';
/** Auto-resize CSS dimensions flag */
autoDensity: boolean;
/** Preserve drawing buffer flag for screenshots */
preserveDrawingBuffer: boolean;
/** Background color as hex number */
backgroundColor: number;
/** Background alpha transparency (0-1) */
backgroundAlpha: number;
/**
* Create a new AbstractRenderer
* @param type - The renderer type
* @param options - Renderer configuration options
*/
constructor(type: RENDERER_TYPE, options?: IRendererOptions);
/** Initialize plugins from static map */
initPlugins(staticMap: IRendererPlugins): void;
/**
* Resize the renderer and canvas
* @param desiredScreenWidth - Target width
* @param desiredScreenHeight - Target height
*/
resize(desiredScreenWidth: number, desiredScreenHeight: number): void;
/**
* Generate a texture from a display object
* @param displayObject - Object to render to texture
* @param options - Generation options
*/
generateTexture(displayObject: IRenderableObject, options?: IGenerateTextureOptions): RenderTexture;
/**
* Destroy the renderer and cleanup resources
* @param removeView - Remove canvas from DOM
*/
destroy(removeView?: boolean): void;
/** Abstract: Add a system to the renderer */
abstract addSystem(ClassRef: ISystemConstructor, name: string): this;
/** Abstract: Render a display object */
abstract render(displayObject: IRenderableObject, options?: IRendererRenderOptions): void;
}
interface IRendererOptions {
/** Canvas element to render to */
view?: HTMLCanvasElement;
/** Device pixel ratio */
resolution?: number;
/** Auto-resize canvas CSS */
autoDensity?: boolean;
/** Background color (hex) */
backgroundColor?: number;
/** Background alpha (0-1) */
backgroundAlpha?: number;
/** Clear before rendering */
clearBeforeRender?: boolean;
/** WebGL preserve drawing buffer */
preserveDrawingBuffer?: boolean;
/** Canvas width */
width?: number;
/** Canvas height */
height?: number;
/** Enable antialiasing */
antialias?: boolean;
}
interface IRendererPlugins {
[key: string]: any;
}
interface IRendererRenderOptions {
/** Render texture to render to */
renderTexture?: RenderTexture;
/** Clear before rendering */
clear?: boolean;
/** Transform matrix to apply */
transform?: Matrix;
/** Skip updating transforms */
skipUpdateTransform?: boolean;
}
interface IGenerateTextureOptions {
/** Texture scale mode */
scaleMode?: SCALE_MODES;
/** Resolution for generated texture */
resolution?: number;
/** Region to capture */
region?: Rectangle;
/** Multisampling level */
multisample?: MSAA_QUALITY;
}WebGL-specific renderer implementation that extends AbstractRenderer with full WebGL rendering capabilities and system management.
/**
* WebGL renderer providing hardware-accelerated 2D rendering
* Manages WebGL context, systems, and rendering pipeline
*/
class Renderer extends AbstractRenderer {
/** WebGL rendering context */
gl: IRenderingContext;
/** Global shader uniforms */
globalUniforms: UniformGroup;
/** Unique WebGL context identifier */
CONTEXT_UID: number;
/** Flag indicating if rendering to screen */
renderingToScreen: boolean;
/** MSAA quality level */
multisample: MSAA_QUALITY;
/** Event runners for system communication */
runners: {[key: string]: Runner};
// Rendering systems (available as properties)
/** Mask rendering system */
mask: MaskSystem;
/** WebGL context management system */
context: ContextSystem;
/** WebGL state management system */
state: StateSystem;
/** Shader compilation and management system */
shader: ShaderSystem;
/** Texture management system */
texture: TextureSystem;
/** Buffer management system */
buffer: BufferSystem;
/** Geometry rendering system */
geometry: GeometrySystem;
/** Framebuffer management system */
framebuffer: FramebufferSystem;
/** Scissor testing system */
scissor: ScissorSystem;
/** Stencil testing system */
stencil: StencilSystem;
/** Projection matrix system */
projection: ProjectionSystem;
/** Texture garbage collection system */
textureGC: TextureGCSystem;
/** Filter rendering system */
filter: FilterSystem;
/** Render texture system */
renderTexture: RenderTextureSystem;
/** Batch rendering system */
batch: BatchSystem;
/**
* Create a new WebGL Renderer
* @param options - Renderer configuration
*/
constructor(options?: IRendererOptions);
/**
* Create renderer with WebGL support detection
* @param options - Renderer options
*/
static create(options?: IRendererOptions): AbstractRenderer;
/**
* Add a system to the renderer
* @param ClassRef - System constructor
* @param name - System name for access
*/
addSystem(ClassRef: ISystemConstructor, name: string): this;
/**
* Render a display object to the canvas or render texture
* @param displayObject - Object to render
* @param options - Render options
*/
render(displayObject: IRenderableObject, options?: IRendererRenderOptions): void;
/**
* Resize renderer and update systems
* @param desiredScreenWidth - Target width
* @param desiredScreenHeight - Target height
*/
resize(desiredScreenWidth: number, desiredScreenHeight: number): void;
/** Reset WebGL state to defaults */
reset(): this;
/** Clear the frame buffer */
clear(): void;
/**
* Destroy renderer and cleanup all resources
* @param removeView - Remove canvas from DOM
*/
destroy(removeView?: boolean): void;
}Usage Examples:
import { Renderer } from "@pixi/core";
// Create WebGL renderer with options
const renderer = new Renderer({
width: 800,
height: 600,
backgroundColor: 0x1099bb,
resolution: window.devicePixelRatio,
antialias: true
});
document.body.appendChild(renderer.view);
// Access rendering systems
console.log(renderer.gl); // WebGL context
renderer.state.setState(new State()); // Set WebGL state
renderer.clear(); // Clear framebuffer
// Render a display object
renderer.render(myDisplayObject);
// Resize renderer
renderer.resize(1024, 768);Utility function that automatically detects WebGL support and creates the appropriate renderer, falling back to Canvas if WebGL is unavailable.
/**
* Automatically detects and creates the best available renderer
* Falls back to Canvas renderer if WebGL is not supported
* @param options - Renderer configuration options
* @returns AbstractRenderer instance (Renderer or CanvasRenderer)
*/
function autoDetectRenderer(options?: IRendererOptionsAuto): AbstractRenderer;
interface IRendererOptionsAuto extends IRendererOptions {
/** Force canvas renderer even if WebGL is available */
forceCanvas?: boolean;
}Usage Examples:
import { autoDetectRenderer } from "@pixi/core";
// Auto-detect best renderer
const renderer = autoDetectRenderer({
width: 800,
height: 600,
backgroundColor: 0x1099bb
});
// Force Canvas renderer
const canvasRenderer = autoDetectRenderer({
width: 800,
height: 600,
forceCanvas: true
});
// Check renderer type
if (renderer.type === RENDERER_TYPE.WEBGL) {
console.log("Using WebGL renderer");
} else {
console.log("Using Canvas renderer");
}interface ISystemConstructor<R = Renderer> {
new (renderer: R): ISystem;
}
interface IRenderableObject {
parent: IRenderableContainer;
enableTempParent(): IRenderableContainer;
updateTransform(): void;
disableTempParent(parent: IRenderableContainer): void;
render(renderer: Renderer): void;
}
interface IRenderingContext extends WebGL2RenderingContext {}
enum RENDERER_TYPE {
UNKNOWN = 0,
WEBGL = 1,
CANVAS = 2
}
enum MSAA_QUALITY {
NONE = 0,
LOW = 2,
MEDIUM = 4,
HIGH = 8
}Install with Tessl CLI
npx tessl i tessl/npm-pixi--core