diff options
Diffstat (limited to 'src/tacmap/render.rs')
| -rw-r--r-- | src/tacmap/render.rs | 70 |
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); + } +} |
