summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPerttu Ahola <celeron55@gmail.com>2012-01-27 04:02:42 +0200
committerPerttu Ahola <celeron55@gmail.com>2012-03-27 18:52:36 +0300
commita32706bc2699f5079d7541d0f19e8f470b416704 (patch)
tree9652f7c3fe910477ff3b347d13909559501b3831
parentbdcca4767c77ccd48b71fa6a5277d72171129da8 (diff)
downloadminetest-a32706bc2699f5079d7541d0f19e8f470b416704.tar.gz
minetest-a32706bc2699f5079d7541d0f19e8f470b416704.tar.bz2
minetest-a32706bc2699f5079d7541d0f19e8f470b416704.zip
Post-mapgen lighting optimization
-rw-r--r--src/map.cpp39
1 files changed, 26 insertions, 13 deletions
diff --git a/src/map.cpp b/src/map.cpp
index d6b33ed66..dce3bdc09 100644
--- a/src/map.cpp
+++ b/src/map.cpp
@@ -727,10 +727,16 @@ void Map::updateLighting(enum LightBank bank,
n.setLight(bank, 0, nodemgr);
block->setNode(p, n);
+ // If node sources light, add to list
+ u8 source = nodemgr->get(n).light_source;
+ if(source != 0)
+ light_sources[p + posnodes] = true;
+
// Collect borders for unlighting
- if(x==0 || x == MAP_BLOCKSIZE-1
+ if((x==0 || x == MAP_BLOCKSIZE-1
|| y==0 || y == MAP_BLOCKSIZE-1
|| z==0 || z == MAP_BLOCKSIZE-1)
+ && oldlight != 0)
{
v3s16 p_map = p + posnodes;
unlight_from.insert(p_map, oldlight);
@@ -806,38 +812,43 @@ void Map::updateLighting(enum LightBank bank,
}
#endif
-#if 0
+#if 1
{
- TimeTaker timer("unspreadLight");
+ //TimeTaker timer("unspreadLight");
unspreadLight(bank, unlight_from, light_sources, modified_blocks);
}
- if(debug)
+ /*if(debug)
{
u32 diff = modified_blocks.size() - count_was;
count_was = modified_blocks.size();
infostream<<"unspreadLight modified "<<diff<<std::endl;
- }
+ }*/
{
- TimeTaker timer("spreadLight");
+ //TimeTaker timer("spreadLight");
spreadLight(bank, light_sources, modified_blocks);
}
- if(debug)
+ /*if(debug)
{
u32 diff = modified_blocks.size() - count_was;
count_was = modified_blocks.size();
infostream<<"spreadLight modified "<<diff<<std::endl;
- }
+ }*/
#endif
+#if 0
{
//MapVoxelManipulator vmanip(this);
-
+
// Make a manual voxel manipulator and load all the blocks
// that touch the requested blocks
ManualMapVoxelManipulator vmanip(this);
+
+ {
+ //TimeTaker timer("initialEmerge");
+
core::map<v3s16, MapBlock*>::Iterator i;
i = blocks_to_update.getIterator();
for(; i.atEnd() == false; i++)
@@ -871,22 +882,24 @@ void Map::updateLighting(enum LightBank bank,
// Lighting of block will be updated completely
block->setLightingExpired(false);
}
+ }
{
- //TimeTaker timer("unSpreadLight");
+ TimeTaker timer("unSpreadLight");
vmanip.unspreadLight(bank, unlight_from, light_sources, nodemgr);
}
{
- //TimeTaker timer("spreadLight");
+ TimeTaker timer("spreadLight");
vmanip.spreadLight(bank, light_sources, nodemgr);
}
{
- //TimeTaker timer("blitBack");
+ TimeTaker timer("blitBack");
vmanip.blitBack(modified_blocks);
}
/*infostream<<"emerge_time="<<emerge_time<<std::endl;
emerge_time = 0;*/
}
+#endif
//m_dout<<"Done ("<<getTimestamp()<<")"<<std::endl;
}
@@ -2056,7 +2069,7 @@ void ServerMap::initBlockMake(mapgen::BlockMakeData *data, v3s16 blockpos)
<<"("<<blockpos.X<<","<<blockpos.Y<<","<<blockpos.Z<<")"
<<std::endl;
- s16 chunksize = 3;
+ s16 chunksize = 2;
v3s16 blockpos_div = getContainerPos(blockpos, chunksize);
v3s16 blockpos_min = blockpos_div * chunksize;
v3s16 blockpos_max = blockpos_div * chunksize + v3s16(1,1,1)*(chunksize-1);