[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