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/metal/renderer_manager.rs
StratoSDK / crates / strato-ui-renderer / src / platform / mac / rendering / metal / renderer_manager.rs
1use crate::platform::mac::rendering::metal::renderer::Renderer;
2use std::collections::HashMap;
3 
4use strato_ui_core::rendering;
5 
6pub struct RendererManager {
7 /// Maps a device's registry ID to its renderer (collection of state related
8 /// to rendering on a particular device).
9 renderers: HashMap<u64, Renderer>,
10}
11 
12impl RendererManager {
13 pub fn new() -> Self {
14 Self {
15 renderers: Default::default(),
16 }
17 }
18 
19 pub fn renderer_for_device(&mut self, device: &metal::Device) -> &mut Renderer {
20 use std::collections::hash_map::Entry::*;
21 match self.renderers.entry(device.registry_id()) {
22 Occupied(entry) => entry.into_mut(),
23 Vacant(entry) => entry.insert(Renderer::new(
24 device,
25 metal::MTLPixelFormat::BGRA8Unorm,
26 rendering::GlyphConfig::default(),
27 )),
28 }
29 }
30}
31