123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- import * as MathUtils from '../math/MathUtils.js';
- import { StaticDrawUsage } from '../constants.js';
- class InterleavedBuffer {
- constructor( array, stride ) {
- this.isInterleavedBuffer = true;
- this.array = array;
- this.stride = stride;
- this.count = array !== undefined ? array.length / stride : 0;
- this.usage = StaticDrawUsage;
- this._updateRange = { offset: 0, count: - 1 };
- this.updateRanges = [];
- this.version = 0;
- this.uuid = MathUtils.generateUUID();
- }
- onUploadCallback() {}
- set needsUpdate( value ) {
- if ( value === true ) this.version ++;
- }
- get updateRange() {
- console.warn( 'THREE.InterleavedBuffer: updateRange() is deprecated and will be removed in r169. Use addUpdateRange() instead.' ); // @deprecated, r159
- return this._updateRange;
- }
- setUsage( value ) {
- this.usage = value;
- return this;
- }
- addUpdateRange( start, count ) {
- this.updateRanges.push( { start, count } );
- }
- clearUpdateRanges() {
- this.updateRanges.length = 0;
- }
- copy( source ) {
- this.array = new source.array.constructor( source.array );
- this.count = source.count;
- this.stride = source.stride;
- this.usage = source.usage;
- return this;
- }
- copyAt( index1, attribute, index2 ) {
- index1 *= this.stride;
- index2 *= attribute.stride;
- for ( let i = 0, l = this.stride; i < l; i ++ ) {
- this.array[ index1 + i ] = attribute.array[ index2 + i ];
- }
- return this;
- }
- set( value, offset = 0 ) {
- this.array.set( value, offset );
- return this;
- }
- clone( data ) {
- if ( data.arrayBuffers === undefined ) {
- data.arrayBuffers = {};
- }
- if ( this.array.buffer._uuid === undefined ) {
- this.array.buffer._uuid = MathUtils.generateUUID();
- }
- if ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {
- data.arrayBuffers[ this.array.buffer._uuid ] = this.array.slice( 0 ).buffer;
- }
- const array = new this.array.constructor( data.arrayBuffers[ this.array.buffer._uuid ] );
- const ib = new this.constructor( array, this.stride );
- ib.setUsage( this.usage );
- return ib;
- }
- onUpload( callback ) {
- this.onUploadCallback = callback;
- return this;
- }
- toJSON( data ) {
- if ( data.arrayBuffers === undefined ) {
- data.arrayBuffers = {};
- }
- // generate UUID for array buffer if necessary
- if ( this.array.buffer._uuid === undefined ) {
- this.array.buffer._uuid = MathUtils.generateUUID();
- }
- if ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {
- data.arrayBuffers[ this.array.buffer._uuid ] = Array.from( new Uint32Array( this.array.buffer ) );
- }
- //
- return {
- uuid: this.uuid,
- buffer: this.array.buffer._uuid,
- type: this.array.constructor.name,
- stride: this.stride
- };
- }
- }
- export { InterleavedBuffer };
|