bool CD3DVAMesh::Load(ILTStream& File, LTB_Header& LTBHeader) { if (LTBHeader.m_iFileType != LTB_D3D_MODEL_FILE) { OutputDebugString("Error: Wrong file type in CD3DSkelMesh::Load\n"); return false; } if (LTBHeader.m_iVersion != CD3D_LTB_LOAD_VERSION) { OutputDebugString("Error: Wrong file version in CD3DSkelMesh::Load\n"); return false; } // Read in the basics... uint32 iObjSize; File.Read(&iObjSize,sizeof(iObjSize)); File.Read(&m_iVertCount,sizeof(m_iVertCount)); File.Read(&m_iUnDupVertCount,sizeof(m_iUnDupVertCount)); File.Read(&m_iPolyCount,sizeof(m_iPolyCount)); File.Read(&m_iMaxBonesPerTri,sizeof(m_iMaxBonesPerTri)); File.Read(&m_iMaxBonesPerVert,sizeof(m_iMaxBonesPerVert)); File.Read(&m_VertStreamFlags[0],sizeof(uint32)*4); File.Read(&m_iAnimNodeIdx,sizeof(m_iAnimNodeIdx)); File.Read(&m_iBoneEffector,sizeof(m_iBoneEffector)); // Read in our Verts... for (uint32 i=0;i<4;++i) { if (!m_VertStreamFlags[i]) continue; uint32 iVertexSize = 0; // Figure out the vertex size... uint32 iVertFlags = 0; uint32 iUVSets = 0; GetVertexFlags_and_Size(eNO_WORLD_BLENDS,m_VertStreamFlags[i],iVertFlags,iVertexSize,iUVSets,m_bNonFixPipeData); uint32 iSize = iVertexSize * m_iVertCount; // Alloc the VertData... LT_MEM_TRACK_ALLOC(m_pVertData[i] = new uint8[iSize],LT_MEM_TYPE_RENDERER); File.Read(m_pVertData[i],iSize); } // Read in pIndexList... LT_MEM_TRACK_ALLOC(m_pIndexData = new uint8[sizeof(uint16) * m_iPolyCount * 3],LT_MEM_TYPE_RENDERER); File.Read(m_pIndexData,sizeof(uint16) * m_iPolyCount * 3); // Read in m_pDupMapList... File.Read(&m_iDupMapListCount,sizeof(m_iDupMapListCount)); assert(m_iDupMapListCount < 1000000 && "Invalid VA VertData"); LT_MEM_TRACK_ALLOC(m_pDupMapList = new DupMap[m_iDupMapListCount],LT_MEM_TYPE_RENDERER); File.Read(m_pDupMapList,sizeof(DupMap) * m_iDupMapListCount); // Create the VBs and stuff... ReCreateObject(); return true; }
bool CD3DSkelMesh::Load_MP(ILTStream& File) { // Read in out Min/Max Bones (effecting this guy)... File.Read(&m_iMinBone,sizeof(m_iMinBone)); File.Read(&m_iMaxBone,sizeof(m_iMaxBone)); // What type of Vert do we need? switch (m_iMaxBonesPerVert) { case 2 : m_VertType = eINDEXED_B1; break; case 3 : m_VertType = eINDEXED_B2; break; case 4 : m_VertType = eINDEXED_B3; break; default : assert(0); return false; } // If we are using re-indexed bones, read them in... if (m_bReIndexedBones) { uint32 iBoneCount = 0; File.Read(&iBoneCount,sizeof(iBoneCount)); assert(iBoneCount < 10000 && "Crazy bone count, checked your packed model format."); LT_MEM_TRACK_ALLOC(m_pReIndexedBoneList = new uint32[iBoneCount],LT_MEM_TYPE_RENDERER); File.Read(m_pReIndexedBoneList,sizeof(uint32)*iBoneCount); } // Read in our Verts... for (uint32 i=0;i<4;++i) { if (!m_VertStreamFlags[i]) continue; uint32 iVertexSize = 0; // Figure out the vertex size... uint32 iVertFlags = 0; uint32 iUVSets = 0; GetVertexFlags_and_Size(m_VertType,m_VertStreamFlags[i],iVertFlags,iVertexSize,iUVSets,m_bNonFixPipeData); uint32 iSize = iVertexSize * m_iVertCount; // Alloc the VertData... LT_MEM_TRACK_ALLOC(m_pVertData[i] = new uint8[iSize],LT_MEM_TYPE_RENDERER); File.Read(m_pVertData[i],iSize); } // Read in pIndexList... LT_MEM_TRACK_ALLOC(m_pIndexData = new uint8[sizeof(uint16) * m_iPolyCount * 3],LT_MEM_TYPE_RENDERER); File.Read(m_pIndexData,sizeof(uint16) * m_iPolyCount * 3); // Create the VBs and stuff... ReCreateObject(); return true; }
bool CD3DSkelMesh::Load_RD(ILTStream& File) { // What type of Vert do we need? switch (m_iMaxBonesPerTri) { case 1 : m_VertType = eNO_WORLD_BLENDS; break; case 2 : m_VertType = eNONINDEXED_B1; break; case 3 : m_VertType = eNONINDEXED_B2; break; case 4 : m_VertType = eNONINDEXED_B3; break; default : assert(0); return false; } // Read in our Verts... for (uint32 i=0;i<4;++i) { if (!m_VertStreamFlags[i]) continue; uint32 iVertexSize = 0; // Figure out the vertex size... uint32 iVertFlags = 0; uint32 iUVSets = 0; GetVertexFlags_and_Size(m_VertType,m_VertStreamFlags[i],iVertFlags,iVertexSize,iUVSets,m_bNonFixPipeData); uint32 iSize = iVertexSize * m_iVertCount; // Alloc the VertData... LT_MEM_TRACK_ALLOC(m_pVertData[i] = new uint8[iSize],LT_MEM_TYPE_RENDERER); File.Read(m_pVertData[i],iSize); } // Read in pIndexList... LT_MEM_TRACK_ALLOC(m_pIndexData = new uint8[sizeof(uint16) * m_iPolyCount * 3],LT_MEM_TYPE_RENDERER); File.Read(m_pIndexData,sizeof(uint16) * m_iPolyCount * 3); // Allocate and read in the BoneSets... File.Read(&m_iBoneSetCount,sizeof(m_iBoneSetCount)); LT_MEM_TRACK_ALLOC(m_pBoneSetArray = new BoneSetListItem[m_iBoneSetCount],LT_MEM_TYPE_RENDERER); if (!m_pBoneSetArray) return false; File.Read(m_pBoneSetArray,sizeof(BoneSetListItem)*m_iBoneSetCount); // Create the VBs and stuff... ReCreateObject(); return true; }