summaryrefslogtreecommitdiff
path: root/client/src/ui.rs
diff options
context:
space:
mode:
Diffstat (limited to 'client/src/ui.rs')
-rw-r--r--client/src/ui.rs54
1 files changed, 54 insertions, 0 deletions
diff --git a/client/src/ui.rs b/client/src/ui.rs
new file mode 100644
index 0000000..2fc5dd7
--- /dev/null
+++ b/client/src/ui.rs
@@ -0,0 +1,54 @@
+use egui::{Context, epaint::Primitive};
+use wgpu::{Buffer, BufferDescriptor, BufferUsages, Device, Queue};
+
+pub struct UiRenderer {
+ ctx: Context,
+}
+
+impl UiRenderer {
+ pub fn new(device: &Device) -> Self {
+ let index = device.create_buffer(&BufferDescriptor {
+ label: None,
+ size: 1,
+ usage: BufferUsages::INDEX | BufferUsages::COPY_DST,
+ mapped_at_creation: false,
+ });
+ let vertex = device.create_buffer(&BufferDescriptor {
+ label: None,
+ size: 1,
+ usage: BufferUsages::VERTEX | BufferUsages::COPY_DST,
+ mapped_at_creation: false,
+ });
+ Self {
+ ctx: Context::default(),
+ index,
+ vertex,
+ }
+ }
+
+ pub fn draw(&self, queue: &Queue) {
+ let raw_input = egui::RawInput::default();
+ let full_output = self.ctx.run(raw_input, |ctx| {
+ egui::CentralPanel::default().show(&ctx, |ui| {
+ ui.label("Hello world!");
+ if ui.button("Click me").clicked() {
+ // take some action here
+ }
+ });
+ });
+
+
+ // handle_platform_output(full_output.platform_output);
+ let clipped_primitives = self
+ .ctx
+ .tessellate(full_output.shapes, full_output.pixels_per_point);
+
+ for p in clipped_primitives {
+ match p.primitive {
+ Primitive::Mesh(mesh) => {}
+ _ => unreachable!(),
+ }
+ }
+ // paint(full_output.textures_delta, clipped_primitives);
+ }
+}