function makeTypedArray(array, name) {
      if (isArrayBuffer(array)) {
        return array;
      }
  
      if (array.data && isArrayBuffer(array.data)) {
        return array.data;
      }
  
      if (Array.isArray(array)) {
        array = {
          data: array,
        };
      }
  
      if (!array.numComponents) {
        array.numComponents = guessNumComponentsFromName(name, array.length);
      }
  
      let type = array.type;
      if (!type) {
        if (name === 'indices') {
          type = Uint16Array;
        }
      }
      const typedArray = createAugmentedTypedArray(array.numComponents, array.data.length / array.numComponents | 0, type);
      typedArray.push(array.data);
      return typedArray;
    }
@typedef {Object} AttribInfo
@property {number} [numComponents] the number of components for this attribute.
@property {number} [size] the number of components for this attribute.
@property {number} [type] the type of the attribute (eg. `gl.FLOAT`, `gl.UNSIGNED_BYTE`, etc...) Default = `gl.FLOAT`
@property {boolean} [normalized] whether or not to normalize the data. Default = false
@property {number} [offset] offset into buffer in bytes. Default = 0
@property {number} [stride] the stride in bytes per element. Default = 0
@property {WebGLBuffer} buffer the buffer that contains the data for this attribute
@memberOf module:webgl-utils