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