From 463ae7ac4473dd38ddbc525b42b322c63baa3db3 Mon Sep 17 00:00:00 2001 From: fredrikr79 Date: Thu, 2 Oct 2025 09:58:33 +0200 Subject: [PATCH] it runs --- gloom-rs/src/draw.rs | 12 ++++++------ gloom-rs/src/main.rs | 10 +++++++++- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/gloom-rs/src/draw.rs b/gloom-rs/src/draw.rs index e1d443a..99b6043 100644 --- a/gloom-rs/src/draw.rs +++ b/gloom-rs/src/draw.rs @@ -36,7 +36,7 @@ fn offset(n: u32) -> *const c_void { } // ptr::null() -pub unsafe fn draw_scene(node: &SceneNode, +unsafe fn draw_scene(node: &SceneNode, view_projection_matrix: &glm::Mat4, mut transformation_so_far: glm::Mat4, shader: &Shader, @@ -156,12 +156,12 @@ unsafe fn create_vao(vertices: &Vec, indices: &Vec, colors: &Vec, } pub struct World { - meshes: HashMap, - nodes: HashMap, + pub meshes: HashMap, + pub nodes: HashMap>>>, } #[derive(Clone, Copy, Eq, PartialEq, Hash)] -enum Nodes { +pub enum Nodes { LunarSurface=0, HeliBody=1, HeliDoor=2, @@ -194,11 +194,11 @@ pub fn load_models() -> HashMap { ]); } -pub fn setup_scene_graph(meshes: HashMap) -> HashMap>>> { +pub fn setup_scene_graph(meshes: &HashMap) -> HashMap>>> { let mut nodes = HashMap::new(); // Create all nodes - for (node, mesh) in &meshes { + for (node, mesh) in meshes { nodes.insert(*node, SceneNode::from_vao(*node as u32, mesh.index_count)); } diff --git a/gloom-rs/src/main.rs b/gloom-rs/src/main.rs index de15421..171b677 100644 --- a/gloom-rs/src/main.rs +++ b/gloom-rs/src/main.rs @@ -86,7 +86,6 @@ fn main() { println!("GLSL\t: {}", util::get_gl_string(gl::SHADING_LANGUAGE_VERSION)); } - let mut transformation: glm::Mat4; let perspective: glm::Mat4 = glm::perspective( window_aspect_ratio, @@ -95,6 +94,13 @@ fn main() { 1000.0f32 ); + let meshes = draw::load_models(); + let nodes = draw::setup_scene_graph(&meshes); + let mut world = draw::World { + meshes: meshes, + nodes: nodes + }; + let mut camera_position: glm::Vec3 = glm::vec3(0.0, 0.0, 0.0); let translation_speed = 30.0f32; let rotation_speed = 1.5f32; @@ -220,6 +226,8 @@ fn main() { // Clear the color and depth buffers gl::ClearColor(0.40, 0.55, 1.0, 1.0); // night sky gl::Clear(gl::COLOR_BUFFER_BIT | gl::DEPTH_BUFFER_BIT); + + draw::update(elapsed, &mut world, perspective, transformation, &simple_shader); // Display the new color buffer on the display context.swap_buffers().unwrap(); // we use "double buffering" to avoid artifacts