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
Modular rendering systems that handle specific aspects of the WebGL rendering pipeline. Systems provide specialized functionality for masks, textures, buffers, geometry, filters, and other rendering concerns.
Base interface that all rendering systems implement.
/**
* Base interface for all rendering systems
* Systems handle specific aspects of the WebGL pipeline
*/
interface ISystem {
/** Destroy system and cleanup resources */
destroy(): void;
}
interface ISystemConstructor<R = Renderer> {
/** System constructor signature */
new (renderer: R): ISystem;
}The renderer includes these essential systems for WebGL rendering:
// Available on Renderer instance
interface RendererSystems {
/** Mask rendering and stencil management */
mask: MaskSystem;
/** WebGL context management */
context: ContextSystem;
/** WebGL state tracking and optimization */
state: StateSystem;
/** Shader compilation and management */
shader: ShaderSystem;
/** Texture uploading and binding */
texture: TextureSystem;
/** Vertex buffer management */
buffer: BufferSystem;
/** Geometry and vertex array objects */
geometry: GeometrySystem;
/** Framebuffer and render target management */
framebuffer: FramebufferSystem;
/** Scissor testing */
scissor: ScissorSystem;
/** Stencil buffer operations */
stencil: StencilSystem;
/** Projection matrix management */
projection: ProjectionSystem;
/** Texture garbage collection */
textureGC: TextureGCSystem;
/** Filter rendering pipeline */
filter: FilterSystem;
/** Render texture management */
renderTexture: RenderTextureSystem;
/** Batch rendering optimization */
batch: BatchSystem;
}Manages mask rendering using stencil buffer or scissor testing for clipping graphics.
/**
* MaskSystem handles mask rendering and clipping
* Uses stencil buffer and scissor testing for graphics clipping
*/
class MaskSystem implements ISystem {
/** Whether masking is enabled */
enableScissor: boolean;
/** Current alpha mask pool */
alphaMaskPool: SpriteMaskFilter[];
/** Current alpha mask index */
alphaMaskIndex: number;
constructor(renderer: Renderer);
/**
* Apply mask to current rendering
* @param target - Object being masked
* @param maskData - Mask information
*/
push(target: IRenderableObject, maskData: MaskData): void;
/**
* Remove current mask
* @param target - Object being unmasked
* @param maskData - Mask information
*/
pop(target: IRenderableObject, maskData?: MaskData): void;
/**
* Setup scissor mask
* @param maskData - Scissor mask data
*/
pushScissorMask(maskData: MaskData): void;
/** Remove scissor mask */
popScissorMask(): void;
/**
* Setup stencil mask
* @param maskData - Stencil mask data
*/
pushStencilMask(maskData: MaskData): void;
/** Remove stencil mask */
popStencilMask(): void;
/** Destroy mask system */
destroy(): void;
}Manages GPU texture binding, uploading, and caching for efficient texture operations.
/**
* TextureSystem manages GPU texture operations
* Handles binding, uploading, and texture unit management
*/
class TextureSystem implements ISystem {
/** Maximum texture units available */
maxTextures: number;
/** Current texture bindings */
boundTextures: BaseTexture[];
/** Current active texture unit */
currentLocation: number;
/** Unknown texture for missing textures */
unknownTexture: BaseTexture;
/** Empty texture array for batch rendering */
emptyTextures: BaseTexture[];
constructor(renderer: Renderer);
/**
* Bind texture to specific texture unit
* @param texture - Texture to bind
* @param location - Texture unit (0-31)
*/
bind(texture: Texture | BaseTexture, location?: number): void;
/** Reset all texture bindings */
reset(): void;
/** Unbind all textures */
unbind(texture?: BaseTexture): void;
/** Destroy texture system */
destroy(): void;
}Handles vertex array objects, attribute binding, and geometry rendering.
/**
* GeometrySystem manages vertex array objects and attribute binding
* Handles geometry rendering and vertex buffer setup
*/
class GeometrySystem implements ISystem {
/** Whether VAOs are supported */
hasVao: boolean;
/** Whether instanced rendering is supported */
hasInstance: boolean;
/** Whether multiple render targets are supported */
canUseUInt32ElementIndex: boolean;
constructor(renderer: Renderer);
/**
* Bind geometry for rendering
* @param geometry - Geometry to bind
* @param shader - Shader program to use
*/
bind(geometry?: Geometry, shader?: Shader): void;
/** Reset geometry system state */
reset(): void;
/** Unbind current geometry */
unbind(): void;
/**
* Draw bound geometry
* @param type - Primitive type (TRIANGLES, etc.)
* @param size - Number of elements to draw
* @param start - Starting element index
* @param instanceCount - Number of instances
*/
draw(type: DRAW_MODES, size?: number, start?: number, instanceCount?: number): void;
/** Destroy geometry system */
destroy(): void;
}Tracks and optimizes WebGL state changes to minimize GPU state switching overhead.
/**
* StateSystem tracks WebGL state changes for optimization
* Minimizes redundant state changes and GPU overhead
*/
class StateSystem implements ISystem {
/** Active state object */
stateId: number;
/** Polygon offset state */
polygonOffset: number;
/** Current blend mode */
blendMode: BLEND_MODES;
/** Whether state is dirty */
_blendEq: boolean;
constructor(renderer: Renderer);
/**
* Set WebGL state
* @param state - State object to apply
*/
setState(state: State): void;
/**
* Set blend mode
* @param value - Blend mode to apply
*/
setBlendMode(value: BLEND_MODES): void;
/**
* Set polygon offset
* @param value - Polygon offset value
* @param scale - Polygon offset scale
*/
setOffset(value: number, scale: number): void;
/** Reset state to defaults */
reset(): void;
/** Destroy state system */
destroy(): void;
}Manages WebGL buffer objects for vertex and index data.
/**
* BufferSystem manages WebGL buffer objects
* Handles vertex and index buffer creation and updates
*/
class BufferSystem implements ISystem {
/** Manages VAO state */
managedBuffers: {[key: number]: Buffer};
/** Bound buffer cache */
boundBufferBases: {[key: number]: Buffer};
constructor(renderer: Renderer);
/**
* Bind buffer to WebGL context
* @param buffer - Buffer to bind
*/
bind(buffer: Buffer): void;
/**
* Update buffer data
* @param buffer - Buffer to update
*/
update(buffer: Buffer): void;
/** Dispose of buffer resources */
dispose(buffer: Buffer, contextLost?: boolean): void;
/** Dispose all managed buffers */
disposeAll(contextLost?: boolean): void;
/** Destroy buffer system */
destroy(): void;
}Usage Examples:
import { Renderer } from "@pixi/core";
// Access systems through renderer
const renderer = new Renderer();
// Use texture system
renderer.texture.bind(myTexture, 0); // Bind to texture unit 0
renderer.texture.bind(normalMap, 1); // Bind to texture unit 1
// Use geometry system
renderer.geometry.bind(myGeometry, myShader);
renderer.geometry.draw(DRAW_MODES.TRIANGLES, geometry.getSize());
// Use state system
const state = new State();
state.blendMode = BLEND_MODES.ADD;
renderer.state.setState(state);
// Use mask system
const maskData = new MaskData(maskSprite);
renderer.mask.push(maskedObject, maskData);
// ... render masked content ...
renderer.mask.pop(maskedObject);
// Use buffer system (usually automatic)
const buffer = new Buffer(vertexData);
renderer.buffer.update(buffer); // Upload to GPU
// Use framebuffer system
const framebuffer = new Framebuffer(256, 256);
renderer.framebuffer.bind(framebuffer);
// ... render to framebuffer ...
renderer.framebuffer.bind(null); // Bind default framebufferSystem Integration:
// Systems work together for complete rendering
function renderMaskedSprite(sprite, mask) {
// 1. Set up mask
const maskData = new MaskData(mask);
renderer.mask.push(sprite, maskData);
// 2. Bind texture
renderer.texture.bind(sprite.texture);
// 3. Set blend state
const state = State.for2d();
state.blendMode = sprite.blendMode;
renderer.state.setState(state);
// 4. Bind geometry
renderer.geometry.bind(sprite.geometry, sprite.shader);
// 5. Draw
renderer.geometry.draw(DRAW_MODES.TRIANGLES);
// 6. Clean up mask
renderer.mask.pop(sprite);
}enum DRAW_MODES {
POINTS = 0,
LINES = 1,
LINE_LOOP = 2,
LINE_STRIP = 3,
TRIANGLES = 4,
TRIANGLE_STRIP = 5,
TRIANGLE_FAN = 6
}
interface MaskData {
type: MASK_TYPES;
autoDetect: boolean;
maskObject: IRenderableObject;
pooled: boolean;
isMaskData: boolean;
resolution: number;
multisample: MSAA_QUALITY;
enabled: boolean;
colorMask: number;
}
enum MASK_TYPES {
NONE = 0,
SCISSOR = 1,
STENCIL = 2,
SPRITE = 3,
COLOR = 4
}Install with Tessl CLI
npx tessl i tessl/npm-pixi--core