1
0
mirror of https://github.com/moparisthebest/minetest synced 2024-11-15 05:45:13 -05:00

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
This commit is contained in:
paramat 2015-01-18 12:35:38 +00:00 committed by kwolekr
parent 408d9b72f0
commit 70354ac20b

View File

@ -285,15 +285,22 @@ 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_height_select->perlinMap2D(x, z);
if (flags & MG_CAVES) {
noise_cave1->perlinMap3D(x, y, z);
noise_cave2->perlinMap3D(x, y, 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);
@ -304,15 +311,8 @@ void MapgenV7::calculateNoise()
noise_ridge->perlinMap3D(x, y, z);
noise_ridge_uwater->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);
//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]);