| 4045 | } |
| 4046 | |
| 4047 | bool 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 |
nothing calls this directly
no test coverage detected