最新代码
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