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

@@ -1432,75 +1432,109 @@ void LoadMtl(std::map<std::string, int> *material_map,
if (token[0] == '\0') continue; // empty line if (token[0] == '\0') continue; // empty line
if (token[0] == '#') continue; // comment line if (token[0] == '#') continue; // comment line
//group size==2
if(IS_SPACE((token[2])))
{
//group K
if (token[0] == 'K')
{
switch(token[1])
{
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
case 'd':
//if (token[1] == 'd')
{
token += 2;
real_t r, g, b;
parseReal3(&r, &g, &b, &token);
material.diffuse[0] = r;
material.diffuse[1] = g;
material.diffuse[2] = b;
continue;
}
// specular
case 's':
//if (token[1] == 's')
{
token += 2;
real_t r, g, b;
parseReal3(&r, &g, &b, &token);
material.specular[0] = r;
material.specular[1] = g;
material.specular[2] = b;
continue;
}
// ambient // transmittance
if (token[0] == 'K' && token[1] == 'a' && IS_SPACE((token[2]))) { case 't':
token += 2; //if (token[1] == 't')
real_t r, g, b; {
parseReal3(&r, &g, &b, &token); token += 2;
material.ambient[0] = r; real_t r, g, b;
material.ambient[1] = g; parseReal3(&r, &g, &b, &token);
material.ambient[2] = b; material.transmittance[0] = r;
continue; material.transmittance[1] = g;
} material.transmittance[2] = b;
continue;
}
// emission
case 'e':
//if (token[1] == 'e')
{
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;
}
}
}
// diffuse // transmittance
if (token[0] == 'K' && token[1] == 'd' && IS_SPACE((token[2]))) { if ( //(token[0] == 'K' && token[1] == 't') ||
token += 2; token[0] == 'T' && token[1] == 'f') {
real_t r, g, b; token += 2;
parseReal3(&r, &g, &b, &token); real_t r, g, b;
material.diffuse[0] = r; parseReal3(&r, &g, &b, &token);
material.diffuse[1] = g; material.transmittance[0] = r;
material.diffuse[2] = b; material.transmittance[1] = g;
continue; material.transmittance[2] = b;
} continue;
}
// specular // ior(index of refraction)
if (token[0] == 'K' && token[1] == 's' && IS_SPACE((token[2]))) { if (token[0] == 'N' && token[1] == 'i') {
token += 2; token += 2;
real_t r, g, b; material.ior = parseReal(&token);
parseReal3(&r, &g, &b, &token); continue;
material.specular[0] = r; }
material.specular[1] = g;
material.specular[2] = b;
continue;
}
// transmittance // shininess
if ((token[0] == 'K' && token[1] == 't' && IS_SPACE((token[2]))) || if (token[0] == 'N' && token[1] == 's') {
(token[0] == 'T' && token[1] == 'f' && IS_SPACE((token[2])))) { token += 2;
token += 2; material.shininess = parseReal(&token);
real_t r, g, b; continue;
parseReal3(&r, &g, &b, &token); }
material.transmittance[0] = r;
material.transmittance[1] = g;
material.transmittance[2] = b;
continue;
}
// ior(index of refraction)
if (token[0] == 'N' && token[1] == 'i' && IS_SPACE((token[2]))) {
token += 2;
material.ior = parseReal(&token);
continue;
}
// emission
if (token[0] == 'K' && token[1] == 'e' && IS_SPACE(token[2])) {
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;
}
// 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);
} }