Skip to content

Commit 7f68937

Browse files
committed
Fix LimonModel support missing file
1 parent 63d3613 commit 7f68937

File tree

1 file changed

+43
-50
lines changed

1 file changed

+43
-50
lines changed

src/Material.h

Lines changed: 43 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,8 @@ class Material {
5050
* vector has vector<string>, because embedded textures are saved with pairs, first element is the index, second element is the model file itself.
5151
*/
5252

53-
//FIXME
54-
//std::vector<std::vector<std::string>>* textureNames = nullptr;
55-
std::vector<std::string> ambientTextureNames, diffuseTextureNames, specularTextureNames, normalTextureNames, opacityTextureNames;
53+
54+
std::shared_ptr<std::vector<std::vector<std::string>>> textureNames = nullptr;
5655

5756
friend struct std::hash<Material>;
5857
std::shared_ptr<TextureAsset> ambientTexture = nullptr;
@@ -315,81 +314,75 @@ class Material {
315314
template<class Archive>
316315
void save(Archive & archive) const {
317316

318-
std::vector<std::string> ambientTextureNames, diffuseTextureNames, specularTextureNames, normalTextureNames, opacityTextureNames;
317+
std::shared_ptr<std::vector<std::vector<std::string>>> textureNames = std::make_shared<std::vector<std::vector<std::string>>>(5);
319318

320319
if(ambientTexture != nullptr) {
321-
ambientTextureNames = ambientTexture->getName();
320+
(*textureNames)[0] = ambientTexture->getName();
322321
};
323322
if(diffuseTexture != nullptr) {
324-
diffuseTextureNames = diffuseTexture->getName();
323+
(*textureNames)[1]= diffuseTexture->getName();
325324
};
326325
if(specularTexture != nullptr) {
327-
specularTextureNames = specularTexture->getName();
326+
(*textureNames)[2] = specularTexture->getName();
328327
};
329328
if(normalTexture != nullptr) {
330-
normalTextureNames = normalTexture->getName();
329+
(*textureNames)[3] = normalTexture->getName();
331330
};
332331
if(opacityTexture != nullptr) {
333-
opacityTextureNames = opacityTexture->getName();
332+
(*textureNames)[4] = opacityTexture->getName();
334333
};
335334

336335
archive(name, specularExponent, maps, ambientColor, diffuseColor, specularColor, isAmbientMap, isDiffuseMap, isSpecularMap, isNormalMap, isOpacityMap, refractionIndex,
337-
ambientTextureNames, diffuseTextureNames, specularTextureNames, normalTextureNames, opacityTextureNames);
336+
textureNames);
338337
}
339338

340339
template<class Archive>
341340
void load(Archive & archive) {
342341

343-
archive(name, specularExponent, maps, ambientColor, diffuseColor, specularColor, isAmbientMap, isDiffuseMap, isSpecularMap, isNormalMap, isOpacityMap, refractionIndex
344-
,ambientTextureNames, diffuseTextureNames, specularTextureNames, normalTextureNames, opacityTextureNames);
342+
archive(name, specularExponent, maps, ambientColor, diffuseColor, specularColor, isAmbientMap, isDiffuseMap, isSpecularMap, isNormalMap, isOpacityMap, refractionIndex,
343+
textureNames);
345344
}
346345

347346
void afterLoad(AssetManager* assetManager) {
348347
this->assetManager = assetManager;
349-
if(!ambientTextureNames.empty()) {
350-
if (ambientTextureNames.size() > 1) {
351-
this->setAmbientTexture(ambientTextureNames[0], &ambientTextureNames[1]);
352-
} else {
353-
this->setAmbientTexture(ambientTextureNames[0]);
348+
if (textureNames != nullptr) {
349+
if (!(*textureNames)[0].empty()) {
350+
if ((*textureNames)[0].size() > 1) {
351+
this->setAmbientTexture((*textureNames)[0][0], &(*textureNames)[0][1]);
352+
} else {
353+
this->setAmbientTexture((*textureNames)[0][0]);
354+
}
354355
}
355-
ambientTextureNames.clear();
356-
}
357-
358-
if(!diffuseTextureNames.empty()) {
359-
if (diffuseTextureNames.size() > 1) {
360-
this->setDiffuseTexture(diffuseTextureNames[0], &diffuseTextureNames[1]);
361-
} else {
362-
this->setDiffuseTexture(diffuseTextureNames[0]);
356+
if (!(*textureNames)[1].empty()) {
357+
if ((*textureNames)[1].size() > 1) {
358+
this->setDiffuseTexture((*textureNames)[1][0], &(*textureNames)[1][1]);
359+
} else {
360+
this->setDiffuseTexture((*textureNames)[1][0]);
361+
}
363362
}
364-
diffuseTextureNames.clear();
365-
}
366-
367-
if(!specularTextureNames.empty()) {
368-
if (specularTextureNames.size() > 1) {
369-
this->setSpecularTexture(specularTextureNames[0], &specularTextureNames[1]);
370-
} else {
371-
this->setSpecularTexture(specularTextureNames[0]);
363+
if (!(*textureNames)[2].empty()) {
364+
if ((*textureNames)[2].size() > 1) {
365+
this->setSpecularTexture((*textureNames)[2][0], &(*textureNames)[2][1]);
366+
} else {
367+
this->setSpecularTexture((*textureNames)[2][0]);
368+
}
372369
}
373-
specularTextureNames.clear();
374-
}
375-
376-
if(!normalTextureNames.empty()) {
377-
if (normalTextureNames.size() > 1) {
378-
this->setNormalTexture(normalTextureNames[0], &normalTextureNames[1]);
379-
} else {
380-
this->setNormalTexture(normalTextureNames[0]);
370+
if (!(*textureNames)[3].empty()) {
371+
if ((*textureNames)[3].size() > 1) {
372+
this->setNormalTexture((*textureNames)[3][0], &(*textureNames)[3][1]);
373+
} else {
374+
this->setNormalTexture((*textureNames)[3][0]);
375+
}
381376
}
382-
normalTextureNames.clear();
383-
}
384-
385-
if(!opacityTextureNames.empty()) {
386-
if (opacityTextureNames.size() > 1) {
387-
this->setOpacityTexture(opacityTextureNames[0], &opacityTextureNames[1]);
388-
} else {
389-
this->setOpacityTexture(opacityTextureNames[0]);
377+
if (!(*textureNames)[4].empty()) {
378+
if ((*textureNames)[4].size() > 1) {
379+
this->setOpacityTexture((*textureNames)[4][0], &(*textureNames)[4][1]);
380+
} else {
381+
this->setOpacityTexture((*textureNames)[4][0]);
382+
}
390383
}
391-
opacityTextureNames.clear();
392384
}
385+
this->textureNames = nullptr;
393386
}
394387
#endif
395388
};

0 commit comments

Comments
 (0)