Procházet zdrojové kódy

Works, tried to add fps/framerate

Ghastrod před 1 rokem
rodič
revize
1a8e110e3f
7 změnil soubory, kde provedl 74 přidání a 9 odebrání
  1. 44 0
      Cargo.lock
  2. 1 0
      Cargo.toml
  3. 22 4
      src/lib.rs
  4. 0 1
      src/main.rs
  5. 3 3
      src/object.rs
  6. 4 1
      src/shaders/compute.wgsl
  7. 0 0
      src/window.rs

+ 44 - 0
Cargo.lock

@@ -73,6 +73,12 @@ version = "0.2.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04"
 
+[[package]]
+name = "android-tzdata"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+
 [[package]]
 name = "android_system_properties"
 version = "0.1.5"
@@ -309,6 +315,20 @@ version = "0.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e"
 
+[[package]]
+name = "chrono"
+version = "0.4.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401"
+dependencies = [
+ "android-tzdata",
+ "iana-time-zone",
+ "js-sys",
+ "num-traits",
+ "wasm-bindgen",
+ "windows-targets 0.52.5",
+]
+
 [[package]]
 name = "codespan-reporting"
 version = "0.11.1"
@@ -679,6 +699,29 @@ version = "2.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
 
+[[package]]
+name = "iana-time-zone"
+version = "0.1.60"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows-core",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
 [[package]]
 name = "icrate"
 version = "0.0.4"
@@ -1830,6 +1873,7 @@ version = "0.1.0"
 dependencies = [
  "bytemuck",
  "cfg-if",
+ "chrono",
  "env_logger",
  "glam",
  "log",

+ 1 - 0
Cargo.toml

@@ -12,3 +12,4 @@ cfg-if = "1.0.0"
 pollster = "0.3.0"
 bytemuck = { version = "1.16.0", features = ["derive"] }
 glam = "0.27.0"
+chrono = "0.4.38"

+ 22 - 4
src/lib.rs

@@ -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(())
     }
 }

+ 0 - 1
src/main.rs

@@ -3,7 +3,6 @@ use wgpu5::run;
 use crate::object::generate_plane;
 
 mod camera;
-mod window;
 mod compute;
 mod object;
 fn main() {

+ 3 - 3
src/object.rs

@@ -21,14 +21,14 @@ impl Vertex{
 }
 
 
-#[derive(Default, Debug)]
+#[derive(Default, Debug, Clone)]
 pub struct Mesh {
     vertices: Vec<Vertex>,
 }
 
 impl Mesh{
-    pub fn len(self) -> usize{
-        return self.vertices.len()
+    pub fn len(&self) -> u32{
+        return self.vertices.len().try_into().unwrap()
     }
     pub fn vertices(self)-> Vec<Vertex>{
         self.vertices

+ 4 - 1
src/shaders/compute.wgsl

@@ -1,2 +1,5 @@
 @compute
-fn compute_main(){}
+fn compute_main(){}
+
+@vertex
+fn debug(){}

+ 0 - 0
src/window.rs