🦆 UI Framework | egui + wgpu + winit Environment Setup|Terre 开发日志 #0002
2024-11-13
💡

egui is an easy-to-use GUI in pure Rust
rust
fn render(runtime: &mut Runtime) {
let surface = &runtime.context.surface;
let device = &runtime.context.device;
let queue = &runtime.context.queue;
let output = surface.get_current_texture().unwrap();
let view = output
.texture
.create_view(&wgpu::TextureViewDescriptor::default());
let mut encoder = device.create_command_encoder(&wgpu::CommandEncoderDescriptor {
label: Some("Egui Render Encoder"),
});
// Render models
runtime.nodes.iter().for_each(|it| {
runtime
.pass
.draw(
surface,
device,
queue,
&mut encoder,
&view,
it,
)
.expect("Draw failed!");
});
// Render egui UI
let size = runtime.window.inner_size();
runtime.egui_renderer.draw(device, queue, &runtime.window, &mut encoder, &view,
&ScreenDescriptor {
size_in_pixels: [ size.width, size.height ],
pixels_per_point: pixels_per_point(
&runtime.egui_renderer.context,
&runtime.window,
),
},
|mut ui| {
egui::Window::new("Settings")
.resizable(true)
.vscroll(true)
.default_open(false)
.show(&ui, |mut ui| {
ui.label("Window!");
ui.add(egui::Slider::new(&mut runtime.camera.fovy, 10f32..=120f32).text("fovy"))
});
},
);
queue.submit(Some(encoder.finish()));
output.present();
}