import Buffer from '../geometry/Buffer';
import builtinAttributeDefinitions from './utils/builtinAttributeDefinitions';
import Geometry from '../geometry/Geometry';
import { TYPES } from '@pixi/constants';
const defaultAttributes = [
{
property: 'vertexData',
name: 'aVertexPosition',
type: 'float32',
size: 2,
glType: TYPES.FLOAT,
glSize: 2,
},
{
property: 'uvs',
name: 'aTextureCoord',
type: 'float32',
size: 2,
glType: TYPES.FLOAT,
glSize: 2,
},
'aColor', // built-in attribute
'aTextureId',
];
/**
* 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 {Array<PIXI.AttributeDefinition>} attributeDefinitions - attribute definitions
*/
constructor(_static = false, attributeDefinitions = defaultAttributes)
{
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. */
for (let i = 0; i < attributeDefinitions.length; i++)
{
const def = attributeDefinitions[i];
if (def === 'aColor')
{ // special
this.addAttribute('aColor', this._buffer, 4, true, TYPES.UNSIGNED_BYTE);
continue;
}
const isBuiltin = (typeof def === 'string');
const identifier = isBuiltin ? def : def.name;
const size = isBuiltin ? builtinAttributeDefinitions[identifier].glSize : def.glSize;
const type = isBuiltin ? builtinAttributeDefinitions[identifier].glType : def.glType;
this.addAttribute(identifier, this._buffer, size, def === 'aTextureId', type);
}
this.addIndex(this._indexBuffer);
}
}