|
@@ -1,7 +1,7 @@
|
|
|
use std::{iter, time::{Duration, Instant}};
|
|
use std::{iter, time::{Duration, Instant}};
|
|
|
|
|
|
|
|
use camera::{camera_buffer, camera_controller, camera_struct::Camera, camera_uniform};
|
|
use camera::{camera_buffer, camera_controller, camera_struct::Camera, camera_uniform};
|
|
|
-use wgpu::{util::DeviceExt, BlendState, ColorTargetState, PipelineLayoutDescriptor, RenderPipelineDescriptor};
|
|
|
|
|
|
|
+use wgpu::{util::DeviceExt, BlendState, ColorTargetState, PipelineLayoutDescriptor, RenderPipeline, RenderPipelineDescriptor};
|
|
|
use winit::{
|
|
use winit::{
|
|
|
event::*,
|
|
event::*,
|
|
|
event_loop::EventLoop,
|
|
event_loop::EventLoop,
|
|
@@ -11,11 +11,14 @@ use winit::{
|
|
|
mod camera;
|
|
mod camera;
|
|
|
mod object;
|
|
mod object;
|
|
|
mod sky;
|
|
mod sky;
|
|
|
|
|
+mod wireframe;
|
|
|
|
|
|
|
|
#[cfg(target_arch = "wasm32")]
|
|
#[cfg(target_arch = "wasm32")]
|
|
|
use wasm_bindgen::prelude::*;
|
|
use wasm_bindgen::prelude::*;
|
|
|
|
|
|
|
|
struct State<'a> {
|
|
struct State<'a> {
|
|
|
|
|
+ wireframe: bool,
|
|
|
|
|
+ wireframe_pipeline: RenderPipeline,
|
|
|
surface: wgpu::Surface<'a>,
|
|
surface: wgpu::Surface<'a>,
|
|
|
device: wgpu::Device,
|
|
device: wgpu::Device,
|
|
|
queue: wgpu::Queue,
|
|
queue: wgpu::Queue,
|
|
@@ -111,7 +114,7 @@ impl<'a> State<'a> {
|
|
|
|
|
|
|
|
let shader = device.create_shader_module(wgpu::ShaderModuleDescriptor {
|
|
let shader = device.create_shader_module(wgpu::ShaderModuleDescriptor {
|
|
|
label: Some("Shader 1 from shader.wgsl"),
|
|
label: Some("Shader 1 from shader.wgsl"),
|
|
|
- source: wgpu::ShaderSource::Wgsl(include_str!("./shaders/shader.wgsl").into()),
|
|
|
|
|
|
|
+ source: wgpu::ShaderSource::Wgsl(include_str!("./shaders/plane_shader.wgsl").into()),
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
@@ -153,7 +156,7 @@ impl<'a> State<'a> {
|
|
|
front_face: wgpu::FrontFace::Ccw,
|
|
front_face: wgpu::FrontFace::Ccw,
|
|
|
cull_mode: None,
|
|
cull_mode: None,
|
|
|
unclipped_depth: false,
|
|
unclipped_depth: false,
|
|
|
- polygon_mode: wgpu::PolygonMode::Line,
|
|
|
|
|
|
|
+ polygon_mode: wgpu::PolygonMode::Fill, //Or wgpu::PolygonMode::Fill
|
|
|
conservative: false
|
|
conservative: false
|
|
|
},
|
|
},
|
|
|
depth_stencil: None,
|
|
depth_stencil: None,
|
|
@@ -182,10 +185,15 @@ impl<'a> State<'a> {
|
|
|
let old_frame_times : Vec<f64> = vec![];
|
|
let old_frame_times : Vec<f64> = vec![];
|
|
|
let max_history: usize = 60;
|
|
let max_history: usize = 60;
|
|
|
let last_fps = Instant::now();
|
|
let last_fps = Instant::now();
|
|
|
|
|
+
|
|
|
|
|
+ let wireframe_pipeline = wireframe::wireframe_pipeline::new(&device, &config, &camera_bind_group_layout);
|
|
|
|
|
+ let wireframe = true;
|
|
|
Self {
|
|
Self {
|
|
|
|
|
+ wireframe,
|
|
|
surface,
|
|
surface,
|
|
|
vertex_buffer,
|
|
vertex_buffer,
|
|
|
render_pipeline,
|
|
render_pipeline,
|
|
|
|
|
+ wireframe_pipeline,
|
|
|
device,
|
|
device,
|
|
|
queue,
|
|
queue,
|
|
|
config,
|
|
config,
|
|
@@ -280,7 +288,12 @@ impl<'a> State<'a> {
|
|
|
});
|
|
});
|
|
|
//render_pass.set_pipeline(&self.sky_pipeline);
|
|
//render_pass.set_pipeline(&self.sky_pipeline);
|
|
|
|
|
|
|
|
- render_pass.set_pipeline(&self.render_pipeline);
|
|
|
|
|
|
|
+ if self.wireframe {
|
|
|
|
|
+ render_pass.set_pipeline(&self.wireframe_pipeline);
|
|
|
|
|
+ }else{
|
|
|
|
|
+ render_pass.set_pipeline(&self.render_pipeline);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
render_pass.set_vertex_buffer(0, self.vertex_buffer.slice(..));
|
|
render_pass.set_vertex_buffer(0, self.vertex_buffer.slice(..));
|
|
|
render_pass.set_bind_group(0, &self.camera_bind_group, &[]);
|
|
render_pass.set_bind_group(0, &self.camera_bind_group, &[]);
|
|
|
render_pass.draw(0..self.num_vertices, 0..1);
|
|
render_pass.draw(0..self.num_vertices, 0..1);
|