aboutsummaryrefslogtreecommitdiff
path: root/stockton-render/src/draw/ui/render.rs
diff options
context:
space:
mode:
authortcmal <me@aria.rip>2024-08-25 17:44:23 +0100
committertcmal <me@aria.rip>2024-08-25 17:44:23 +0100
commit6eb9083b1f2fec63e17dc8ef462ea89bae0854b5 (patch)
tree814f670c38040c37408db06b66c9cb24550393e9 /stockton-render/src/draw/ui/render.rs
parent6ef351de4ba506e7f0f285569aa0e22255bb68c6 (diff)
feat(render): ui draw pass
Diffstat (limited to 'stockton-render/src/draw/ui/render.rs')
-rw-r--r--stockton-render/src/draw/ui/render.rs97
1 files changed, 0 insertions, 97 deletions
diff --git a/stockton-render/src/draw/ui/render.rs b/stockton-render/src/draw/ui/render.rs
deleted file mode 100644
index 009a1b7..0000000
--- a/stockton-render/src/draw/ui/render.rs
+++ /dev/null
@@ -1,97 +0,0 @@
-use crate::draw::texture::TextureRepo;
-use hal::pso::{Rect, ShaderStageFlags};
-
-use super::UiPoint;
-use crate::draw::buffers::DrawBuffers;
-use crate::types::*;
-use crate::UiState;
-use anyhow::{anyhow, Result};
-use egui::{ClippedMesh, TextureId};
-use std::{array::IntoIter, convert::TryInto, iter::empty};
-use stockton_types::Vector2;
-
-pub fn do_render(
- cmd_buffer: &mut CommandBufferT,
- pipeline_layout: &PipelineLayoutT,
- draw_buffers: &mut DrawBuffers<UiPoint>,
- tex_repo: &mut TextureRepo,
- ui: &mut UiState,
-) -> Result<()> {
- // TODO: Actual UI Rendering
- let (_out, shapes) = ui.end_frame();
- let screen = ui.dimensions().ok_or(anyhow!("UI not set up properly."))?;
- let shapes = ui.ctx().tessellate(shapes);
-
- for ClippedMesh(rect, tris) in shapes.iter() {
- assert!(tris.texture_id == TextureId::Egui);
-
- // Copy triangles/indicies
- for i in (0..tris.indices.len()).step_by(3) {
- draw_buffers.index_buffer[i / 3] = (
- tris.indices[i].try_into()?,
- tris.indices[i + 1].try_into()?,
- tris.indices[i + 2].try_into()?,
- );
- // eprintln!(
- // "{} {}",
- // tris.vertices[tris.indices[i] as usize].uv.x,
- // tris.vertices[tris.indices[i] as usize].uv.y
- // );
- // eprintln!(
- // "{} {}",
- // tris.vertices[tris.indices[i + 1] as usize].uv.x,
- // tris.vertices[tris.indices[i + 1] as usize].uv.y
- // );
- // eprintln!(
- // "{} {}",
- // tris.vertices[tris.indices[i + 2] as usize].uv.x,
- // tris.vertices[tris.indices[i + 2] as usize].uv.y
- // );
- }
- for (i, vertex) in tris.vertices.iter().enumerate() {
- draw_buffers.vertex_buffer[i] = UiPoint(
- Vector2::new(vertex.pos.x, vertex.pos.y),
- Vector2::new(vertex.uv.x, vertex.uv.y),
- [
- vertex.color.r() as f32 / 255.0,
- vertex.color.g() as f32 / 255.0,
- vertex.color.b() as f32 / 255.0,
- vertex.color.a() as f32 / 255.0,
- ],
- );
- }
- // TODO: *Properly* deal with textures
- if let Some(ds) = tex_repo.attempt_get_descriptor_set(0) {
- unsafe {
- cmd_buffer.push_graphics_constants(
- pipeline_layout,
- ShaderStageFlags::VERTEX,
- 0,
- &[screen.x.to_bits(), screen.y.to_bits()],
- );
-
- cmd_buffer.set_scissors(
- 0,
- IntoIter::new([Rect {
- x: rect.min.x as i16,
- y: rect.min.y as i16,
- w: rect.width() as i16,
- h: rect.height() as i16,
- }]),
- );
- cmd_buffer.bind_graphics_descriptor_sets(
- pipeline_layout,
- 0,
- IntoIter::new([ds]),
- empty(),
- );
- // Call draw
- cmd_buffer.draw_indexed(0..tris.indices.len() as u32, 0, 0..1);
- }
- } else {
- // tex_repo.queue_load(0);
- }
- }
-
- Ok(())
-}