StratoSDK is a framework with a declarative approach similar to Flutter/React, written and designed entirely for Rust.
| 1 | use pathfinder_geometry::vector::Vector2F; |
| 2 | |
| 3 | use super::{ |
| 4 | metal, |
| 5 | renderer::{Device, Renderer}, |
| 6 | }; |
| 7 | |
| 8 | pub struct RendererManager { |
| 9 | metal_renderer_manager: metal::RendererManager, |
| 10 | #[cfg(wgpu)] |
| 11 | wgpu_renderer_manager: super::wgpu::RendererManager, |
| 12 | } |
| 13 | |
| 14 | impl Default for RendererManager { |
| 15 | fn default() -> Self { |
| 16 | Self::new() |
| 17 | } |
| 18 | } |
| 19 | |
| 20 | impl RendererManager { |
| 21 | pub fn new() -> Self { |
| 22 | Self { |
| 23 | metal_renderer_manager: metal::RendererManager::new(), |
| 24 | #[cfg(wgpu)] |
| 25 | wgpu_renderer_manager: super::wgpu::RendererManager::new(), |
| 26 | } |
| 27 | } |
| 28 | |
| 29 | /// Returns a [`Renderer`] that can be used to render on the given [`Device`]. |
| 30 | #[allow(unused_variables)] |
| 31 | pub fn renderer_for_device( |
| 32 | &mut self, |
| 33 | device: &Device, |
| 34 | window_size: Vector2F, |
| 35 | ) -> &mut dyn Renderer { |
| 36 | match device { |
| 37 | Device::Metal(device) => self.metal_renderer_manager.renderer_for_device(device), |
| 38 | #[cfg(wgpu)] |
| 39 | Device::WGPU(resources) => self |
| 40 | .wgpu_renderer_manager |
| 41 | .renderer_for_resources(resources, window_size), |
| 42 | } |
| 43 | } |
| 44 | } |
| 45 |