summaryrefslogtreecommitdiffstats
path: root/src/tacmap/render.rs
diff options
context:
space:
mode:
authorJon Santmyer <jon@jonsantmyer.com>2026-04-22 15:40:32 -0400
committerJon Santmyer <jon@jonsantmyer.com>2026-04-22 15:40:32 -0400
commit25255a8b9147d27aa40b28d6aadb62c0ab275d32 (patch)
tree2d2ec324de7c0c16c098d85746ab060edb536f76 /src/tacmap/render.rs
parent3d3864171785c589872bf23faaaa3a421f56ee4e (diff)
downloadsystemic4x-25255a8b9147d27aa40b28d6aadb62c0ab275d32.tar.gz
systemic4x-25255a8b9147d27aa40b28d6aadb62c0ab275d32.tar.bz2
systemic4x-25255a8b9147d27aa40b28d6aadb62c0ab275d32.zip
simplify rendering pipeline. add gridlines to tacmap
Diffstat (limited to 'src/tacmap/render.rs')
-rw-r--r--src/tacmap/render.rs70
1 files changed, 49 insertions, 21 deletions
diff --git a/src/tacmap/render.rs b/src/tacmap/render.rs
index 26d6977..c1256ff 100644
--- a/src/tacmap/render.rs
+++ b/src/tacmap/render.rs
@@ -1,10 +1,12 @@
use std::{fmt::Display, num::NonZero};
use std::error::Error;
+use wgpu::RenderPass;
+
use crate::canvas::Canvas;
use crate::solar_system::Kilometers;
use crate::tacmap::camera::Camera;
-use crate::wgpuctx::RenderPassBuilder;
+use crate::wgpuctx::{RenderPassBuilder, SceneCtx};
use crate::{solar_system::{SolarSystem, SystemId}, timeman::Second, vertex::{self, Vertex}, wgpuctx::{WgpuCtx, pipeline::RenderPipelineBuilder}};
struct BodyInstance
@@ -161,7 +163,7 @@ impl BodyRenderer
pub fn render(
&self,
wgpuctx: &WgpuCtx,
- canvas: &Canvas,
+ pass: &mut RenderPass,
camera: &Camera)
{
let (num_bodies, bodies_buffer) = match &self.body_instance_buffer {
@@ -169,27 +171,13 @@ impl BodyRenderer
None => return
};
- let mut encoder = wgpuctx.create_default_encoder("Tactical map renderer encoder");
- let view = canvas.view();
-
- {
- camera.stage_changes(&mut encoder);
- }
- {
- let mut pass = RenderPassBuilder::new("Tactiacal map render pass", view)
- .clear_color(wgpu::Color { r: 0.0, g: 0.0, b: 0.1, a: 1.0 })
- .build(&mut encoder);
-
- pass.set_pipeline(&self.pipeline);
- pass.set_bind_group(0, camera.bindgroup(), &[]);
+ pass.set_pipeline(&self.pipeline);
+ pass.set_bind_group(0, camera.bindgroup(), &[]);
- pass.set_vertex_buffer(0, self.body_vertex_buffer.slice(..));
- pass.set_vertex_buffer(1, bodies_buffer.slice(..));
+ pass.set_vertex_buffer(0, self.body_vertex_buffer.slice(..));
+ pass.set_vertex_buffer(1, bodies_buffer.slice(..));
- pass.draw(0..6, 0..num_bodies.clone() as _);
- }
-
- wgpuctx.submit_encoder(encoder);
+ pass.draw(0..6, 0..num_bodies.clone() as _);
}
} // impl RenderState
@@ -229,3 +217,43 @@ impl BodyInstanceRaw
}
}
}
+
+pub struct GridRenderer
+{
+ pipeline: wgpu::RenderPipeline,
+}
+
+impl GridRenderer
+{
+ pub fn new(wgpuctx: &WgpuCtx)
+ -> Self
+ {
+ let shader = wgpuctx.create_shader(
+ wgpu::include_wgsl!(concat!(
+ env!("CARGO_MANIFEST_DIR"),
+ "/assets/shaders/tacmap/grid.wgsl")
+ ));
+
+ let render_pipeline = RenderPipelineBuilder::new(&shader)
+ .add_bindgroup(&Camera::bindgroup_layout(wgpuctx))
+ .cull_mode(None)
+ .build(Some("Tactical map grid pipeline"), wgpuctx);
+
+ Self {
+ pipeline: render_pipeline
+ }
+ }
+
+ pub fn render(
+ &self,
+ wgpuctx: &WgpuCtx,
+ pass: &mut RenderPass,
+ camera: &Camera
+ )
+ {
+ pass.set_pipeline(&self.pipeline);
+ pass.set_bind_group(0, camera.bindgroup(), &[]);
+
+ pass.draw(0..6, 0..1);
+ }
+}