processBufferView( attribute, componentType, start, count, target ) {

    		const json = this.json;

    		if ( ! json.bufferViews ) json.bufferViews = [];

    		// Create a new dataview and dump the attribute's array into it

    		let componentSize;

    		if ( componentType === WEBGL_CONSTANTS.UNSIGNED_BYTE ) {

    			componentSize = 1;

    		} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_SHORT ) {

    			componentSize = 2;

    		} else {

    			componentSize = 4;

    		}

    		const byteLength = getPaddedBufferSize( count * attribute.itemSize * componentSize );
    		const dataView = new DataView( new ArrayBuffer( byteLength ) );
    		let offset = 0;

    		for ( let i = start; i < start + count; i ++ ) {

    			for ( let a = 0; a < attribute.itemSize; a ++ ) {

    				let value;

    				if ( attribute.itemSize > 4 ) {

    					 // no support for interleaved data for itemSize > 4

    					value = attribute.array[ i * attribute.itemSize + a ];

    				} else {

    					if ( a === 0 ) value = attribute.getX( i );
    					else if ( a === 1 ) value = attribute.getY( i );
    					else if ( a === 2 ) value = attribute.getZ( i );
    					else if ( a === 3 ) value = attribute.getW( i );

    				}

    				if ( componentType === WEBGL_CONSTANTS.FLOAT ) {

    					dataView.setFloat32( offset, value, true );

    				} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_INT ) {

    					dataView.setUint32( offset, value, true );

    				} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_SHORT ) {

    					dataView.setUint16( offset, value, true );

    				} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_BYTE ) {

    					dataView.setUint8( offset, value );

    				}

    				offset += componentSize;

    			}

    		}

    		const bufferViewDef = {

    			buffer: this.processBuffer( dataView.buffer ),
    			byteOffset: this.byteOffset,
    			byteLength: byteLength

    		};

    		if ( target !== undefined ) bufferViewDef.target = target;

    		if ( target === WEBGL_CONSTANTS.ARRAY_BUFFER ) {

    			// Only define byteStride for vertex attributes.
    			bufferViewDef.byteStride = attribute.itemSize * componentSize;

    		}

    		this.byteOffset += byteLength;

    		json.bufferViews.push( bufferViewDef );

    		// @TODO Merge bufferViews where possible.
    		const output = {

    			id: json.bufferViews.length - 1,
    			byteLength: 0

    		};

    		return output;

    	}
Process and generate a BufferView
@param  {BufferAttribute} attribute
@param  {number} componentType
@param  {number} start
@param  {number} count
@param  {number} target (Optional) Target usage of the BufferView
@return {Object}