use bevy::prelude::*;
pub mod cpu;
pub struct ErosionFilterPlugin;
impl Plugin for ErosionFilterPlugin {
fn build(&self, app: &mut App) {
bevy::shader::load_shader_library!(app, "../assets/shaders/erosion.wgsl");
}
}
#[derive(Clone, Copy, Debug, PartialEq, bevy::render::render_resource::ShaderType)]
#[repr(C)]
pub struct ErosionFilterParamsGpu {
pub scale: f32,
pub strength: f32,
pub gully_weight: f32,
pub detail: f32,
pub rounding: Vec4,
pub onset: Vec4,
pub assumed_slope: Vec2,
pub cell_scale: f32,
pub normalization: f32,
pub octaves: i32,
pub lacunarity: f32,
pub gain: f32,
}
impl Default for ErosionFilterParamsGpu {
fn default() -> Self {
Self::from_cpu(&cpu::ErosionFilterParams::default())
}
}
impl ErosionFilterParamsGpu {
pub fn from_cpu(p: &cpu::ErosionFilterParams) -> Self {
Self {
scale: p.scale,
strength: p.strength,
gully_weight: p.gully_weight,
detail: p.detail,
rounding: p.rounding,
onset: p.onset,
assumed_slope: p.assumed_slope,
cell_scale: p.cell_scale,
normalization: p.normalization,
octaves: p.octaves,
lacunarity: p.lacunarity,
gain: p.gain,
}
}
}