From ffe67139cdaa5c3fecaa3c965609d77ea24a4358 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Capucho?= Date: Sun, 20 Jun 2021 20:16:55 +0100 Subject: [PATCH] [glsl-in] Add support for mix with bool selectors --- src/front/glsl/functions.rs | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/src/front/glsl/functions.rs b/src/front/glsl/functions.rs index 8dd0c0d36a..bd9b443fad 100644 --- a/src/front/glsl/functions.rs +++ b/src/front/glsl/functions.rs @@ -413,14 +413,42 @@ impl Program<'_> { body, ))) } - "mix" | "clamp" | "faceforward" | "refract" | "fma" | "smoothstep" => { + "mix" => { + if args.len() != 3 { + return Err(ErrorKind::wrong_function_args(name, 3, args.len(), meta)); + } + Ok(Some( + if let Some(ScalarKind::Bool) = + self.resolve_type(ctx, args[2].0, args[2].1)?.scalar_kind() + { + ctx.add_expression( + Expression::Select { + condition: args[2].0, + accept: args[0].0, + reject: args[1].0, + }, + body, + ) + } else { + ctx.add_expression( + Expression::Math { + fun: MathFunction::Mix, + arg: args[0].0, + arg1: Some(args[1].0), + arg2: Some(args[2].0), + }, + body, + ) + }, + )) + } + "clamp" | "faceforward" | "refract" | "fma" | "smoothstep" => { if args.len() != 3 { return Err(ErrorKind::wrong_function_args(name, 3, args.len(), meta)); } Ok(Some(ctx.add_expression( Expression::Math { fun: match name.as_str() { - "mix" => MathFunction::Mix, "clamp" => MathFunction::Clamp, "faceforward" => MathFunction::FaceForward, "refract" => MathFunction::Refract,