Blender  V3.3
object_update.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2014 Blender Foundation. All rights reserved. */
3 
8 #include "DNA_anim_types.h"
9 #include "DNA_collection_types.h"
10 #include "DNA_constraint_types.h"
11 #include "DNA_gpencil_types.h"
12 #include "DNA_key_types.h"
13 #include "DNA_material_types.h"
14 #include "DNA_mesh_types.h"
15 #include "DNA_modifier_types.h"
16 #include "DNA_scene_types.h"
17 
18 #include "BLI_blenlib.h"
19 #include "BLI_math.h"
20 #include "BLI_threads.h"
21 #include "BLI_utildefines.h"
22 
23 #include "BKE_DerivedMesh.h"
24 #include "BKE_action.h"
25 #include "BKE_armature.h"
26 #include "BKE_constraint.h"
27 #include "BKE_curve.h"
28 #include "BKE_curves.h"
29 #include "BKE_displist.h"
30 #include "BKE_editmesh.h"
31 #include "BKE_effect.h"
32 #include "BKE_gpencil.h"
33 #include "BKE_gpencil_modifier.h"
34 #include "BKE_image.h"
35 #include "BKE_key.h"
36 #include "BKE_lattice.h"
37 #include "BKE_layer.h"
38 #include "BKE_light.h"
39 #include "BKE_material.h"
40 #include "BKE_mball.h"
41 #include "BKE_mesh.h"
42 #include "BKE_object.h"
43 #include "BKE_particle.h"
44 #include "BKE_pointcache.h"
45 #include "BKE_pointcloud.h"
46 #include "BKE_scene.h"
47 #include "BKE_volume.h"
48 
49 #include "MEM_guardedalloc.h"
50 
51 #include "DEG_depsgraph.h"
52 #include "DEG_depsgraph_query.h"
53 
55 {
57 }
58 
60 {
61  DEG_debug_print_eval(depsgraph, __func__, ob->id.name, ob);
62 
63  /* calculate local matrix */
64  BKE_object_to_mat4(ob, ob->obmat);
65 }
66 
68 {
69  /* NOTE: based on `solve_parenting()`, but with the cruft stripped out. */
70 
71  Object *par = ob->parent;
72 
73  float totmat[4][4];
74  float tmat[4][4];
75  float locmat[4][4];
76 
77  DEG_debug_print_eval(depsgraph, __func__, ob->id.name, ob);
78 
79  /* get local matrix (but don't calculate it, as that was done already!) */
80  /* XXX: redundant? */
81  copy_m4_m4(locmat, ob->obmat);
82 
83  /* get parent effect matrix */
84  BKE_object_get_parent_matrix(ob, par, totmat);
85 
86  /* total */
87  mul_m4_m4m4(tmat, totmat, ob->parentinv);
88  mul_m4_m4m4(ob->obmat, tmat, locmat);
89 
90  /* origin, for help line */
91  if ((ob->partype & PARTYPE) == PARSKEL) {
93  }
94  else {
96  }
97 }
98 
100 {
101  bConstraintOb *cob;
102  float ctime = BKE_scene_ctime_get(scene);
103 
104  DEG_debug_print_eval(depsgraph, __func__, ob->id.name, ob);
105 
106  /* evaluate constraints stack */
107  /* TODO: split this into:
108  * - pre (i.e. BKE_constraints_make_evalob, per-constraint (i.e.
109  * - inner body of BKE_constraints_solve),
110  * - post (i.e. BKE_constraints_clear_evalob)
111  *
112  * Not sure why, this is from Joshua - sergey
113  *
114  */
116  BKE_constraints_solve(depsgraph, &ob->constraints, cob, ctime);
118 }
119 
121 {
122  DEG_debug_print_eval(depsgraph, __func__, ob->id.name, ob);
123  /* Make sure inverse matrix is always up to date. This way users of it
124  * do not need to worry about recalculating it. */
125  invert_m4_m4_safe(ob->imat, ob->obmat);
126  /* Set negative scale flag in object. */
127  if (is_negative_m4(ob->obmat)) {
128  ob->transflag |= OB_NEG_SCALE;
129  }
130  else {
131  ob->transflag &= ~OB_NEG_SCALE;
132  }
133 }
134 
136 {
137  DEG_debug_print_eval(depsgraph, __func__, ob->id.name, ob);
138 
139  /* includes all keys and modifiers */
140  switch (ob->type) {
141  case OB_MESH: {
144  /* Custom attributes should not be removed automatically. They might be used by the render
145  * engine or scripts. They can still be removed explicitly using geometry nodes. */
146  cddata_masks.vmask |= CD_MASK_PROP_ALL;
147  cddata_masks.emask |= CD_MASK_PROP_ALL;
148  cddata_masks.fmask |= CD_MASK_PROP_ALL;
149  cddata_masks.pmask |= CD_MASK_PROP_ALL;
150  cddata_masks.lmask |= CD_MASK_PROP_ALL;
151 
152  /* Also copy over normal layers to avoid recomputation. */
153  cddata_masks.pmask |= CD_MASK_NORMAL;
154  cddata_masks.vmask |= CD_MASK_NORMAL;
155 
156  /* Make sure Freestyle edge/face marks appear in DM for render (see T40315).
157  * Due to Line Art implementation, edge marks should also be shown in viewport. */
158 #ifdef WITH_FREESTYLE
159  cddata_masks.emask |= CD_MASK_FREESTYLE_EDGE;
160  cddata_masks.pmask |= CD_MASK_FREESTYLE_FACE;
161  cddata_masks.vmask |= CD_MASK_MDEFORMVERT;
162 #endif
164  /* Always compute UVs, vertex colors as orcos for render. */
166  cddata_masks.vmask |= CD_MASK_ORCO | CD_MASK_PROP_COLOR;
167  }
168  makeDerivedMesh(depsgraph, scene, ob, &cddata_masks); /* was CD_MASK_BAREMESH */
169  break;
170  }
171  case OB_ARMATURE:
173  break;
174 
175  case OB_MBALL:
177  break;
178 
179  case OB_CURVES_LEGACY:
180  case OB_SURF:
181  case OB_FONT: {
182  bool for_render = (DEG_get_mode(depsgraph) == DAG_EVAL_RENDER);
183  BKE_displist_make_curveTypes(depsgraph, scene, ob, for_render);
184  break;
185  }
186 
187  case OB_LATTICE:
189  break;
190  case OB_GPENCIL: {
194  break;
195  }
196  case OB_CURVES:
198  break;
199  case OB_POINTCLOUD:
201  break;
202  case OB_VOLUME:
204  break;
205  }
206 
207  /* particles */
208  if (!(ob->mode & OB_MODE_EDIT) && ob->particlesystem.first) {
209  const bool use_render_params = (DEG_get_mode(depsgraph) == DAG_EVAL_RENDER);
210  ParticleSystem *tpsys, *psys;
211  ob->transflag &= ~OB_DUPLIPARTS;
212  psys = ob->particlesystem.first;
213  while (psys) {
214  if (psys_check_enabled(ob, psys, use_render_params)) {
215  /* check use of dupli objects here */
216  if (psys->part && (psys->part->draw_as == PART_DRAW_REND || use_render_params) &&
217  ((psys->part->ren_as == PART_DRAW_OB && psys->part->instance_object) ||
218  (psys->part->ren_as == PART_DRAW_GR && psys->part->instance_collection))) {
219  ob->transflag |= OB_DUPLIPARTS;
220  }
221 
222  particle_system_update(depsgraph, scene, ob, psys, use_render_params);
223  psys = psys->next;
224  }
225  else if (psys->flag & PSYS_DELETE) {
226  tpsys = psys->next;
227  BLI_remlink(&ob->particlesystem, psys);
228  psys_free(ob, psys);
229  psys = tpsys;
230  }
231  else {
232  psys = psys->next;
233  }
234  }
235  }
236 }
237 
239 static void object_sync_boundbox_to_original(Object *object_orig, Object *object_eval)
240 {
241  const BoundBox *bb = object_eval->runtime.bb;
242  if (!bb || (bb->flag & BOUNDBOX_DIRTY)) {
244  }
245 
246  bb = BKE_object_boundbox_get(object_eval);
247  if (bb != NULL) {
248  if (object_orig->runtime.bb == NULL) {
249  object_orig->runtime.bb = MEM_mallocN(sizeof(*object_orig->runtime.bb), __func__);
250  }
251  *object_orig->runtime.bb = *bb;
252  }
253 }
254 
256 {
257  if (!DEG_is_active(depsgraph)) {
258  return;
259  }
260  Object *object_orig = DEG_get_original_object(object);
261  /* Base flags. */
262  object_orig->base_flag = object->base_flag;
263  /* Transformation flags. */
264  copy_m4_m4(object_orig->obmat, object->obmat);
265  copy_m4_m4(object_orig->imat, object->imat);
266  copy_m4_m4(object_orig->constinv, object->constinv);
267  object_orig->transflag = object->transflag;
268  object_orig->flag = object->flag;
269 
270  /* Copy back error messages from modifiers. */
271  for (ModifierData *md = object->modifiers.first, *md_orig = object_orig->modifiers.first;
272  md != NULL && md_orig != NULL;
273  md = md->next, md_orig = md_orig->next) {
274  BLI_assert(md->type == md_orig->type && STREQ(md->name, md_orig->name));
275  MEM_SAFE_FREE(md_orig->error);
276  if (md->error != NULL) {
277  md_orig->error = BLI_strdup(md->error);
278  }
279  }
280 
281  object_sync_boundbox_to_original(object_orig, object);
282 }
283 
285 {
286 }
287 
289 {
290  switch (GS(object_data->name)) {
291  case ID_ME:
293  break;
294  case ID_LT:
295  BKE_lattice_batch_cache_dirty_tag((struct Lattice *)object_data,
297  break;
298  case ID_CU_LEGACY:
300  break;
301  case ID_MB:
303  break;
304  case ID_GD:
305  BKE_gpencil_batch_cache_dirty_tag((struct bGPdata *)object_data);
306  break;
307  case ID_CV:
309  break;
310  case ID_PT:
311  BKE_pointcloud_batch_cache_dirty_tag((struct PointCloud *)object_data,
313  break;
314  case ID_VO:
316  break;
317  default:
318  break;
319  }
320 }
321 
323 {
325 }
326 
328 {
329  DEG_debug_print_eval(depsgraph, __func__, ob->id.name, ob);
330  BLI_assert(ob->type != OB_ARMATURE);
333 }
334 
336 {
337  DEG_debug_print_eval(depsgraph, __func__, object->id.name, object);
339 }
340 
342 {
343  /* This mimics full transform update chain from new depsgraph. */
345  if (object->parent != NULL) {
347  }
348  if (!BLI_listbase_is_empty(&object->constraints)) {
350  }
353 }
354 
356 {
357  DEG_debug_print_eval(depsgraph, __func__, object_data->name, object_data);
358  switch (GS(object_data->name)) {
359  case ID_ME:
361  break;
362  case ID_CU_LEGACY:
364  break;
365  case ID_LT:
366  BKE_lattice_batch_cache_dirty_tag((struct Lattice *)object_data,
368  break;
369  default:
370  break;
371  }
372 }
373 
375 {
376  DEG_debug_print_eval(depsgraph, __func__, object->id.name, object);
377  if (object->type == OB_MESH && !object->runtime.is_data_eval_owned) {
378  Mesh *mesh_input = (Mesh *)object->runtime.data_orig;
379  Mesh_Runtime *mesh_runtime = &mesh_input->runtime;
380  BLI_mutex_lock(mesh_runtime->eval_mutex);
382  BLI_mutex_unlock(mesh_runtime->eval_mutex);
383  }
384  else {
386  }
387 }
388 
390  Scene *scene,
391  const int view_layer_index,
392  Object *object,
393  int base_index,
394  const bool is_from_set)
395 {
396  /* TODO(sergey): Avoid list lookup. */
397  BLI_assert(view_layer_index >= 0);
398  ViewLayer *view_layer = BLI_findlink(&scene->view_layers, view_layer_index);
399  BLI_assert(view_layer != NULL);
400  BLI_assert(view_layer->object_bases_array != NULL);
401  BLI_assert(base_index >= 0);
402  BLI_assert(base_index < MEM_allocN_len(view_layer->object_bases_array) / sizeof(Base *));
403  Base *base = view_layer->object_bases_array[base_index];
404  BLI_assert(base->object == object);
405 
406  DEG_debug_print_eval(depsgraph, __func__, object->id.name, object);
407 
408  /* Set base flags based on collection and object restriction. */
409  BKE_base_eval_flags(base);
410 
411  /* For render, compute base visibility again since BKE_base_eval_flags
412  * assumed viewport visibility. Select-ability does not matter here. */
414  if (base->flag & BASE_ENABLED_RENDER) {
415  base->flag |= BASE_VISIBLE_DEPSGRAPH;
416  }
417  else {
418  base->flag &= ~BASE_VISIBLE_DEPSGRAPH;
419  }
420  }
421 
422  /* Copy flags and settings from base. */
423  object->base_flag = base->flag;
424  if (is_from_set) {
425  object->base_flag |= BASE_FROM_SET;
426  object->base_flag &= ~(BASE_SELECTED | BASE_SELECTABLE);
427  }
428  object->base_local_view_bits = base->local_view_bits;
429  object->runtime.local_collections_bits = base->local_collections_bits;
430 
431  if (object->mode == OB_MODE_PARTICLE_EDIT) {
432  for (ParticleSystem *psys = object->particlesystem.first; psys != NULL; psys = psys->next) {
434  }
435  }
436 
437  /* Copy base flag back to the original view layer for editing. */
439  Base *base_orig = base->base_orig;
440  BLI_assert(base_orig != NULL);
441  BLI_assert(base_orig->object != NULL);
442  base_orig->flag = base->flag;
443  }
444 }
void makeDerivedMesh(struct Depsgraph *depsgraph, const struct Scene *scene, struct Object *ob, const struct CustomData_MeshMasks *dataMask)
Blender kernel action and pose functionality.
void BKE_pose_where_is(struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob)
Definition: armature.c:2538
void BKE_constraints_solve(struct Depsgraph *depsgraph, struct ListBase *conlist, struct bConstraintOb *cob, float ctime)
Definition: constraint.c:6352
struct bConstraintOb * BKE_constraints_make_evalob(struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob, void *subdata, short datatype)
Definition: constraint.c:119
void BKE_constraints_clear_evalob(struct bConstraintOb *cob)
Definition: constraint.c:196
@ BKE_CURVE_BATCH_DIRTY_SELECT
Definition: BKE_curve.h:367
@ BKE_CURVE_BATCH_DIRTY_ALL
Definition: BKE_curve.h:366
void BKE_curve_batch_cache_dirty_tag(struct Curve *cu, int mode)
Definition: curve.cc:5524
Low-level operations for curves that cannot be defined in the C++ header yet.
void BKE_curves_data_update(struct Depsgraph *depsgraph, struct Scene *scene, struct Object *object)
Definition: curves.cc:315
void BKE_curves_batch_cache_dirty_tag(struct Curves *curves, int mode)
Definition: curves.cc:351
@ BKE_CURVES_BATCH_DIRTY_ALL
Definition: BKE_curves.h:41
void CustomData_MeshMasks_update(CustomData_MeshMasks *mask_dst, const CustomData_MeshMasks *mask_src)
Definition: customdata.cc:77
const CustomData_MeshMasks CD_MASK_BAREMESH
Definition: customdata.cc:2051
display list (or rather multi purpose list) stuff.
void BKE_displist_make_curveTypes(struct Depsgraph *depsgraph, const struct Scene *scene, struct Object *ob, bool for_render)
void BKE_displist_make_mball(struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob)
Definition: displist.cc:641
void BKE_gpencil_batch_cache_dirty_tag(struct bGPdata *gpd)
Definition: gpencil.c:335
void BKE_gpencil_update_layer_transforms(const struct Depsgraph *depsgraph, struct Object *ob)
void BKE_gpencil_prepare_eval_data(struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob)
void BKE_gpencil_modifiers_calc(struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob)
void BKE_lattice_modifiers_calc(struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob)
Definition: lattice.c:533
@ BKE_LATTICE_BATCH_DIRTY_SELECT
Definition: BKE_lattice.h:71
@ BKE_LATTICE_BATCH_DIRTY_ALL
Definition: BKE_lattice.h:70
void BKE_lattice_batch_cache_dirty_tag(struct Lattice *lt, int mode)
Definition: lattice.c:784
void BKE_base_eval_flags(struct Base *base)
Definition: layer.c:2200
General operations, lookup, etc. for blender lights.
General operations, lookup, etc. for materials.
@ BKE_MBALL_BATCH_DIRTY_ALL
Definition: BKE_mball.h:118
void BKE_mball_batch_cache_dirty_tag(struct MetaBall *mb, int mode)
Definition: mball.c:743
void BKE_mesh_batch_cache_dirty_tag(struct Mesh *me, eMeshBatchDirtyMode mode)
@ BKE_MESH_BATCH_DIRTY_ALL
@ BKE_MESH_BATCH_DIRTY_SELECT
General operations, lookup, etc. for blender objects.
void BKE_object_get_parent_matrix(struct Object *ob, struct Object *par, float r_parentmat[4][4])
Definition: object.cc:3342
void BKE_object_to_mat4(struct Object *ob, float r_mat[4][4])
Definition: object.cc:3082
void BKE_object_free_derived_caches(struct Object *ob)
Definition: object.cc:1774
bool BKE_object_boundbox_calc_from_evaluated_geometry(struct Object *ob)
Definition: object.cc:3743
const struct BoundBox * BKE_object_boundbox_get(struct Object *ob)
Definition: object.cc:3684
bool psys_check_enabled(struct Object *ob, struct ParticleSystem *psys, bool use_render_params)
Definition: particle.c:801
void particle_system_update(struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob, struct ParticleSystem *psys, bool use_render_params)
@ BKE_PARTICLE_BATCH_DIRTY_ALL
Definition: BKE_particle.h:686
void BKE_particle_batch_cache_dirty_tag(struct ParticleSystem *psys, int mode)
Definition: particle.c:5274
void psys_free(struct Object *ob, struct ParticleSystem *psys)
Definition: particle.c:1068
int BKE_ptcache_object_reset(struct Scene *scene, struct Object *ob, int mode)
Definition: pointcache.c:2930
#define PTCACHE_RESET_DEPSGRAPH
General operations for point clouds.
void BKE_pointcloud_data_update(struct Depsgraph *depsgraph, struct Scene *scene, struct Object *object)
Definition: pointcloud.cc:407
void BKE_pointcloud_batch_cache_dirty_tag(struct PointCloud *pointcloud, int mode)
Definition: pointcloud.cc:436
@ BKE_POINTCLOUD_BATCH_DIRTY_ALL
float BKE_scene_ctime_get(const struct Scene *scene)
Volume data-block.
void BKE_volume_batch_cache_dirty_tag(struct Volume *volume, int mode)
Definition: volume.cc:1215
void BKE_volume_data_update(struct Depsgraph *depsgraph, struct Scene *scene, struct Object *object)
Definition: volume.cc:1159
@ BKE_VOLUME_BATCH_DIRTY_ALL
Definition: BKE_volume.h:50
#define BLI_assert(a)
Definition: BLI_assert.h:46
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
Definition: BLI_listbase.h:269
void BLI_remlink(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition: listbase.c:100
void * BLI_findlink(const struct ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void mul_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4])
Definition: math_matrix.c:259
void copy_m4_m4(float m1[4][4], const float m2[4][4])
Definition: math_matrix.c:77
void invert_m4_m4_safe(float Ainv[4][4], const float A[4][4])
Definition: math_matrix.c:3153
bool is_negative_m4(const float mat[4][4])
Definition: math_matrix.c:2509
MINLINE void copy_v3_v3(float r[3], const float a[3])
char * BLI_strdup(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL() ATTR_MALLOC
Definition: string.c:42
void BLI_mutex_lock(ThreadMutex *mutex)
Definition: threads.cc:373
void BLI_mutex_unlock(ThreadMutex *mutex)
Definition: threads.cc:378
#define UNUSED(x)
#define STREQ(a, b)
struct Depsgraph Depsgraph
Definition: DEG_depsgraph.h:35
bool DEG_is_active(const struct Depsgraph *depsgraph)
Definition: depsgraph.cc:312
@ DAG_EVAL_RENDER
Definition: DEG_depsgraph.h:46
void DEG_debug_print_eval(struct Depsgraph *depsgraph, const char *function_name, const char *object_name, const void *object_address)
eEvaluationMode DEG_get_mode(const Depsgraph *graph)
struct Object * DEG_get_original_object(struct Object *object)
struct ViewLayer * DEG_get_evaluated_view_layer(const struct Depsgraph *graph)
@ ID_VO
Definition: DNA_ID_enums.h:83
@ ID_GD
Definition: DNA_ID_enums.h:71
@ ID_CV
Definition: DNA_ID_enums.h:81
@ ID_CU_LEGACY
Definition: DNA_ID_enums.h:49
@ ID_ME
Definition: DNA_ID_enums.h:48
@ ID_MB
Definition: DNA_ID_enums.h:50
@ ID_LT
Definition: DNA_ID_enums.h:54
@ ID_PT
Definition: DNA_ID_enums.h:82
Object groups, one object can be in many groups at once.
@ CONSTRAINT_OBTYPE_OBJECT
#define CD_MASK_PROP_BYTE_COLOR
#define CD_MASK_NORMAL
#define CD_MASK_PROP_COLOR
#define CD_MASK_ORCO
#define CD_MASK_MDEFORMVERT
#define CD_MASK_PROP_ALL
#define CD_MASK_FREESTYLE_FACE
#define CD_MASK_MLOOPUV
#define CD_MASK_FREESTYLE_EDGE
@ BASE_FROM_SET
@ BASE_SELECTABLE
@ BASE_ENABLED_RENDER
@ BASE_VISIBLE_DEPSGRAPH
@ BASE_SELECTED
@ OB_MODE_PARTICLE_EDIT
@ OB_MODE_EDIT
@ OB_LATTICE
@ OB_MBALL
@ OB_SURF
@ OB_FONT
@ OB_ARMATURE
@ OB_MESH
@ OB_POINTCLOUD
@ OB_VOLUME
@ OB_CURVES_LEGACY
@ OB_CURVES
@ OB_GPENCIL
@ BOUNDBOX_DIRTY
@ OB_NEG_SCALE
@ OB_DUPLIPARTS
@ PARSKEL
@ PARTYPE
#define PART_DRAW_OB
#define PART_DRAW_REND
#define PSYS_DELETE
#define PART_DRAW_GR
Read Guarded memory(de)allocation.
#define MEM_SAFE_FREE(v)
Scene scene
const Depsgraph * depsgraph
#define GS(x)
Definition: iris.c:225
size_t(* MEM_allocN_len)(const void *vmemh)
Definition: mallocn.c:26
void *(* MEM_mallocN)(size_t len, const char *str)
Definition: mallocn.c:33
void BKE_object_select_update(Depsgraph *depsgraph, Object *object)
void BKE_object_eval_reset(Object *ob_eval)
Definition: object_update.c:54
void BKE_object_eval_parent(Depsgraph *depsgraph, Object *ob)
Definition: object_update.c:67
void BKE_object_eval_local_transform(Depsgraph *depsgraph, Object *ob)
Definition: object_update.c:59
void BKE_object_batch_cache_dirty_tag(Object *ob)
void BKE_object_eval_uber_transform(Depsgraph *UNUSED(depsgraph), Object *UNUSED(object))
void BKE_object_data_batch_cache_dirty_tag(ID *object_data)
void BKE_object_sync_to_original(Depsgraph *depsgraph, Object *object)
void BKE_object_eval_constraints(Depsgraph *depsgraph, Scene *scene, Object *ob)
Definition: object_update.c:99
void BKE_object_eval_uber_data(Depsgraph *depsgraph, Scene *scene, Object *ob)
void BKE_object_data_select_update(Depsgraph *depsgraph, ID *object_data)
void BKE_object_eval_eval_base_flags(Depsgraph *depsgraph, Scene *scene, const int view_layer_index, Object *object, int base_index, const bool is_from_set)
void BKE_object_eval_transform_all(Depsgraph *depsgraph, Scene *scene, Object *object)
static void object_sync_boundbox_to_original(Object *object_orig, Object *object_eval)
void BKE_object_eval_transform_final(Depsgraph *depsgraph, Object *ob)
void BKE_object_handle_data_update(Depsgraph *depsgraph, Scene *scene, Object *ob)
void BKE_object_eval_ptcache_reset(Depsgraph *depsgraph, Scene *scene, Object *object)
short flag
struct Object * object
unsigned short local_view_bits
unsigned short local_collections_bits
struct Base * base_orig
Definition: DNA_ID.h:368
char name[66]
Definition: DNA_ID.h:378
void * first
Definition: DNA_listBase.h:31
Mesh_Runtime runtime
float parent_display_origin[3]
struct ID * data_orig
struct BoundBox * bb
short partype
ListBase particlesystem
short transflag
ListBase constraints
short base_flag
ListBase modifiers
float constinv[4][4]
float imat[4][4]
float parentinv[4][4]
Object_Runtime runtime
float obmat[4][4]
struct Object * parent
void * data
struct Collection * instance_collection
struct Object * instance_object
ParticleSettings * part
struct ParticleSystem * next
struct CustomData_MeshMasks customdata_mask
ListBase view_layers
struct Base ** object_bases_array