1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-08-11 17:51:04 +00:00

Increase MapBlock::actuallyUpdateDayNightDiff() performance by 2-8x. ok @celeron55

Before patch, function consumes up to ~8% of the main server loop. After, ~0% (below level of 2 places of significance)
This commit is contained in:
Craig Robbins 2015-02-07 17:52:56 +10:00 committed by Loic Blot
parent bb59a8543d
commit caf8d2a9d1
3 changed files with 36 additions and 17 deletions

View file

@ -330,47 +330,42 @@ void MapBlock::copyFrom(VoxelManipulator &dst)
void MapBlock::actuallyUpdateDayNightDiff()
{
INodeDefManager *nodemgr = m_gamedef->ndef();
// Running this function un-expires m_day_night_differs
m_day_night_differs_expired = false;
if(data == NULL)
{
if (data == NULL) {
m_day_night_differs = false;
return;
}
bool differs = false;
bool differs;
/*
Check if any lighting value differs
*/
for(u32 i=0; i<MAP_BLOCKSIZE*MAP_BLOCKSIZE*MAP_BLOCKSIZE; i++)
{
for (u32 i = 0; i < MAP_BLOCKSIZE*MAP_BLOCKSIZE*MAP_BLOCKSIZE; i++) {
MapNode &n = data[i];
if(n.getLight(LIGHTBANK_DAY, nodemgr) != n.getLight(LIGHTBANK_NIGHT, nodemgr))
{
differs = true;
differs = !n.isLightDayNightEq(nodemgr);
if (differs)
break;
}
}
/*
If some lighting values differ, check if the whole thing is
just air. If it is, differ = false
just air. If it is just air, differs = false
*/
if(differs)
{
if (differs) {
bool only_air = true;
for(u32 i=0; i<MAP_BLOCKSIZE*MAP_BLOCKSIZE*MAP_BLOCKSIZE; i++)
{
for (u32 i = 0; i < MAP_BLOCKSIZE*MAP_BLOCKSIZE*MAP_BLOCKSIZE; i++) {
MapNode &n = data[i];
if(n.getContent() != CONTENT_AIR)
{
if (n.getContent() != CONTENT_AIR) {
only_air = false;
break;
}
}
if(only_air)
if (only_air)
differs = false;
}