@Override
  public final void dispose(/*@Nonnull*/ final GL gl) {

    Check.notNull(gl, "GL cannot be null");

    doDispose(gl);
    listeners.clear();
    pipeline.dispose(gl);
  }
  /**
   * Changes the quad pipeline.
   *
   * @param gl Current OpenGL context
   * @param pipeline Quad pipeline to change to
   */
  private final void setPipeline(
      /*@Nonnull*/ final GL gl, /*@Nonnull*/ final QuadPipeline pipeline) {

    assert gl != null : "GL should not be null";
    assert pipeline != null : "Pipeline should not be null";

    final QuadPipeline oldPipeline = this.pipeline;
    final QuadPipeline newPipeline = pipeline;

    // Remove the old pipeline
    if (oldPipeline != null) {
      oldPipeline.removeListener(this);
      oldPipeline.dispose(gl);
      this.pipeline = null;
    }

    // Store the new pipeline
    newPipeline.addListener(this);
    this.pipeline = newPipeline;
    pipelineDirty = false;
  }