diff --git a/crates/comet_app/src/app.rs b/crates/comet_app/src/app.rs index eb9a2a8..14998f5 100755 --- a/crates/comet_app/src/app.rs +++ b/crates/comet_app/src/app.rs @@ -381,6 +381,9 @@ impl App { WindowEvent::Resized(physical_size) => { renderer.resize(*physical_size); } + WindowEvent::ScaleFactorChanged { scale_factor, .. } => { + renderer.set_scale_factor(*scale_factor); + } WindowEvent::RedrawRequested => { window.request_redraw(); match renderer.render() { diff --git a/crates/comet_renderer/src/renderer.rs b/crates/comet_renderer/src/renderer.rs index a44b3c3..6e3a4ad 100644 --- a/crates/comet_renderer/src/renderer.rs +++ b/crates/comet_renderer/src/renderer.rs @@ -1,12 +1,15 @@ +use comet_colors::Color; use std::sync::Arc; use winit::dpi::PhysicalSize; use winit::window::Window; -use comet_colors::Color; pub trait Renderer: Sized + Send + Sync { - fn new(window: Arc, clear_color: Option) -> Self; - fn size(&self) -> PhysicalSize; - fn resize(&mut self, new_size: winit::dpi::PhysicalSize); - fn update(&mut self) -> f32; - fn render(&mut self) -> Result<(), wgpu::SurfaceError>; -} \ No newline at end of file + fn new(window: Arc, clear_color: Option) -> Self; + fn size(&self) -> PhysicalSize; + fn resize(&mut self, new_size: winit::dpi::PhysicalSize); + fn scale_factor(&self) -> f64; + fn set_scale_factor(&mut self, scale_factor: f64); + fn update(&mut self) -> f32; + fn render(&mut self) -> Result<(), wgpu::SurfaceError>; +} + diff --git a/crates/comet_renderer/src/renderer2d.rs b/crates/comet_renderer/src/renderer2d.rs index fb24fee..93b78f5 100755 --- a/crates/comet_renderer/src/renderer2d.rs +++ b/crates/comet_renderer/src/renderer2d.rs @@ -26,6 +26,7 @@ pub struct Renderer2D<'a> { queue: wgpu::Queue, config: wgpu::SurfaceConfiguration, size: PhysicalSize, + scale_factor: f64, universal_render_pipeline: wgpu::RenderPipeline, texture_bind_group_layout: wgpu::BindGroupLayout, texture_sampler: wgpu::Sampler, @@ -43,6 +44,7 @@ pub struct Renderer2D<'a> { impl<'a> Renderer2D<'a> { pub fn new(window: Arc, clear_color: Option) -> Renderer2D<'a> { let size = window.inner_size(); //PhysicalSize::::new(1920, 1080); + let scale_factor = window.scale_factor(); let instance = wgpu::Instance::new(wgpu::InstanceDescriptor { backends: wgpu::Backends::PRIMARY, @@ -258,6 +260,7 @@ impl<'a> Renderer2D<'a> { queue, config, size, + scale_factor, universal_render_pipeline, texture_bind_group_layout, texture_sampler, @@ -294,6 +297,14 @@ impl<'a> Renderer2D<'a> { } } + pub fn scale_factor(&self) -> f64 { + self.scale_factor + } + + pub fn set_scale_factor(&mut self, scale_factor: f64) { + self.scale_factor = scale_factor + } + pub fn add_draw_call(&mut self, draw_call: String, texture: Texture) { let draw_info = DrawInfo::new( draw_call, @@ -919,6 +930,14 @@ impl<'a> Renderer for Renderer2D<'a> { self.resize(new_size) } + fn scale_factor(&self) -> f64 { + self.scale_factor() + } + + fn set_scale_factor(&mut self, scale_factor: f64) { + self.set_scale_factor(scale_factor); + } + fn update(&mut self) -> f32 { self.update() }