From 835b48ff5b8371b38d1c9908e2bc4154be1784b1 Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Wed, 13 Dec 2023 16:51:40 -0500 Subject: [PATCH] Add explicit calculate_stack_size function and test it --- src/model.rs | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/src/model.rs b/src/model.rs index 9b3d126..8c2cb1e 100755 --- a/src/model.rs +++ b/src/model.rs @@ -664,7 +664,7 @@ impl MDL { // update lod values // TODO: From Xande, need to be cleaned up :) - self.file_header.stack_size = self.file_header.vertex_declaration_count as u32 * 136; + self.file_header.stack_size = self.file_header.calculate_stack_size(); self.file_header.runtime_size = 2 //StringCount + 2 // Unknown @@ -881,4 +881,54 @@ impl MDL { Some(buffer) } +} + +impl ModelFileHeader { + pub fn calculate_stack_size(&self) -> u32 { + // TODO: where does this magical 136 constant come from? + self.vertex_declaration_count as u32 * 136 + } +} + +#[cfg(test)] +mod tests { + use std::io::Cursor; + use crate::model::{MDL, ModelFileHeader}; + + #[test] + fn test_stack_size() { + let example_header = ModelFileHeader { + version: 0, + stack_size: 0, + runtime_size: 0, + vertex_declaration_count: 6, + material_count: 0, + vertex_offsets: [0; 3], + index_offsets: [0; 3], + vertex_buffer_size: [0; 3], + index_buffer_size: [0; 3], + lod_count: 0, + index_buffer_streaming_enabled: false, + has_edge_geometry: false, + }; + + assert_eq!(816, example_header.calculate_stack_size()); + + let example_header2 = ModelFileHeader { + version: 0, + stack_size: 0, + runtime_size: 0, + vertex_declaration_count: 2, + material_count: 0, + vertex_offsets: [0; 3], + index_offsets: [0; 3], + vertex_buffer_size: [0; 3], + index_buffer_size: [0; 3], + lod_count: 0, + index_buffer_streaming_enabled: false, + has_edge_geometry: false, + }; + + assert_eq!(272, example_header2.calculate_stack_size()); + } } \ No newline at end of file