Minor cleanups

This commit is contained in:
Patrick Walton 2019-01-17 12:49:52 -08:00
parent 4b1c948e6a
commit b3681684a6
1 changed files with 32 additions and 36 deletions

View File

@ -33,7 +33,6 @@ use std::io::Read;
use std::mem;
use std::path::PathBuf;
use std::ptr;
use std::time::{Duration, Instant};
use usvg::{Options as UsvgOptions, Tree};
#[global_allocator]
@ -86,7 +85,7 @@ fn main() {
let mut camera_position = Point4DF32::new(1.1, 1.0, 3.0, 1.0);
let mut camera_velocity = Point4DF32::new(0.0, 0.0, 0.0, 1.0);
let (mut camera_yaw, mut camera_pitch, mut camera_roll) = (0.0, 0.0, 0.0);
let (mut camera_yaw, mut camera_pitch) = (0.0, 0.0);
let window_size = Size2D::new(drawable_width, drawable_height);
@ -95,13 +94,12 @@ fn main() {
base_scene.transform(&base_transform);
while !exit {
let rotation = Transform3DF32::from_rotation(-camera_yaw, -camera_pitch, -camera_roll);
let rotation = Transform3DF32::from_rotation(-camera_yaw, -camera_pitch, 0.0);
camera_position = camera_position + rotation.transform_point(camera_velocity);
let mut transform = Transform3DF32::from_perspective(FRAC_PI_4, 4.0 / 3.0, 0.01, 100.0);
transform = transform.post_mul(&Transform3DF32::from_rotation(camera_yaw,
camera_pitch,
camera_roll));
transform =
transform.post_mul(&Transform3DF32::from_rotation(camera_yaw, camera_pitch, 0.0));
transform = transform.post_mul(&Transform3DF32::from_translation(-camera_position.x(),
-camera_position.y(),
-camera_position.z()));
@ -215,53 +213,24 @@ fn load_scene(options: &Options, window_size: &Size2D<u32>) -> Scene {
}
fn build_scene(scene: &Scene, options: &Options) -> BuiltScene {
let (mut elapsed_object_build_time, mut elapsed_scene_build_time) = (0.0, 0.0);
let z_buffer = ZBuffer::new(&scene.view_box);
let start_time = Instant::now();
let built_objects = match options.jobs {
Some(1) => scene.build_objects_sequentially(&z_buffer),
_ => scene.build_objects(&z_buffer),
};
elapsed_object_build_time += duration_to_ms(&(Instant::now() - start_time));
let start_time = Instant::now();
let mut built_scene = BuiltScene::new(&scene.view_box);
built_scene.shaders = scene.build_shaders();
let mut scene_builder = SceneBuilder::new(built_objects, z_buffer, &scene.view_box);
built_scene.solid_tiles = scene_builder.build_solid_tiles();
while let Some(batch) = scene_builder.build_batch() {
built_scene.batches.push(batch);
}
elapsed_scene_build_time += duration_to_ms(&(Instant::now() - start_time));
let total_elapsed_time = elapsed_object_build_time + elapsed_scene_build_time;
/*
println!(
"{:.3}ms ({:.3}ms objects, {:.3}ms scene) elapsed",
total_elapsed_time, elapsed_object_build_time, elapsed_scene_build_time
);
println!("{} solid tiles", built_scene.solid_tiles.len());
for (batch_index, batch) in built_scene.batches.iter().enumerate() {
println!(
"Batch {}: {} fills, {} mask tiles",
batch_index,
batch.fills.len(),
batch.mask_tiles.len()
);
}
*/
built_scene
}
fn duration_to_ms(duration: &Duration) -> f64 {
duration.as_secs() as f64 * 1000.0 + f64::from(duration.subsec_micros()) / 1000.0
}
struct Renderer {
fill_program: FillProgram,
solid_tile_program: SolidTileProgram,
@ -477,6 +446,15 @@ impl FillVertexArray {
}
}
impl Drop for FillVertexArray {
#[inline]
fn drop(&mut self) {
unsafe {
gl::DeleteVertexArrays(1, &mut self.gl_vertex_array);
}
}
}
struct MaskTileVertexArray {
gl_vertex_array: GLuint,
vertex_buffer: Buffer,
@ -508,6 +486,15 @@ impl MaskTileVertexArray {
}
}
impl Drop for MaskTileVertexArray {
#[inline]
fn drop(&mut self) {
unsafe {
gl::DeleteVertexArrays(1, &mut self.gl_vertex_array);
}
}
}
struct SolidTileVertexArray {
gl_vertex_array: GLuint,
vertex_buffer: Buffer,
@ -537,6 +524,15 @@ impl SolidTileVertexArray {
}
}
impl Drop for SolidTileVertexArray {
#[inline]
fn drop(&mut self) {
unsafe {
gl::DeleteVertexArrays(1, &mut self.gl_vertex_array);
}
}
}
struct VertexAttr {
attr: GLuint,
}