code: function initCustomAttributes ( object ) {
  
  		var geometry = object.geometry;
  		var material = object.material;
  
  		var nvertices = geometry.vertices.length;
  
  		if ( material.attributes ) {
  
  			if ( geometry.__webglCustomAttributesList === undefined ) {
  
  				geometry.__webglCustomAttributesList = [];
  
  			}
  
  			for ( var name in material.attributes ) {
  
  				var attribute = material.attributes[ name ];
  
  				if ( ! attribute.__webglInitialized || attribute.createUniqueBuffers ) {
  
  					attribute.__webglInitialized = true;
  
  					var size = 1;   // "f" and "i"
  
  					if ( attribute.type === 'v2' ) size = 2;
  					else if ( attribute.type === 'v3' ) size = 3;
  					else if ( attribute.type === 'v4' ) size = 4;
  					else if ( attribute.type === 'c'  ) size = 3;
  
  					attribute.size = size;
  
  					attribute.array = new Float32Array( nvertices * size );
  
  					attribute.buffer = _gl.createBuffer();
  					attribute.buffer.belongsToAttribute = name;
  
  					attribute.needsUpdate = true;
  
  				}
  
  				geometry.__webglCustomAttributesList.push( attribute );
  
  			}
  
  		}
  
  	}
docs: Buffer initialization