openDevice function
Opens the backend, or throws with something worth putting on screen.
width and height are ignored by Impeller, which sizes itself per frame.
They are still in the signature because the other half of the conditional
needs them — and because the software rasteriser, the one this backend
falls back to, cannot size itself per frame and needs them for real.
Implementation
Future<GraphicsDevice> openDevice({required int width, required int height}) {
_ensureRegistered();
return openRegisteredDevice(
width: width,
height: height,
onFallback: (message) => debugPrint('flutter3d_app: $message'),
);
}