diff options
author | paramat <mat.gregory@virginmedia.com> | 2015-01-18 12:35:38 +0000 |
---|---|---|
committer | kwolekr <kwolekr@minetest.net> | 2015-01-22 02:10:07 -0500 |
commit | 70354ac20b456f2cad3208e13ccb0a30980df39c (patch) | |
tree | 2e4b2c2bb2ad3462eb2d3f71863776fdf3e13290 /src | |
parent | 408d9b72f00b1aed2de5a6738571acab1149f690 (diff) | |
download | minetest-70354ac20b456f2cad3208e13ccb0a30980df39c.tar.gz minetest-70354ac20b456f2cad3208e13ccb0a30980df39c.tar.bz2 minetest-70354ac20b456f2cad3208e13ccb0a30980df39c.zip |
Mgv7: Speed optimise calculateNoise and generateRidgeTerrain
Remove unnecessary range limiting of persistmap
Skip calculation of filler, mountain, ridge, heat and humidity perlinmaps in underground mapchunks
Skip generateRidgeTerrain in underground mapchunks
Diffstat (limited to 'src')
-rw-r--r-- | src/mapgen_v7.cpp | 43 |
1 files changed, 23 insertions, 20 deletions
diff --git a/src/mapgen_v7.cpp b/src/mapgen_v7.cpp index 251540880..f13eee829 100644 --- a/src/mapgen_v7.cpp +++ b/src/mapgen_v7.cpp @@ -285,33 +285,33 @@ void MapgenV7::calculateNoise() int y = node_min.Y; int z = node_min.Z; - noise_height_select->perlinMap2D(x, z); noise_terrain_persist->perlinMap2D(x, z); float *persistmap = noise_terrain_persist->result; - for (int i = 0; i != csize.X * csize.Z; i++) - persistmap[i] = rangelim(persistmap[i], 0.4, 0.9); noise_terrain_base->perlinMap2D(x, z, persistmap); noise_terrain_alt->perlinMap2D(x, z, persistmap); - noise_filler_depth->perlinMap2D(x, z); - - if (spflags & MGV7_MOUNTAINS) { - noise_mountain->perlinMap3D(x, y, z); - noise_mount_height->perlinMap2D(x, z); - } - - if (spflags & MGV7_RIDGES) { - noise_ridge->perlinMap3D(x, y, z); - noise_ridge_uwater->perlinMap2D(x, z); - } + noise_height_select->perlinMap2D(x, z); if (flags & MG_CAVES) { noise_cave1->perlinMap3D(x, y, z); noise_cave2->perlinMap3D(x, y, z); } - noise_heat->perlinMap2D(x, z); - noise_humidity->perlinMap2D(x, z); + if (node_max.Y >= water_level) { + noise_filler_depth->perlinMap2D(x, z); + noise_heat->perlinMap2D(x, z); + noise_humidity->perlinMap2D(x, z); + + if (spflags & MGV7_MOUNTAINS) { + noise_mountain->perlinMap3D(x, y, z); + noise_mount_height->perlinMap2D(x, z); + } + + if (spflags & MGV7_RIDGES) { + noise_ridge->perlinMap3D(x, y, z); + noise_ridge_uwater->perlinMap2D(x, z); + } + } //printf("calculateNoise: %dus\n", t.stop()); } @@ -469,7 +469,7 @@ int MapgenV7::generateBaseTerrain() int MapgenV7::generateMountainTerrain(int ymax) { - if (node_max.Y <= water_level) + if (node_max.Y < water_level) return ymax; MapNode n_stone(c_stone); @@ -500,6 +500,9 @@ int MapgenV7::generateMountainTerrain(int ymax) void MapgenV7::generateRidgeTerrain() { + if (node_max.Y < water_level) + return; + MapNode n_water(c_water_source); MapNode n_air(CONTENT_AIR); u32 index = 0; @@ -637,12 +640,12 @@ void MapgenV7::generateBiomes() void MapgenV7::dustTopNodes() { + if (node_max.Y < water_level) + return; + v3s16 em = vm->m_area.getExtent(); u32 index = 0; - if (water_level > node_max.Y) - return; - for (s16 z = node_min.Z; z <= node_max.Z; z++) for (s16 x = node_min.X; x <= node_max.X; x++, index++) { Biome *biome = (Biome *)bmgr->get(biomemap[index]); |