or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

filters.mdframebuffers.mdgeometry.mdindex.mdrendering.mdshaders.mdstate.mdsystems.mdtextures.md

systems.mddocs/

0

# Systems

1

2

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.

3

4

## Capabilities

5

6

### System Interface

7

8

Base interface that all rendering systems implement.

9

10

```typescript { .api }

11

/**

12

* Base interface for all rendering systems

13

* Systems handle specific aspects of the WebGL pipeline

14

*/

15

interface ISystem {

16

/** Destroy system and cleanup resources */

17

destroy(): void;

18

}

19

20

interface ISystemConstructor<R = Renderer> {

21

/** System constructor signature */

22

new (renderer: R): ISystem;

23

}

24

```

25

26

### Core Systems

27

28

The renderer includes these essential systems for WebGL rendering:

29

30

```typescript { .api }

31

// Available on Renderer instance

32

interface RendererSystems {

33

/** Mask rendering and stencil management */

34

mask: MaskSystem;

35

/** WebGL context management */

36

context: ContextSystem;

37

/** WebGL state tracking and optimization */

38

state: StateSystem;

39

/** Shader compilation and management */

40

shader: ShaderSystem;

41

/** Texture uploading and binding */

42

texture: TextureSystem;

43

/** Vertex buffer management */

44

buffer: BufferSystem;

45

/** Geometry and vertex array objects */

46

geometry: GeometrySystem;

47

/** Framebuffer and render target management */

48

framebuffer: FramebufferSystem;

49

/** Scissor testing */

50

scissor: ScissorSystem;

51

/** Stencil buffer operations */

52

stencil: StencilSystem;

53

/** Projection matrix management */

54

projection: ProjectionSystem;

55

/** Texture garbage collection */

56

textureGC: TextureGCSystem;

57

/** Filter rendering pipeline */

58

filter: FilterSystem;

59

/** Render texture management */

60

renderTexture: RenderTextureSystem;

61

/** Batch rendering optimization */

62

batch: BatchSystem;

63

}

64

```

65

66

### MaskSystem

67

68

Manages mask rendering using stencil buffer or scissor testing for clipping graphics.

69

70

```typescript { .api }

71

/**

72

* MaskSystem handles mask rendering and clipping

73

* Uses stencil buffer and scissor testing for graphics clipping

74

*/

75

class MaskSystem implements ISystem {

76

/** Whether masking is enabled */

77

enableScissor: boolean;

78

/** Current alpha mask pool */

79

alphaMaskPool: SpriteMaskFilter[];

80

/** Current alpha mask index */

81

alphaMaskIndex: number;

82

83

constructor(renderer: Renderer);

84

85

/**

86

* Apply mask to current rendering

87

* @param target - Object being masked

88

* @param maskData - Mask information

89

*/

90

push(target: IRenderableObject, maskData: MaskData): void;

91

92

/**

93

* Remove current mask

94

* @param target - Object being unmasked

95

* @param maskData - Mask information

96

*/

97

pop(target: IRenderableObject, maskData?: MaskData): void;

98

99

/**

100

* Setup scissor mask

101

* @param maskData - Scissor mask data

102

*/

103

pushScissorMask(maskData: MaskData): void;

104

105

/** Remove scissor mask */

106

popScissorMask(): void;

107

108

/**

109

* Setup stencil mask

110

* @param maskData - Stencil mask data

111

*/

112

pushStencilMask(maskData: MaskData): void;

113

114

/** Remove stencil mask */

115

popStencilMask(): void;

116

117

/** Destroy mask system */

118

destroy(): void;

119

}

120

```

121

122

### TextureSystem

123

124

Manages GPU texture binding, uploading, and caching for efficient texture operations.

125

126

```typescript { .api }

127

/**

128

* TextureSystem manages GPU texture operations

129

* Handles binding, uploading, and texture unit management

130

*/

131

class TextureSystem implements ISystem {

132

/** Maximum texture units available */

133

maxTextures: number;

134

/** Current texture bindings */

135

boundTextures: BaseTexture[];

136

/** Current active texture unit */

137

currentLocation: number;

138

/** Unknown texture for missing textures */

139

unknownTexture: BaseTexture;

140

/** Empty texture array for batch rendering */

141

emptyTextures: BaseTexture[];

142

143

constructor(renderer: Renderer);

144

145

/**

146

* Bind texture to specific texture unit

147

* @param texture - Texture to bind

148

* @param location - Texture unit (0-31)

149

*/

150

bind(texture: Texture | BaseTexture, location?: number): void;

151

152

/** Reset all texture bindings */

153

reset(): void;

154

155

/** Unbind all textures */

156

unbind(texture?: BaseTexture): void;

157

158

/** Destroy texture system */

159

destroy(): void;

160

}

161

```

162

163

### GeometrySystem

164

165

Handles vertex array objects, attribute binding, and geometry rendering.

166

167

```typescript { .api }

168

/**

169

* GeometrySystem manages vertex array objects and attribute binding

170

* Handles geometry rendering and vertex buffer setup

171

*/

172

class GeometrySystem implements ISystem {

173

/** Whether VAOs are supported */

174

hasVao: boolean;

175

/** Whether instanced rendering is supported */

176

hasInstance: boolean;

177

/** Whether multiple render targets are supported */

178

canUseUInt32ElementIndex: boolean;

179

180

constructor(renderer: Renderer);

181

182

/**

183

* Bind geometry for rendering

184

* @param geometry - Geometry to bind

185

* @param shader - Shader program to use

186

*/

187

bind(geometry?: Geometry, shader?: Shader): void;

188

189

/** Reset geometry system state */

190

reset(): void;

191

192

/** Unbind current geometry */

193

unbind(): void;

194

195

/**

196

* Draw bound geometry

197

* @param type - Primitive type (TRIANGLES, etc.)

198

* @param size - Number of elements to draw

199

* @param start - Starting element index

200

* @param instanceCount - Number of instances

201

*/

202

draw(type: DRAW_MODES, size?: number, start?: number, instanceCount?: number): void;

203

204

/** Destroy geometry system */

205

destroy(): void;

206

}

207

```

208

209

### StateSystem

210

211

Tracks and optimizes WebGL state changes to minimize GPU state switching overhead.

212

213

```typescript { .api }

214

/**

215

* StateSystem tracks WebGL state changes for optimization

216

* Minimizes redundant state changes and GPU overhead

217

*/

218

class StateSystem implements ISystem {

219

/** Active state object */

220

stateId: number;

221

/** Polygon offset state */

222

polygonOffset: number;

223

/** Current blend mode */

224

blendMode: BLEND_MODES;

225

/** Whether state is dirty */

226

_blendEq: boolean;

227

228

constructor(renderer: Renderer);

229

230

/**

231

* Set WebGL state

232

* @param state - State object to apply

233

*/

234

setState(state: State): void;

235

236

/**

237

* Set blend mode

238

* @param value - Blend mode to apply

239

*/

240

setBlendMode(value: BLEND_MODES): void;

241

242

/**

243

* Set polygon offset

244

* @param value - Polygon offset value

245

* @param scale - Polygon offset scale

246

*/

247

setOffset(value: number, scale: number): void;

248

249

/** Reset state to defaults */

250

reset(): void;

251

252

/** Destroy state system */

253

destroy(): void;

254

}

255

```

256

257

### BufferSystem

258

259

Manages WebGL buffer objects for vertex and index data.

260

261

```typescript { .api }

262

/**

263

* BufferSystem manages WebGL buffer objects

264

* Handles vertex and index buffer creation and updates

265

*/

266

class BufferSystem implements ISystem {

267

/** Manages VAO state */

268

managedBuffers: {[key: number]: Buffer};

269

/** Bound buffer cache */

270

boundBufferBases: {[key: number]: Buffer};

271

272

constructor(renderer: Renderer);

273

274

/**

275

* Bind buffer to WebGL context

276

* @param buffer - Buffer to bind

277

*/

278

bind(buffer: Buffer): void;

279

280

/**

281

* Update buffer data

282

* @param buffer - Buffer to update

283

*/

284

update(buffer: Buffer): void;

285

286

/** Dispose of buffer resources */

287

dispose(buffer: Buffer, contextLost?: boolean): void;

288

289

/** Dispose all managed buffers */

290

disposeAll(contextLost?: boolean): void;

291

292

/** Destroy buffer system */

293

destroy(): void;

294

}

295

```

296

297

**Usage Examples:**

298

299

```typescript

300

import { Renderer } from "@pixi/core";

301

302

// Access systems through renderer

303

const renderer = new Renderer();

304

305

// Use texture system

306

renderer.texture.bind(myTexture, 0); // Bind to texture unit 0

307

renderer.texture.bind(normalMap, 1); // Bind to texture unit 1

308

309

// Use geometry system

310

renderer.geometry.bind(myGeometry, myShader);

311

renderer.geometry.draw(DRAW_MODES.TRIANGLES, geometry.getSize());

312

313

// Use state system

314

const state = new State();

315

state.blendMode = BLEND_MODES.ADD;

316

renderer.state.setState(state);

317

318

// Use mask system

319

const maskData = new MaskData(maskSprite);

320

renderer.mask.push(maskedObject, maskData);

321

// ... render masked content ...

322

renderer.mask.pop(maskedObject);

323

324

// Use buffer system (usually automatic)

325

const buffer = new Buffer(vertexData);

326

renderer.buffer.update(buffer); // Upload to GPU

327

328

// Use framebuffer system

329

const framebuffer = new Framebuffer(256, 256);

330

renderer.framebuffer.bind(framebuffer);

331

// ... render to framebuffer ...

332

renderer.framebuffer.bind(null); // Bind default framebuffer

333

```

334

335

**System Integration:**

336

337

```typescript

338

// Systems work together for complete rendering

339

function renderMaskedSprite(sprite, mask) {

340

// 1. Set up mask

341

const maskData = new MaskData(mask);

342

renderer.mask.push(sprite, maskData);

343

344

// 2. Bind texture

345

renderer.texture.bind(sprite.texture);

346

347

// 3. Set blend state

348

const state = State.for2d();

349

state.blendMode = sprite.blendMode;

350

renderer.state.setState(state);

351

352

// 4. Bind geometry

353

renderer.geometry.bind(sprite.geometry, sprite.shader);

354

355

// 5. Draw

356

renderer.geometry.draw(DRAW_MODES.TRIANGLES);

357

358

// 6. Clean up mask

359

renderer.mask.pop(sprite);

360

}

361

```

362

363

## Types

364

365

```typescript { .api }

366

enum DRAW_MODES {

367

POINTS = 0,

368

LINES = 1,

369

LINE_LOOP = 2,

370

LINE_STRIP = 3,

371

TRIANGLES = 4,

372

TRIANGLE_STRIP = 5,

373

TRIANGLE_FAN = 6

374

}

375

376

interface MaskData {

377

type: MASK_TYPES;

378

autoDetect: boolean;

379

maskObject: IRenderableObject;

380

pooled: boolean;

381

isMaskData: boolean;

382

resolution: number;

383

multisample: MSAA_QUALITY;

384

enabled: boolean;

385

colorMask: number;

386

}

387

388

enum MASK_TYPES {

389

NONE = 0,

390

SCISSOR = 1,

391

STENCIL = 2,

392

SPRITE = 3,

393

COLOR = 4

394

}

395

```