MCPcopy Create free account
hub / github.com/WolfireGames/overgrowth / LoadSimplificationCache

Method LoadSimplificationCache

Source/Objects/riggedobject.cpp:4047–4152  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4045}
4046
4047bool RiggedObject::LoadSimplificationCache(const std::string& path) {
4048 char lod_cache_path[kPathSize];
4049 if (FindFilePath((path + ".lod_cache").c_str(), lod_cache_path, kPathSize, kAnyPath, false) == -1) {
4050 return false;
4051 }
4052 FILE* file = my_fopen(lod_cache_path, "rb");
4053 if (!file) {
4054 return false;
4055 }
4056 int vers;
4057 fread(&vers, sizeof(int), 1, file);
4058 if (vers != simp_cache_vers) {
4059 return false;
4060 }
4061 unsigned short checksum = skeleton_.skeleton_asset_ref->checksum() +
4062 Models::Instance()->GetModel(model_id[0]).checksum;
4063 for (auto& morph_target : morph_targets) {
4064 checksum += morph_target.checksum;
4065 }
4066 unsigned short file_checksum;
4067 fread(&file_checksum, sizeof(unsigned short), 1, file);
4068 if (file_checksum != checksum) {
4069 return false;
4070 }
4071 for (unsigned i = 1; i < 4; ++i) {
4072 model_id[i] = Models::Instance()->AddModel();
4073 Model& model = Models::Instance()->GetModel(model_id[i]);
4074 int model_num_verts;
4075 fread(&model_num_verts, sizeof(int), 1, file);
4076 model.vertices.resize(model_num_verts * 3);
4077 model.bone_weights.resize(model_num_verts);
4078 model.bone_ids.resize(model_num_verts);
4079 model.tex_coords.resize(model_num_verts * 2);
4080 model.transform_vec.resize(4);
4081 model.transform_vec[0].resize(model_num_verts);
4082 model.transform_vec[1].resize(model_num_verts);
4083 model.transform_vec[2].resize(model_num_verts);
4084 model.transform_vec[3].resize(model_num_verts);
4085 model.tex_transform_vec.resize(model_num_verts);
4086 model.morph_transform_vec.resize(model_num_verts);
4087 fread(&model.vertices[0], sizeof(GLfloat), model_num_verts * 3, file);
4088 fread(&model.bone_weights[0], sizeof(vec4), model_num_verts, file);
4089 fread(&model.bone_ids[0], sizeof(vec4), model_num_verts, file);
4090 fread(&model.tex_coords[0], sizeof(GLfloat), model_num_verts * 2, file);
4091 int num_faces;
4092 fread(&num_faces, sizeof(int), 1, file);
4093 model.faces.resize(num_faces * 3);
4094 fread(&model.faces[0], sizeof(GLuint), num_faces * 3, file);
4095 }
4096
4097 {
4098 int num_morphs;
4099 fread(&num_morphs, sizeof(int), 1, file);
4100 if (num_morphs != (int)morph_targets.size()) {
4101 return false;
4102 }
4103 }
4104

Callers

nothing calls this directly

Calls 12

FindFilePathFunction · 0.85
my_fopenFunction · 0.85
AddModelMethod · 0.80
c_strMethod · 0.45
checksumMethod · 0.45
GetModelMethod · 0.45
resizeMethod · 0.45
sizeMethod · 0.45
pushMethod · 0.45
emptyMethod · 0.45
frontMethod · 0.45
popMethod · 0.45

Tested by

no test coverage detected