From aaf92471dc68766faf401ce4bdbb2a271e68c964 Mon Sep 17 00:00:00 2001 From: pommicket Date: Thu, 26 Jan 2023 10:23:45 -0500 Subject: RToR, PerComponent --- src/sdf.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'src/sdf.rs') diff --git a/src/sdf.rs b/src/sdf.rs index 1f98958..ad545b6 100644 --- a/src/sdf.rs +++ b/src/sdf.rs @@ -198,6 +198,9 @@ pub enum R3ToR3 { Compose(Box, Box), #[prob(4)] #[only_if(params.max_depth >= 0)] + PerComponent(Box, Box, Box), + #[prob(4)] + #[only_if(params.max_depth >= 0)] Mix(Box, Box, Constant), #[prob(0.5)] Translate(Constant3), @@ -238,6 +241,8 @@ pub enum RToR { Compose(Box, Box), #[prob(0)] Subtract(Constant), + #[prob(2)] + NToN(Box) } #[derive(GenRandom, Debug, Serialize, Deserialize)] @@ -547,6 +552,9 @@ impl Function for RToR { let a_output = a.to_glsl(input, code, var); b.to_glsl(a_output, code, var) } + NToN(f) => { + f.to_glsl(input, code, var, 1) + } } } } @@ -569,6 +577,22 @@ impl Function for R3ToR3 { let a_output = a.to_glsl(input, code, var); b.to_glsl(a_output, code, var) } + PerComponent(fx, fy, fz) => { + let x_input = var.next(); + let y_input = var.next(); + let z_input = var.next(); + let output = var.next(); + write_str!(code, + "float {x_input} = {input}.x;\n + float {y_input} = {input}.y;\n + float {z_input} = {input}.z;\n"); + let x_output = fx.to_glsl(x_input, code, var); + let y_output = fy.to_glsl(y_input, code, var); + let z_output = fz.to_glsl(z_input, code, var); + write_str!(code, + "vec3 {output} = vec3({x_output}, {y_output}, {z_output});\n"); + output + } Mix(a, b, t) => { let a_output = a.to_glsl(input, code, var); let b_output = b.to_glsl(input, code, var); -- cgit v1.2.3