constructor(gl) {
    /**
     * @private
     * @type {WebGLRenderingContext}
     */
    this.gl_ = gl;

    /**
     * @private
     * @type {WebGLProgram}
     */
    this.program_ = createProgram(gl, FRAGMENT_SHADER, VERTEX_SHADER);

    this.positionLocation = gl.getAttribLocation(this.program_, 'a_position');
    this.texcoordLocation = gl.getAttribLocation(this.program_, 'a_texcoord');

    this.matrixLocation = gl.getUniformLocation(this.program_, 'u_matrix');
    this.textureMatrixLocation = gl.getUniformLocation(
      this.program_,
      'u_textureMatrix',
    );
    this.textureLocation = gl.getUniformLocation(this.program_, 'u_texture');

    this.positionBuffer = gl.createBuffer();
    gl.bindBuffer(gl.ARRAY_BUFFER, this.positionBuffer);

    this.positions = [0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1];
    gl.bufferData(
      gl.ARRAY_BUFFER,
      new Float32Array(this.positions),
      gl.STATIC_DRAW,
    );

    this.texcoordBuffer = gl.createBuffer();
    gl.bindBuffer(gl.ARRAY_BUFFER, this.texcoordBuffer);

    this.texcoords = [0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1];
    gl.bufferData(
      gl.ARRAY_BUFFER,
      new Float32Array(this.texcoords),
      gl.STATIC_DRAW,
    );
  }
@param {WebGLRenderingContext} gl Context to render in.