MaskedDevice constructor

MaskedDevice(
  1. GraphicsDevice inner, {
  2. required Iterable<DeviceFeature> disabledFeatures,
})

inner without disabledFeatures. A feature inner does not have, or a reserved one, may be named and changes nothing.

The answer is a device that mixes in SynchronousBufferReadback only when inner does and the mask keeps synchronousReadback, so a caller asking with is gets the masked answer too.

Implementation

factory MaskedDevice(
  GraphicsDevice inner, {
  required Iterable<DeviceFeature> disabledFeatures,
}) {
  final disabled = Set<DeviceFeature>.unmodifiable(disabledFeatures);
  return inner is SynchronousBufferReadback &&
          !disabled.contains(DeviceFeature.synchronousReadback)
      ? _MaskedReadbackDevice._(inner, disabled)
      : MaskedDevice._(inner, disabled);
}