noise/validate.cpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #include "terraingen/noise/validate.h" | ||
| 2 | |||
| 3 | #include "terraingen/util/checks.h" | ||
| 4 | |||
| 5 | #include <cmath> | ||
| 6 | #include <stdexcept> | ||
| 7 | |||
| 8 | namespace terraingen { | ||
| 9 | |||
| 10 | 103265 | void ValidateFractalParams(const FractalParams& params) { | |
| 11 | 103265 | RequirePositive(params.wavelength, "Fractal wavelength"); | |
| 12 | 103261 | RequireFinite(params.amplitude, "Fractal amplitude"); | |
| 13 | 103260 | if (params.octaves < 1 || params.octaves > 32) { | |
| 14 | 8 | throw std::invalid_argument("Fractal octaves must be between 1 and 32"); | |
| 15 | } | ||
| 16 | 103252 | if (!(std::isfinite(params.lacunarity) && params.lacunarity > 1.0f)) { | |
| 17 | 2 | throw std::invalid_argument("Fractal lacunarity must be greater than 1 and finite"); | |
| 18 | } | ||
| 19 | 103250 | RequirePositive(params.gain, "Fractal gain"); | |
| 20 | 103247 | if (static_cast<std::uint32_t>(params.basis) >= kNoiseBasisCount) { | |
| 21 | 1 | throw std::invalid_argument("Unknown noise basis"); | |
| 22 | } | ||
| 23 | 103246 | if (static_cast<std::uint32_t>(params.type) >= kFractalTypeCount) { | |
| 24 | 1 | throw std::invalid_argument("Unknown fractal type"); | |
| 25 | } | ||
| 26 | 103245 | RequirePositive(params.offset, "Fractal offset"); | |
| 27 | 103243 | } | |
| 28 | |||
| 29 | 814 | void ValidateNoiseLayer(const NoiseLayer& layer) { | |
| 30 | 814 | ValidateFractalParams(layer.fractal); | |
| 31 | 807 | if (static_cast<std::uint32_t>(layer.blend) >= kLayerBlendCount) { | |
| 32 | 1 | throw std::invalid_argument("Unknown layer blend mode"); | |
| 33 | } | ||
| 34 | 806 | RequireNonNegative(layer.warpAmplitude, "Warp amplitude"); | |
| 35 | 803 | RequirePositive(layer.warpWavelength, "Warp wavelength"); | |
| 36 | 802 | } | |
| 37 | |||
| 38 | } // namespace terraingen | ||
| 39 |