code: function (x, y, width, height, dpr) {
  
          if (typeof x === 'object') {
              var obj = x;
  
              x = obj.x;
              y = obj.y;
              width = obj.width;
              height = obj.height;
              dpr = obj.devicePixelRatio;
          }
          dpr = dpr || this.devicePixelRatio;
  
          this.gl.viewport(
              x * dpr, y * dpr, width * dpr, height * dpr
          );
          // Use a fresh new object, not write property.
          this.viewport = {
              x: x,
              y: y,
              width: width,
              height: height,
              devicePixelRatio: dpr
          };
      }
docs: Set rendering viewport
  @param {number|Object} x
  @param {number} [y]
  @param {number} [width]
  @param {number} [height]
  @param {number} [devicePixelRatio]
  Defaultly use the renderere devicePixelRatio
  It needs to be 1 when setViewport is called by frameBuffer
  
  @example
  setViewport(0,0,width,height,1)
  setViewport({
  x: 0,
  y: 0,
  width: width,
  height: height,
  devicePixelRatio: 1
  })