Seregon/StratoSDK

StratoSDK is a framework with a declarative approach similar to Flutter/React, written and designed entirely for Rust.

Rust/27.3 KB/No license
crates/strato-ui-renderer/src/platform/mac/rendering/renderer_manager.rs
StratoSDK / crates / strato-ui-renderer / src / platform / mac / rendering / renderer_manager.rs
1use pathfinder_geometry::vector::Vector2F;
2 
3use super::{
4 metal,
5 renderer::{Device, Renderer},
6};
7 
8pub struct RendererManager {
9 metal_renderer_manager: metal::RendererManager,
10 #[cfg(wgpu)]
11 wgpu_renderer_manager: super::wgpu::RendererManager,
12}
13 
14impl Default for RendererManager {
15 fn default() -> Self {
16 Self::new()
17 }
18}
19 
20impl 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