|
|
@@ -1,4 +1,4 @@
|
|
|
-use std::iter;
|
|
|
+use std::{iter, time::{Duration, Instant}};
|
|
|
|
|
|
use camera::{camera_buffer, camera_struct::Camera, camera_uniform};
|
|
|
use wgpu::{util::DeviceExt, BlendState, ColorTargetState, PipelineLayoutDescriptor, RenderPipelineDescriptor};
|
|
|
@@ -30,6 +30,9 @@ struct State<'a> {
|
|
|
// it gets dropped after it as the surface contains
|
|
|
// unsafe references to the window's resources.
|
|
|
window: &'a Window,
|
|
|
+ num_vertices: u32,
|
|
|
+ last_frame: Instant,
|
|
|
+ frametime: f64,
|
|
|
}
|
|
|
|
|
|
impl<'a> State<'a> {
|
|
|
@@ -105,12 +108,14 @@ impl<'a> State<'a> {
|
|
|
|
|
|
|
|
|
let plan1 = object::generate_plane(1,1,1.,1.);
|
|
|
+ let plan2 = plan1.clone();
|
|
|
let vertex_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor{
|
|
|
label: Some("Vertex Buffer 1"),
|
|
|
contents: bytemuck::cast_slice(&plan1.vertices()),
|
|
|
usage: wgpu::BufferUsages::VERTEX,
|
|
|
});
|
|
|
|
|
|
+ let num_vertices = plan2.len();
|
|
|
let (camera, camera_uniform, camera_buffer,camera_bind_group, camera_bind_group_layout) = camera_buffer::new(&device, &config);
|
|
|
|
|
|
|
|
|
@@ -127,7 +132,7 @@ impl<'a> State<'a> {
|
|
|
layout: Some(&pipeline_layout),
|
|
|
vertex: wgpu::VertexState {
|
|
|
module: &shader,
|
|
|
- entry_point: "@vertex",
|
|
|
+ entry_point: "vs_main".into(),
|
|
|
buffers: &[
|
|
|
object::Vertex::desc(),
|
|
|
],
|
|
|
@@ -138,7 +143,7 @@ impl<'a> State<'a> {
|
|
|
front_face: wgpu::FrontFace::Ccw,
|
|
|
cull_mode: Some(wgpu::Face::Back),
|
|
|
unclipped_depth: false,
|
|
|
- polygon_mode: wgpu::PolygonMode::Line,
|
|
|
+ polygon_mode: wgpu::PolygonMode::Fill,
|
|
|
conservative: false
|
|
|
},
|
|
|
depth_stencil: None,
|
|
|
@@ -149,7 +154,7 @@ impl<'a> State<'a> {
|
|
|
},
|
|
|
fragment: Some(wgpu::FragmentState{
|
|
|
module: &shader,
|
|
|
- entry_point: "@fragment",
|
|
|
+ entry_point: "fs_main",
|
|
|
targets: &[Some(ColorTargetState{
|
|
|
format: config.format,
|
|
|
blend: Some(BlendState::REPLACE),
|
|
|
@@ -159,6 +164,8 @@ impl<'a> State<'a> {
|
|
|
multiview: None
|
|
|
});
|
|
|
|
|
|
+ let last_frame = Instant::now();
|
|
|
+ let delta = 0.2;
|
|
|
|
|
|
Self {
|
|
|
surface,
|
|
|
@@ -173,6 +180,9 @@ impl<'a> State<'a> {
|
|
|
camera_bind_group,
|
|
|
camera_buffer,
|
|
|
camera_uniform,
|
|
|
+ num_vertices: num_vertices,
|
|
|
+ last_frame: last_frame,
|
|
|
+ frametime: delta,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -229,12 +239,20 @@ impl<'a> State<'a> {
|
|
|
timestamp_writes: None,
|
|
|
});
|
|
|
render_pass.set_pipeline(&self.render_pipeline);
|
|
|
+ render_pass.set_vertex_buffer(0, self.vertex_buffer.slice(..));
|
|
|
+ render_pass.set_bind_group(0, &self.camera_bind_group, &[]);
|
|
|
+ render_pass.draw(0..self.num_vertices, 0..1);
|
|
|
//render_pass.draws
|
|
|
}
|
|
|
|
|
|
self.queue.submit(iter::once(encoder.finish()));
|
|
|
output.present();
|
|
|
|
|
|
+ self.frametime = self.last_frame.elapsed().as_millis() as f64;
|
|
|
+ self.last_frame = Instant::now();
|
|
|
+
|
|
|
+ println!("{:?}", self.frametime);
|
|
|
+
|
|
|
Ok(())
|
|
|
}
|
|
|
}
|