anchor.diff:  }
   ''';
   
  -}
  +
  +
  +}
  
positive.code:     }
    }
  
    createShader(int type, String source) {
      var shader = gl.createShader(type);
      gl.shaderSource(shader, source);
      gl.compileShader(shader);
  
negative.code:     gl.useProgram(program);
    }
  
    @override
    void processEntities(Iterable<Entity> entities) {
      var length = entities.length;
      if (length > 0) {
        if (length > maxLength) {
          updateLength(length);
          maxLength = length;
        }
        var index = 0;
        entities.forEach((entity) {
          processEntity(index++, entity);
        });
        render(length);
      }
    }
  
    void buffer(String attribute, Float32List items, int itemSize) {
      var buffer = buffers[attribute];
      if (null == buffer) {
        buffer = gl.createBuffer();
        buffers[attribute] = buffer;
      }
      var attribLocation = gl.getAttribLocation(program, attribute);
      gl.bindBuffer(RenderingContext.ARRAY_BUFFER, buffer);
      gl.bufferData(RenderingContext.ARRAY_BUFFER, items, RenderingContext.STREAM_DRAW);
      gl.vertexAttribPointer(attribLocation, itemSize, RenderingContext.FLOAT, false, 0, 0);
      gl.enableVertexAttribArray(attribLocation);
    }
  
    @override
    bool checkProcessing() => success;
  
    void updateLength(int length);
    void processEntity(int index, Entity entity);
    void render(int length);
    String get vShaderSource;
    String get fShaderSource;
  }
  