void Mesh::load(ModelResources& modelResources) { CompressedFile file; file.open(m_filename, ios::in | ios::binary); if (file.is_open()) { MeshVersion version; file.read(reinterpret_cast<char*>(&version), sizeof(MeshVersion)); while (!file.eof()) { m_subMeshes.emplace_back(SubMesh()); if (!m_subMeshes.back().load(modelResources, file)) { m_subMeshes.pop_back(); } } file.close(); } }
GMorphMesh::GMorphMesh(zCVisual* sourceObject) : GVisual(sourceObject) { // This must be a zCMorphMesh. zCMorphMesh* morphMesh = (zCMorphMesh*)sourceObject; zCProgMeshProto* mesh = morphMesh->GetStaticMesh(); std::vector<ExTVertexStruct> vertices; std::vector<unsigned int> indices; std::vector<unsigned int> submeshIndexStarts; // Pack all vertices into the vectors above mesh->PackVertices<ExTVertexStruct, unsigned int>(vertices, indices, 0, submeshIndexStarts); // Create vertex and index-buffer for this mesh m_VertexBuffer = RAPI::REngine::ResourceCache->CreateResource<RAPI::RBuffer>(); m_VertexBuffer->Init(vertices.data(), vertices.size() * sizeof(ExTVertexStruct), sizeof(ExTVertexStruct), RAPI::EBindFlags::B_VERTEXBUFFER, RAPI::EUsageFlags::U_DYNAMIC, RAPI::ECPUAccessFlags::CA_WRITE); m_IndexBuffer = RAPI::REngine::ResourceCache->CreateResource<RAPI::RBuffer>(); m_IndexBuffer->Init(indices.data(), indices.size() * sizeof(unsigned int), sizeof(unsigned int), RAPI::EBindFlags::B_INDEXBUFFER); // Create objects for all submeshes for(unsigned int i=0;i<mesh->GetNumSubmeshes();i++) { m_SubMeshes.push_back(SubMesh()); m_SubMeshes.back().m_Material = GMaterial::GetFromSource(mesh->GetSubmesh(i).m_Material); m_SubMeshes.back().m_SourceMaterial = &mesh->GetSubmesh(i).m_Material; m_SubMeshes.back().m_SubMeshIndexStart = submeshIndexStarts[i]; m_SubMeshes.back().m_NumIndices = mesh->GetSubmesh(i).m_TriangleList.m_NumInArray * 3; } }