render method
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;
}