diff options
author | nerzhul <loic.blot@unix-experience.fr> | 2015-07-29 10:49:40 +0200 |
---|---|---|
committer | nerzhul <loic.blot@unix-experience.fr> | 2015-07-29 11:45:44 +0200 |
commit | ca63f7f10d912382ebc24a54995f7153598ed429 (patch) | |
tree | 1ecebcbbf5f2234ecca0a34d612c7b77c41ec4c5 | |
parent | 88a6b9f52d6ffd4e351155dee661fe8ea084a9aa (diff) | |
download | minetest-ca63f7f10d912382ebc24a54995f7153598ed429.tar.gz minetest-ca63f7f10d912382ebc24a54995f7153598ed429.tar.bz2 minetest-ca63f7f10d912382ebc24a54995f7153598ed429.zip |
Precalculate mapblock relative size. This permit to remove many s16 calculs on runtime
-rw-r--r-- | src/mapblock.cpp | 1 | ||||
-rw-r--r-- | src/mapblock.h | 10 |
2 files changed, 10 insertions, 1 deletions
diff --git a/src/mapblock.cpp b/src/mapblock.cpp index 1d2e1e250..43057f3a5 100644 --- a/src/mapblock.cpp +++ b/src/mapblock.cpp @@ -69,6 +69,7 @@ static const char *modified_reason_strings[] = { MapBlock::MapBlock(Map *parent, v3s16 pos, IGameDef *gamedef, bool dummy): m_parent(parent), m_pos(pos), + m_pos_relative(pos * MAP_BLOCKSIZE), m_gamedef(gamedef), m_modified(MOD_STATE_WRITE_NEEDED), m_modified_reason(MOD_REASON_INITIAL), diff --git a/src/mapblock.h b/src/mapblock.h index 92ca4b485..ba33c01a2 100644 --- a/src/mapblock.h +++ b/src/mapblock.h @@ -258,7 +258,7 @@ public: inline v3s16 getPosRelative() { - return m_pos * MAP_BLOCKSIZE; + return m_pos_relative; } inline core::aabbox3d<s16> getBox() @@ -564,6 +564,14 @@ private: // Position in blocks on parent v3s16 m_pos; + /* This is the precalculated m_pos_relative value + * This caches the value, improving performance by removing 3 s16 multiplications + * at runtime on each getPosRelative call + * For a 5 minutes runtime with valgrind this removes 3 * 19M s16 multiplications + * The gain can be estimated in Release Build to 3 * 100M multiply operations for 5 mins + */ + v3s16 m_pos_relative; + IGameDef *m_gamedef; /* |