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

geometry.mddocs/

0

# Geometry

1

2

Vertex data management system providing GPU buffer optimization, attribute handling, and efficient geometry rendering. The geometry system manages vertex buffers, index buffers, and vertex attributes for WebGL rendering.

3

4

## Capabilities

5

6

### Geometry

7

8

Main geometry class that manages vertex data, attributes, and index buffers for efficient GPU rendering.

9

10

```typescript { .api }

11

/**

12

* Geometry manages vertex data and attributes for rendering

13

* Handles vertex buffers, index buffers, and attribute definitions

14

*/

15

class Geometry extends EventEmitter {

16

/** Array of vertex buffers */

17

buffers: Buffer[];

18

/** Index buffer for indexed rendering */

19

indexBuffer: Buffer;

20

/** Map of attribute definitions */

21

attributes: {[key: string]: Attribute};

22

/** Whether geometry has been destroyed */

23

destroyed: boolean;

24

/** Instance count for instanced rendering */

25

instanceCount: number;

26

/** WebGL Vertex Array Objects cache */

27

glVertexArrayObjects: {[key: number]: {[key: string]: WebGLVertexArrayObject}};

28

/** Dispose runner for cleanup */

29

disposeRunner: Runner;

30

31

/** Create a new Geometry */

32

constructor();

33

34

/**

35

* Add an attribute to the geometry

36

* @param id - Attribute identifier

37

* @param buffer - Buffer data, Buffer instance, or Attribute

38

* @param size - Number of components per vertex (default: 2)

39

* @param normalized - Whether values should be normalized

40

* @param type - Data type (FLOAT, etc.)

41

* @param stride - Byte stride between vertices

42

* @param start - Byte offset of first vertex

43

* @param instance - Whether attribute is instanced

44

*/

45

addAttribute(

46

id: string,

47

buffer: ArrayLike<number> | Buffer | Attribute,

48

size?: number,

49

normalized?: boolean,

50

type?: TYPES,

51

stride?: number,

52

start?: number,

53

instance?: boolean

54

): this;

55

56

/**

57

* Get an attribute by ID

58

* @param id - Attribute identifier

59

*/

60

getAttribute(id: string): Attribute;

61

62

/**

63

* Get a buffer by attribute ID

64

* @param id - Attribute identifier

65

*/

66

getBuffer(id: string): Buffer;

67

68

/**

69

* Add index buffer for indexed rendering

70

* @param buffer - Index data or Buffer instance

71

*/

72

addIndex(buffer: ArrayLike<number> | Buffer): this;

73

74

/**

75

* Get the current index buffer

76

*/

77

getIndex(): Buffer;

78

79

/**

80

* Interleave vertex data into a single buffer

81

* @param arrays - Array of vertex data arrays

82

* @param sizes - Array of component sizes for each attribute

83

*/

84

interleave(): this;

85

86

/** Get size of geometry (number of vertices) */

87

getSize(): number;

88

89

/** Clone the geometry */

90

clone(): Geometry;

91

92

/** Dispose of WebGL resources */

93

dispose(): void;

94

95

/** Destroy geometry and cleanup all resources */

96

destroy(): void;

97

}

98

```

99

100

### Buffer

101

102

Buffer class that manages vertex or index data and handles GPU buffer creation and updates.

103

104

```typescript { .api }

105

/**

106

* Buffer manages vertex or index data for GPU rendering

107

* Handles buffer creation, updates, and GPU resource management

108

*/

109

class Buffer {

110

/** The data array (vertices, indices, etc.) */

111

data: IArrayBuffer;

112

/** Buffer type (ARRAY_BUFFER or ELEMENT_ARRAY_BUFFER) */

113

type: BUFFER_TYPE;

114

/** Whether buffer is static (infrequently updated) */

115

static: boolean;

116

/** Unique buffer ID */

117

id: number;

118

/** Dispose runner for cleanup */

119

disposeRunner: Runner;

120

121

/**

122

* Create a new Buffer

123

* @param data - Vertex or index data

124

* @param _static - Whether buffer is static

125

* @param index - Whether this is an index buffer

126

*/

127

constructor(data?: IArrayBuffer, _static?: boolean, index?: boolean);

128

129

/**

130

* Update buffer data

131

* @param data - New buffer data

132

*/

133

update(data?: IArrayBuffer): void;

134

135

/** Dispose of GPU resources */

136

dispose(): void;

137

138

/** Destroy buffer and cleanup resources */

139

destroy(): void;

140

141

/**

142

* Create buffer from array

143

* @param array - Source data array

144

*/

145

static from(array: IArrayBuffer | number[]): Buffer;

146

}

147

148

type IArrayBuffer = ArrayBuffer | ArrayBufferView | number[];

149

150

enum BUFFER_TYPE {

151

ELEMENT_ARRAY_BUFFER = 34963,

152

ARRAY_BUFFER = 34962

153

}

154

```

155

156

### Attribute

157

158

Attribute class that defines how vertex data should be interpreted by WebGL vertex shaders.

159

160

```typescript { .api }

161

/**

162

* Attribute defines how vertex buffer data is interpreted

163

* Specifies data layout for vertex shader attributes

164

*/

165

class Attribute {

166

/** The buffer containing attribute data */

167

buffer: Buffer;

168

/** Number of components per vertex (1-4) */

169

size: number;

170

/** Whether values should be normalized to 0-1 range */

171

normalized: boolean;

172

/** Data type (FLOAT, UNSIGNED_BYTE, etc.) */

173

type: TYPES;

174

/** Byte stride between consecutive vertices */

175

stride: number;

176

/** Byte offset of first vertex in buffer */

177

start: number;

178

/** Whether attribute is instanced (one value per instance) */

179

instance: boolean;

180

/** Attribute divisor for instanced rendering */

181

divisor: number;

182

183

/**

184

* Create a new Attribute

185

* @param buffer - Buffer containing attribute data

186

* @param size - Components per vertex

187

* @param normalized - Normalize values flag

188

* @param type - Data type

189

* @param stride - Byte stride

190

* @param start - Byte offset

191

* @param instance - Instanced attribute flag

192

*/

193

constructor(

194

buffer: Buffer,

195

size?: number,

196

normalized?: boolean,

197

type?: TYPES,

198

stride?: number,

199

start?: number,

200

instance?: boolean

201

);

202

203

/** Destroy attribute */

204

destroy(): void;

205

206

/**

207

* Create attribute from array data

208

* @param array - Source data

209

* @param size - Components per vertex

210

* @param normalized - Normalize flag

211

*/

212

static from(array: number[], size?: number, normalized?: boolean): Attribute;

213

}

214

```

215

216

### ViewableBuffer

217

218

Advanced buffer that provides typed array views and automatic resizing capabilities.

219

220

```typescript { .api }

221

/**

222

* ViewableBuffer provides typed array views of buffer data

223

* Automatically manages buffer resizing and provides convenient access

224

*/

225

class ViewableBuffer {

226

/** Raw buffer data */

227

rawBinaryData: ArrayBuffer;

228

/** 32-bit unsigned integer view */

229

uint32View: Uint32Array;

230

/** 32-bit float view */

231

float32View: Float32Array;

232

/** Buffer size in bytes */

233

size: number;

234

235

/**

236

* Create a new ViewableBuffer

237

* @param sizeOrBuffer - Initial size or existing ArrayBuffer

238

*/

239

constructor(sizeOrBuffer: number | ArrayBuffer);

240

241

/** Get current buffer size in bytes */

242

get rawBinaryDataBuffer(): ArrayBuffer;

243

244

/**

245

* Ensure buffer has at least the specified size

246

* @param sizeRequired - Required size in bytes

247

*/

248

checkDataSize(sizeRequired: number): void;

249

250

/**

251

* Resize buffer to new size

252

* @param size - New size in bytes

253

*/

254

resize(size: number): void;

255

256

/** Destroy buffer */

257

destroy(): void;

258

}

259

```

260

261

### BatchGeometry

262

263

Specialized geometry for batch rendering that handles dynamic vertex data updates.

264

265

```typescript { .api }

266

/**

267

* BatchGeometry specialized for batch rendering systems

268

* Handles dynamic vertex data and efficient batch updates

269

*/

270

class BatchGeometry extends Geometry {

271

/** Maximum number of textures per batch */

272

static MAX_TEXTURES: number;

273

274

/** Packed vertex data */

275

_buffer: Buffer;

276

/** Index data */

277

_indexBuffer: Buffer;

278

279

/**

280

* Create a new BatchGeometry

281

* @param _static - Whether geometry is static

282

*/

283

constructor(_static?: boolean);

284

}

285

```

286

287

**Usage Examples:**

288

289

```typescript

290

import { Geometry, Buffer, Attribute } from "@pixi/core";

291

292

// Create basic triangle geometry

293

const geometry = new Geometry();

294

295

// Add vertex positions (3 vertices, 2 components each)

296

geometry.addAttribute('aVertexPosition', [

297

-0.5, -0.5, // vertex 1

298

0.5, -0.5, // vertex 2

299

0.0, 0.5 // vertex 3

300

], 2);

301

302

// Add texture coordinates

303

geometry.addAttribute('aTextureCoord', [

304

0, 0, // UV for vertex 1

305

1, 0, // UV for vertex 2

306

0.5, 1 // UV for vertex 3

307

], 2);

308

309

// Create quad with indices

310

const quadGeometry = new Geometry()

311

.addAttribute('aVertexPosition', [

312

-1, -1, // bottom-left

313

1, -1, // bottom-right

314

1, 1, // top-right

315

-1, 1 // top-left

316

], 2)

317

.addIndex([0, 1, 2, 0, 2, 3]); // Two triangles

318

319

// Create geometry with explicit buffers

320

const positionBuffer = new Buffer(new Float32Array([

321

-0.5, -0.5,

322

0.5, -0.5,

323

0.0, 0.5

324

]), false); // dynamic buffer

325

326

const positionAttribute = new Attribute(positionBuffer, 2, false, TYPES.FLOAT);

327

geometry.addAttribute('aVertexPosition', positionAttribute);

328

329

// Update buffer data

330

positionBuffer.update(new Float32Array([

331

-0.8, -0.8,

332

0.8, -0.8,

333

0.0, 0.8

334

]));

335

336

// Interleaved vertex data (position + UV)

337

const interleavedGeometry = new Geometry();

338

interleavedGeometry.addAttribute('aVertexPosition', [

339

-1, -1, 0, 0, // vertex 1: pos(-1,-1), uv(0,0)

340

1, -1, 1, 0, // vertex 2: pos(1,-1), uv(1,0)

341

1, 1, 1, 1, // vertex 3: pos(1,1), uv(1,1)

342

-1, 1, 0, 1 // vertex 4: pos(-1,1), uv(0,1)

343

], 2, false, TYPES.FLOAT, 4 * 4, 0); // stride=16 bytes, start=0

344

345

interleavedGeometry.addAttribute('aTextureCoord',

346

interleavedGeometry.getBuffer('aVertexPosition'), // same buffer

347

2, false, TYPES.FLOAT, 4 * 4, 2 * 4); // stride=16 bytes, start=8 bytes

348

349

// Instanced geometry

350

const instanceGeometry = new Geometry();

351

instanceGeometry.instanceCount = 100;

352

instanceGeometry.addAttribute('aVertexPosition', quadVertices, 2);

353

instanceGeometry.addAttribute('aInstancePosition', instancePositions, 2, false, TYPES.FLOAT, 0, 0, true);

354

355

// Get geometry info

356

console.log('Vertex count:', geometry.getSize());

357

console.log('Has indices:', !!geometry.indexBuffer);

358

```

359

360

## Types

361

362

```typescript { .api }

363

enum TYPES {

364

BYTE = 5120,

365

UNSIGNED_BYTE = 5121,

366

SHORT = 5122,

367

UNSIGNED_SHORT = 5123,

368

INT = 5124,

369

UNSIGNED_INT = 5125,

370

FLOAT = 5126,

371

DOUBLE = 5130,

372

HALF_FLOAT = 36193

373

}

374

375

interface IAttributeData {

376

buffer: Buffer;

377

size: number;

378

normalized: boolean;

379

type: TYPES;

380

stride: number;

381

start: number;

382

instance: boolean;

383

}

384

```