import { TYPES } from '@pixi/constants'; import { Buffer, Geometry } from '@pixi/core'; /** * Standard 2D geometry used in PixiJS. * * Geometry can be defined without passing in a style or data if required. * * ```js * const geometry = new PIXI.Geometry(); * * geometry.addAttribute('positions', [0, 0, 100, 0, 100, 100, 0, 100], 2); * geometry.addAttribute('uvs', [0,0,1,0,1,1,0,1], 2); * geometry.addIndex([0,1,2,1,3,2]); * * ``` * @class * @memberof PIXI * @extends PIXI.Geometry */ export class MeshGeometry extends Geometry { /** * @param {Float32Array|number[]} vertices - Positional data on geometry. * @param {Float32Array|number[]} uvs - Texture UVs. * @param {Uint16Array|number[]} index - IndexBuffer */ constructor(vertices, uvs, index) { super(); const verticesBuffer = new Buffer(vertices); const uvsBuffer = new Buffer(uvs, true); const indexBuffer = new Buffer(index, true, true); this.addAttribute('aVertexPosition', verticesBuffer, 2, false, TYPES.FLOAT) .addAttribute('aTextureCoord', uvsBuffer, 2, false, TYPES.FLOAT) .addIndex(indexBuffer); /** * Dirty flag to limit update calls on Mesh. For example, * limiting updates on a single Mesh instance with a shared Geometry * within the render loop. * @private * @member {number} * @default -1 */ this._updateId = -1; } /** * If the vertex position is updated. * @member {number} * @readonly * @private */ get vertexDirtyId() { return this.buffers[0]._updateID; } }