first commit
This commit is contained in:
		
							
								
								
									
										75
									
								
								public/sdk/three/jsm/renderers/common/Attributes.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								public/sdk/three/jsm/renderers/common/Attributes.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,75 @@ | ||||
| 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; | ||||
		Reference in New Issue
	
	Block a user