Substitute long if/else for switch statement for minor speedup.
Closed this issue · 0 comments
MotoLegacy commented
There are enough cases in functions like ChunkMesh::getTexCoord
to consider using a switch statement for a minor CPU usage reduction. Could be trivial now but worth doing anyway for PSP.
CrossCraft-Classic/src/ChunkMesh.cpp
Lines 163 to 251 in 8866297
std::array<float, 8> ChunkMesh::getTexCoord(uint8_t idx, uint32_t lv) { | |
auto vec = glm::vec2(16, 16); | |
if (idx == 1) // Stone | |
return getTexture(vec, 1); | |
else if (idx == 2) // Dirt | |
return getTexture(vec, 2); | |
else if (idx == 3) { // Grass | |
if (lv == LIGHT_SIDE) | |
return getTexture(vec, 3); | |
else if (lv == LIGHT_BOT) | |
return getTexture(vec, 2); | |
else | |
return getTexture(vec, 0); | |
} else if (idx == 4) // Cobblestone | |
return getTexture(vec, 16); | |
else if (idx == 5) // Wood | |
return getTexture(vec, 4); | |
else if (idx == 7) // Bedrock | |
return getTexture(vec, 17); | |
else if (idx == 8 || idx == 9) // Water | |
return getTexture(vec, 14); | |
else if (idx == 10 || idx == 11) // Lava | |
return getTexture(vec, 30); | |
else if (idx == 12) // Sand | |
return getTexture(vec, 18); | |
else if (idx == 13) // Gravel | |
return getTexture(vec, 19); | |
else if (idx == 14) // Gold Ore | |
return getTexture(vec, 32); | |
else if (idx == 15) // Iron Ore | |
return getTexture(vec, 33); | |
else if (idx == 16) // Coal Ore | |
return getTexture(vec, 34); | |
else if (idx == 6) // Sapling | |
return getTexture(vec, 15); | |
else if (idx == 17) { // Log | |
if (lv == LIGHT_TOP || lv == LIGHT_BOT) | |
return getTexture(vec, 21); | |
else | |
return getTexture(vec, 20); | |
} else if (idx == 18) // Leaves | |
return getTexture(vec, 22); | |
else if (idx == 19) // Sponge | |
return getTexture(vec, 48); | |
else if (idx == 20) // Glass | |
return getTexture(vec, 49); | |
else if (idx == 37) // Flower1 | |
return getTexture(vec, 13); | |
else if (idx == 38) // Flower2 | |
return getTexture(vec, 12); | |
else if (idx == 39) // Mushroom1 | |
return getTexture(vec, 29); | |
else if (idx == 40) // Mushroom2 | |
return getTexture(vec, 28); | |
else if (idx == 41) // Gold | |
return getTexture(vec, 24); | |
else if (idx == 42) // Iron | |
return getTexture(vec, 23); | |
else if (idx == 43) // DSLAB | |
return getTexture(vec, 5); | |
else if (idx == 44) // HSLAB | |
if (lv == LIGHT_SIDE) | |
return getTexture(vec, 25); | |
else | |
return getTexture(vec, 6); | |
else if (idx == 45) // Brick | |
return getTexture(vec, 7); | |
else if (idx == 46) // TNT | |
{ | |
if (lv == LIGHT_SIDE) | |
return getTexture(vec, 8); | |
else if (lv == LIGHT_BOT) | |
return getTexture(vec, 10); | |
else | |
return getTexture(vec, 9); | |
} else if (idx == 47) // BookShelf | |
if (lv == LIGHT_TOP || lv == LIGHT_BOT) | |
return getTexture(vec, 4); | |
else | |
return getTexture(vec, 35); | |
else if (idx == 48) // Mossy Cobble | |
return getTexture(vec, 36); | |
else if (idx == 49) // Obsidian | |
return getTexture(vec, 37); | |
else { | |
return getTexture(vec, idx - 21 + 64); | |
} | |
} |