addGeometry method
int
addGeometry(
- BufferGeometry geometry, [
- int reservedVertexCount = -1,
- int reservedIndexCount = -1
Implementation
int addGeometry(BufferGeometry geometry, [int reservedVertexCount = - 1, int reservedIndexCount = - 1 ]) {
this._initializeGeometry( geometry );
this._validateGeometry( geometry );
final geometryInfo = {
// geometry information
'vertexStart': - 1,
'vertexCount': - 1,
'reservedVertexCount': - 1,
'indexStart': - 1,
'indexCount': - 1,
'reservedIndexCount': - 1,
// draw range information
'start': - 1,
'count': - 1,
// state
'boundingBox': null,
'boundingSphere': null,
'active': true,
};
final geometryInfoList = this._geometryInfo;
geometryInfo['vertexStart'] = this._nextVertexStart;
geometryInfo['reservedVertexCount'] = reservedVertexCount == - 1 ? geometry.getAttributeFromString( 'position' ).count : reservedVertexCount;
final index = geometry.getIndex();
final hasIndex = index != null;
if ( hasIndex ) {
geometryInfo['indexStart'] = this._nextIndexStart;
geometryInfo['reservedIndexCount'] = reservedIndexCount == - 1 ? index.count : reservedIndexCount;
}
if (
geometryInfo['indexStart'] != - 1 &&
(geometryInfo['indexStart'] as int) + (geometryInfo['reservedIndexCount'] as int) > this._maxIndexCount ||
(geometryInfo['vertexStart'] as int) + (geometryInfo['reservedVertexCount'] as int) > this._maxVertexCount
) {
throw( 'THREE.BatchedMesh: Reserved space request exceeds the maximum buffer size.' );
}
// update id
int geometryId;
if ( this._availableGeometryIds.length > 0 ) {
this._availableGeometryIds.sort( ascIdSort );
geometryId = this._availableGeometryIds.removeAt(0);
geometryInfoList[ geometryId ] = geometryInfo;
}
else {
geometryId = this._geometryCount;
this._geometryCount ++;
geometryInfoList.add( geometryInfo );
}
// update the geometry
this.setGeometryAt( geometryId, geometry );
// increment the next geometry position
this._nextIndexStart = (geometryInfo['indexStart'] as int) + (geometryInfo['reservedIndexCount'] as int);
this._nextVertexStart = (geometryInfo['vertexStart'] as int) + (geometryInfo['reservedVertexCount'] as int);
return geometryId;
}