Cleanup: replace raw function pointer with FunctionRef
This commit is contained in:
@@ -10,6 +10,7 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "BLI_function_ref.hh"
|
||||
#include "BLI_iterator.h"
|
||||
#include "BLI_utildefines.h"
|
||||
|
||||
@@ -251,10 +252,9 @@ void DEG_iterator_ids_end(BLI_Iterator *iter);
|
||||
/** \name DEG traversal
|
||||
* \{ */
|
||||
|
||||
using DEGForeachIDCallback = void (*)(ID *id, void *user_data);
|
||||
using DEGForeachIDComponentCallback = void (*)(ID *id,
|
||||
eDepsObjectComponentType component,
|
||||
void *user_data);
|
||||
using DEGForeachIDCallback = blender::FunctionRef<void(ID *id)>;
|
||||
using DEGForeachIDComponentCallback =
|
||||
blender::FunctionRef<void(ID *id, eDepsObjectComponentType component)>;
|
||||
|
||||
/**
|
||||
* \note Modifies runtime flags in depsgraph nodes,
|
||||
@@ -262,12 +262,10 @@ using DEGForeachIDComponentCallback = void (*)(ID *id,
|
||||
*/
|
||||
void DEG_foreach_ancestor_ID(const Depsgraph *depsgraph,
|
||||
const ID *id,
|
||||
DEGForeachIDCallback callback,
|
||||
void *user_data);
|
||||
DEGForeachIDCallback callback);
|
||||
void DEG_foreach_dependent_ID(const Depsgraph *depsgraph,
|
||||
const ID *id,
|
||||
DEGForeachIDCallback callback,
|
||||
void *user_data);
|
||||
DEGForeachIDCallback callback);
|
||||
|
||||
/**
|
||||
* Starts traversal from given component of the given ID, invokes callback for every other
|
||||
@@ -288,9 +286,8 @@ void DEG_foreach_dependent_ID_component(const Depsgraph *depsgraph,
|
||||
const ID *id,
|
||||
eDepsObjectComponentType source_component_type,
|
||||
int flags,
|
||||
DEGForeachIDComponentCallback callback,
|
||||
void *user_data);
|
||||
DEGForeachIDComponentCallback callback);
|
||||
|
||||
void DEG_foreach_ID(const Depsgraph *depsgraph, DEGForeachIDCallback callback, void *user_data);
|
||||
void DEG_foreach_ID(const Depsgraph *depsgraph, DEGForeachIDCallback callback);
|
||||
|
||||
/** \} */
|
||||
|
||||
@@ -115,7 +115,6 @@ void deg_foreach_dependent_operation(const Depsgraph * /*graph*/,
|
||||
|
||||
struct ForeachIDComponentData {
|
||||
DEGForeachIDComponentCallback callback;
|
||||
void *user_data;
|
||||
IDNode *target_id_node;
|
||||
Set<ComponentNode *> visited;
|
||||
};
|
||||
@@ -126,8 +125,7 @@ void deg_foreach_dependent_component_callback(OperationNode *op_node, void *user
|
||||
ComponentNode *comp_node = op_node->owner;
|
||||
IDNode *id_node = comp_node->owner;
|
||||
if (id_node != user_data->target_id_node && !user_data->visited.contains(comp_node)) {
|
||||
user_data->callback(
|
||||
id_node->id_orig, nodeTypeToObjectComponent(comp_node->type), user_data->user_data);
|
||||
user_data->callback(id_node->id_orig, nodeTypeToObjectComponent(comp_node->type));
|
||||
user_data->visited.add_new(comp_node);
|
||||
}
|
||||
}
|
||||
@@ -136,12 +134,10 @@ void deg_foreach_dependent_ID_component(const Depsgraph *graph,
|
||||
const ID *id,
|
||||
eDepsObjectComponentType source_component_type,
|
||||
int flags,
|
||||
DEGForeachIDComponentCallback callback,
|
||||
void *user_data)
|
||||
DEGForeachIDComponentCallback callback)
|
||||
{
|
||||
ForeachIDComponentData data;
|
||||
data.callback = callback;
|
||||
data.user_data = user_data;
|
||||
data.target_id_node = graph->find_id_node(id);
|
||||
deg_foreach_dependent_operation(graph,
|
||||
data.target_id_node,
|
||||
@@ -153,7 +149,6 @@ void deg_foreach_dependent_ID_component(const Depsgraph *graph,
|
||||
|
||||
struct ForeachIDData {
|
||||
DEGForeachIDCallback callback;
|
||||
void *user_data;
|
||||
IDNode *target_id_node;
|
||||
Set<IDNode *> visited;
|
||||
};
|
||||
@@ -164,28 +159,21 @@ void deg_foreach_dependent_ID_callback(OperationNode *op_node, void *user_data_v
|
||||
ComponentNode *comp_node = op_node->owner;
|
||||
IDNode *id_node = comp_node->owner;
|
||||
if (id_node != user_data->target_id_node && !user_data->visited.contains(id_node)) {
|
||||
user_data->callback(id_node->id_orig, user_data->user_data);
|
||||
user_data->callback(id_node->id_orig);
|
||||
user_data->visited.add_new(id_node);
|
||||
}
|
||||
}
|
||||
|
||||
void deg_foreach_dependent_ID(const Depsgraph *graph,
|
||||
const ID *id,
|
||||
DEGForeachIDCallback callback,
|
||||
void *user_data)
|
||||
void deg_foreach_dependent_ID(const Depsgraph *graph, const ID *id, DEGForeachIDCallback callback)
|
||||
{
|
||||
ForeachIDData data;
|
||||
data.callback = callback;
|
||||
data.user_data = user_data;
|
||||
data.target_id_node = graph->find_id_node(id);
|
||||
deg_foreach_dependent_operation(
|
||||
graph, data.target_id_node, DEG_OB_COMP_ANY, 0, deg_foreach_dependent_ID_callback, &data);
|
||||
}
|
||||
|
||||
void deg_foreach_ancestor_ID(const Depsgraph *graph,
|
||||
const ID *id,
|
||||
DEGForeachIDCallback callback,
|
||||
void *user_data)
|
||||
void deg_foreach_ancestor_ID(const Depsgraph *graph, const ID *id, DEGForeachIDCallback callback)
|
||||
{
|
||||
/* Start with getting ID node from the graph. */
|
||||
IDNode *target_id_node = graph->find_id_node(id);
|
||||
@@ -216,7 +204,7 @@ void deg_foreach_ancestor_ID(const Depsgraph *graph,
|
||||
IDNode *id_node = comp_node->owner;
|
||||
if (!visited.contains(id_node)) {
|
||||
/* TODO(sergey): Is it orig or CoW? */
|
||||
callback(id_node->id_orig, user_data);
|
||||
callback(id_node->id_orig);
|
||||
visited.add_new(id_node);
|
||||
}
|
||||
/* Schedule incoming operation nodes. */
|
||||
@@ -248,10 +236,10 @@ void deg_foreach_ancestor_ID(const Depsgraph *graph,
|
||||
}
|
||||
}
|
||||
|
||||
void deg_foreach_id(const Depsgraph *depsgraph, DEGForeachIDCallback callback, void *user_data)
|
||||
void deg_foreach_id(const Depsgraph *depsgraph, DEGForeachIDCallback callback)
|
||||
{
|
||||
for (const IDNode *id_node : depsgraph->id_nodes) {
|
||||
callback(id_node->id_orig, user_data);
|
||||
callback(id_node->id_orig);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -260,32 +248,29 @@ void deg_foreach_id(const Depsgraph *depsgraph, DEGForeachIDCallback callback, v
|
||||
|
||||
void DEG_foreach_dependent_ID(const Depsgraph *depsgraph,
|
||||
const ID *id,
|
||||
DEGForeachIDCallback callback,
|
||||
void *user_data)
|
||||
DEGForeachIDCallback callback)
|
||||
{
|
||||
deg::deg_foreach_dependent_ID((const deg::Depsgraph *)depsgraph, id, callback, user_data);
|
||||
deg::deg_foreach_dependent_ID((const deg::Depsgraph *)depsgraph, id, callback);
|
||||
}
|
||||
|
||||
void DEG_foreach_dependent_ID_component(const Depsgraph *depsgraph,
|
||||
const ID *id,
|
||||
eDepsObjectComponentType source_component_type,
|
||||
int flags,
|
||||
DEGForeachIDComponentCallback callback,
|
||||
void *user_data)
|
||||
DEGForeachIDComponentCallback callback)
|
||||
{
|
||||
deg::deg_foreach_dependent_ID_component(
|
||||
(const deg::Depsgraph *)depsgraph, id, source_component_type, flags, callback, user_data);
|
||||
(const deg::Depsgraph *)depsgraph, id, source_component_type, flags, callback);
|
||||
}
|
||||
|
||||
void DEG_foreach_ancestor_ID(const Depsgraph *depsgraph,
|
||||
const ID *id,
|
||||
DEGForeachIDCallback callback,
|
||||
void *user_data)
|
||||
DEGForeachIDCallback callback)
|
||||
{
|
||||
deg::deg_foreach_ancestor_ID((const deg::Depsgraph *)depsgraph, id, callback, user_data);
|
||||
deg::deg_foreach_ancestor_ID((const deg::Depsgraph *)depsgraph, id, callback);
|
||||
}
|
||||
|
||||
void DEG_foreach_ID(const Depsgraph *depsgraph, DEGForeachIDCallback callback, void *user_data)
|
||||
void DEG_foreach_ID(const Depsgraph *depsgraph, DEGForeachIDCallback callback)
|
||||
{
|
||||
deg::deg_foreach_id((const deg::Depsgraph *)depsgraph, callback, user_data);
|
||||
deg::deg_foreach_id((const deg::Depsgraph *)depsgraph, callback);
|
||||
}
|
||||
|
||||
@@ -303,9 +303,7 @@ static void trans_object_base_deps_flag_prepare(const Scene *scene, ViewLayer *v
|
||||
}
|
||||
}
|
||||
|
||||
static void set_trans_object_base_deps_flag_cb(ID *id,
|
||||
eDepsObjectComponentType component,
|
||||
void * /*user_data*/)
|
||||
static void set_trans_object_base_deps_flag_cb(ID *id, eDepsObjectComponentType component)
|
||||
{
|
||||
/* Here we only handle object IDs. */
|
||||
if (GS(id->name) != ID_OB) {
|
||||
@@ -324,8 +322,7 @@ static void flush_trans_object_base_deps_flag(Depsgraph *depsgraph, Object *obje
|
||||
&object->id,
|
||||
DEG_OB_COMP_TRANSFORM,
|
||||
DEG_FOREACH_COMPONENT_IGNORE_TRANSFORM_SOLVERS,
|
||||
set_trans_object_base_deps_flag_cb,
|
||||
nullptr);
|
||||
set_trans_object_base_deps_flag_cb);
|
||||
}
|
||||
|
||||
static void trans_object_base_deps_flag_finish(const TransInfo *t,
|
||||
|
||||
Reference in New Issue
Block a user