mirror of
https://github.com/redstrate/Physis.git
synced 2025-04-22 12:47:45 +00:00
Write out a proper end of stream vertex element
This commit is contained in:
parent
f43812fa55
commit
36027c9a9f
2 changed files with 12 additions and 5 deletions
|
@ -10,6 +10,8 @@ use binrw::BinReaderExt;
|
|||
use crate::{ByteBuffer, ByteSpan};
|
||||
use crate::model_vertex_declarations::{vertex_element_parser, VERTEX_ELEMENT_SIZE, vertex_element_writer, VertexDeclaration, VertexElement, VertexType, VertexUsage};
|
||||
|
||||
pub const NUM_VERTICES: u32 = 17;
|
||||
|
||||
#[binrw]
|
||||
#[derive(Debug)]
|
||||
#[brw(little)]
|
||||
|
@ -836,7 +838,6 @@ impl MDL {
|
|||
impl ModelFileHeader {
|
||||
pub fn calculate_stack_size(&self) -> u32 {
|
||||
// From https://github.com/Ottermandias/Penumbra.GameData/blob/44021b93e6901c84b739bbf4d1c6350f4486cdbf/Files/MdlFile.cs#L11
|
||||
const NUM_VERTICES: u32 = 17;
|
||||
self.vertex_declaration_count as u32 * NUM_VERTICES * VERTEX_ELEMENT_SIZE as u32
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
use std::io::SeekFrom;
|
||||
use binrw::{BinRead, BinResult, binrw, BinWrite};
|
||||
use crate::model::NUM_VERTICES;
|
||||
|
||||
// Marker for end of stream (0xFF)
|
||||
const END_OF_STREAM: u8 = 0xFF;
|
||||
|
@ -75,7 +76,7 @@ pub(crate) fn vertex_element_parser(count: u16) -> BinResult<Vec<VertexDeclarati
|
|||
}
|
||||
}
|
||||
|
||||
let to_seek = 17 * 8 - (declaration.elements.len() + 1) * 8;
|
||||
let to_seek = NUM_VERTICES as usize * 8 - (declaration.elements.len() + 1) * 8;
|
||||
reader.seek(SeekFrom::Current(to_seek as i64))?;
|
||||
}
|
||||
|
||||
|
@ -92,10 +93,15 @@ pub(crate) fn vertex_element_writer(
|
|||
element.write_options(writer, endian, ())?;
|
||||
}
|
||||
|
||||
writer.write_all(&[END_OF_STREAM])?;
|
||||
VertexElement {
|
||||
stream: END_OF_STREAM,
|
||||
offset: 0,
|
||||
vertex_type: VertexType::Single1,
|
||||
vertex_usage: VertexUsage::Position,
|
||||
usage_index: 0
|
||||
}.write_options(writer, endian, ())?;
|
||||
|
||||
// We have a -1 here like we do in read, because writing the EOF (255) pushes our cursor forward.
|
||||
let to_seek = 17 * 8 - (declaration.elements.len()) * 8 - 1;
|
||||
let to_seek = (NUM_VERTICES as usize - 1 - declaration.elements.len()) * 8;
|
||||
writer.seek(SeekFrom::Current(to_seek as i64))?;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue