Skip to content
Snippets Groups Projects
Commit ca63f7f1 authored by Loïc Blot's avatar Loïc Blot
Browse files

Precalculate mapblock relative size. This permit to remove many s16 calculs on runtime

parent 88a6b9f5
No related branches found
No related tags found
No related merge requests found
......@@ -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),
......
......@@ -258,7 +258,7 @@ class MapBlock /*: public NodeContainer*/
inline v3s16 getPosRelative()
{
return m_pos * MAP_BLOCKSIZE;
return m_pos_relative;
}
inline core::aabbox3d<s16> getBox()
......@@ -564,6 +564,14 @@ class MapBlock /*: public NodeContainer*/
// 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;
/*
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment