 " + (err == gl.NO_ERROR ? "succeed " : "fail ") + reason);
  }

  var types = [
    { type:gl.BYTE,           bytesPerComponent: 1 },
    { type:gl.UNSIGNED_BYTE,  bytesPerComponent: 1 },
    { type:gl.SHORT,          bytesPerComponent: 2 },
    { type:gl.UNSIGNED_SHORT, bytesPerComponent: 2 },
    { type:gl.INT,            bytesPerComponent: 4 },
    { type:gl.UNSIGNED_INT,   bytesPerComponent: 4 },
  ];

  for (var ii = 0; ii < types.length; ++ii) {
    var info = types[ii];
    debug("");
    for (var s