addGeometry method

int addGeometry(
  1. BufferGeometry geometry, [
  2. int reservedVertexCount = -1,
  3. 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;
}