From 3e27dd5b553e83c9d6358f5a93597c86a2bf3cb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Wed, 7 Aug 2019 13:08:28 +0200 Subject: Fix T67623 Eevee: Modulo node making unexpected/inconsistent behaviour This was a precision error. Using a more robust approach --- source/blender/gpu/shaders/gpu_shader_material.glsl | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'source') diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl b/source/blender/gpu/shaders/gpu_shader_material.glsl index 6149409774a..00b8ce54eb3 100644 --- a/source/blender/gpu/shaders/gpu_shader_material.glsl +++ b/source/blender/gpu/shaders/gpu_shader_material.glsl @@ -383,12 +383,10 @@ void math_modulo(float val1, float val2, out float outval) outval = 0.0; } else { - outval = mod(val1, val2); + /* change sign to match C convention, mod in GLSL will take absolute for negative numbers, + * see https://www.opengl.org/sdk/docs/man/html/mod.xhtml */ + outval = sign(val1) * mod(abs(val1), val2); } - - /* change sign to match C convention, mod in GLSL will take absolute for negative numbers, - * see https://www.opengl.org/sdk/docs/man/html/mod.xhtml */ - outval = (val1 > 0.0) ? outval : outval - val2; } void math_abs(float val1, out float outval) -- cgit v1.2.3