small speedups - up to 1-3%

This commit is contained in:
tigrazone
2017-12-08 23:39:07 +02:00
parent aeb0f05c0e
commit dc4c970262

View File

@@ -1433,74 +1433,108 @@ void LoadMtl(std::map<std::string, int> *material_map,
if (token[0] == '#') continue; // comment line if (token[0] == '#') continue; // comment line
// ambient //group size==2
if (token[0] == 'K' && token[1] == 'a' && IS_SPACE((token[2]))) { if(IS_SPACE((token[2])))
token += 2; {
real_t r, g, b; //group K
parseReal3(&r, &g, &b, &token); if (token[0] == 'K')
material.ambient[0] = r; {
material.ambient[1] = g; switch(token[1])
material.ambient[2] = b; {
continue; case 'a':
} // ambient
//if (token[1] == 'a')
{
token += 2;
real_t r, g, b;
parseReal3(&r, &g, &b, &token);
material.ambient[0] = r;
material.ambient[1] = g;
material.ambient[2] = b;
continue;
}
// diffuse // diffuse
if (token[0] == 'K' && token[1] == 'd' && IS_SPACE((token[2]))) { case 'd':
token += 2; //if (token[1] == 'd')
real_t r, g, b; {
parseReal3(&r, &g, &b, &token); token += 2;
material.diffuse[0] = r; real_t r, g, b;
material.diffuse[1] = g; parseReal3(&r, &g, &b, &token);
material.diffuse[2] = b; material.diffuse[0] = r;
continue; material.diffuse[1] = g;
} material.diffuse[2] = b;
continue;
}
// specular // specular
if (token[0] == 'K' && token[1] == 's' && IS_SPACE((token[2]))) { case 's':
token += 2; //if (token[1] == 's')
real_t r, g, b; {
parseReal3(&r, &g, &b, &token); token += 2;
material.specular[0] = r; real_t r, g, b;
material.specular[1] = g; parseReal3(&r, &g, &b, &token);
material.specular[2] = b; material.specular[0] = r;
continue; material.specular[1] = g;
} material.specular[2] = b;
continue;
}
// transmittance // transmittance
if ((token[0] == 'K' && token[1] == 't' && IS_SPACE((token[2]))) || case 't':
(token[0] == 'T' && token[1] == 'f' && IS_SPACE((token[2])))) { //if (token[1] == 't')
token += 2; {
real_t r, g, b; token += 2;
parseReal3(&r, &g, &b, &token); real_t r, g, b;
material.transmittance[0] = r; parseReal3(&r, &g, &b, &token);
material.transmittance[1] = g; material.transmittance[0] = r;
material.transmittance[2] = b; material.transmittance[1] = g;
continue; material.transmittance[2] = b;
} continue;
}
// ior(index of refraction) // emission
if (token[0] == 'N' && token[1] == 'i' && IS_SPACE((token[2]))) { case 'e':
token += 2; //if (token[1] == 'e')
material.ior = parseReal(&token); {
continue; token += 2;
} real_t r, g, b;
parseReal3(&r, &g, &b, &token);
material.emission[0] = r;
material.emission[1] = g;
material.emission[2] = b;
continue;
}
}
// emission }
if (token[0] == 'K' && token[1] == 'e' && IS_SPACE(token[2])) {
token += 2; // transmittance
real_t r, g, b; if ( //(token[0] == 'K' && token[1] == 't') ||
parseReal3(&r, &g, &b, &token); token[0] == 'T' && token[1] == 'f') {
material.emission[0] = r; token += 2;
material.emission[1] = g; real_t r, g, b;
material.emission[2] = b; parseReal3(&r, &g, &b, &token);
continue; material.transmittance[0] = r;
} material.transmittance[1] = g;
material.transmittance[2] = b;
continue;
}
// ior(index of refraction)
if (token[0] == 'N' && token[1] == 'i') {
token += 2;
material.ior = parseReal(&token);
continue;
}
// shininess
if (token[0] == 'N' && token[1] == 's') {
token += 2;
material.shininess = parseReal(&token);
continue;
}
// shininess
if (token[0] == 'N' && token[1] == 's' && IS_SPACE(token[2])) {
token += 2;
material.shininess = parseReal(&token);
continue;
} }
// dissolve // dissolve
@@ -1569,7 +1603,8 @@ void LoadMtl(std::map<std::string, int> *material_map,
// flush previous material. // flush previous material.
if (!material.name.empty()) { if (!material.name.empty()) {
material_map->insert(std::pair<std::string, int>( material_map->insert(std::pair<std::string, int>(
material.name, static_cast<int>(materials->size()))); material.name, static_cast<int>(materials->size()))
);
materials->push_back(material); materials->push_back(material);
} }