forked from Mirrorlandia_minetest/minetest
Precalculate mapblock relative size. This permit to remove many s16 calculs on runtime
This commit is contained in:
parent
88a6b9f52d
commit
ca63f7f10d
@ -69,6 +69,7 @@ static const char *modified_reason_strings[] = {
|
|||||||
MapBlock::MapBlock(Map *parent, v3s16 pos, IGameDef *gamedef, bool dummy):
|
MapBlock::MapBlock(Map *parent, v3s16 pos, IGameDef *gamedef, bool dummy):
|
||||||
m_parent(parent),
|
m_parent(parent),
|
||||||
m_pos(pos),
|
m_pos(pos),
|
||||||
|
m_pos_relative(pos * MAP_BLOCKSIZE),
|
||||||
m_gamedef(gamedef),
|
m_gamedef(gamedef),
|
||||||
m_modified(MOD_STATE_WRITE_NEEDED),
|
m_modified(MOD_STATE_WRITE_NEEDED),
|
||||||
m_modified_reason(MOD_REASON_INITIAL),
|
m_modified_reason(MOD_REASON_INITIAL),
|
||||||
|
@ -258,7 +258,7 @@ public:
|
|||||||
|
|
||||||
inline v3s16 getPosRelative()
|
inline v3s16 getPosRelative()
|
||||||
{
|
{
|
||||||
return m_pos * MAP_BLOCKSIZE;
|
return m_pos_relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline core::aabbox3d<s16> getBox()
|
inline core::aabbox3d<s16> getBox()
|
||||||
@ -564,6 +564,14 @@ private:
|
|||||||
// Position in blocks on parent
|
// Position in blocks on parent
|
||||||
v3s16 m_pos;
|
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;
|
IGameDef *m_gamedef;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user