Core PixiJS WebGL rendering library providing essential 2D graphics infrastructure and hardware-accelerated rendering capabilities.
npx @tessl/cli install tessl/npm-pixi--core@6.5.0@pixi/core is the foundational WebGL rendering library of PixiJS, providing essential 2D graphics infrastructure and hardware-accelerated rendering capabilities. It offers comprehensive WebGL context management, texture systems, geometry handling, shader management, and renderer abstraction layers with automatic Canvas fallback.
npm install @pixi/coreimport {
Renderer,
AbstractRenderer,
autoDetectRenderer,
Texture,
BaseTexture,
Geometry,
Shader,
Filter,
Resource,
BufferResource,
ImageResource,
CanvasResource,
TextureMatrix,
RenderTexture,
Framebuffer
} from "@pixi/core";For CommonJS:
const {
Renderer,
AbstractRenderer,
autoDetectRenderer,
Texture,
BaseTexture,
Geometry,
Shader,
Filter,
Resource,
BufferResource,
ImageResource,
CanvasResource,
TextureMatrix,
RenderTexture,
Framebuffer
} = require("@pixi/core");import { autoDetectRenderer, Texture, Geometry, Shader } from "@pixi/core";
// Create a renderer that auto-detects WebGL support
const renderer = autoDetectRenderer({
width: 800,
height: 600,
backgroundColor: 0x1099bb
});
// Add canvas to DOM
document.body.appendChild(renderer.view);
// Create a texture from an image
const texture = Texture.from('/path/to/image.png');
// Create geometry for a quad
const geometry = new Geometry()
.addAttribute('aVertexPosition', [-1, -1, 1, -1, 1, 1, -1, 1], 2)
.addAttribute('aTextureCoord', [0, 0, 1, 0, 1, 1, 0, 1], 2)
.addIndex([0, 1, 2, 0, 2, 3]);
// Basic shader
const shader = Shader.from(`
attribute vec2 aVertexPosition;
attribute vec2 aTextureCoord;
varying vec2 vTextureCoord;
void main() {
gl_Position = vec4(aVertexPosition, 0.0, 1.0);
vTextureCoord = aTextureCoord;
}
`, `
precision mediump float;
varying vec2 vTextureCoord;
uniform sampler2D uSampler;
void main() {
gl_FragColor = texture2D(uSampler, vTextureCoord);
}
`);
// Clear and render
renderer.clear();@pixi/core is built around several key architectural components:
AbstractRenderer and Renderer provide the core rendering pipeline with WebGL context managementTexture, BaseTexture, and texture resources handle all image data and GPU texture managementGeometry, Buffer, and Attribute classes manage vertex data and GPU buffersShader, Program, and UniformGroup provide shader compilation and managementState systemFramebuffer and RenderTextureCore rendering functionality including WebGL context management, render loops, and automatic renderer detection.
abstract class AbstractRenderer extends EventEmitter {
resolution: number;
screen: Rectangle;
view: HTMLCanvasElement;
plugins: IRendererPlugins;
clearBeforeRender?: boolean;
options: IRendererOptions;
type: RENDERER_TYPE;
useContextAlpha: boolean | 'notMultiplied';
autoDensity: boolean;
preserveDrawingBuffer: boolean;
resize(desiredScreenWidth: number, desiredScreenHeight: number): void;
render(displayObject: IRenderableObject, options?: IRendererRenderOptions): void;
generateTexture(displayObject: IRenderableObject, options?: IGenerateTextureOptions): RenderTexture;
addSystem(ClassRef: ISystemConstructor, name?: string): this;
destroy(removeView?: boolean): void;
}
class Renderer extends AbstractRenderer {
gl: IRenderingContext;
globalUniforms: UniformGroup;
constructor(options?: IRendererOptions);
reset(): this;
clear(): void;
}
function autoDetectRenderer(options?: IRendererOptionsAuto): AbstractRenderer;Comprehensive texture management system supporting multiple resource types, texture atlases, and GPU texture optimization.
class Texture<R = Resource> extends EventEmitter {
static EMPTY: Texture;
static WHITE: Texture;
baseTexture: BaseTexture<R>;
frame: Rectangle;
orig: Rectangle;
trim: Rectangle;
valid: boolean;
noFrame: boolean;
defaultAnchor: Point;
uvMatrix: TextureMatrix;
rotate: number;
constructor(baseTexture: BaseTexture<R>, frame?: Rectangle, orig?: Rectangle, trim?: Rectangle, rotate?: number, anchor?: IPointData);
static from<R extends Resource = Resource>(source: TextureSource | TextureSource[], options?: IBaseTextureOptions): Texture<R>;
static fromURL<R extends Resource = Resource>(url: string, options?: IBaseTextureOptions): Promise<Texture<R>>;
static fromBuffer(buffer: Float32Array | Uint8Array, width: number, height: number): Texture<BufferResource>;
static fromLoader<R extends Resource = Resource>(source: HTMLImageElement | HTMLCanvasElement | string, imageUrl: string, name?: string, options?: IBaseTextureOptions): Promise<Texture<R>>;
static addToCache(texture: Texture, id: string): void;
static removeFromCache(texture: string | Texture): Texture | null;
clone(): Texture;
update(): void;
destroy(destroyBase?: boolean): void;
}
class BaseTexture<R = Resource> extends EventEmitter {
width: number;
height: number;
resolution: number;
resource: R;
update(): void;
setSize(desiredWidth: number, desiredHeight: number, resolution?: number): this;
destroy(): void;
}Vertex data management with GPU buffer optimization, attribute handling, and efficient geometry rendering.
class Geometry extends EventEmitter {
buffers: Buffer[];
indexBuffer: Buffer;
attributes: {[key: string]: Attribute};
addAttribute(id: string, buffer: ArrayLike<number> | Buffer | Attribute, size?: number): this;
addIndex(buffer: ArrayLike<number> | Buffer): this;
getAttribute(id: string): Attribute;
getBuffer(id: string): Buffer;
clone(): Geometry;
destroy(): void;
}
class Buffer {
data: IArrayBuffer;
type: BUFFER_TYPE;
constructor(data?: IArrayBuffer, _static?: boolean, index?: boolean);
update(data?: IArrayBuffer): void;
destroy(): void;
}Shader compilation, uniform management, and program linking with full WebGL shader support.
class Shader extends EventEmitter {
program: Program;
uniforms: Dict<any>;
constructor(program: Program, uniforms?: Dict<any>);
static from(vertexSrc?: string, fragmentSrc?: string, uniforms?: Dict<any>): Shader;
destroy(): void;
}
class Program {
vertexSrc: string;
fragmentSrc: string;
constructor(vertexSrc?: string, fragmentSrc?: string, name?: string);
static from(vertexSrc?: string, fragmentSrc?: string, name?: string): Program;
}
class UniformGroup<LAYOUT = Dict<any>> extends EventEmitter {
uniforms: LAYOUT;
constructor(uniforms: LAYOUT | Buffer, _static?: boolean, _id?: number);
update(): void;
}Modular rendering systems that handle specific aspects of the WebGL rendering pipeline.
interface ISystem {
destroy(): void;
}
// Core systems available on Renderer
interface RendererSystems {
mask: MaskSystem;
context: ContextSystem;
state: StateSystem;
shader: ShaderSystem;
texture: TextureSystem;
buffer: BufferSystem;
geometry: GeometrySystem;
framebuffer: FramebufferSystem;
filter: FilterSystem;
batch: BatchSystem;
// ... additional systems
}Post-processing effects and rendering filters for advanced visual effects.
class Filter extends Shader {
padding: number;
multisample: MSAA_QUALITY;
enabled: boolean;
autoFit: boolean;
constructor(vertexSrc?: string, fragmentSrc?: string, uniforms?: Dict<any>);
apply(filterManager: FilterSystem, input: RenderTexture, output: RenderTexture, clearMode?: CLEAR_MODES): void;
}
class FilterState {
renderTexture: RenderTexture;
target: IRenderableObject;
filters: Filter[];
constructor();
clear(): void;
}WebGL state tracking and optimization to minimize state changes and improve performance.
class State {
data: number;
blendMode: BLEND_MODES;
polygonOffset: number;
constructor();
clone(): State;
reset(): void;
}Off-screen rendering capabilities with render textures and framebuffer management.
class Framebuffer {
width: number;
height: number;
multisample: MSAA_QUALITY;
stencil: boolean;
depth: boolean;
constructor(width: number, height: number);
addColorTexture(index?: number, texture?: BaseTexture<Resource>): this;
resize(width: number, height: number): void;
destroy(): void;
}
class RenderTexture extends Texture {
static create(options: IBaseRenderTextureOptions): RenderTexture;
resize(desiredWidth: number, desiredHeight: number, resizeBaseTexture?: boolean): void;
}Common types and interfaces used throughout the @pixi/core API:
interface IRenderableObject {
parent: IRenderableContainer;
enableTempParent(): IRenderableContainer;
updateTransform(): void;
disableTempParent(parent: IRenderableContainer): void;
render(renderer: Renderer): void;
}
interface IRenderableContainer extends IRenderableObject {
children: IRenderableObject[];
addChild(child: IRenderableObject): IRenderableObject;
removeChild(child: IRenderableObject): IRenderableObject;
}
interface IRenderingContext extends WebGL2RenderingContext {}
interface IRendererRenderOptions {
renderTexture?: RenderTexture;
clear?: boolean;
transform?: Matrix;
skipUpdateTransform?: boolean;
}
interface IGenerateTextureOptions {
scaleMode?: SCALE_MODES;
resolution?: number;
region?: Rectangle;
multisample?: MSAA_QUALITY;
}
interface ISystemConstructor {
new (renderer: Renderer): ISystem;
}
interface ISystem {
destroy(): void;
}
interface IRendererOptions {
view?: HTMLCanvasElement;
resolution?: number;
autoDensity?: boolean;
backgroundColor?: number;
backgroundAlpha?: number;
clearBeforeRender?: boolean;
preserveDrawingBuffer?: boolean;
width?: number;
height?: number;
antialias?: boolean;
useContextAlpha?: boolean | 'notMultiplied';
powerPreference?: WebGLPowerPreference;
context?: IRenderingContext;
transparent?: boolean; // deprecated since 6.0.0
}
interface IRendererOptionsAuto extends IRendererOptions {
forceCanvas?: boolean;
}
interface IBaseTextureOptions {
scaleMode?: SCALE_MODES;
resolution?: number;
mipmap?: MIPMAP_MODES;
anisotropicLevel?: number;
wrapMode?: WRAP_MODES;
format?: FORMATS;
type?: TYPES;
target?: TARGETS;
alphaMode?: ALPHA_MODES;
}
interface IPointData {
x: number;
y: number;
}
abstract class Resource {
width: number;
height: number;
valid: boolean;
bind(baseTexture: BaseTexture): void;
unbind(baseTexture: BaseTexture): void;
resize(width: number, height: number): void;
update(): void;
destroy(): void;
}
class BufferResource extends Resource {
constructor(source: Float32Array | Uint8Array, options: { width: number; height: number });
}
class ImageResource extends Resource {
url: string;
constructor(source: HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | ImageBitmap | string);
}
class CanvasResource extends Resource {
canvas: HTMLCanvasElement;
constructor(source: HTMLCanvasElement);
}
class TextureMatrix {
mapCoord: Matrix;
uClampFrame: Float32Array;
uClampOffset: Float32Array;
constructor(texture?: Texture, clampMargin?: number);
update(forceUpdate?: boolean): boolean;
}
type TextureSource = string | BaseTexture | ImageSource;
type ImageSource = HTMLImageElement | HTMLVideoElement | ImageBitmap | HTMLCanvasElement;
// Constants from @pixi/constants package
enum RENDERER_TYPE {
UNKNOWN = 0,
WEBGL = 1,
CANVAS = 2
}
enum BLEND_MODES {
NORMAL = 0,
ADD = 1,
MULTIPLY = 2,
SCREEN = 3,
// ... additional blend modes
}
enum SCALE_MODES {
NEAREST = 0,
LINEAR = 1
}
enum MSAA_QUALITY {
NONE = 0,
LOW = 2,
MEDIUM = 4,
HIGH = 8
}
enum MIPMAP_MODES {
OFF = 0,
POW2 = 1,
ON = 2,
ON_MANUAL = 3
}
enum WRAP_MODES {
CLAMP = 33071,
REPEAT = 10497,
MIRRORED_REPEAT = 33648
}
enum FORMATS {
RGBA = 6408,
RGB = 6407,
ALPHA = 6406,
LUMINANCE = 6409,
LUMINANCE_ALPHA = 6410
}
enum TYPES {
UNSIGNED_BYTE = 5121,
UNSIGNED_SHORT = 5123,
UNSIGNED_SHORT_5_6_5 = 33635,
UNSIGNED_SHORT_4_4_4_4 = 32819,
UNSIGNED_SHORT_5_5_5_1 = 32820,
FLOAT = 5126
}
enum TARGETS {
TEXTURE_2D = 3553,
TEXTURE_CUBE_MAP = 34067,
TEXTURE_2D_ARRAY = 35866,
TEXTURE_CUBE_MAP_POSITIVE_X = 34069
}
enum ALPHA_MODES {
NPM = 0,
UNPACK = 1,
PMA = 2,
NO_PREMULTIPLIED_ALPHA = 0,
PREMULTIPLY_ON_UPLOAD = 1,
PREMULTIPLIED_ALPHA = 2
}