1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

Noise: Add noise unittests

Fix buffer size calculation for lacunarity < 1.0
Add guard against absurd noise parameters
This commit is contained in:
kwolekr 2015-04-21 12:59:09 -04:00
parent c197e03922
commit 943c6e523e
2 changed files with 273 additions and 16 deletions

View file

@ -538,19 +538,28 @@ void Noise::setOctaves(int octaves)
void Noise::resizeNoiseBuf(bool is3d)
{
int nlx, nly, nlz;
float ofactor;
//maximum possible spread value factor
ofactor = pow(np.lacunarity, np.octaves - 1);
float ofactor = (np.lacunarity > 1.0) ?
pow(np.lacunarity, np.octaves - 1) :
np.lacunarity;
// noise lattice point count
// (int)(sz * spread * ofactor) is # of lattice points crossed due to length
float num_noise_points_x = sx * ofactor / np.spread.X;
float num_noise_points_y = sy * ofactor / np.spread.Y;
float num_noise_points_z = sz * ofactor / np.spread.Z;
// protect against obviously invalid parameters
if (num_noise_points_x > 1000000000.f ||
num_noise_points_y > 1000000000.f ||
num_noise_points_z > 1000000000.f)
throw InvalidNoiseParamsException();
//noise lattice point count
//(int)(sz * spread * ofactor) is # of lattice points crossed due to length
// + 2 for the two initial endpoints
// + 1 for potentially crossing a boundary due to offset
nlx = (int)ceil(sx * ofactor / np.spread.X) + 3;
nly = (int)ceil(sy * ofactor / np.spread.Y) + 3;
nlz = is3d ? (int)ceil(sz * ofactor / np.spread.Z) + 3 : 1;
size_t nlx = (size_t)ceil(num_noise_points_x) + 3;
size_t nly = (size_t)ceil(num_noise_points_y) + 3;
size_t nlz = is3d ? (size_t)ceil(num_noise_points_z) + 3 : 1;
delete[] noise_buf;
try {