impl: add egui!!

This commit is contained in:
zack 2025-04-01 14:20:23 -04:00
parent b1c164dc6a
commit 6c70f7bc2e
No known key found for this signature in database
GPG key ID: EE8A2B709E2401D1
2 changed files with 40 additions and 29 deletions

View file

@ -294,6 +294,8 @@ impl Application {
} }
fn handle_event(&mut self, event: &WindowEvent, active_event_loop: &ActiveEventLoop) { fn handle_event(&mut self, event: &WindowEvent, active_event_loop: &ActiveEventLoop) {
let _ = self.egui_winit.on_window_event(&self.window, event);
match event { match event {
WindowEvent::CloseRequested => { WindowEvent::CloseRequested => {
info!("Close requested. Exiting..."); info!("Close requested. Exiting...");
@ -340,6 +342,8 @@ impl Application {
let raw_input = self.egui_winit.take_egui_input(&self.window); let raw_input = self.egui_winit.take_egui_input(&self.window);
tracing::info!("{:?}", raw_input);
let egui::FullOutput { let egui::FullOutput {
platform_output, platform_output,
textures_delta, textures_delta,
@ -350,17 +354,18 @@ impl Application {
self.egui_app.build_ui(ctx); self.egui_app.build_ui(ctx);
}); });
self.renderer.update_textures(textures_delta).unwrap();
self.egui_winit self.egui_winit
.handle_platform_output(&self.window, platform_output); .handle_platform_output(&self.window, platform_output);
let clipped_primitives = self.egui_ctx.tessellate(shapes, pixels_per_point); let clipped_primitives = self.egui_ctx.tessellate(shapes, pixels_per_point);
// --- Render Frame --- // --- Render Frame ---
match self.renderer.render_frame( match self
pixels_per_point, .renderer
textures_delta, .render_frame(pixels_per_point, &clipped_primitives)
&clipped_primitives, {
) {
Ok(_) => { Ok(_) => {
self.window.request_redraw(); self.window.request_redraw();
} }

View file

@ -183,10 +183,30 @@ impl Renderer {
} }
} }
pub fn update_textures(&mut self, textures_delta: TexturesDelta) -> Result<(), RendererError> {
tracing::trace!("Updating EGUI textures!");
if !textures_delta.free.is_empty() {
self.frames_data[self.current_frame].textures_to_free =
Some(textures_delta.free.clone());
}
if !textures_delta.set.is_empty() {
self.egui_renderer
.set_textures(
self.device.get_graphics_queue().handle(),
self.frames_data[self.current_frame].command_pool,
textures_delta.set.as_slice(),
)
.expect("Failed to update texture");
}
Ok(())
}
pub fn render_frame( pub fn render_frame(
&mut self, &mut self,
pixels_per_point: f32, pixels_per_point: f32,
textures_delta: TexturesDelta,
clipped_primitives: &[ClippedPrimitive], clipped_primitives: &[ClippedPrimitive],
) -> Result<(), RendererError> { ) -> Result<(), RendererError> {
// --- Handle Resize --- // --- Handle Resize ---
@ -253,29 +273,6 @@ impl Renderer {
.begin_command_buffer(command_buffer, &cmd_begin_info)?; .begin_command_buffer(command_buffer, &cmd_begin_info)?;
} }
if !textures_delta.free.is_empty() {
tracing::debug!("Setting textures to free");
frame_data.textures_to_free = Some(textures_delta.free.clone());
}
if !textures_delta.set.is_empty() {
tracing::trace!("Setting EGUI textures");
self.egui_renderer.set_textures(
self.device.get_graphics_queue().handle(),
frame_data.command_pool,
textures_delta.set.as_slice(),
)?;
}
tracing::info!("Rendering EGUI");
self.egui_renderer.cmd_draw(
command_buffer,
self.swapchain_extent,
pixels_per_point,
clipped_primitives,
)?;
tracing::debug!("Rendered EGUI");
let current_swapchain_image = swapchain_ref.images()[image_index as usize]; let current_swapchain_image = swapchain_ref.images()[image_index as usize];
let initial_layout_transition_barrier = vk::ImageMemoryBarrier::default() let initial_layout_transition_barrier = vk::ImageMemoryBarrier::default()
@ -382,6 +379,15 @@ impl Renderer {
self.device.raw().cmd_draw(command_buffer, 3, 1, 0, 0); self.device.raw().cmd_draw(command_buffer, 3, 1, 0, 0);
} }
tracing::trace!("Rendering EGUI");
self.egui_renderer.cmd_draw(
command_buffer,
self.swapchain_extent,
pixels_per_point,
clipped_primitives,
)?;
tracing::trace!("Rendered EGUI");
// --- End Dynamic Rendering --- // --- End Dynamic Rendering ---
unsafe { unsafe {
// Need unsafe for Vulkan commands // Need unsafe for Vulkan commands