import Buffer from '../geometry/Buffer';
import builtinAttributeSizes from './utils/builtinAttributeSizes';
import Geometry from '../geometry/Geometry';
import { TYPES } from '@pixi/constants';
/**
* Geometry used to batch standard PIXI content (e.g. Mesh, Sprite,
* Graphics objects).
*
* @class
* @memberof PIXI
*/
export default class BatchGeometry extends Geometry
{
/**
* @param {boolean} [_static=false] Optimization flag, where `false`
* is updated every frame, `true` doesn't change frame-to-frame.
* @param {Object[]} attributeDefinitions - attribute definitions
*/
constructor(_static = false, attributeDefinitions)
{
super();
/**
* Buffer used for position, color, texture IDs
*
* @member {PIXI.Buffer}
* @protected
*/
this._buffer = new Buffer(null, _static, false);
/**
* Index buffer data
*
* @member {PIXI.Buffer}
* @protected
*/
this._indexBuffer = new Buffer(null, _static, true);
/* These are automatically interleaved by GeometrySystem. */
attributeDefinitions.forEach((def) =>
{
if (def === 'aColor')
{ // special
this.addAttribute('aColor', this._buffer, 4, true, TYPES.UNSIGNED_BYTE);
return;
}
const isBuiltin = (typeof def === 'string');
const identifier = isBuiltin ? def : def.name;
const size = isBuiltin ? builtinAttributeSizes[identifier] : def.size;
this.addAttribute(identifier, this._buffer, size, def === 'aTextureId', TYPES.FLOAT);
});
this.addIndex(this._indexBuffer);
}
}