Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--intern/cycles/kernel/shaders/node_hsv.osl5
-rw-r--r--intern/cycles/kernel/svm/svm_hsv.h5
-rw-r--r--source/blender/gpu/shaders/gpu_shader_material.glsl9
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_hueSatVal.c5
4 files changed, 9 insertions, 15 deletions
diff --git a/intern/cycles/kernel/shaders/node_hsv.osl b/intern/cycles/kernel/shaders/node_hsv.osl
index 8d9e50fed6b..9d7b7cde23a 100644
--- a/intern/cycles/kernel/shaders/node_hsv.osl
+++ b/intern/cycles/kernel/shaders/node_hsv.osl
@@ -28,9 +28,8 @@ shader node_hsv(
color Color = rgb_to_hsv(ColorIn);
// remember: fmod doesn't work for negative numbers
- Color[0] += Hue + 0.5;
- Color[0] = fmod(Color[0], 1.0);
- Color[1] *= Saturation;
+ Color[0] = fmod(Color[0] + Hue + 0.5, 1.0);
+ Color[1] *= clamp(Saturation, 0.0, 1.0);
Color[2] *= Value;
Color = hsv_to_rgb(Color);
diff --git a/intern/cycles/kernel/svm/svm_hsv.h b/intern/cycles/kernel/svm/svm_hsv.h
index 41538d1138d..e69a4ee9154 100644
--- a/intern/cycles/kernel/svm/svm_hsv.h
+++ b/intern/cycles/kernel/svm/svm_hsv.h
@@ -37,9 +37,8 @@ ccl_device void svm_node_hsv(KernelGlobals *kg, ShaderData *sd, float *stack, ui
color = rgb_to_hsv(color);
/* remember: fmod doesn't work for negative numbers here */
- color.x += hue + 0.5f;
- color.x = fmodf(color.x, 1.0f);
- color.y *= sat;
+ color.x = fmodf(color.x + hue + 0.5f, 1.0f);
+ color.y *= saturate(sat);
color.z *= val;
color = hsv_to_rgb(color);
diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl b/source/blender/gpu/shaders/gpu_shader_material.glsl
index ab044fff100..970bbe641d4 100644
--- a/source/blender/gpu/shaders/gpu_shader_material.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_material.glsl
@@ -881,12 +881,9 @@ void hue_sat(float hue, float sat, float value, float fac, vec4 col, out vec4 ou
rgb_to_hsv(col, hsv);
- hsv[0] += (hue - 0.5);
- if (hsv[0] > 1.0) hsv[0] -= 1.0; else if (hsv[0] < 0.0) hsv[0] += 1.0;
- hsv[1] *= sat;
- if (hsv[1] > 1.0) hsv[1] = 1.0; else if (hsv[1] < 0.0) hsv[1] = 0.0;
- hsv[2] *= value;
- if (hsv[2] > 1.0) hsv[2] = 1.0; else if (hsv[2] < 0.0) hsv[2] = 0.0;
+ hsv[0] = fract(hsv[0] + hue + 0.5);
+ hsv[1] = hsv[1] * clamp(sat, 0.0, 1.0);
+ hsv[2] = hsv[2] * value;
hsv_to_rgb(hsv, outcol);
diff --git a/source/blender/nodes/shader/nodes/node_shader_hueSatVal.c b/source/blender/nodes/shader/nodes/node_shader_hueSatVal.c
index 62465000719..b52681190b4 100644
--- a/source/blender/nodes/shader/nodes/node_shader_hueSatVal.c
+++ b/source/blender/nodes/shader/nodes/node_shader_hueSatVal.c
@@ -46,9 +46,8 @@ static void do_hue_sat_fac(bNode *UNUSED(node), float *out, float hue, float sat
float col[3], hsv[3], mfac = 1.0f - fac;
rgb_to_hsv(in[0], in[1], in[2], hsv, hsv + 1, hsv + 2);
- hsv[0] += (hue - 0.5f);
- if (hsv[0] > 1.0f) hsv[0] -= 1.0f; else if (hsv[0] < 0.0f) hsv[0] += 1.0f;
- hsv[1] *= sat;
+ hsv[0] = fmodf(hsv[0] + hue + 0.5f, 1.0f);
+ hsv[1] *= clamp_f(sat, 0.0f, 1.0f);
hsv[2] *= val;
hsv_to_rgb(hsv[0], hsv[1], hsv[2], col, col + 1, col + 2);