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:
authorCharlie Jolly <charlie>2019-12-07 15:35:07 +0300
committerCharlie Jolly <mistajolly@gmail.com>2019-12-07 15:52:42 +0300
commit958d0d4236b1cfa600a7f36f6bdc51fdd0d98a97 (patch)
tree567a1e3209e6302dd784c054b858a8b5fb92bc9f /intern/cycles/kernel/svm/svm_clamp.h
parent0406eb110332a863811d7fb6228f9a7ca514e022 (diff)
Shader Nodes: Add Interpolation modes to Map Range node
Modes: Linear interpolation (default), stepped linear, smoothstep and smootherstep. This also includes an additional option for the **Clamp node** to switch between **Min Max** (default) and **Range** mode. This was needed to allow clamping when **To Max** is less than **To Min**. Reviewed By: JacquesLucke, brecht Differential Revision: https://developer.blender.org/D5827
Diffstat (limited to 'intern/cycles/kernel/svm/svm_clamp.h')
-rw-r--r--intern/cycles/kernel/svm/svm_clamp.h11
1 files changed, 8 insertions, 3 deletions
diff --git a/intern/cycles/kernel/svm/svm_clamp.h b/intern/cycles/kernel/svm/svm_clamp.h
index a45e70a3f15..a85fd82754e 100644
--- a/intern/cycles/kernel/svm/svm_clamp.h
+++ b/intern/cycles/kernel/svm/svm_clamp.h
@@ -26,8 +26,8 @@ ccl_device void svm_node_clamp(KernelGlobals *kg,
uint result_stack_offset,
int *offset)
{
- uint min_stack_offset, max_stack_offset;
- svm_unpack_node_uchar2(parameters_stack_offsets, &min_stack_offset, &max_stack_offset);
+ uint min_stack_offset, max_stack_offset, type;
+ svm_unpack_node_uchar3(parameters_stack_offsets, &min_stack_offset, &max_stack_offset, &type);
uint4 defaults = read_node(kg, offset);
@@ -35,7 +35,12 @@ ccl_device void svm_node_clamp(KernelGlobals *kg,
float min = stack_load_float_default(stack, min_stack_offset, defaults.x);
float max = stack_load_float_default(stack, max_stack_offset, defaults.y);
- stack_store_float(stack, result_stack_offset, clamp(value, min, max));
+ if (type == NODE_CLAMP_RANGE && (min > max)) {
+ stack_store_float(stack, result_stack_offset, clamp(value, max, min));
+ }
+ else {
+ stack_store_float(stack, result_stack_offset, clamp(value, min, max));
+ }
}
CCL_NAMESPACE_END