X-Git-Url: https://codewiz.org/gitweb?p=mandelwow.git;a=blobdiff_plain;f=main.rs;h=b492676cfb51527ce537c9c86679b735a44101af;hp=56adc5df4d6e00f1ded6e1d221e85f3b10148902;hb=595fa92af6e72783e2b7624f5b8e5f5418d4e757;hpb=685148d70bd97c8ddae86423e4b969e91aa46f7a diff --git a/main.rs b/main.rs index 56adc5d..b492676 100644 --- a/main.rs +++ b/main.rs @@ -6,7 +6,7 @@ extern crate glium; extern crate glutin; extern crate image; -use cgmath::{Euler, Matrix4, One, Rad, Vector3}; +use cgmath::{Euler, Matrix4, Rad, Vector3, Zero}; use cgmath::conv::array4x4; use glium::{DisplayBuild, Surface}; use glutin::ElementState::Pressed; @@ -14,6 +14,7 @@ use glutin::Event::KeyboardInput; use glutin::VirtualKeyCode; use mandelwow_lib::*; use std::f32::consts::PI; +use std::time::{Duration, Instant}; #[cfg(target_os = "emscripten")] use std::os::raw::{c_int, c_void}; @@ -114,19 +115,24 @@ fn main() { let sea_xstep = (sea_xmax - sea_xmin) / (SEA_XSIZE as f32); let sea_zstep = (sea_zmax - sea_zmin) / (SEA_ZSIZE as f32); - let mut sea = [[Matrix4::one(); SEA_ZSIZE]; SEA_XSIZE]; + let mut sea = [[Vector3::zero(); SEA_ZSIZE]; SEA_XSIZE]; for x in 0..SEA_XSIZE { for z in 0..SEA_ZSIZE { - sea[x][z] = Matrix4::from_translation(Vector3{ + sea[x][z] = Vector3 { x: sea_xmin + (x as f32) * sea_xstep, y: sea_y, z: sea_zmin + (z as f32) * sea_zstep, - }); + }; } - } + } + + let mut frame_cnt = 0; + let mut last_report_time = Instant::now(); + let mut last_report_frame_cnt = 0; set_main_loop_callback(|| { camera.update(); + let perspview = camera.get_perspview(); if !pause { // Increment time @@ -166,12 +172,10 @@ fn main() { for z in 0..SEA_ZSIZE { let wave = (((x as f32 / SEA_XSIZE as f32 * PI * 5.0 + t * 2.0)).sin() + ((z as f32 / SEA_ZSIZE as f32 * PI * 3.0 + t * 3.0)).sin()) * 0.3; - let model = Matrix4::from_translation( - Vector3{x: 0., y: wave, z: 0.}) * sea[x][z]; + let model = Matrix4::from_translation(sea[x][z] + Vector3 {x: 0., y: wave, z: 0.}); let uniforms = uniform! { model: array4x4(model), - view: camera.get_view(), - perspective: camera.get_perspective(), + perspview: perspview, }; shaded_cube.draw(&mut frame, &uniforms); } @@ -219,6 +223,16 @@ fn main() { } } + frame_cnt += 1; + let now = Instant::now(); + if now - last_report_time > Duration::from_secs(10) { + let fps = (frame_cnt - last_report_frame_cnt) as f32 / + (now - last_report_time).as_secs() as f32; + println!("fps={}", fps); + last_report_time = now; + last_report_frame_cnt = frame_cnt; + } + support::Action::Continue }); }