♻️ refactor: reduce hard-coding of vertexarray stuff
parent
938240e90d
commit
3fe2d17bce
81
src/main.rs
81
src/main.rs
|
@ -40,7 +40,7 @@ fn main () {
|
|||
let mut vertexes = Vec::default ();
|
||||
let mut triangles = Vec::default ();
|
||||
let mut meshes = Vec::default ();
|
||||
let mut texts = String::default ();
|
||||
let mut texts = String::from ("\0");
|
||||
|
||||
for node in document.nodes () {
|
||||
let mesh = match node.mesh () {
|
||||
|
@ -151,6 +151,21 @@ fn main () {
|
|||
}
|
||||
}
|
||||
|
||||
let vertexarrays_unplaced = [
|
||||
iqm::VertexArrayUnplaced {
|
||||
r#type: iqm::POSITION,
|
||||
flags: 0,
|
||||
format: iqm::FLOAT,
|
||||
size: 3,
|
||||
},
|
||||
iqm::VertexArrayUnplaced {
|
||||
r#type: iqm::NORMAL,
|
||||
flags: 0,
|
||||
format: iqm::FLOAT,
|
||||
size: 3,
|
||||
},
|
||||
];
|
||||
|
||||
let vertexes = vertexes;
|
||||
let triangles = triangles;
|
||||
let meshes = meshes;
|
||||
|
@ -163,14 +178,34 @@ fn main () {
|
|||
let num_text = u32::try_from (num_text).unwrap ();
|
||||
|
||||
let num_meshes = u32::try_from (meshes.len ()).unwrap ();
|
||||
let num_vertexarrays = 2u32;
|
||||
let num_vertexarrays = u32::try_from (vertexarrays_unplaced.len ()).unwrap ();
|
||||
|
||||
let header_len = 124u32;
|
||||
let ofs_meshes = header_len;
|
||||
let ofs_vertexarrays = ofs_meshes + num_meshes * 6 * 4;
|
||||
// Not part of IQM spec, but I need it for self-care
|
||||
let ofs_vertexes = ofs_vertexarrays + num_vertexarrays * 5 * 4;
|
||||
let ofs_triangles = ofs_vertexes + num_vertexes * 3 * 4 + num_vertexes * 3 * 4;
|
||||
|
||||
let mut vertexarrays = Vec::default ();
|
||||
let mut ofs_va = ofs_vertexes;
|
||||
|
||||
for va_in in vertexarrays_unplaced {
|
||||
let stride = va_in.stride ();
|
||||
|
||||
vertexarrays.push (iqm::VertexArray {
|
||||
r#type: va_in.r#type,
|
||||
flags: va_in.flags,
|
||||
format: va_in.format,
|
||||
size: va_in.size,
|
||||
offset: ofs_va,
|
||||
});
|
||||
|
||||
ofs_va += num_vertexes * stride;
|
||||
}
|
||||
|
||||
let vertexarrays = vertexarrays;
|
||||
|
||||
let ofs_triangles = ofs_va;
|
||||
let ofs_text = ofs_triangles + num_triangles * 3 * 4;
|
||||
|
||||
let filesize = ofs_text + num_text;
|
||||
|
@ -244,22 +279,7 @@ fn main () {
|
|||
|
||||
// Vertex arrays
|
||||
|
||||
for va in [
|
||||
iqm::VertexArray {
|
||||
r#type: 0,
|
||||
flags: 0,
|
||||
format: 7,
|
||||
size: 3,
|
||||
offset: ofs_vertexes + 0,
|
||||
},
|
||||
iqm::VertexArray {
|
||||
r#type: 2,
|
||||
flags: 0,
|
||||
format: 7,
|
||||
size: 3,
|
||||
offset: ofs_vertexes + num_vertexes * 3 * 4,
|
||||
},
|
||||
] {
|
||||
for va in &vertexarrays {
|
||||
f.write_all (&(va.r#type.to_le_bytes ())).unwrap ();
|
||||
f.write_all (&(va.flags.to_le_bytes ())).unwrap ();
|
||||
f.write_all (&(va.format.to_le_bytes ())).unwrap ();
|
||||
|
@ -309,6 +329,29 @@ mod iqm {
|
|||
pub num_triangles: u32,
|
||||
}
|
||||
|
||||
pub const POSITION: u32 = 0;
|
||||
pub const NORMAL: u32 = 2;
|
||||
pub const BLENDINDEXES: u32 = 4;
|
||||
pub const BLENDWEIGHTS: u32 = 5;
|
||||
|
||||
pub const FLOAT: u32 = 7;
|
||||
|
||||
pub struct VertexArrayUnplaced {
|
||||
pub r#type: u32,
|
||||
pub flags: u32,
|
||||
pub format: u32,
|
||||
pub size: u32,
|
||||
}
|
||||
|
||||
impl VertexArrayUnplaced {
|
||||
pub fn stride (&self) -> u32 {
|
||||
self.size * match self.format {
|
||||
FLOAT => 4,
|
||||
_ => panic! ("Can't handle this vertexarray format yet"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub struct VertexArray {
|
||||
pub r#type: u32,
|
||||
pub flags: u32,
|
||||
|
|
Loading…
Reference in New Issue