@@ -2445,6 +2445,7 @@ bool LoadObj(attrib_t *attrib, std::vector<shape_t> *shapes,
2445
2445
std::string name;
2446
2446
2447
2447
// material
2448
+ std::map<std::string, std::map<std::string, int > > material_maps;
2448
2449
std::map<std::string, int > material_map;
2449
2450
int material = -1 ;
2450
2451
@@ -2735,10 +2736,21 @@ bool LoadObj(attrib_t *attrib, std::vector<shape_t> *shapes,
2735
2736
} else {
2736
2737
bool found = false ;
2737
2738
for (size_t s = 0 ; s < filenames.size (); s++) {
2739
+ std::map<std::string, std::map<std::string, int > >::const_iterator
2740
+ material_map_it = material_maps.find (filenames[s]);
2741
+ if (material_map_it != material_maps.end ()) {
2742
+ found = true ;
2743
+ material_map = material_map_it->second ;
2744
+ continue ;
2745
+ }
2746
+
2738
2747
std::string warn_mtl;
2739
2748
std::string err_mtl;
2740
2749
bool ok = (*readMatFn)(filenames[s].c_str (), materials,
2741
2750
&material_map, &warn_mtl, &err_mtl);
2751
+ material_maps.insert (
2752
+ std::pair<std::string, std::map<std::string, int > >(
2753
+ filenames[s], material_map));
2742
2754
if (warn && (!warn_mtl.empty ())) {
2743
2755
(*warn) += warn_mtl;
2744
2756
}
@@ -2993,6 +3005,7 @@ bool LoadObjWithCallback(std::istream &inStream, const callback_t &callback,
2993
3005
std::stringstream errss;
2994
3006
2995
3007
// material
3008
+ std::map<std::string, std::map<std::string, int > > material_maps;
2996
3009
std::map<std::string, int > material_map;
2997
3010
int material_id = -1 ; // -1 = invalid
2998
3011
@@ -3138,10 +3151,21 @@ bool LoadObjWithCallback(std::istream &inStream, const callback_t &callback,
3138
3151
} else {
3139
3152
bool found = false ;
3140
3153
for (size_t s = 0 ; s < filenames.size (); s++) {
3154
+ std::map<std::string, std::map<std::string, int > >::const_iterator
3155
+ material_map_it = material_maps.find (filenames[s]);
3156
+ if (material_map_it != material_maps.end ()) {
3157
+ found = true ;
3158
+ material_map = material_map_it->second ;
3159
+ continue ;
3160
+ }
3161
+
3141
3162
std::string warn_mtl;
3142
3163
std::string err_mtl;
3143
3164
bool ok = (*readMatFn)(filenames[s].c_str (), &materials,
3144
3165
&material_map, &warn_mtl, &err_mtl);
3166
+ material_maps.insert (
3167
+ std::pair<std::string, std::map<std::string, int > >(
3168
+ filenames[s], material_map));
3145
3169
3146
3170
if (warn && (!warn_mtl.empty ())) {
3147
3171
(*warn) += warn_mtl; // This should be warn message.
0 commit comments