[Bf-blender-cvs] [ab25e2f] object_nodes: Sqrt math node mode, patch by lichtwerk.

Lukas Tönne noreply at git.blender.org
Mon Dec 21 12:10:36 CET 2015


Commit: ab25e2f6c6b526ad0083c97a70b285dbde93a8fd
Author: Lukas Tönne
Date:   Mon Dec 21 12:09:28 2015 +0100
Branches: object_nodes
https://developer.blender.org/rBab25e2f6c6b526ad0083c97a70b285dbde93a8fd

Sqrt math node mode, patch by lichtwerk.

===================================================================

M	release/scripts/nodes/common_nodes.py
M	source/blender/blenvm/bvm/bvm_eval.cc
M	source/blender/blenvm/bvm/bvm_eval_math.h
M	source/blender/blenvm/bvm/bvm_opcode.h
M	source/blender/blenvm/compile/bvm_nodegraph.cc
M	source/blender/blenvm/intern/bvm_api.cc
M	source/blender/blenvm/util/bvm_util_math.h

===================================================================

diff --git a/release/scripts/nodes/common_nodes.py b/release/scripts/nodes/common_nodes.py
index dc411f2..cec8cd7 100644
--- a/release/scripts/nodes/common_nodes.py
+++ b/release/scripts/nodes/common_nodes.py
@@ -221,6 +221,7 @@ class MathNode(CommonNodeBase, ObjectNode):
         ('MODULO', 'Modulo', '', 'NONE', 17),
         ('ABSOLUTE', 'Absolute', '', 'NONE', 18),
         ('CLAMP', 'Clamp', '', 'NONE', 19),
+        ('SQRT', 'Square Root', '', 'NONE', 20),
     ]
     mode = EnumProperty(name="Mode",
                         items=_mode_items)
diff --git a/source/blender/blenvm/bvm/bvm_eval.cc b/source/blender/blenvm/bvm/bvm_eval.cc
index 25d1f88..e9d0c14 100644
--- a/source/blender/blenvm/bvm/bvm_eval.cc
+++ b/source/blender/blenvm/bvm/bvm_eval.cc
@@ -525,6 +525,12 @@ void EvalContext::eval_instructions(const EvalGlobals *globals, const Function *
 				eval_op_clamp(stack, offset, offset_r);
 				break;
 			}
+			case OP_SQRT: {
+				StackIndex offset_a = fn->read_stack_index(&instr);
+				StackIndex offset_r = fn->read_stack_index(&instr);
+				eval_op_sqrt_float(stack, offset_a, offset_r);
+				break;
+			}
 			case OP_ADD_FLOAT3: {
 				StackIndex offset_a = fn->read_stack_index(&instr);
 				StackIndex offset_b = fn->read_stack_index(&instr);
diff --git a/source/blender/blenvm/bvm/bvm_eval_math.h b/source/blender/blenvm/bvm/bvm_eval_math.h
index fa1e640..5454fdc 100644
--- a/source/blender/blenvm/bvm/bvm_eval_math.h
+++ b/source/blender/blenvm/bvm/bvm_eval_math.h
@@ -242,6 +242,12 @@ static void eval_op_clamp(float *stack, StackIndex offset, StackIndex offset_r)
 	stack_store_float(stack, offset_r, CLAMPIS(f, 0.0f, 1.0f));
 }
 
+static void eval_op_sqrt_float(float *stack, StackIndex offset_a, StackIndex offset_r)
+{
+	float a = stack_load_float(stack, offset_a);
+	stack_store_float(stack, offset_r, sqrt_safe(a));
+}
+
 static void eval_op_add_float3(float *stack, StackIndex offset_a, StackIndex offset_b, StackIndex offset_r)
 {
 	float3 a = stack_load_float3(stack, offset_a);
diff --git a/source/blender/blenvm/bvm/bvm_opcode.h b/source/blender/blenvm/bvm/bvm_opcode.h
index 64fc89f..9f7e682 100644
--- a/source/blender/blenvm/bvm/bvm_opcode.h
+++ b/source/blender/blenvm/bvm/bvm_opcode.h
@@ -83,6 +83,7 @@ enum OpCode {
 	OP_MODULO,
 	OP_ABSOLUTE,
 	OP_CLAMP,
+	OP_SQRT,
 	
 	OP_ADD_FLOAT3,
 	OP_SUB_FLOAT3,
diff --git a/source/blender/blenvm/compile/bvm_nodegraph.cc b/source/blender/blenvm/compile/bvm_nodegraph.cc
index a5d5c92..578d3b1 100644
--- a/source/blender/blenvm/compile/bvm_nodegraph.cc
+++ b/source/blender/blenvm/compile/bvm_nodegraph.cc
@@ -816,6 +816,7 @@ OpCode get_opcode_from_node_type(const string &node)
 	NODETYPE(MODULO);
 	NODETYPE(ABSOLUTE);
 	NODETYPE(CLAMP);
+	NODETYPE(SQRT);
 	
 	NODETYPE(ADD_FLOAT3);
 	NODETYPE(SUB_FLOAT3);
@@ -1025,6 +1026,7 @@ static void register_opcode_node_types()
 	BINARY_MATH_NODE(MODULO);
 	UNARY_MATH_NODE(ABSOLUTE);
 	UNARY_MATH_NODE(CLAMP);
+	UNARY_MATH_NODE(SQRT);
 	
 	#undef BINARY_MATH_NODE
 	#undef UNARY_MATH_NODE
diff --git a/source/blender/blenvm/intern/bvm_api.cc b/source/blender/blenvm/intern/bvm_api.cc
index 3c98af2..71ebb13 100644
--- a/source/blender/blenvm/intern/bvm_api.cc
+++ b/source/blender/blenvm/intern/bvm_api.cc
@@ -871,6 +871,7 @@ static void convert_tex_node(bNodeCompiler *comp, PointerRNA *bnode_ptr)
 			case 16: binary_math_node(comp, "GREATER_THAN"); break;
 			case 17: binary_math_node(comp, "MODULO"); break;
 			case 18: unary_math_node(comp, "ABSOLUTE"); break;
+			case 20: unary_math_node(comp, "SQRT"); break;
 		}
 	}
 	else if (type == "TextureNodeTexVoronoi") {
diff --git a/source/blender/blenvm/util/bvm_util_math.h b/source/blender/blenvm/util/bvm_util_math.h
index 586c949..a8ec6eb 100644
--- a/source/blender/blenvm/util/bvm_util_math.h
+++ b/source/blender/blenvm/util/bvm_util_math.h
@@ -57,6 +57,14 @@ inline static float div_safe(float a, float b)
 		return 0.0f;
 }
 
+inline static float sqrt_safe(float a)
+{
+	if (a > 0.0f)
+		return sqrtf(a);
+	else
+		return 0.0f;
+}
+
 } /* namespace bvm */
 
 #endif /* __BVM_UTIL_MATH_H__ */




More information about the Bf-blender-cvs mailing list