Advertisement
Guest User

Untitled

a guest
May 4th, 2025
15
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 3.27 KB | None | 0 0
  1.  
  2. use crate::collision::Collider;
  3. use crate::shader::Shader;
  4. use nalgebra::{Matrix4, Vector3};
  5. use gl;
  6.  
  7. /// Renders wireframe AABBs for debugging.
  8. pub struct DebugRenderer {
  9.     vao: u32,
  10.     vbo: u32,
  11.     shader: Shader,
  12. }
  13.  
  14. impl DebugRenderer {
  15.     /// Initialize the debug line VAO/VBO and load the debug shader.
  16.     pub fn new() -> Self {
  17.         // 12 edges × 2 verts × 3 coords = 72 floats
  18.         let lines: [f32; 72] = [
  19.             // bottom square
  20.             0.0,0.0,0.0, 1.0,0.0,0.0,
  21.             1.0,0.0,0.0, 1.0,0.0,1.0,
  22.             1.0,0.0,1.0, 0.0,0.0,1.0,
  23.             0.0,0.0,1.0, 0.0,0.0,0.0,
  24.             // top square
  25.             0.0,1.0,0.0, 1.0,1.0,0.0,
  26.             1.0,1.0,0.0, 1.0,1.0,1.0,
  27.             1.0,1.0,1.0, 0.0,1.0,1.0,
  28.             0.0,1.0,1.0, 0.0,1.0,0.0,
  29.             // verticals
  30.             0.0,0.0,0.0, 0.0,1.0,0.0,
  31.             1.0,0.0,0.0, 1.0,1.0,0.0,
  32.             1.0,0.0,1.0, 1.0,1.0,1.0,
  33.             0.0,0.0,1.0, 0.0,1.0,1.0,
  34.         ];
  35.  
  36.         let mut vao = 0;
  37.         let mut vbo = 0;
  38.         unsafe {
  39.             gl::GenVertexArrays(1, &mut vao);
  40.             gl::GenBuffers(1, &mut vbo);
  41.             gl::BindVertexArray(vao);
  42.             gl::BindBuffer(gl::ARRAY_BUFFER, vbo);
  43.             gl::BufferData(
  44.                 gl::ARRAY_BUFFER,
  45.                 (lines.len() * std::mem::size_of::<f32>()) as isize,
  46.                 lines.as_ptr() as *const _,
  47.                 gl::STATIC_DRAW,
  48.             );
  49.             gl::VertexAttribPointer(
  50.                 0,
  51.                 3,
  52.                 gl::FLOAT,
  53.                 gl::FALSE,
  54.                 3 * std::mem::size_of::<f32>() as i32,
  55.                 std::ptr::null(),
  56.             );
  57.             gl::EnableVertexAttribArray(0);
  58.             gl::BindVertexArray(0);
  59.         }
  60.  
  61.         // Load the simple debug shader
  62.         let shader = Shader::new(
  63.             "src/shaders/debug_vertex.glsl",
  64.             "src/shaders/debug_fragment.glsl",
  65.         );
  66.  
  67.         println!("DEBUG SHADER ID = {}", shader.id);
  68.  
  69.         DebugRenderer { vao, vbo, shader }
  70.     }
  71.  
  72.     /// Draws the AABB collider in bright green lines, disabling depth test so it always shows.
  73.     pub fn draw_collider(
  74.         &self,
  75.         view: &Matrix4<f32>,
  76.         proj: &Matrix4<f32>,
  77.         collider: &Collider,
  78.     ) {
  79.         // Compute model matrix to scale/translate unit cube into the collider AABB
  80.         let scale = collider.max - collider.min;
  81.         let translate = collider.min;
  82.         let model = Matrix4::new_translation(&translate)
  83.             * Matrix4::new_nonuniform_scaling(&scale);
  84.  
  85.         // Disable depth test so wireframe always draws on top
  86.         unsafe { gl::Disable(gl::DEPTH_TEST); }
  87.  
  88.         // Use debug shader
  89.         self.shader.use_program();
  90.         self.shader.set_mat4("model", &model);
  91.         self.shader.set_mat4("view", &view);
  92.         self.shader.set_mat4("projection", &proj);
  93.         self.shader.set_vec3("objectColor", &Vector3::new(0.5, 1.0, 0.5));
  94.  
  95.         // Render lines
  96.         unsafe {
  97.             gl::BindVertexArray(self.vao);
  98.             gl::DrawArrays(gl::LINES, 0, 24);
  99.             gl::BindVertexArray(0);
  100.         }
  101.  
  102.         // Re-enable depth test for subsequent draws
  103.         unsafe { gl::Enable(gl::DEPTH_TEST); }
  104.     }
  105. }
  106.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement