diff options
author | Perttu Ahola <celeron55@gmail.com> | 2012-01-27 14:10:10 +0200 |
---|---|---|
committer | Perttu Ahola <celeron55@gmail.com> | 2012-03-27 19:01:51 +0300 |
commit | 8cb7badd632200e06004577f351b9c845c174e29 (patch) | |
tree | e1bcb0aa60d385cbacdecef392bbcea4fb9516a9 /src | |
parent | 0f3c2f65414f332fad510fb8651dd59d506aad2e (diff) | |
download | minetest-8cb7badd632200e06004577f351b9c845c174e29.tar.gz minetest-8cb7badd632200e06004577f351b9c845c174e29.tar.bz2 minetest-8cb7badd632200e06004577f351b9c845c174e29.zip |
Do post-mapgen lighting using the VoxelManipulator-based functions (causes glitches currently)
Diffstat (limited to 'src')
-rw-r--r-- | src/map.cpp | 11 | ||||
-rw-r--r-- | src/mapgen.cpp | 28 |
2 files changed, 37 insertions, 2 deletions
diff --git a/src/map.cpp b/src/map.cpp index 1ab2b32ae..2625cbad5 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -2076,10 +2076,13 @@ void ServerMap::initBlockMake(mapgen::BlockMakeData *data, v3s16 blockpos) <<"("<<blockpos.X<<","<<blockpos.Y<<","<<blockpos.Z<<")" <<std::endl; - s16 chunksize = 2; - v3s16 blockpos_div = getContainerPos(blockpos, chunksize); + s16 chunksize = 3; + v3s16 chunk_offset(-1,-1,-1); + v3s16 blockpos_div = getContainerPos(blockpos - chunk_offset, chunksize); v3s16 blockpos_min = blockpos_div * chunksize; v3s16 blockpos_max = blockpos_div * chunksize + v3s16(1,1,1)*(chunksize-1); + blockpos_min += chunk_offset; + blockpos_max += chunk_offset; // Do nothing if not inside limits (+-1 because of neighbors) if(blockpos_over_limit(blockpos_min - v3s16(1,1,1)) || @@ -2223,6 +2226,7 @@ MapBlock* ServerMap::finishBlockMake(mapgen::BlockMakeData *data, Update lighting */ { +#if 0 TimeTaker t("finishBlockMake lighting update"); core::map<v3s16, MapBlock*> lighting_update_blocks; @@ -2239,6 +2243,7 @@ MapBlock* ServerMap::finishBlockMake(mapgen::BlockMakeData *data, } updateLighting(lighting_update_blocks, changed_blocks); +#endif /* Set lighting to non-expired state in all of them. @@ -2253,8 +2258,10 @@ MapBlock* ServerMap::finishBlockMake(mapgen::BlockMakeData *data, getBlockNoCreateNoEx(p)->setLightingExpired(false); } +#if 0 if(enable_mapgen_debug_info == false) t.stop(true); // Hide output +#endif } // Center blocks diff --git a/src/mapgen.cpp b/src/mapgen.cpp index 25fa427aa..0ce211f30 100644 --- a/src/mapgen.cpp +++ b/src/mapgen.cpp @@ -27,6 +27,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "nodedef.h" #include "content_mapnode.h" // For content_mapnode_get_new_name #include "voxelalgorithms.h" +#include "profiler.h" +#include "main.h" // For g_profiler namespace mapgen { @@ -2339,7 +2341,33 @@ void make_block(BlockMakeData *data) /* Calculate lighting */ + { + ScopeProfiler sp(g_profiler, "EmergeThread: mapgen lighting update", + SPT_AVG); + VoxelArea a(node_min, node_max); + enum LightBank banks[2] = {LIGHTBANK_DAY, LIGHTBANK_NIGHT}; + for(int i=0; i<2; i++) + { + enum LightBank bank = banks[i]; + + core::map<v3s16, bool> light_sources; + core::map<v3s16, u8> unlight_from; + + voxalgo::clearLightAndCollectSources(vmanip, a, bank, ndef, + light_sources, unlight_from); + + // TODO: Get this from elsewhere + bool inexistent_top_provides_sunlight = true; + voxalgo::SunlightPropagateResult res = voxalgo::propagateSunlight( + vmanip, a, inexistent_top_provides_sunlight, + light_sources, ndef); + // TODO: Do stuff according to bottom_sunlight_valid + + vmanip.unspreadLight(bank, unlight_from, light_sources, ndef); + vmanip.spreadLight(bank, light_sources, ndef); + } + } } BlockMakeData::BlockMakeData(): |