diff options
author | Perttu Ahola <celeron55@gmail.com> | 2012-01-27 04:02:42 +0200 |
---|---|---|
committer | Perttu Ahola <celeron55@gmail.com> | 2012-03-27 18:52:36 +0300 |
commit | a32706bc2699f5079d7541d0f19e8f470b416704 (patch) | |
tree | 9652f7c3fe910477ff3b347d13909559501b3831 /src | |
parent | bdcca4767c77ccd48b71fa6a5277d72171129da8 (diff) | |
download | minetest-a32706bc2699f5079d7541d0f19e8f470b416704.tar.gz minetest-a32706bc2699f5079d7541d0f19e8f470b416704.tar.bz2 minetest-a32706bc2699f5079d7541d0f19e8f470b416704.zip |
Post-mapgen lighting optimization
Diffstat (limited to 'src')
-rw-r--r-- | src/map.cpp | 39 |
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); |