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;
 |