docs: function setParticleBuffers ( geometry, hint, object ) {
  
  		var v, c, vertex, offset, index, color,
  
  		vertices = geometry.vertices,
  		vl = vertices.length,
  
  		colors = geometry.colors,
  		cl = colors.length,
  
  		vertexArray = geometry.__vertexArray,
  		colorArray = geometry.__colorArray,
  
  		sortArray = geometry.__sortArray,
  
  		dirtyVertices = geometry.verticesNeedUpdate,
  		dirtyElements = geometry.elementsNeedUpdate,
  		dirtyColors = geometry.colorsNeedUpdate,
  
  		customAttributes = geometry.__webglCustomAttributesList,
  		i, il,
  		a, ca, cal, value,
  		customAttribute;
  
  		if ( dirtyVertices ) {
  
  			for ( v = 0; v < vl; v ++ ) {
  
  				vertex = vertices[ v ];
  
  				offset = v * 3;
  
  				vertexArray[ offset ]     = vertex.x;
  				vertexArray[ offset + 1 ] = vertex.y;
  				vertexArray[ offset + 2 ] = vertex.z;
  
  			}
  
  			_gl.bindBuffer( _gl.ARRAY_BUFFER, geometry.__webglVertexBuffer );
  			_gl.bufferData( _gl.ARRAY_BUFFER, vertexArray, hint );
  
  		}
  
  		if ( dirtyColors ) {
  
  			for ( c = 0; c < cl; c ++ ) {
  
  				color = colors[ c ];
  
  				offset = c * 3;
  
  				colorArray[ offset ]     = color.r;
  				colorArray[ offset + 1 ] = color.g;
  				colorArray[ offset + 2 ] = color.b;
  
  			}
  
  			_gl.bindBuffer( _gl.ARRAY_BUFFER, geometry.__webglColorBuffer );
  			_gl.bufferData( _gl.ARRAY_BUFFER, colorArray, hint );
  
  		}
  
  		if ( customAttributes ) {
  
  			for ( i = 0, il = customAttributes.length; i < il; i ++ ) {
  
  				customAttribute = customAttributes[ i ];
  
  				if ( customAttribute.needsUpdate && ( customAttribute.boundTo === undefined ||  customAttribute.boundTo === 'vertices' ) ) {
  
  					cal = customAttribute.value.length;
  
  					offset = 0;
  
  					if ( customAttribute.size === 1 ) {
  
  						for ( ca = 0; ca < cal; ca ++ ) {
  
  							customAttribute.array[ ca ] = customAttribute.value[ ca ];
  
  						}
  
  					} else if ( customAttribute.size === 2 ) {
  
  						for ( ca = 0; ca < cal; ca ++ ) {
  
  							value = customAttribute.value[ ca ];
  
  							customAttribute.array[ offset ]   = value.x;
  							customAttribute.array[ offset + 1 ] = value.y;
  
  							offset += 2;
  
  						}
  
  					} else if ( customAttribute.size === 3 ) {
  
  						if ( customAttribute.type === 'c' ) {
  
  							for ( ca = 0; ca < cal; ca ++ ) {
  
  								value = customAttribute.value[ ca ];
  
  								customAttribute.array[ offset ]   = value.r;
  								customAttribute.array[ offset + 1 ] = value.g;
  								customAttribute.array[ offset + 2 ] = value.b;
  
  								offset += 3;
  
  							}
  
  						} else {
  
  							for ( ca = 0; ca < cal; ca ++ ) {
  
  								value = customAttribute.value[ ca ];
  
  								customAttribute.array[ offset ]   = value.x;
  								customAttribute.array[ offset + 1 ] = value.y;
  								customAttribute.array[ offset + 2 ] = value.z;
  
  								offset += 3;
  
  							}
  
  						}
  
  					} else if ( customAttribute.size === 4 ) {
  
  						for ( ca = 0; ca < cal; ca ++ ) {
  
  							value = customAttribute.value[ ca ];
  
  							customAttribute.array[ offset ]      = value.x;
  							customAttribute.array[ offset + 1  ] = value.y;
  							customAttribute.array[ offset + 2  ] = value.z;
  							customAttribute.array[ offset + 3  ] = value.w;
  
  							offset += 4;
  
  						}
  
  					}
  
  				}
  
  				_gl.bindBuffer( _gl.ARRAY_BUFFER, customAttribute.buffer );
  				_gl.bufferData( _gl.ARRAY_BUFFER, customAttribute.array, hint );
  
  				customAttribute.needsUpdate = false;
  
  			}
  
  		}
  
  	}