nsys-gl-utils 0.11.10

OpenGL and graphics utilities
Documentation
use super::*;

/// (vertex count, index count)
pub const fn lines3d_vertex_index_counts() -> (u32, u32) {
  // 8 vertices, 12 edges (2 indices per line segment = 24 indices)
  (8, 24)
}

impl Lines3d {
  pub fn cube (index_offset : u32) -> Self {
    let vertex = |x, y, z| vertex::Vert3dInstanced { inst_position: [x, y, z] };
    let vertices = vec![
      // bottom
      vertex (-1.0, -1.0, -1.0),
      vertex (-1.0,  1.0, -1.0),
      vertex ( 1.0,  1.0, -1.0),
      vertex ( 1.0, -1.0, -1.0),
      // top
      vertex (-1.0, -1.0,  1.0),
      vertex (-1.0,  1.0,  1.0),
      vertex ( 1.0,  1.0,  1.0),
      vertex ( 1.0, -1.0,  1.0)
    ];

    let indices = [
      // bottom
      0, 1,
      1, 2,
      2, 3,
      3, 0,
      // top
      4, 5,
      5, 6,
      6, 7,
      7, 4,
      // sides
      0, 4,
      1, 5,
      2, 6,
      3, 7
    ].map (|i| i + index_offset).into_iter().collect::<Vec<_>>();

    if cfg!(debug_assertions) {
      let (num_vertices, num_indices) = lines3d_vertex_index_counts();
      debug_assert_eq!(vertices.len(), num_vertices as usize);
      debug_assert_eq!(indices.len(), num_indices as usize);
    }

    Lines3d { vertices, indices }
  }
}