OverviewFilesCommitsIssuesDocsReleasesPeers

dc-terrain / libdc / include / dc_generator_noise.h

36 lines · c ref:
#ifndef DC_GENERATOR_NOISE_H
#define DC_GENERATOR_NOISE_H

#include "dc_generator.h"
#include "dc_density.h"

// Wraps the existing DCDensity as a DCGenerator implementation.
//
// DCDensity is non-copyable, so configure via the public `density` member:
//   DCGeneratorNoise gen;
//   gen.density.configure(config);
//   float d = gen.evaluate(x, y, z, lod_voxel_size);
class DCGeneratorNoise : public DCGenerator {
public:
    DCDensity density;

    float evaluate(float x, float y, float z, float lod_voxel_size) override {
        return density.evaluate(x, y, z, lod_voxel_size);
    }

    // Noise generator has a GPU shader (noise_sdf.glsl).
    // DCWorker loads it from res://shaders/generators/noise_sdf.glsl.
    bool has_gpu_shader() const override { return true; }

    bool get_bounds(float min[3], float max[3]) const override {
        float ts = density.config().terrain_size;
        if (ts <= 0) return false;
        float half = ts * 0.5f;
        min[0] = -half; min[1] = -half; min[2] = -half;
        max[0] =  half; max[1] =  half; max[2] =  half;
        return true;
    }
};

#endif // DC_GENERATOR_NOISE_H