render method

Buffer render(
  1. Buffer source,
  2. List<BufferFilter> filters, {
  3. double dt = 0,
})

Render source through filters into this sink.

Implementation

Buffer render(Buffer source, List<BufferFilter> filters, {double dt = 0}) {
  final width = source.width();
  final height = source.height();
  if (_front.width() != width || _front.height() != height) {
    resize(width, height);
  }

  if (filters.isEmpty) {
    _front.clear();
    _copyBuffer(source, _front);
    return _front;
  }

  var read = source;
  var write = _front;

  for (final filter in filters) {
    write.clear();
    filter.apply(read, write, dt);
    final tmp = read;
    read = write;
    write = (write == _front) ? _back : _front;
    if (identical(tmp, source)) {
      // noop: helps clarity when reading the pipeline loop
    }
  }

  if (!identical(read, _front)) {
    final tmp = _front;
    _front = _back;
    _back = tmp;
  }

  return _front;
}