addUniform(name, type) {
    this.uniforms_.push({
      name,
      type,
    });
    return this;
  }
Adds a uniform accessible in both fragment and vertex shaders.
The given name should include a type, such as `sampler2D u_texture`.
@param {string} name Uniform name, including the `u_` prefix
@param {'float'|'vec2'|'vec3'|'vec4'|'sampler2D'} type GLSL type
@return {ShaderBuilder} the builder object