anchor.diff:      } else {
         gl.pixelStorei(GL.UNPACK_FLIP_Y_WEBGL, 0);
       }
  -    gl.texParameteri(GL.TEXTURE_2D, GL.TEXTURE_WRAP_S, GL.CLAMP_TO_EDGE);
  -    gl.texParameteri(GL.TEXTURE_2D, GL.TEXTURE_WRAP_T, GL.CLAMP_TO_EDGE);
  +    gl.texParameteri(GL.TEXTURE_2D, GL.TEXTURE_WRAP_S, GL.MIRRORED_REPEAT);
  +    gl.texParameteri(GL.TEXTURE_2D, GL.TEXTURE_WRAP_T, GL.MIRRORED_REPEAT);
       gl.texParameteri(GL.TEXTURE_2D, GL.TEXTURE_MIN_FILTER, GL.LINEAR);
       gl.texParameteri(GL.TEXTURE_2D, GL.TEXTURE_MAG_FILTER, GL.LINEAR);
       gl.texImage2DCanvas(GL.TEXTURE_2D, 0, this.internal_format, this.format, this.type, this.canvas);
  
positive.code:     } else {
        gl.pixelStorei(GL.UNPACK_FLIP_Y_WEBGL, 0);
      }
      gl.texImage2DCanvas(GL.TEXTURE_2D, 0, this.internal_format, this.format, this.type, this.canvas);
      gl.generateMipmap(GL.TEXTURE_2D);
      gl.bindTexture(GL.TEXTURE_2D, null);
  
negative.code: }
  
  class WebGLCanvasTexture {
    static bool _isPowerOfTwo(int x) => (x & (x - 1)) == 0x00;
    static int _nextHighestPowerOfTwo(int x) {
      --x;
      for(int i = 1; i < 32; i <<= 1) {
        x = x | x >> i;
      }
      return x + 1;
    }
  
    CanvasElement canvas;
    CanvasRenderingContext2D ctx;
  
  