26#define STATS_MAX_SIZE 16384
50struct RNA_DepsgraphIterator {
63 RNA_DepsgraphIterator *di =
static_cast<RNA_DepsgraphIterator *
>(
ptr->
data);
64 return &di->py_instance;
71 RNA_DepsgraphIterator *di =
static_cast<RNA_DepsgraphIterator *
>(
ptr->
data);
73 return deg_iter->dupli_object_current;
78 RNA_DepsgraphIterator *di =
static_cast<RNA_DepsgraphIterator *
>(
ptr->
data);
82static bool rna_DepsgraphObjectInstance_is_instance_get(
PointerRNA *
ptr)
84 RNA_DepsgraphIterator *di =
static_cast<RNA_DepsgraphIterator *
>(
ptr->
data);
86 return (deg_iter->dupli_object_current !=
nullptr);
91 RNA_DepsgraphIterator *di =
static_cast<RNA_DepsgraphIterator *
>(
ptr->
data);
93 Object *instance_object =
nullptr;
94 if (deg_iter->dupli_object_current !=
nullptr) {
95 instance_object = deg_iter->dupli_object_current->ob;
100static bool rna_DepsgraphObjectInstance_show_self_get(
PointerRNA *
ptr)
102 RNA_DepsgraphIterator *di =
static_cast<RNA_DepsgraphIterator *
>(
ptr->
data);
105 deg_iter->eval_mode);
109static bool rna_DepsgraphObjectInstance_show_particles_get(
PointerRNA *
ptr)
111 RNA_DepsgraphIterator *di =
static_cast<RNA_DepsgraphIterator *
>(
ptr->
data);
114 deg_iter->eval_mode);
120 RNA_DepsgraphIterator *di =
static_cast<RNA_DepsgraphIterator *
>(
ptr->
data);
122 Object *dupli_parent =
nullptr;
123 if (deg_iter->dupli_object_current !=
nullptr) {
124 dupli_parent = deg_iter->dupli_parent;
131 RNA_DepsgraphIterator *di =
static_cast<RNA_DepsgraphIterator *
>(
ptr->
data);
134 if (deg_iter->dupli_object_current !=
nullptr) {
135 particle_system = deg_iter->dupli_object_current->particle_system;
140static void rna_DepsgraphObjectInstance_persistent_id_get(
PointerRNA *
ptr,
int *persistent_id)
142 RNA_DepsgraphIterator *di =
static_cast<RNA_DepsgraphIterator *
>(
ptr->
data);
144 if (deg_iter->dupli_object_current !=
nullptr) {
145 memcpy(persistent_id,
146 deg_iter->dupli_object_current->persistent_id,
147 sizeof(deg_iter->dupli_object_current->persistent_id));
150 memset(persistent_id, 0,
sizeof(deg_iter->dupli_object_current->persistent_id));
154static int rna_DepsgraphObjectInstance_random_id_get(
PointerRNA *
ptr)
156 RNA_DepsgraphIterator *di =
static_cast<RNA_DepsgraphIterator *
>(
ptr->
data);
158 if (deg_iter->dupli_object_current !=
nullptr) {
159 return int(deg_iter->dupli_object_current->random_id);
166static void rna_DepsgraphObjectInstance_matrix_world_get(
PointerRNA *
ptr,
float *mat)
168 RNA_DepsgraphIterator *di =
static_cast<RNA_DepsgraphIterator *
>(
ptr->
data);
170 if (deg_iter->dupli_object_current !=
nullptr) {
171 copy_m4_m4((
float(*)[4])mat, deg_iter->dupli_object_current->mat);
177 copy_m4_m4((
float(*)[4])mat, ob->object_to_world().ptr());
181static void rna_DepsgraphObjectInstance_orco_get(
PointerRNA *
ptr,
float *orco)
183 RNA_DepsgraphIterator *di =
static_cast<RNA_DepsgraphIterator *
>(
ptr->
data);
185 if (deg_iter->dupli_object_current !=
nullptr) {
186 copy_v3_v3(orco, deg_iter->dupli_object_current->orco);
193static void rna_DepsgraphObjectInstance_uv_get(
PointerRNA *
ptr,
float *uv)
195 RNA_DepsgraphIterator *di =
static_cast<RNA_DepsgraphIterator *
>(
ptr->
data);
197 if (deg_iter->dupli_object_current !=
nullptr) {
198 copy_v2_v2(uv, deg_iter->dupli_object_current->uv);
220static bool rna_DepsgraphUpdate_is_updated_transform_get(
PointerRNA *
ptr)
226static bool rna_DepsgraphUpdate_is_updated_shading_get(
PointerRNA *
ptr)
234static bool rna_DepsgraphUpdate_is_updated_geometry_get(
PointerRNA *
ptr)
244 ID *data =
static_cast<ID *
>(
object->data);
245 if (data ==
nullptr) {
253static void rna_Depsgraph_debug_relations_graphviz(Depsgraph *
depsgraph,
254 const char *filepath,
259 *r_len = dot_str.size();
263 FILE *f = fopen(filepath,
"w");
267 fprintf(f,
"%s", dot_str.c_str());
272static void rna_Depsgraph_debug_stats_gnuplot(Depsgraph *
depsgraph,
273 const char *filepath,
274 const char *output_filepath)
276 FILE *f = fopen(filepath,
"w");
284static void rna_Depsgraph_debug_tag_update(Depsgraph *
depsgraph)
289static void rna_Depsgraph_debug_stats(Depsgraph *
depsgraph,
char *result)
291 size_t outer, ops, rels;
295 "Approx %zu Operations, %zu Relations, %zu Outer Nodes",
332 data->settings = deg_iter_settings;
333 data->graph = deg_iter_settings->
depsgraph;
334 data->flag = deg_iter_settings->
flags;
371struct RNA_Depsgraph_Instances_Iterator {
372 RNA_DepsgraphIterator iterators[2];
380 RNA_Depsgraph_Instances_Iterator *di_it = MEM_new<RNA_Depsgraph_Instances_Iterator>(__func__);
390 data->settings = deg_iter_settings;
391 data->graph = deg_iter_settings->
depsgraph;
392 data->flag = deg_iter_settings->
flags;
394 di_it->iterators[0].iter.valid =
true;
396 iter->
valid = di_it->iterators[0].iter.valid;
401 RNA_Depsgraph_Instances_Iterator *di_it = (RNA_Depsgraph_Instances_Iterator *)
405 di_it->iterators[(di_it->counter + 1) % 2].iter = di_it->iterators[di_it->counter % 2].iter;
406 di_it->deg_data[(di_it->counter + 1) % 2] = di_it->deg_data[di_it->counter % 2];
409 di_it->iterators[di_it->counter % 2].iter.data = &di_it->deg_data[di_it->counter % 2];
416 if (di_it->deg_data[di_it->counter % 2].dupli_object_current !=
nullptr) {
417 di_it->dupli_object_current[di_it->counter % 2] =
418 *di_it->deg_data[di_it->counter % 2].dupli_object_current;
419 di_it->deg_data[di_it->counter % 2].dupli_object_current =
420 &di_it->dupli_object_current[di_it->counter % 2];
422 iter->
valid = di_it->iterators[di_it->counter % 2].iter.valid;
427 RNA_Depsgraph_Instances_Iterator *di_it = (RNA_Depsgraph_Instances_Iterator *)
429 for (
int i = 0; i <
ARRAY_SIZE(di_it->iterators); i++) {
430 RNA_DepsgraphIterator *di = &di_it->iterators[i];
439 if (di->py_instance) {
450 RNA_Depsgraph_Instances_Iterator *di_it = (RNA_Depsgraph_Instances_Iterator *)
452 RNA_DepsgraphIterator *di = &di_it->iterators[di_it->counter % 2];
495 data->only_updated =
true;
508static ID *rna_Depsgraph_id_eval_get(Depsgraph *
depsgraph,
ID *id_orig)
513static bool rna_Depsgraph_id_type_updated(Depsgraph *
depsgraph,
int id_type)
561 "Dependency Graph Object Instance",
562 "Extended information about dependency graph object iterator "
563 "(Warning: All data here is 'evaluated' one, not original .blend IDs)");
574 prop,
"rna_DepsgraphObjectInstance_object_get",
nullptr,
nullptr,
nullptr);
579 prop,
"Show Self",
"The object geometry itself should be visible in the render");
585 prop,
"Show Particles",
"Particles part of the object should be visible in the render");
591 prop,
"Is Instance",
"Denotes if the object is generated by another object");
597 prop,
"Instance Object",
"Evaluated object which is being instanced by this iterator");
600 prop,
"rna_DepsgraphObjectInstance_instance_object_get",
nullptr,
nullptr,
nullptr);
605 prop,
"Parent",
"If the object is an instance, the parent object that generated it");
608 prop,
"rna_DepsgraphObjectInstance_parent_get",
nullptr,
nullptr,
nullptr);
614 prop,
"Particle System",
"Evaluated particle system that this object was instanced from");
616 prop,
"rna_DepsgraphObjectInstance_particle_system_get",
nullptr,
nullptr,
nullptr);
622 "Persistent identifier for inter-frame matching of objects with motion blur");
626 prop,
"rna_DepsgraphObjectInstance_persistent_id_get",
nullptr,
nullptr);
631 prop,
"Instance Random ID",
"Random id for this instance, typically for randomized shading");
639 prop,
"rna_DepsgraphObjectInstance_matrix_world_get",
nullptr,
nullptr);
645 prop,
"Generated Coordinates",
"Generated coordinates in parent object space");
698 {0,
nullptr, 0,
nullptr,
nullptr},
704 prop =
RNA_def_enum(srna,
"mode", enum_depsgraph_mode_items, 0,
"Mode",
"Evaluation mode");
711 srna,
"debug_relations_graphviz",
"rna_Depsgraph_debug_relations_graphviz");
717 "Optional output path for the graphviz debug file");
723 func =
RNA_def_function(srna,
"debug_stats_gnuplot",
"rna_Depsgraph_debug_stats_gnuplot");
725 func,
"filepath",
nullptr,
FILE_MAX,
"File Name",
"Output path for the gnuplot debug file");
732 "File name where gnuplot script will save the result");
735 func =
RNA_def_function(srna,
"debug_tag_update",
"rna_Depsgraph_debug_tag_update");
750 "Re-evaluate any modified data-blocks, for example for animation or modifiers. "
751 "This invalidates all references to evaluated data-blocks from this dependency graph.");
767 prop,
"View Layer",
"Original view layer dependency graph is built for");
773 func,
"id",
"ID",
"",
"Original ID to get evaluated complementary part for");
775 parm =
RNA_def_pointer(func,
"id_eval",
"ID",
"",
"Evaluated ID for the given original one");
778 func =
RNA_def_function(srna,
"id_type_updated",
"rna_Depsgraph_id_type_updated");
785 "True if any datablock with this type was added, updated or removed");
797 prop,
"rna_Depsgraph_view_layer_eval_get",
nullptr,
nullptr,
nullptr);
806 "rna_Depsgraph_ids_begin",
807 "rna_Depsgraph_ids_next",
808 "rna_Depsgraph_ids_end",
809 "rna_Depsgraph_ids_get",
819 "rna_Depsgraph_objects_begin",
820 "rna_Depsgraph_objects_next",
821 "rna_Depsgraph_objects_end",
822 "rna_Depsgraph_objects_get",
832 "rna_Depsgraph_object_instances_begin",
833 "rna_Depsgraph_object_instances_next",
834 "rna_Depsgraph_object_instances_end",
835 "rna_Depsgraph_object_instances_get",
842 "All object instances to display or render "
843 "(Warning: Only use this as an iterator, never as a sequence, "
844 "and do not keep any references to its items)");
849 "rna_Depsgraph_updates_begin",
850 "rna_Depsgraph_ids_next",
851 "rna_Depsgraph_ids_end",
852 "rna_Depsgraph_updates_get",
General operations, lookup, etc. for blender objects.
int BKE_object_visibility(const Object *ob, int dag_eval_mode)
void BKE_report(ReportList *reports, eReportType type, const char *message)
void BKE_scene_graph_update_tagged(Depsgraph *depsgraph, Main *bmain)
void copy_m4_m4(float m1[4][4], const float m2[4][4])
MINLINE void copy_v2_v2(float r[2], const float a[2])
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE void zero_v2(float r[2])
MINLINE void zero_v3(float r[3])
char * BLI_strdup(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC
size_t BLI_snprintf(char *__restrict dst, size_t dst_maxncpy, const char *__restrict format,...) ATTR_NONNULL(1
#define BPy_BEGIN_ALLOW_THREADS
void BPY_DECREF_RNA_INVALIDATE(void *pyob_ptr)
#define BPy_END_ALLOW_THREADS
bool DEG_is_evaluating(const Depsgraph *depsgraph)
void DEG_graph_tag_relations_update(Depsgraph *graph)
std::string DEG_debug_graph_to_dot(const Depsgraph &graph, blender::StringRef label)
void DEG_stats_simple(const Depsgraph *graph, size_t *r_outer, size_t *r_operations, size_t *r_relations)
void DEG_debug_stats_gnuplot(const Depsgraph *graph, FILE *fp, const char *label, const char *output_filename)
void DEG_iterator_ids_begin(BLI_Iterator *iter, DEGIDIterData *data)
Scene * DEG_get_evaluated_scene(const Depsgraph *graph)
bool DEG_id_type_updated(const Depsgraph *depsgraph, short id_type)
eEvaluationMode DEG_get_mode(const Depsgraph *graph)
void DEG_iterator_objects_begin(BLI_Iterator *iter, DEGObjectIterData *data)
void DEG_iterator_objects_end(BLI_Iterator *iter)
void DEG_iterator_ids_end(BLI_Iterator *iter)
ViewLayer * DEG_get_evaluated_view_layer(const Depsgraph *graph)
ViewLayer * DEG_get_input_view_layer(const Depsgraph *graph)
void DEG_iterator_objects_next(BLI_Iterator *iter)
void DEG_iterator_ids_next(BLI_Iterator *iter)
Scene * DEG_get_input_scene(const Depsgraph *graph)
ID * DEG_get_evaluated_id(const Depsgraph *depsgraph, ID *id)
@ DEG_ITER_OBJECT_FLAG_LINKED_DIRECTLY
@ DEG_ITER_OBJECT_FLAG_VISIBLE
@ DEG_ITER_OBJECT_FLAG_DUPLI
@ DEG_ITER_OBJECT_FLAG_LINKED_VIA_SET
Object is a sort of wrapper for general info.
Read Guarded memory(de)allocation.
DupliObject * rna_hack_DepsgraphObjectInstance_dupli_object_get(PointerRNA *ptr)
const Depsgraph * depsgraph
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
void MEM_freeN(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
const EnumPropertyItem rna_enum_id_type_items[]
PointerRNA rna_pointer_inherit_refine(const PointerRNA *ptr, StructRNA *type, void *data)
PointerRNA RNA_pointer_create(ID *id, StructRNA *type, void *data)
PropertyRNA * RNA_def_string(StructOrFunctionRNA *cont_, const char *identifier, const char *default_value, const int maxlen, const char *ui_name, const char *ui_description)
void RNA_def_parameter_clear_flags(PropertyRNA *prop, PropertyFlag flag_property, ParameterFlag flag_parameter)
void RNA_def_function_return(FunctionRNA *func, PropertyRNA *ret)
void RNA_def_property_float_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range)
void RNA_def_property_ui_text(PropertyRNA *prop, const char *name, const char *description)
void RNA_def_property_collection_funcs(PropertyRNA *prop, const char *begin, const char *next, const char *end, const char *get, const char *length, const char *lookupint, const char *lookupstring, const char *assignint)
void RNA_def_struct_ui_text(StructRNA *srna, const char *name, const char *description)
void RNA_def_property_boolean_funcs(PropertyRNA *prop, const char *get, const char *set)
void RNA_def_struct_register_funcs(StructRNA *srna, const char *reg, const char *unreg, const char *instance)
void RNA_def_property_multi_array(PropertyRNA *prop, int dimension, const int length[])
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, const int default_value, const char *ui_name, const char *ui_description)
FunctionRNA * RNA_def_function(StructRNA *srna, const char *identifier, const char *call)
void RNA_def_property_array(PropertyRNA *prop, int length)
PropertyRNA * RNA_def_pointer(StructOrFunctionRNA *cont_, const char *identifier, const char *type, const char *ui_name, const char *ui_description)
void RNA_def_property_struct_type(PropertyRNA *prop, const char *type)
void RNA_def_function_ui_description(FunctionRNA *func, const char *description)
const int rna_matrix_dimsize_4x4[]
PropertyRNA * RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier, int type, int subtype)
void RNA_def_property_enum_funcs(PropertyRNA *prop, const char *get, const char *set, const char *item)
StructRNA * RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *from)
void RNA_def_function_flag(FunctionRNA *func, int flag)
void RNA_def_property_clear_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_property_pointer_funcs(PropertyRNA *prop, const char *get, const char *set, const char *type_fn, const char *poll)
void RNA_def_property_int_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range)
PropertyRNA * RNA_def_string_file_path(StructOrFunctionRNA *cont_, const char *identifier, const char *default_value, const int maxlen, const char *ui_name, const char *ui_description)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, const bool default_value, const char *ui_name, const char *ui_description)
void RNA_def_function_output(FunctionRNA *, PropertyRNA *ret)
void RNA_def_parameter_flags(PropertyRNA *prop, PropertyFlag flag_property, ParameterFlag flag_parameter)
void RNA_def_depsgraph(BlenderRNA *brna)
static void rna_def_depsgraph_instance(BlenderRNA *brna)
static void rna_def_depsgraph_update(BlenderRNA *brna)
static void rna_def_depsgraph(BlenderRNA *brna)
union CollectionPropertyIterator::@1329 internal