[Bf-blender-cvs] [c5d18a0a8ac] functions: check that indices correspond to correct outputs in debug build
Jacques Lucke
noreply at git.blender.org
Mon Jul 15 18:12:56 CEST 2019
Commit: c5d18a0a8acea18b01fd1c1391a44f3a4c730d3f
Author: Jacques Lucke
Date: Mon Jul 15 17:09:32 2019 +0200
Branches: functions
https://developer.blender.org/rBc5d18a0a8acea18b01fd1c1391a44f3a4c730d3f
check that indices correspond to correct outputs in debug build
===================================================================
M source/blender/functions/backends/tuple_call/tuple_call.hpp
M source/blender/simulations/bparticles/inserters.cpp
===================================================================
diff --git a/source/blender/functions/backends/tuple_call/tuple_call.hpp b/source/blender/functions/backends/tuple_call/tuple_call.hpp
index 2d347efc671..4397c644c31 100644
--- a/source/blender/functions/backends/tuple_call/tuple_call.hpp
+++ b/source/blender/functions/backends/tuple_call/tuple_call.hpp
@@ -39,6 +39,19 @@ class TupleCallBodyBase : public FunctionBody {
{
return m_meta_out;
}
+
+ /**
+ * Same as tuple.get<T>(index), but checks if the name is correct in debug builds.
+ */
+ template<typename T> T get_output(Tuple &tuple, uint index, StringRef expected_name)
+ {
+#ifdef DEBUG
+ StringRef real_name = this->owner()->output_name(index);
+ BLI_assert(real_name == expected_name);
+#endif
+ UNUSED_VARS_NDEBUG(expected_name);
+ return tuple.get<T>(index);
+ }
};
class TupleCallBody : public TupleCallBodyBase {
diff --git a/source/blender/simulations/bparticles/inserters.cpp b/source/blender/simulations/bparticles/inserters.cpp
index 358037e0395..b5887aa472a 100644
--- a/source/blender/simulations/bparticles/inserters.cpp
+++ b/source/blender/simulations/bparticles/inserters.cpp
@@ -239,18 +239,19 @@ static std::unique_ptr<Emitter> BUILD_EMITTER_mesh_surface(BuildContext &ctx,
auto on_birth_action = build_action(ctx, {bSocketList(bnode->outputs).get(0), bnode});
- Object *object = fn_out.get<Object *>(0);
+ Object *object = body->get_output<Object *>(fn_out, 0, "Object");
InterpolatedFloat4x4 transform = ctx.world_state.get_interpolated_value(bnode->name,
object->obmat);
- return std::unique_ptr<SurfaceEmitter>(new SurfaceEmitter(particle_type_name,
- std::move(on_birth_action),
- object,
- transform,
- fn_out.get<float>(1),
- fn_out.get<float>(2),
- fn_out.get<float>(3),
- fn_out.get<float>(4)));
+ return std::unique_ptr<SurfaceEmitter>(
+ new SurfaceEmitter(particle_type_name,
+ std::move(on_birth_action),
+ object,
+ transform,
+ body->get_output<float>(fn_out, 1, "Rate"),
+ body->get_output<float>(fn_out, 2, "Normal Velocity"),
+ body->get_output<float>(fn_out, 3, "Emitter Velocity"),
+ body->get_output<float>(fn_out, 4, "Size")));
}
static std::unique_ptr<Emitter> BUILD_EMITTER_moving_point(BuildContext &ctx,
@@ -264,7 +265,8 @@ static std::unique_ptr<Emitter> BUILD_EMITTER_moving_point(BuildContext &ctx,
FN_TUPLE_CALL_ALLOC_TUPLES(body, fn_in, fn_out);
body->call__setup_execution_context(fn_in, fn_out);
- auto point = ctx.world_state.get_interpolated_value(bnode->name, fn_out.get<float3>(0));
+ auto point = ctx.world_state.get_interpolated_value(
+ bnode->name, body->get_output<float3>(fn_out, 0, "Position"));
return std::unique_ptr<PointEmitter>(new PointEmitter(particle_type_name, point, 10));
}
More information about the Bf-blender-cvs
mailing list