now can read CKMesh without memory issue

This commit is contained in:
2023-09-18 23:11:33 +08:00
parent 678529a664
commit d381369ed6
7 changed files with 149 additions and 89 deletions

View File

@ -79,14 +79,16 @@ namespace LibCmo::CK2::ObjImpls {
// read and set vertex count
CKDWORD vertexCount;
chunk->ReadStruct(vertexCount);
SetVertexCount(vertexCount);
if (vertexCount != 0) {
// read save flags
chunk->ReadStruct(saveflags);
// read size in dword
// read size in dword (including it self)
CKDWORD sizeInDword;
chunk->ReadStruct(sizeInDword);
--sizeInDword; // remove self.
// lock read buffer
auto buf = chunk->LockReadBufferWrapper(sizeInDword * CKSizeof(CKDWORD));
@ -211,7 +213,14 @@ namespace LibCmo::CK2::ObjImpls {
chunk->ReadStruct(lineCount);
SetLineCount(lineCount);
chunk->ReadNoSizeBuffer(lineCount * 2 )
chunk->ReadAndFillBuffer(m_LineIndices.data(), CKSizeof(CKWORD) * lineCount * 2);
}
// build normals
if (EnumsHelper::Has(saveflags, VertexSaveFlags::NoNormal)) {
BuildNormals();
} else {
BuildFaceNormals();
}
return true;
@ -227,6 +236,10 @@ namespace LibCmo::CK2::ObjImpls {
SetLineCount(0);
}
void CKMesh::BuildNormals() {}
void CKMesh::BuildFaceNormals() {}
#pragma region Vertex Section
CKDWORD CKMesh::GetVertexCount() {