[Bf-blender-cvs] [5f70cc6] object_nodes: Added globals as a distinct argument to the eval function.

Lukas Tönne noreply at git.blender.org
Tue Nov 24 09:43:24 CET 2015


Commit: 5f70cc6c8d94f3a5e5739eb7bd79751bccf7f24a
Author: Lukas Tönne
Date:   Thu Oct 22 22:52:10 2015 +0200
Branches: object_nodes
https://developer.blender.org/rB5f70cc6c8d94f3a5e5739eb7bd79751bccf7f24a

Added globals as a distinct argument to the eval function.

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

M	source/blender/blenkernel/BKE_effect.h
M	source/blender/blenkernel/intern/effect.c
M	source/blender/blenvm/BVM_api.h
M	source/blender/blenvm/bvm/bvm_eval.cc
M	source/blender/blenvm/bvm/bvm_eval.h
M	source/blender/blenvm/intern/bvm_api.cc

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

diff --git a/source/blender/blenkernel/BKE_effect.h b/source/blender/blenkernel/BKE_effect.h
index a57d46c..46e412b 100644
--- a/source/blender/blenkernel/BKE_effect.h
+++ b/source/blender/blenkernel/BKE_effect.h
@@ -114,7 +114,7 @@ typedef struct EffectorCache {
 typedef struct EffectorContext {
 	ListBase effectors;
 	
-	struct BVMEvalContext *eval_context;
+	struct BVMEvalGlobals *eval_globals;
 } EffectorContext;
 
 void            free_partdeflect(struct PartDeflect *pd);
diff --git a/source/blender/blenkernel/intern/effect.c b/source/blender/blenkernel/intern/effect.c
index 0b2bea7..313be89 100644
--- a/source/blender/blenkernel/intern/effect.c
+++ b/source/blender/blenkernel/intern/effect.c
@@ -267,7 +267,7 @@ EffectorContext *pdInitEffectors(Scene *scene, Object *ob_src, ParticleSystem *p
 	if (precalc)
 		pdPrecalculateEffectors(effctx);
 	
-	effctx->eval_context = BVM_context_create();
+	effctx->eval_globals = BVM_globals_create();
 	
 	return effctx;
 }
@@ -285,8 +285,8 @@ void pdEndEffectors(EffectorContext *effctx)
 		
 		BLI_freelistN(&effctx->effectors);
 		
-		if (effctx->eval_context)
-			BVM_context_free(effctx->eval_context);
+		if (effctx->eval_globals)
+			BVM_globals_free(effctx->eval_globals);
 		
 		MEM_freeN(effctx);
 	}
@@ -1010,6 +1010,8 @@ void pdDoEffectors(struct EffectorContext *effctx, ListBase *colliders, Effector
 	EffectorData efd;
 	int p=0, tot = 1, step = 1;
 
+	struct BVMEvalContext *eval_context = BVM_context_create();
+
 	/* Cycle through collected objects, get total of (1/(gravity_strength * dist^gravity_power)) */
 	/* Check for min distance here? (yes would be cool to add that, ton) */
 	
@@ -1020,7 +1022,7 @@ void pdDoEffectors(struct EffectorContext *effctx, ListBase *colliders, Effector
 
 		for (; p<tot; p+=step) {
 			if (eff->expression) {
-				BVM_eval_forcefield(effctx->eval_context, eff->expression, point, force, impulse);
+				BVM_eval_forcefield(effctx->eval_globals, eval_context, eff->expression, point, force, impulse);
 			}
 			else if (get_effector_data(eff, &efd, point, 0)) {
 				efd.falloff= effector_falloff(eff, &efd, point, weights);
@@ -1053,6 +1055,8 @@ void pdDoEffectors(struct EffectorContext *effctx, ListBase *colliders, Effector
 			}
 		}
 	}
+	
+	BVM_context_free(eval_context);
 }
 
 /* ======== Simulation Debugging ======== */
diff --git a/source/blender/blenvm/BVM_api.h b/source/blender/blenvm/BVM_api.h
index b44137d..46b1583 100644
--- a/source/blender/blenvm/BVM_api.h
+++ b/source/blender/blenvm/BVM_api.h
@@ -38,7 +38,6 @@
 extern "C" {
 #endif
 
-struct BVMContext;
 struct BVMExpression;
 struct BVMFunction;
 struct BVMModule;
@@ -69,13 +68,17 @@ struct BVMNodeInstance *BVM_nodegraph_add_node(struct BVMNodeGraph *graph, const
 
 /* ------------------------------------------------------------------------- */
 
+struct BVMEvalGlobals;
 struct BVMEvalContext;
 struct EffectedPoint;
 
+struct BVMEvalGlobals *BVM_globals_create(void);
+void BVM_globals_free(struct BVMEvalGlobals *globals);
+
 struct BVMEvalContext *BVM_context_create(void);
-void BVM_context_free(struct BVMEvalContext *result);
+void BVM_context_free(struct BVMEvalContext *context);
 
-void BVM_eval_forcefield(struct BVMEvalContext *context, struct BVMExpression *expr,
+void BVM_eval_forcefield(struct BVMEvalGlobals *globals, struct BVMEvalContext *context, struct BVMExpression *expr,
                          const struct EffectedPoint *point, float force[3], float impulse[3]);
 
 /* ------------------------------------------------------------------------- */
diff --git a/source/blender/blenvm/bvm/bvm_eval.cc b/source/blender/blenvm/bvm/bvm_eval.cc
index 77ea21d..f3dceb1 100644
--- a/source/blender/blenvm/bvm/bvm_eval.cc
+++ b/source/blender/blenvm/bvm/bvm_eval.cc
@@ -277,213 +277,213 @@ static void eval_op_sub_float3(float *stack, StackIndex offset_a, StackIndex off
 	stack_store_float3(stack, offset_r, float3(a.x - b.x, a.y - b.y, a.z - b.z));
 }
 
-void EvalContext::eval_instructions(const EvalData *data, const Expression &expr, float *stack) const
+void EvalContext::eval_instructions(const EvalGlobals *globals, const EvalData *data, const Expression *expr, float *stack) const
 {
 	int instr = 0;
 	
 	while (true) {
-		OpCode op = expr.read_opcode(&instr);
+		OpCode op = expr->read_opcode(&instr);
 		
 		switch(op) {
 			case OP_NOOP:
 				break;
 			case OP_VALUE_FLOAT: {
-				float value = expr.read_float(&instr);
-				StackIndex offset = expr.read_stack_index(&instr);
+				float value = expr->read_float(&instr);
+				StackIndex offset = expr->read_stack_index(&instr);
 				eval_op_value_float(stack, value, offset);
 				break;
 			}
 			case OP_VALUE_FLOAT3: {
-				float3 value = expr.read_float3(&instr);
-				StackIndex offset = expr.read_stack_index(&instr);
+				float3 value = expr->read_float3(&instr);
+				StackIndex offset = expr->read_stack_index(&instr);
 				eval_op_value_float3(stack, value, offset);
 				break;
 			}
 			case OP_VALUE_INT: {
-				int value = expr.read_int(&instr);
-				StackIndex offset = expr.read_stack_index(&instr);
+				int value = expr->read_int(&instr);
+				StackIndex offset = expr->read_stack_index(&instr);
 				eval_op_value_int(stack, value, offset);
 				break;
 			}
 			case OP_PASS_FLOAT: {
-				StackIndex offset_from = expr.read_stack_index(&instr);
-				StackIndex offset_to = expr.read_stack_index(&instr);
+				StackIndex offset_from = expr->read_stack_index(&instr);
+				StackIndex offset_to = expr->read_stack_index(&instr);
 				eval_op_pass_float(stack, offset_from, offset_to);
 				break;
 			}
 			case OP_PASS_FLOAT3: {
-				StackIndex offset_from = expr.read_stack_index(&instr);
-				StackIndex offset_to = expr.read_stack_index(&instr);
+				StackIndex offset_from = expr->read_stack_index(&instr);
+				StackIndex offset_to = expr->read_stack_index(&instr);
 				eval_op_pass_float3(stack, offset_from, offset_to);
 				break;
 			}
 			case OP_SET_FLOAT3: {
-				StackIndex offset_x = expr.read_stack_index(&instr);
-				StackIndex offset_y = expr.read_stack_index(&instr);
-				StackIndex offset_z = expr.read_stack_index(&instr);
-				StackIndex offset_to = expr.read_stack_index(&instr);
+				StackIndex offset_x = expr->read_stack_index(&instr);
+				StackIndex offset_y = expr->read_stack_index(&instr);
+				StackIndex offset_z = expr->read_stack_index(&instr);
+				StackIndex offset_to = expr->read_stack_index(&instr);
 				eval_op_set_float3(stack, offset_x, offset_y, offset_z, offset_to);
 				break;
 			}
 			case OP_GET_ELEM_FLOAT3: {
-				int index = expr.read_int(&instr);
-				StackIndex offset_from = expr.read_stack_index(&instr);
-				StackIndex offset_to = expr.read_stack_index(&instr);
+				int index = expr->read_int(&instr);
+				StackIndex offset_from = expr->read_stack_index(&instr);
+				StackIndex offset_to = expr->read_stack_index(&instr);
 				eval_op_get_elem_float3(stack, index, offset_from, offset_to);
 				break;
 			}
 			case OP_EFFECTOR_POSITION: {
-				StackIndex offset = expr.read_stack_index(&instr);
+				StackIndex offset = expr->read_stack_index(&instr);
 				eval_op_effector_position(data, stack, offset);
 				break;
 			}
 			case OP_EFFECTOR_VELOCITY: {
-				StackIndex offset = expr.read_stack_index(&instr);
+				StackIndex offset = expr->read_stack_index(&instr);
 				eval_op_effector_velocity(data, stack, offset);
 				break;
 			}
 			case OP_ADD_FLOAT: {
-				StackIndex offset_a = expr.read_stack_index(&instr);
-				StackIndex offset_b = expr.read_stack_index(&instr);
-				StackIndex offset_r = expr.read_stack_index(&instr);
+				StackIndex offset_a = expr->read_stack_index(&instr);
+				StackIndex offset_b = expr->read_stack_index(&instr);
+				StackIndex offset_r = expr->read_stack_index(&instr);
 				eval_op_add_float(stack, offset_a, offset_b, offset_r);
 				break;
 			}
 			case OP_SUB_FLOAT: {
-				StackIndex offset_a = expr.read_stack_index(&instr);
-				StackIndex offset_b = expr.read_stack_index(&instr);
-				StackIndex offset_r = expr.read_stack_index(&instr);
+				StackIndex offset_a = expr->read_stack_index(&instr);
+				StackIndex offset_b = expr->read_stack_index(&instr);
+				StackIndex offset_r = expr->read_stack_index(&instr);
 				eval_op_sub_float(stack, offset_a, offset_b, offset_r);
 				break;
 			}
 			case OP_MUL_FLOAT: {
-				StackIndex offset_a = expr.read_stack_index(&instr);
-				StackIndex offset_b = expr.read_stack_index(&instr);
-				StackIndex offset_r = expr.read_stack_index(&instr);
+				StackIndex offset_a = expr->read_stack_index(&instr);
+				StackIndex offset_b = expr->read_stack_index(&instr);
+				StackIndex offset_r = expr->read_stack_index(&instr);
 				eval_op_mul_float(stack, offset_a, offset_b, offset_r);
 				break;
 			}
 			case OP_DIV_FLOAT: {
-				StackIndex offset_a = expr.read_stack_index(&instr);
-				StackIndex offset_b = expr.read_stack_index(&instr);
-				StackIndex offset_r = expr.read_stack_index(&instr);
+				StackIndex offset_a = expr->read_stack_index(&instr);
+				StackIndex offset_b = expr->read_stack_index(&instr);
+				StackIndex offset_r = expr->read_stack_index(&instr);
 				eval_op_div_float(stack, offset_a, offset_b, offset_r);
 				break;
 			}
 			case OP_SINE: {
-				StackIndex offset = expr.read_stack_index(&instr);
-				StackIndex offset_r = expr.read_stack_index(&instr);
+				StackIndex offset = expr->read_stack_index(&instr);
+				StackIndex offset_r = expr->read_stack_index(&instr);
 				eval_op_sine(stack, offset, offset_r);
 				break;
 			}
 			case OP_COSINE: {
-				StackIndex offset = expr.read_stack_index(&instr);
-				StackIndex offset_r = expr.read_stack_index(&instr);
+				StackIndex offset = expr->read_stack_index(&instr);
+				StackIndex offset_r = expr->read_stack_index(&instr);
 				eval_op_cosine(stack, offset, offset_r);
 				break;
 			}
 			case OP_TANGENT: {
-				StackIndex offset = expr.read_stack_index(&instr);
-				StackIndex offset_r = expr.read_stack_index(&instr);
+				StackIndex offset = expr->read_stack_index(&instr);
+				StackIndex offset_r = expr->read_stack_index(&instr);
 				eval_op_tangent(stack, offset, offset_r);
 				break;
 			}
 			case OP_ARCSINE: {
-				StackIndex offset = expr.read_stack_index(&instr);


@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list