Namespace: rendering

rendering

The rendering namespace contains all the classes used for core rendering in PixiJS this includes all the lower level resources such as Textures, Shaders, State, Buffers, Geometry and the systems required to use them. This covers WebGL and WebGPU and their shared classes.

To automatically create a renderer based on available resources, see the autoDetectRenderer function.

Classes

AbstractRenderer
BackgroundSystem
Batch
BatchableGraphics
BatchableMesh
BatchableSprite
Batcher
BatchTextureArray
BindGroup
BlendModePipe
Bounds
Buffer
BufferResource
CanvasPool
CanvasTextSystem
ExtractSystem
FilterSystem
GenerateTextureSystem
Geometry
GlBackBufferSystem
GlBatchAdaptor
GlBufferSystem
GlContextSystem
GlGeometrySystem
GlGraphicsAdaptor
GlMeshAdaptor
GlProgram
GlRenderTarget
GlRenderTargetAdaptor
GlShaderSystem
GlStateSystem
GlTexture
GlUboSystem
GlUniformGroupSystem
GpuBatchAdaptor
GpuBufferSystem
GpuDeviceSystem
GpuGraphicsAdaptor
GpuGraphicsContext
GpuMeshAdapter
GpuMipmapGenerator
GpuProgram
GpuRenderTarget
GpuRenderTargetAdaptor
GpuRenderTargetSystem
GpuShaderSystem
GpuStateSystem
GpuUboSystem
GraphicsContextRenderData
GraphicsContextSystem
HelloSystem
HTMLTextSystem
InstructionSet
MaskEffectManagerClass
PrepareBase
PrepareQueue
PrepareSystem
PrepareUpload
RenderGroup
RenderGroupSystem
RenderTargetSystem
RenderTexture
Shader
State
SystemRunner
Texture
TextureGCSystem
TextureMatrix
TexturePool
TextureSource
TextureStyle
UboSystem
UniformGroup
VideoSource
ViewSystem
WebGLRenderer
TextureUvs

Interface Definitions

Attribute

The attribute data for a geometries attributes

Properties:
Name Type Description
buffer Buffer

the buffer that this attributes data belongs to

format VertexFormat

the format of the attribute

instance boolean

is this an instanced buffer? (defaults to false)

location number

set where the shader location is for this attribute

offset number

the offset of the attribute from the buffer, defaults to 0

size number

The number of elements to be rendered. If not specified, all vertices after the starting vertex will be drawn.

start number

The starting vertex in the geometry to start drawing from. If not specified, drawing will start from the first vertex.

stride number

the stride of the data in the buffer

type number

the type of attribute

AutoDetectOptions

Options for autoDetectRenderer.

Properties:
Name Type Description
manageImports boolean

Whether to manage the dynamic imports of the renderer code. It is true by default, this means PixiJS will load all the default pixi systems and extensions. If you set this to false, then you as the dev will need to manually import the systems and extensions you need.

preference "webgl" | "webgpu"

The preferred renderer type. WebGPU is recommended as its generally faster than WebGL.

webgl Partial<WebGLOptions>

Optional WebGLOptions to pass only to the WebGL renderer

webgpu Partial<WebGPUOptions>

Optional WebGPUOptions to pass only to WebGPU renderer.

BackgroundSystemOptions

Options for the background system.

Properties:
Name Type Default Description
background ColorSource

Alias for backgroundColor

backgroundAlpha number 1

Transparency of the background color, value from 0 (fully transparent) to 1 (fully opaque).

backgroundColor ColorSource 'black'

The background color used to clear the canvas. See ColorSource for accepted color values.

clearBeforeRender boolean true

Whether to clear the canvas before new render passes.

BindResource

an interface that allows a resource to be bound to the gpu in a bind group

GeometryDescriptor

the interface that describes the structure of the geometry

Properties:
Name Type Description
attributes Record<string, AttributesOption>

the attributes that make up the geometry

indexBuffer Buffer | TypedArray | number[]

optional index buffer for this geometry

label string

an optional label to easily identify the geometry

topology Topology

the topology of the geometry, defaults to 'triangle-list'

GlProgramOptions

The options for the gl program

Properties:
Name Type Description
fragment string

The fragment glsl shader source.

name string

the name of the program, defaults to 'pixi-program'

preferredFragmentPrecision string

the preferred fragment precision for the shader, this may not be used if the device does not support it

preferredVertexPrecision string

the preferred vertex precision for the shader, this may not be used if the device does not support it

vertex string

The vertex glsl shader source.

GpuProgramOptions

The options for the gpu program

Properties:
Name Type Description
fragment ProgramSource

The fragment glsl shader source.

gpuLayout ProgramPipelineLayoutDescription

The gpu layout of the program. If not provided, it will be generated from the shader sources.

layout ProgramLayout

The layout of the program. If not provided, it will be generated from the shader sources.

name string

the name of the program, this is added to the label of the GPU Program created under the hood. Makes it much easier to debug!

vertex ProgramSource

The vertex glsl shader source.

Instruction

An instruction that can be executed by the renderer

Properties:
Name Type Description
action string

the name of the instruction

canBundle boolean

true if this instruction can be compiled into a WebGPU bundle

renderPipeId string

a the id of the render pipe that can run this instruction

InstructionPipe

An interface for a pipe that can be used to build instructions for the renderer. InstructionPipes are specifically used to manage the state of the renderer. For example, the BlendModePipe is used to set the blend mode of the renderer.

Properties:
Name Type Description
execute (instruction: INSTRUCTION) => void

this is where the actual instruction is executed - eg make the draw call activate a filter. Any instructions that have the same renderPipeId have their execute method called

pop (effect: Effect, targetContainer: Container, instructionSet: InstructionSet) => void

Used by effect pipes to pop effects from the renderer.

push (effect: Effect, targetContainer: Container, instructionSet: InstructionSet) => void

Used by the effect pipes push and pop effects to the renderer. A push effect allows the renderer to change its state to support the effect. A pop effect allows the renderer to return to its previous state. An example of this would be the filter effect.

renderEnd () => void

Called just after the render ends giving the RenderPipes a chance to do any cleanup

renderStart () => void

Called just before the render starts giving the RenderPipes a chance to do any setup

upload (instructionSet: InstructionSet) => void

called just before we execute the draw calls , this is where the pipes have an opportunity to upload data to the GPU. This is only called if data changes.

ProgramSource

the program source

Properties:
Name Type Description
entryPoint string

The main function to run in this shader

source string

The wgsl source code of the shader.

RenderPipe

An interface for a pipe that can be used to build instructions for the renderer. RenderPipes are specifically used to render Renderables like a Mesh.

Properties:
Name Type Description
addRenderable (renderable: RENDERABLE, instructionSet: InstructionSet) => void

This is where the renderable is added to the instruction set. This is called once per renderable. For instance, a MeshRenderPipe could be used to enqueue a 'draw mesh' command to the rendering instruction set, catering to the rendering of mesh geometry. In more complex scenarios, such as the SpritePipe, this seamlessly coordinates with a batchPipe to efficiently batch and add batch instructions to the instructions set

Add is called when the instructions set is being built.

destroyRenderable (renderable: RENDERABLE) => void

Called whenever a renderable is destroyed, often the pipes keep a webGL / webGPU specific representation of the renderable that needs to be tidied up when the renderable is destroyed.

updateRenderable (renderable: RENDERABLE, instructionSet: InstructionSet) => void

Called whenever a renderable has been been updated, eg its position has changed. This is only called in the render loop if the instructions set is being reused from the last frame. Otherwise addRenderable is called.

validateRenderable (renderable: RENDERABLE) => boolean

This function is called when the renderer is determining if it can use the same instruction set again to improve performance. If this function returns false, the renderer will rebuild the whole instruction set for the scene. This is only called if the scene has not its changed its structure .

Enums

BufferUsage

Buffer usage flags. they can be combined using the bitwise OR operator eg : BufferUsage.VERTEX | BufferUsage.INDEX

Properties:
Name Description
COPY_DST

The buffer can be used as the destination of a copy or write operation. (Examples: as the destination argument of a copyBufferToBuffer() or copyTextureToBuffer() call, or as the target of a writeBuffer() call.)

COPY_SRC

The buffer can be used as the source of a copy operation. (Examples: as the source argument of a copyBufferToBuffer() or copyBufferToTexture() call.)

INDEX

The buffer can be used as an index buffer. (Example: passed to setIndexBuffer().)

INDIRECT

The buffer can be used as to store indirect command arguments. (Examples: as the indirectBuffer argument of a drawIndirect() or dispatchWorkgroupsIndirect() call.)

MAP_READ

The buffer can be mapped for reading. (Example: calling mapAsync() with GPUMapMode.READ) May only be combined with COPY_DST.

MAP_WRITE

The buffer can be mapped for writing. (Example: calling mapAsync() with GPUMapMode.WRITE) May only be combined with COPY_SRC.

QUERY_RESOLVE

The buffer can be used to capture query results. (Example: as the destination argument of a resolveQuerySet() call.)

STATIC

the buffer will not be updated frequently

STORAGE

The buffer can be used as a storage buffer. (Example: as a bind group entry for a GPUBufferBindingLayout with a buffer.type of "storage" or "read-only-storage".)

UNIFORM

The buffer can be used as a uniform buffer. (Example: as a bind group entry for a GPUBufferBindingLayout with a buffer.type of "uniform".)

VERTEX

The buffer can be used as a vertex buffer. (Example: passed to setVertexBuffer().)

Type Definitions

AttributesOption

The attribute options used by the constructor for adding geometries attributes extends Attribute but allows for the buffer to be a typed or number array

ProgramLayout

a map the maps names of uniforms to group indexes

ProgramPipelineLayoutDescription

a WebGPU descriptions of how the program is layed out

See:

ShaderGroups

A record of BindGroup's used by the shader.

Record<number, BindGroup>

ShaderWith

A descriptor for a shader

ShaderWithGroups

A descriptor for a shader with groups.

ShaderWithResources

A descriptor for a shader with resources. This is an easier way to work with uniforms. especially when you are not working with bind groups

Topology

The different topology types supported by the renderer used to describe how the geometry should be renderer

UniformGroupOptions

Uniform group options

Properties:
Name Type Description
isStatic boolean

if true, then you are responsible for when the data is uploaded to the GPU by calling update()

ubo boolean

if true the UniformGroup is handled as an Uniform buffer object. This is the only way WebGPU can work with uniforms. WebGL2 can also use this. So don't set to true if you want to use WebGPU :D

VertexFormat

The different types of vertex formats supported by the renderer

Methods

autoDetectRenderer (options) Promise<Renderer>

Automatically determines the most appropriate renderer for the current environment.

The function will prioritize the WebGPU renderer, falling back to WebGL2 if WebGPU is not supported. The selected renderer's code is then dynamically imported to optimize performance and minimize the initial bundle size.

To maximize the benefits of dynamic imports, it's recommended to use a modern bundler that supports code splitting. This will place the renderer code in a separate chunk, which is loaded only when needed.

Name Type Description
options Partial<AutoDetectOptions>

A partial configuration object based on the AutoDetectOptions type.

Returns:
Type Description
Promise<Renderer> A Promise that resolves to an instance of the selected renderer.
Example
 // create a renderer
 const renderer = await autoDetectRenderer({
   width: 800,
   height: 600,
   antialias: true,
 });

 // custom for each renderer
 const renderer = await autoDetectRenderer({
   width: 800,
   height: 600,
   webgpu:{
     antialias: true,
     backgroundColor: 'red'
   },
   webgl:{
     antialias: true,
     backgroundColor: 'green'
   }
  });

buildUvs (vertices, verticesStride, verticesOffset, uvs, uvsOffset, uvsStride, size, matrix) void

Takes a vertices array and a matrix and transforms the vertices based on the matrix. this out put is written to the uvs array

Name Type Default Description
vertices number[]

the vertices to calculate uvs from

verticesStride number

the stride of the vertice

verticesOffset number

the offset of the vertices

uvs number[]

the uvs to fill

uvsOffset number

the offset of the uvs

uvsStride number

the stride of the uvs

size number

the size of the vertices

matrix Matrix undefined

the matrix to apply to the uvs

ensureIsBuffer (buffer, index) Buffer

Converts something into a buffer. If it is already a buffer it will pass it through if it is a number array it will convert it to a float32 array before being passed into a buffer the buffer will be created with the correct usage flags for geometry attributes

Name Type Description
buffer Buffer | TypedArray | number[]

number array

index boolean

is this an index buffer?

Returns:
Type Description
Buffer a buffer

transformVertices (vertices, m, offset, stride, size)

Transforms the vertices in an array with the given matrix.

Name Type Attributes Description
vertices number[]

the vertices to transform

m Matrix

the matrix to apply to the vertices

offset number <optional>

the offset of the vertices (defaults to 0)

stride number <optional>

the stride of the vertices (defaults to 2)

size number <optional>

the size of the vertices (defaults to vertices.length / stride - offset)