Move Renderer from per-window to per-instance

This commit is contained in:
mars 2022-11-08 21:32:33 -07:00
parent f0a2e1b57c
commit b4da999c24
1 changed files with 13 additions and 6 deletions

View File

@ -30,7 +30,7 @@ pub struct Window {
pub surface_config: wgpu::SurfaceConfiguration,
pub device: Arc<wgpu::Device>,
pub queue: Arc<wgpu::Queue>,
pub renderer: Renderer,
pub renderer: Arc<Renderer>,
pub panel: Panel,
pub last_update: Instant,
pub cursor_pos: Vec2,
@ -44,6 +44,7 @@ impl Window {
adapter: &wgpu::Adapter,
device: Arc<wgpu::Device>,
queue: Arc<wgpu::Queue>,
renderer: Arc<Renderer>,
event_loop: &EventLoopWindowTarget<WindowMessage>,
) -> anyhow::Result<Self> {
let window = WindowBuilder::new().build(&event_loop)?;
@ -67,8 +68,6 @@ impl Window {
surface.configure(&device, &surface_config);
let renderer = Renderer::new(device.to_owned(), queue.to_owned());
Ok(Self {
window,
surface,
@ -183,6 +182,7 @@ pub struct WindowStore {
pub adapter: wgpu::Adapter,
pub device: Arc<wgpu::Device>,
pub queue: Arc<wgpu::Queue>,
pub renderer: Arc<Renderer>,
}
impl WindowStore {
@ -204,13 +204,18 @@ impl WindowStore {
&wgpu::DeviceDescriptor {
label: None,
features: wgpu::Features::empty(),
limits: wgpu::Limits::downlevel_defaults(),
limits: wgpu::Limits::default(),
},
None,
)
.block_on()
.unwrap();
let device = Arc::new(device);
let queue = Arc::new(queue);
let renderer = Renderer::new(device.to_owned(), queue.to_owned());
let renderer = Arc::new(renderer);
Self {
ipc_sender,
ipc_to_window: Default::default(),
@ -218,8 +223,9 @@ impl WindowStore {
runtime,
instance,
adapter,
device: Arc::new(device),
queue: Arc::new(queue),
device,
queue,
renderer,
}
}
@ -247,6 +253,7 @@ impl WindowStore {
&self.adapter,
self.device.to_owned(),
self.queue.to_owned(),
self.renderer.to_owned(),
&event_loop,
)?;
let window_id = window.get_id();