76 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import DataMap from './DataMap.js';
 | 
						|
import { AttributeType } from './Constants.js';
 | 
						|
import { DynamicDrawUsage } from 'three';
 | 
						|
 | 
						|
class Attributes extends DataMap {
 | 
						|
 | 
						|
	constructor( backend ) {
 | 
						|
 | 
						|
		super();
 | 
						|
 | 
						|
		this.backend = backend;
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	delete( attribute ) {
 | 
						|
 | 
						|
		const attributeData = super.delete( attribute );
 | 
						|
 | 
						|
		if ( attributeData !== undefined ) {
 | 
						|
 | 
						|
			this.backend.destroyAttribute( attribute );
 | 
						|
 | 
						|
		}
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	update( attribute, type ) {
 | 
						|
 | 
						|
		const data = this.get( attribute );
 | 
						|
 | 
						|
		if ( data.version === undefined ) {
 | 
						|
 | 
						|
			if ( type === AttributeType.VERTEX ) {
 | 
						|
 | 
						|
				this.backend.createAttribute( attribute );
 | 
						|
 | 
						|
			} else if ( type === AttributeType.INDEX ) {
 | 
						|
 | 
						|
				this.backend.createIndexAttribute( attribute );
 | 
						|
 | 
						|
			} else if ( type === AttributeType.STORAGE ) {
 | 
						|
 | 
						|
				this.backend.createStorageAttribute( attribute );
 | 
						|
 | 
						|
			}
 | 
						|
 | 
						|
			data.version = this._getBufferAttribute( attribute ).version;
 | 
						|
 | 
						|
		} else {
 | 
						|
 | 
						|
			const bufferAttribute = this._getBufferAttribute( attribute );
 | 
						|
 | 
						|
			if ( data.version < bufferAttribute.version || bufferAttribute.usage === DynamicDrawUsage ) {
 | 
						|
 | 
						|
				this.backend.updateAttribute( attribute );
 | 
						|
 | 
						|
				data.version = bufferAttribute.version;
 | 
						|
 | 
						|
			}
 | 
						|
 | 
						|
		}
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	_getBufferAttribute( attribute ) {
 | 
						|
 | 
						|
		if ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;
 | 
						|
 | 
						|
		return attribute;
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
export default Attributes;
 |