Skip to content

Commit d4457ef

Browse files
committedJun 5, 2016
Mapgen: Optimize biomemap creation by combining with generateBiomes
1 parent d24f384 commit d4457ef

File tree

6 files changed

+18
-11
lines changed

6 files changed

+18
-11
lines changed
 

‎src/mapgen.cpp

+17-3
Original file line numberDiff line numberDiff line change
@@ -524,6 +524,10 @@ MapgenBasic::~MapgenBasic()
524524

525525
MgStoneType MapgenBasic::generateBiomes()
526526
{
527+
// can't generate biomes without a biome generator!
528+
assert(biomegen);
529+
assert(biomemap);
530+
527531
v3s16 em = vm->m_area.getExtent();
528532
u32 index = 0;
529533
MgStoneType stone_type = MGSTONE_STONE;
@@ -546,6 +550,8 @@ MgStoneType MapgenBasic::generateBiomes()
546550
bool river_water_above = c_above == c_river_water_source;
547551
bool water_above = c_above == c_water_source || river_water_above;
548552

553+
biomemap[index] = BIOME_NONE;
554+
549555
// If there is air or water above enable top/filler placement, otherwise force
550556
// nplaced to stone level by setting a number exceeding any possible filler depth.
551557
u16 nplaced = (air_above || water_above) ? 0 : U16_MAX;
@@ -560,11 +566,19 @@ MgStoneType MapgenBasic::generateBiomes()
560566
// 1. At the surface of stone below air or water.
561567
// 2. At the surface of water below air.
562568
// 3. When stone or water is detected but biome has not yet been calculated.
563-
if ((c == c_stone && (air_above || water_above || !biome))
564-
|| ((c == c_water_source || c == c_river_water_source)
565-
&& (air_above || !biome))) {
569+
bool is_stone_surface = (c == c_stone) &&
570+
(air_above || water_above || !biome);
571+
572+
bool is_water_surface =
573+
(c == c_water_source || c == c_river_water_source) &&
574+
(air_above || !biome);
575+
576+
if (is_stone_surface || is_water_surface) {
566577
biome = biomegen->getBiomeAtIndex(index, y);
567578

579+
if (biomemap[index] == BIOME_NONE && is_stone_surface)
580+
biomemap[index] = biome->index;
581+
568582
depth_top = biome->depth_top;
569583
base_filler = MYMAX(depth_top +
570584
biome->depth_filler +

‎src/mapgen_flat.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,6 @@ void MapgenFlat::makeChunk(BlockMakeData *data)
192192

193193
// Init biome generator, place biome-specific nodes, and build biomemap
194194
biomegen->calcBiomeNoise(node_min);
195-
biomegen->getBiomes(heightmap);
196195
MgStoneType stone_type = generateBiomes();
197196

198197
if (flags & MG_CAVES)

‎src/mapgen_fractal.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,6 @@ void MapgenFractal::makeChunk(BlockMakeData *data)
208208

209209
// Init biome generator, place biome-specific nodes, and build biomemap
210210
biomegen->calcBiomeNoise(node_min);
211-
biomegen->getBiomes(heightmap);
212211
MgStoneType stone_type = generateBiomes();
213212

214213
if (flags & MG_CAVES)

‎src/mapgen_v5.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,6 @@ void MapgenV5::makeChunk(BlockMakeData *data)
190190

191191
// Init biome generator, place biome-specific nodes, and build biomemap
192192
biomegen->calcBiomeNoise(node_min);
193-
biomegen->getBiomes(heightmap);
194193
MgStoneType stone_type = generateBiomes();
195194

196195
// Generate caves

‎src/mapgen_v7.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,6 @@ void MapgenV7::makeChunk(BlockMakeData *data)
219219

220220
// Init biome generator, place biome-specific nodes, and build biomemap
221221
biomegen->calcBiomeNoise(node_min);
222-
biomegen->getBiomes(heightmap);
223222
MgStoneType stone_type = generateBiomes();
224223

225224
if (flags & MG_CAVES)

‎src/mapgen_valleys.cpp

+1-4
Original file line numberDiff line numberDiff line change
@@ -250,10 +250,7 @@ void MapgenValleys::makeChunk(BlockMakeData *data)
250250
// Generate base terrain with initial heightmaps
251251
s16 stone_surface_max_y = generateTerrain();
252252

253-
// Build biomemap
254-
m_bgen->getBiomes(heightmap);
255-
256-
// Place biome-specific nodes
253+
// Place biome-specific nodes and build biomemap
257254
MgStoneType stone_type = generateBiomes();
258255

259256
// Cave creation.

0 commit comments

Comments
 (0)
Please sign in to comment.