Resize viewport framebuffer

This commit is contained in:
mars 2022-05-15 16:06:42 -06:00
parent c816b6629e
commit a2fc6590b4
3 changed files with 34 additions and 5 deletions

View File

@ -113,7 +113,7 @@ impl Application {
{
puffin::profile_scope!("Main render");
self.render_state.update_viewport(&mut self.viewport);
self.render_state.update_viewport(&mut self.egui_rp, &mut self.viewport);
self.render_state.render();
}

View File

@ -226,9 +226,32 @@ impl RenderState {
}
}
pub fn update_viewport(&mut self, viewport: &mut ViewportWidget) {
pub fn update_viewport(
&mut self,
egui_rp: &mut egui_wgpu_backend::RenderPass,
widget: &mut ViewportWidget,
) {
let mut store = self.resources.get_mut::<ViewportStore>().unwrap();
store.viewport.camera = viewport.flycam.get_camera();
let mut viewport = &mut store.viewport;
viewport.camera = widget.flycam.get_camera();
if viewport.textures.width != widget.width || viewport.textures.height != widget.height {
viewport.textures = OffscreenTextures::new(
&viewport.device,
widget.width,
widget.height,
viewport.output_format,
);
egui_rp
.update_egui_texture_from_wgpu_texture(
&viewport.device,
&viewport.textures.output_view,
wgpu::FilterMode::Nearest,
viewport.egui_texture,
)
.unwrap();
}
}
pub fn render(&mut self) {

View File

@ -130,6 +130,8 @@ impl UserInterface {
pub struct ViewportWidget {
pub texture: egui::TextureId,
pub flycam: Flycam,
pub width: u32,
pub height: u32,
}
impl ViewportWidget {
@ -137,6 +139,8 @@ impl ViewportWidget {
Self {
texture,
flycam: Flycam::new(0.002, 10.0, 0.25),
width: 640,
height: 480,
}
}
}
@ -149,6 +153,9 @@ impl egui::Widget for &mut ViewportWidget {
let sense = egui::Sense::click_and_drag();
let response = ui.interact(rect, id, sense);
self.width = rect.width().round() as u32;
self.height = rect.height().round() as u32;
use egui::{pos2, Color32, Mesh, Rect, Shape};
let mut mesh = Mesh::with_texture(self.texture);
let uv = Rect::from_min_max(pos2(0.0, 0.0), pos2(1.0, 1.0));
@ -193,8 +200,7 @@ impl egui::Widget for &mut ViewportWidget {
self.flycam.defocus();
}
println!("{:#?}", self.flycam);
self.flycam.resize(self.width, self.height);
self.flycam.update();
response