Blender  V2.93
versioning_280.c
Go to the documentation of this file.
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  */
16 
21 /* allow readfile to use deprecated functionality */
22 #define DNA_DEPRECATED_ALLOW
23 
24 #include <float.h>
25 #include <string.h>
26 
27 #include "BLI_listbase.h"
28 #include "BLI_math.h"
29 #include "BLI_mempool.h"
30 #include "BLI_string.h"
31 #include "BLI_utildefines.h"
32 
33 #include "DNA_defaults.h"
34 
35 #include "DNA_anim_types.h"
36 #include "DNA_armature_types.h"
37 #include "DNA_camera_types.h"
38 #include "DNA_cloth_types.h"
39 #include "DNA_collection_types.h"
40 #include "DNA_constraint_types.h"
41 #include "DNA_curve_types.h"
42 #include "DNA_curveprofile_types.h"
43 #include "DNA_fluid_types.h"
44 #include "DNA_freestyle_types.h"
45 #include "DNA_genfile.h"
47 #include "DNA_gpencil_types.h"
48 #include "DNA_gpu_types.h"
49 #include "DNA_key_types.h"
50 #include "DNA_layer_types.h"
51 #include "DNA_light_types.h"
52 #include "DNA_lightprobe_types.h"
53 #include "DNA_linestyle_types.h"
54 #include "DNA_material_types.h"
55 #include "DNA_mesh_types.h"
56 #include "DNA_modifier_types.h"
57 #include "DNA_object_types.h"
58 #include "DNA_particle_types.h"
59 #include "DNA_rigidbody_types.h"
60 #include "DNA_scene_types.h"
61 #include "DNA_screen_types.h"
62 #include "DNA_shader_fx_types.h"
63 #include "DNA_text_types.h"
64 #include "DNA_texture_types.h"
65 #include "DNA_view3d_types.h"
66 #include "DNA_workspace_types.h"
67 #include "DNA_world_types.h"
68 
69 #include "BKE_animsys.h"
70 #include "BKE_brush.h"
71 #include "BKE_cloth.h"
72 #include "BKE_collection.h"
73 #include "BKE_colortools.h"
74 #include "BKE_constraint.h"
75 #include "BKE_curveprofile.h"
76 #include "BKE_customdata.h"
77 #include "BKE_fcurve.h"
78 #include "BKE_fcurve_driver.h"
79 #include "BKE_freestyle.h"
80 #include "BKE_global.h"
81 #include "BKE_gpencil.h"
82 #include "BKE_gpencil_geom.h"
83 #include "BKE_gpencil_modifier.h"
84 #include "BKE_idprop.h"
85 #include "BKE_key.h"
86 #include "BKE_layer.h"
87 #include "BKE_lib_id.h"
88 #include "BKE_main.h"
89 #include "BKE_mesh.h"
90 #include "BKE_node.h"
91 #include "BKE_paint.h"
92 #include "BKE_pointcache.h"
93 #include "BKE_report.h"
94 #include "BKE_rigidbody.h"
95 #include "BKE_screen.h"
96 #include "BKE_studiolight.h"
97 #include "BKE_unit.h"
98 #include "BKE_workspace.h"
99 
100 #include "SEQ_iterator.h"
101 #include "SEQ_modifier.h"
102 #include "SEQ_utils.h"
103 
104 /* Only for IMB_BlendMode */
105 #include "IMB_imbuf.h"
106 
107 #include "DEG_depsgraph.h"
108 
109 #include "BLT_translation.h"
110 
111 #include "BLO_readfile.h"
112 #include "readfile.h"
113 
114 #include "MEM_guardedalloc.h"
115 
116 /* Make preferences read-only, use versioning_userdef.c. */
117 #define U (*((const UserDef *)&U))
118 
123  const short id_type,
124  const char *name_src,
125  const char *name_dst)
126 {
127  /* We can ignore libraries */
128  ListBase *lb = which_libbase(bmain, id_type);
129  ID *id = NULL;
130  LISTBASE_FOREACH (ID *, idtest, lb) {
131  if (idtest->lib == NULL) {
132  if (STREQ(idtest->name + 2, name_src)) {
133  id = idtest;
134  }
135  if (STREQ(idtest->name + 2, name_dst)) {
136  return NULL;
137  }
138  }
139  }
140  if (id != NULL) {
141  BLI_strncpy(id->name + 2, name_dst, sizeof(id->name) - 2);
142  /* We know it's unique, this just sorts. */
144  }
145  return id;
146 }
147 
148 static bScreen *screen_parent_find(const bScreen *screen)
149 {
150  /* Can avoid lookup if screen state isn't maximized/full
151  * (parent and child store the same state). */
152  if (ELEM(screen->state, SCREENMAXIMIZED, SCREENFULL)) {
153  LISTBASE_FOREACH (const ScrArea *, area, &screen->areabase) {
154  if (area->full && area->full != screen) {
155  BLI_assert(area->full->state == screen->state);
156  return area->full;
157  }
158  }
159  }
160 
161  return NULL;
162 }
163 
165 {
166  bmain->is_locked_for_linking = false;
167 
168  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
169  const bScreen *screen_parent = screen_parent_find(screen);
170  WorkSpace *workspace;
171  if (screen->temp) {
172  continue;
173  }
174 
175  if (screen_parent) {
176  /* Full-screen with "Back to Previous" option, don't create
177  * a new workspace, add layout workspace containing parent. */
178  workspace = BLI_findstring(
179  &bmain->workspaces, screen_parent->id.name + 2, offsetof(ID, name) + 2);
180  }
181  else {
182  workspace = BKE_workspace_add(bmain, screen->id.name + 2);
183  }
184  if (workspace == NULL) {
185  continue; /* Not much we can do.. */
186  }
187  BKE_workspace_layout_add(bmain, workspace, screen, screen->id.name + 2);
188  }
189 
190  bmain->is_locked_for_linking = true;
191 }
192 
194 {
196  SpaceAction *saction = (SpaceAction *)stype->create(area, scene);
197  ARegion *region_channels;
198 
199  /* Properly free current regions */
200  LISTBASE_FOREACH (ARegion *, region, &area->regionbase) {
201  BKE_area_region_free(area->type, region);
202  }
203  BLI_freelistN(&area->regionbase);
204 
205  area->type = stype;
206  area->spacetype = stype->spaceid;
207 
208  BLI_addhead(&area->spacedata, saction);
209  area->regionbase = saction->regionbase;
210  BLI_listbase_clear(&saction->regionbase);
211 
212  /* Different defaults for timeline */
214  region_channels->flag |= RGN_FLAG_HIDDEN;
215 
216  saction->mode = SACTCONT_TIMELINE;
217  saction->ads.flag |= ADS_FLAG_SUMMARY_COLLAPSED;
218  saction->ads.filterflag |= ADS_FILTER_SUMMARY;
219 }
220 
234 {
236 
238 
239  for (wmWindowManager *wm = bmain->wm.first; wm; wm = wm->id.next) {
240  LISTBASE_FOREACH (wmWindow *, win, &wm->windows) {
241  bScreen *screen_parent = screen_parent_find(win->screen);
242  bScreen *screen = screen_parent ? screen_parent : win->screen;
243 
244  if (screen->temp) {
245  /* We do not generate a new workspace for those screens...
246  * still need to set some data in win. */
247  win->workspace_hook = BKE_workspace_instance_hook_create(bmain, win->winid);
248  win->scene = screen->scene;
249  /* Deprecated from now on! */
250  win->screen = NULL;
251  continue;
252  }
253 
254  WorkSpace *workspace = BLI_findstring(
255  &bmain->workspaces, screen->id.name + 2, offsetof(ID, name) + 2);
256  BLI_assert(workspace != NULL);
257  WorkSpaceLayout *layout = BKE_workspace_layout_find(workspace, win->screen);
258  BLI_assert(layout != NULL);
259 
260  win->workspace_hook = BKE_workspace_instance_hook_create(bmain, win->winid);
261 
262  BKE_workspace_active_set(win->workspace_hook, workspace);
263  BKE_workspace_active_layout_set(win->workspace_hook, win->winid, workspace, layout);
264 
265  /* Move scene and view layer to window. */
266  Scene *scene = screen->scene;
267  ViewLayer *layer = BLI_findlink(&scene->view_layers, scene->r.actlay);
268  if (!layer) {
270  }
271 
272  win->scene = scene;
273  STRNCPY(win->view_layer_name, layer->name);
274 
275  /* Deprecated from now on! */
276  win->screen = NULL;
277  }
278  }
279 
280  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
281  /* Deprecated from now on! */
282  BLI_freelistN(&screen->scene->transform_spaces);
283  screen->scene = NULL;
284  }
285 }
286 
287 #ifdef USE_COLLECTION_COMPAT_28
288 enum {
289  COLLECTION_DEPRECATED_VISIBLE = (1 << 0),
290  COLLECTION_DEPRECATED_VIEWPORT = (1 << 0),
291  COLLECTION_DEPRECATED_SELECTABLE = (1 << 1),
292  COLLECTION_DEPRECATED_DISABLED = (1 << 2),
293  COLLECTION_DEPRECATED_RENDER = (1 << 3),
294 };
295 
296 static void do_version_view_layer_visibility(ViewLayer *view_layer)
297 {
298  /* Convert from deprecated VISIBLE flag to DISABLED */
299  LayerCollection *lc;
300  for (lc = view_layer->layer_collections.first; lc; lc = lc->next) {
301  if (lc->flag & COLLECTION_DEPRECATED_DISABLED) {
302  lc->flag &= ~COLLECTION_DEPRECATED_DISABLED;
303  }
304 
305  if ((lc->flag & COLLECTION_DEPRECATED_VISIBLE) == 0) {
306  lc->flag |= COLLECTION_DEPRECATED_DISABLED;
307  }
308 
309  lc->flag |= COLLECTION_DEPRECATED_VIEWPORT | COLLECTION_DEPRECATED_RENDER;
310  }
311 }
312 
313 static void do_version_layer_collection_pre(ViewLayer *view_layer,
314  ListBase *lb,
315  GSet *enabled_set,
316  GSet *selectable_set)
317 {
318  /* Convert from deprecated DISABLED to new layer collection and collection flags */
319  LISTBASE_FOREACH (LayerCollection *, lc, lb) {
320  if (lc->scene_collection) {
321  if (!(lc->flag & COLLECTION_DEPRECATED_DISABLED)) {
322  BLI_gset_insert(enabled_set, lc->scene_collection);
323  }
324  if (lc->flag & COLLECTION_DEPRECATED_SELECTABLE) {
325  BLI_gset_insert(selectable_set, lc->scene_collection);
326  }
327  }
328 
329  do_version_layer_collection_pre(
330  view_layer, &lc->layer_collections, enabled_set, selectable_set);
331  }
332 }
333 
334 static void do_version_layer_collection_post(ViewLayer *view_layer,
335  ListBase *lb,
336  GSet *enabled_set,
337  GSet *selectable_set,
338  GHash *collection_map)
339 {
340  /* Apply layer collection exclude flags. */
341  LISTBASE_FOREACH (LayerCollection *, lc, lb) {
342  if (!(lc->collection->flag & COLLECTION_IS_MASTER)) {
343  SceneCollection *sc = BLI_ghash_lookup(collection_map, lc->collection);
344  const bool enabled = (sc && BLI_gset_haskey(enabled_set, sc));
345  const bool selectable = (sc && BLI_gset_haskey(selectable_set, sc));
346 
347  if (!enabled) {
349  }
350  if (enabled && !selectable) {
352  }
353  }
354 
355  do_version_layer_collection_post(
356  view_layer, &lc->layer_collections, enabled_set, selectable_set, collection_map);
357  }
358 }
359 
360 static void do_version_scene_collection_convert(
361  Main *bmain, ID *id, SceneCollection *sc, Collection *collection, GHash *collection_map)
362 {
363  if (collection_map) {
364  BLI_ghash_insert(collection_map, collection, sc);
365  }
366 
367  for (SceneCollection *nsc = sc->scene_collections.first; nsc;) {
368  SceneCollection *nsc_next = nsc->next;
369  Collection *ncollection = BKE_collection_add(bmain, collection, nsc->name);
370  ncollection->id.lib = id->lib;
371  do_version_scene_collection_convert(bmain, id, nsc, ncollection, collection_map);
372  nsc = nsc_next;
373  }
374 
375  LISTBASE_FOREACH (LinkData *, link, &sc->objects) {
376  Object *ob = link->data;
377  if (ob) {
378  BKE_collection_object_add(bmain, collection, ob);
379  id_us_min(&ob->id);
380  }
381  }
382 
383  BLI_freelistN(&sc->objects);
384  MEM_freeN(sc);
385 }
386 
387 static void do_version_group_collection_to_collection(Main *bmain, Collection *group)
388 {
389  /* Convert old 2.8 group collections to new unified collections. */
390  if (group->collection) {
391  do_version_scene_collection_convert(bmain, &group->id, group->collection, group, NULL);
392  }
393 
394  group->collection = NULL;
395  group->view_layer = NULL;
396  id_fake_user_set(&group->id);
397 }
398 
399 static void do_version_scene_collection_to_collection(Main *bmain, Scene *scene)
400 {
401  /* Convert old 2.8 scene collections to new unified collections. */
402 
403  /* Temporarily clear view layers so we don't do any layer collection syncing
404  * and destroy old flags that we want to restore. */
405  ListBase view_layers = scene->view_layers;
407 
408  if (!scene->master_collection) {
410  }
411 
412  /* Convert scene collections. */
413  GHash *collection_map = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, __func__);
414  if (scene->collection) {
415  do_version_scene_collection_convert(
416  bmain, &scene->id, scene->collection, scene->master_collection, collection_map);
417  scene->collection = NULL;
418  }
419 
420  scene->view_layers = view_layers;
421 
422  /* Convert layer collections. */
423  ViewLayer *view_layer;
424  for (view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) {
425  GSet *enabled_set = BLI_gset_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, __func__);
426  GSet *selectable_set = BLI_gset_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, __func__);
427 
428  do_version_layer_collection_pre(
429  view_layer, &view_layer->layer_collections, enabled_set, selectable_set);
430 
431  BKE_layer_collection_sync(scene, view_layer);
432 
433  do_version_layer_collection_post(
434  view_layer, &view_layer->layer_collections, enabled_set, selectable_set, collection_map);
435 
436  BLI_gset_free(enabled_set, NULL);
437  BLI_gset_free(selectable_set, NULL);
438 
439  BKE_layer_collection_sync(scene, view_layer);
440  }
441 
442  BLI_ghash_free(collection_map, NULL, NULL);
443 }
444 #endif
445 
447 {
448  /* Since we don't have access to FileData we check the (always valid) first
449  * render layer instead. */
450  if (!scene->master_collection) {
452  }
453 
454  if (scene->view_layers.first) {
455  return;
456  }
457 
458  /* Create collections from layers. */
459  Collection *collection_master = scene->master_collection;
460  Collection *collections[20] = {NULL};
461 
462  for (int layer = 0; layer < 20; layer++) {
463  LISTBASE_FOREACH (Base *, base, &scene->base) {
464  if (base->lay & (1 << layer)) {
465  /* Create collections when needed only. */
466  if (collections[layer] == NULL) {
467  char name[MAX_NAME];
468 
469  BLI_snprintf(
470  name, sizeof(collection_master->id.name), DATA_("Collection %d"), layer + 1);
471 
472  Collection *collection = BKE_collection_add(bmain, collection_master, name);
473  collection->id.lib = scene->id.lib;
474  if (collection->id.lib != NULL) {
475  collection->id.tag |= LIB_TAG_INDIRECT;
476  }
477  collections[layer] = collection;
478 
479  if (!(scene->lay & (1 << layer))) {
481  }
482  }
483 
484  /* Note usually this would do slow collection syncing for view layers,
485  * but since no view layers exists yet at this point it's fast. */
486  BKE_collection_object_add(bmain, collections[layer], base->object);
487  }
488 
489  if (base->flag & SELECT) {
490  base->object->flag |= SELECT;
491  }
492  else {
493  base->object->flag &= ~SELECT;
494  }
495  }
496  }
497 
498  /* Handle legacy render layers. */
499  bool have_override = false;
500  const bool need_default_renderlayer = scene->r.layers.first == NULL;
501 
502  LISTBASE_FOREACH (SceneRenderLayer *, srl, &scene->r.layers) {
504 
505  if (srl->layflag & SCE_LAY_DISABLE) {
506  view_layer->flag &= ~VIEW_LAYER_RENDER;
507  }
508 
509  if ((srl->layflag & SCE_LAY_FRS) == 0) {
510  view_layer->flag &= ~VIEW_LAYER_FREESTYLE;
511  }
512 
513  view_layer->layflag = srl->layflag;
514  view_layer->passflag = srl->passflag;
515  view_layer->pass_alpha_threshold = srl->pass_alpha_threshold;
516  view_layer->samples = srl->samples;
517  view_layer->mat_override = srl->mat_override;
518 
519  BKE_freestyle_config_free(&view_layer->freestyle_config, true);
520  view_layer->freestyle_config = srl->freestyleConfig;
521  view_layer->id_properties = srl->prop;
522 
523  /* Set exclusion and overrides. */
524  for (int layer = 0; layer < 20; layer++) {
525  Collection *collection = collections[layer];
526  if (collection) {
528  collection);
529 
530  if (srl->lay_exclude & (1 << layer)) {
531  /* Disable excluded layer. */
532  have_override = true;
535  nlc->flag |= LAYER_COLLECTION_EXCLUDE;
536  }
537  }
538  else {
539  if (srl->lay_zmask & (1 << layer)) {
540  have_override = true;
542  }
543 
544  if ((srl->lay & (1 << layer)) == 0) {
545  have_override = true;
547  }
548  }
549  }
550  }
551 
552  /* for convenience set the same active object in all the layers */
553  if (scene->basact) {
554  view_layer->basact = BKE_view_layer_base_find(view_layer, scene->basact->object);
555  }
556 
557  LISTBASE_FOREACH (Base *, base, &view_layer->object_bases) {
558  if ((base->flag & BASE_SELECTABLE) && (base->object->flag & SELECT)) {
559  base->flag |= BASE_SELECTED;
560  }
561  }
562  }
563 
564  BLI_freelistN(&scene->r.layers);
565 
566  /* If render layers included overrides, or there are no render layers,
567  * we also create a vanilla viewport layer. */
568  if (have_override || need_default_renderlayer) {
569  ViewLayer *view_layer = BKE_view_layer_add(scene, "Viewport", NULL, VIEWLAYER_ADD_NEW);
570 
571  /* If we ported all the original render layers,
572  * we don't need to make the viewport layer renderable. */
574  view_layer->flag &= ~VIEW_LAYER_RENDER;
575  }
576 
577  /* convert active base */
578  if (scene->basact) {
579  view_layer->basact = BKE_view_layer_base_find(view_layer, scene->basact->object);
580  }
581 
582  /* convert selected bases */
583  LISTBASE_FOREACH (Base *, base, &view_layer->object_bases) {
584  if ((base->flag & BASE_SELECTABLE) && (base->object->flag & SELECT)) {
585  base->flag |= BASE_SELECTED;
586  }
587 
588  /* keep lay around for forward compatibility (open those files in 2.79) */
589  base->lay = base->object->lay;
590  }
591  }
592 
593  /* remove bases once and for all */
594  LISTBASE_FOREACH (Base *, base, &scene->base) {
595  id_us_min(&base->object->id);
596  }
597 
598  BLI_freelistN(&scene->base);
599  scene->basact = NULL;
600 }
601 
603 {
604  if (collection->id.lib != NULL) {
605  for (CollectionChild *collection_child = collection->children.first; collection_child != NULL;
606  collection_child = collection_child->next) {
607  if (collection_child->collection->id.lib == NULL) {
608  collection_child->collection->id.lib = collection->id.lib;
609  }
610  do_version_collection_propagate_lib_to_children(collection_child->collection);
611  }
612  }
613 }
614 
617 {
618  LISTBASE_FOREACH (const bGPDpalette *, palette, &gpd->palettes) {
619  LISTBASE_FOREACH (bGPDpalettecolor *, palcolor, &palette->colors) {
620  /* fix layers */
621  LISTBASE_FOREACH (bGPDlayer *, gpl, &gpd->layers) {
622  /* unlock/unhide layer */
623  gpl->flag &= ~GP_LAYER_LOCKED;
624  gpl->flag &= ~GP_LAYER_HIDE;
625  /* set opacity to 1 */
626  gpl->opacity = 1.0f;
627  /* disable tint */
628  gpl->tintcolor[3] = 0.0f;
629 
630  LISTBASE_FOREACH (bGPDframe *, gpf, &gpl->frames) {
631  LISTBASE_FOREACH (bGPDstroke *, gps, &gpf->strokes) {
632  if ((gps->colorname[0] != '\0') && (STREQ(gps->colorname, palcolor->info))) {
633  /* copy color settings */
634  copy_v4_v4(gpl->color, palcolor->color);
635  }
636  }
637  }
638  }
639  }
640  }
641 }
642 
643 static void do_versions_remove_region(ListBase *regionbase, ARegion *region)
644 {
645  BLI_freelinkN(regionbase, region);
646 }
647 
648 static void do_versions_remove_regions_by_type(ListBase *regionbase, int regiontype)
649 {
650  ARegion *region, *region_next;
651  for (region = regionbase->first; region; region = region_next) {
652  region_next = region->next;
653  if (region->regiontype == regiontype) {
654  do_versions_remove_region(regionbase, region);
655  }
656  }
657 }
658 
659 static ARegion *do_versions_find_region_or_null(ListBase *regionbase, int regiontype)
660 {
661  LISTBASE_FOREACH (ARegion *, region, regionbase) {
662  if (region->regiontype == regiontype) {
663  return region;
664  }
665  }
666  return NULL;
667 }
668 
669 static ARegion *do_versions_find_region(ListBase *regionbase, int regiontype)
670 {
671  ARegion *region = do_versions_find_region_or_null(regionbase, regiontype);
672  if (region == NULL) {
673  BLI_assert(!"Did not find expected region in versioning");
674  }
675  return region;
676 }
677 
678 static ARegion *do_versions_add_region(int regiontype, const char *name)
679 {
680  ARegion *region = MEM_callocN(sizeof(ARegion), name);
681  region->regiontype = regiontype;
682  return region;
683 }
684 
686  const short space_type,
687  const short region_flag)
688 {
689  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
690  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
691  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
692  if (sl->spacetype == space_type) {
693  ListBase *regionbase = (sl == area->spacedata.first) ? &area->regionbase :
694  &sl->regionbase;
696  if (!region) {
698  region = do_versions_add_region(RGN_TYPE_TOOLS, "tools region");
699  BLI_insertlinkafter(regionbase, header, region);
700  region->alignment = RGN_ALIGN_LEFT;
701  region->flag = region_flag;
702  }
703  }
704  }
705  }
706  }
707 }
708 
710 {
711  LISTBASE_FOREACH (Bone *, bone, lb) {
712  bone->scale_in_y = bone->scale_in_x;
713  bone->scale_out_y = bone->scale_out_x;
714 
715  do_version_bones_split_bbone_scale(&bone->childbase);
716  }
717 }
718 
720 {
721  LISTBASE_FOREACH (Bone *, bone, lb) {
722  if (bone->flag & BONE_NO_SCALE) {
723  bone->inherit_scale_mode = BONE_INHERIT_SCALE_NONE_LEGACY;
724  bone->flag &= ~BONE_NO_SCALE;
725  }
726 
727  do_version_bones_inherit_scale(&bone->childbase);
728  }
729 }
730 
731 static bool replace_bbone_scale_rnapath(char **p_old_path)
732 {
733  char *old_path = *p_old_path;
734 
735  if (old_path == NULL) {
736  return false;
737  }
738 
739  if (BLI_str_endswith(old_path, "bbone_scalein") ||
740  BLI_str_endswith(old_path, "bbone_scaleout")) {
741  *p_old_path = BLI_strdupcat(old_path, "x");
742 
743  MEM_freeN(old_path);
744  return true;
745  }
746 
747  return false;
748 }
749 
751 {
752  /* Update driver variable paths. */
753  if (fcu->driver) {
754  LISTBASE_FOREACH (DriverVar *, dvar, &fcu->driver->variables) {
756  replace_bbone_scale_rnapath(&dtar->rna_path);
757  }
759  }
760  }
761 
762  /* Update F-Curve's path. */
764  /* If matched, duplicate the curve and tweak name. */
765  FCurve *second = BKE_fcurve_copy(fcu);
766 
767  second->rna_path[strlen(second->rna_path) - 1] = 'y';
768 
769  BLI_insertlinkafter(curves, fcu, second);
770 
771  /* Add to the curve group. */
772  second->grp = fcu->grp;
773 
774  if (fcu->grp != NULL && fcu->grp->channels.last == fcu) {
775  fcu->grp->channels.last = second;
776  }
777  }
778 }
779 
781  AnimData *adt,
782  void *UNUSED(wrapper_data))
783 {
784  LISTBASE_FOREACH_MUTABLE (FCurve *, fcu, &adt->drivers) {
786  }
787 }
788 
790 {
791  LISTBASE_FOREACH (bConstraint *, con, lb) {
792  if (con->type == CONSTRAINT_TYPE_SAMEVOL) {
794  data->mode = SAMEVOL_UNIFORM;
795  }
796  }
797 }
798 
800 {
801  LISTBASE_FOREACH (bConstraint *, con, lb) {
802  if (con->type == CONSTRAINT_TYPE_SIZELIKE) {
804  data->power = 1.0f;
805  }
806  }
807 }
808 
810 {
811  LISTBASE_FOREACH (bConstraint *, con, lb) {
812  if (con->type == CONSTRAINT_TYPE_ROTLIKE) {
814  data->mix_mode = (data->flag & ROTLIKE_OFFSET) ? ROTLIKE_MIX_OFFSET : ROTLIKE_MIX_REPLACE;
815  data->flag &= ~ROTLIKE_OFFSET;
816  }
817  }
818 }
819 
821 {
822  for (Sequence *seq = seqbase->first; seq != NULL; seq = seq->next) {
823  if (ELEM(seq->type, SEQ_TYPE_SOUND_RAM, SEQ_TYPE_SOUND_HD) == 0) {
824  if (seq->strip->transform == NULL) {
825  seq->strip->transform = MEM_callocN(sizeof(struct StripTransform), "StripTransform");
826  }
827 
828  if (seq->strip->crop == NULL) {
829  seq->strip->crop = MEM_callocN(sizeof(struct StripCrop), "StripCrop");
830  }
831 
832  if (seq->seqbase.first != NULL) {
834  }
835  }
836  }
837 }
838 
839 /* Return true if there is something to convert. */
841 {
842  bool need_update = false;
843 
844  /* Iterate backwards from end so we don't encounter newly added links. */
845  bNodeLink *prevlink;
846  for (bNodeLink *link = ntree->links.last; link; link = prevlink) {
847  prevlink = link->prev;
848 
849  /* Detect link to replace. */
850  bNode *fromnode = link->fromnode;
851  bNodeSocket *fromsock = link->fromsock;
852  bNode *tonode = link->tonode;
853  bNodeSocket *tosock = link->tosock;
854 
855  if (!(tonode->type == SH_NODE_OUTPUT_MATERIAL && STREQ(tosock->identifier, "Surface"))) {
856  continue;
857  }
858 
859  /* Only do outputs that are enabled for EEVEE */
860  if (!ELEM(tonode->custom1, SHD_OUTPUT_ALL, SHD_OUTPUT_EEVEE)) {
861  continue;
862  }
863 
864  if (blend_method == 1 /* MA_BM_ADD */) {
865  nodeRemLink(ntree, link);
866 
868  add_node->locx = 0.5f * (fromnode->locx + tonode->locx);
869  add_node->locy = 0.5f * (fromnode->locy + tonode->locy);
870 
871  bNodeSocket *shader1_socket = add_node->inputs.first;
872  bNodeSocket *shader2_socket = add_node->inputs.last;
873  bNodeSocket *add_socket = nodeFindSocket(add_node, SOCK_OUT, "Shader");
874 
876  transp_node->locx = add_node->locx;
877  transp_node->locy = add_node->locy - 110.0f;
878 
879  bNodeSocket *transp_socket = nodeFindSocket(transp_node, SOCK_OUT, "BSDF");
880 
881  /* Link to input and material output node. */
882  nodeAddLink(ntree, fromnode, fromsock, add_node, shader1_socket);
883  nodeAddLink(ntree, transp_node, transp_socket, add_node, shader2_socket);
884  nodeAddLink(ntree, add_node, add_socket, tonode, tosock);
885 
886  need_update = true;
887  }
888  else if (blend_method == 2 /* MA_BM_MULTIPLY */) {
889  nodeRemLink(ntree, link);
890 
892 
893  bNodeSocket *color_socket = nodeFindSocket(transp_node, SOCK_IN, "Color");
894  bNodeSocket *transp_socket = nodeFindSocket(transp_node, SOCK_OUT, "BSDF");
895 
896  /* If incoming link is from a closure socket, we need to convert it. */
897  if (fromsock->type == SOCK_SHADER) {
898  transp_node->locx = 0.33f * fromnode->locx + 0.66f * tonode->locx;
899  transp_node->locy = 0.33f * fromnode->locy + 0.66f * tonode->locy;
900 
902  shtorgb_node->locx = 0.66f * fromnode->locx + 0.33f * tonode->locx;
903  shtorgb_node->locy = 0.66f * fromnode->locy + 0.33f * tonode->locy;
904 
905  bNodeSocket *shader_socket = nodeFindSocket(shtorgb_node, SOCK_IN, "Shader");
906  bNodeSocket *rgba_socket = nodeFindSocket(shtorgb_node, SOCK_OUT, "Color");
907 
908  nodeAddLink(ntree, fromnode, fromsock, shtorgb_node, shader_socket);
909  nodeAddLink(ntree, shtorgb_node, rgba_socket, transp_node, color_socket);
910  }
911  else {
912  transp_node->locx = 0.5f * (fromnode->locx + tonode->locx);
913  transp_node->locy = 0.5f * (fromnode->locy + tonode->locy);
914 
915  nodeAddLink(ntree, fromnode, fromsock, transp_node, color_socket);
916  }
917 
918  /* Link to input and material output node. */
919  nodeAddLink(ntree, transp_node, transp_socket, tonode, tosock);
920 
921  need_update = true;
922  }
923  }
924 
925  if (need_update) {
927  }
928 }
929 
931 {
932  layer_collection->local_collections_bits = ~(0);
933  LISTBASE_FOREACH (LayerCollection *, child, &layer_collection->layer_collections) {
935  }
936 }
937 
939 {
940  if (cumap == NULL) {
941  return;
942  }
943 
944 #define CUMA_EXTEND_EXTRAPOLATE_OLD 1
945  for (int curve_map_index = 0; curve_map_index < 4; curve_map_index++) {
946  CurveMap *cuma = &cumap->cm[curve_map_index];
947  if (cuma->flag & CUMA_EXTEND_EXTRAPOLATE_OLD) {
948  cumap->flag |= CUMA_EXTEND_EXTRAPOLATE;
949  return;
950  }
951  }
952 #undef CUMA_EXTEND_EXTRAPOLATE_OLD
953 }
954 
955 /* Util version to walk over all CurveMappings in the given `bmain` */
956 static void do_version_curvemapping_walker(Main *bmain, void (*callback)(CurveMapping *cumap))
957 {
958  LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
960 
963  }
964 
965  if (scene->ed != NULL) {
966  LISTBASE_FOREACH (Sequence *, seq, &scene->ed->seqbase) {
967  LISTBASE_FOREACH (SequenceModifierData *, smd, &seq->modifiers) {
968  const SequenceModifierTypeInfo *smti = SEQ_modifier_type_info_get(smd->type);
969 
970  if (smti) {
971  if (smd->type == seqModifierType_Curves) {
973  callback(&cmd->curve_mapping);
974  }
975  else if (smd->type == seqModifierType_HueCorrect) {
977  callback(&hcmd->curve_mapping);
978  }
979  }
980  }
981  }
982  }
983 
984  /* toolsettings */
986  if (ts->vpaint) {
988  }
989  if (ts->wpaint) {
991  }
992  if (ts->sculpt) {
994  }
995  if (ts->uvsculpt) {
997  }
998  if (ts->gp_paint) {
1000  }
1001  if (ts->gp_interpolate.custom_ipo) {
1003  }
1004  if (ts->gp_sculpt.cur_falloff) {
1006  }
1007  if (ts->gp_sculpt.cur_primitive) {
1009  }
1011  }
1012 
1013  FOREACH_NODETREE_BEGIN (bmain, node_tree, id) {
1014  LISTBASE_FOREACH (bNode *, node, &node_tree->nodes) {
1015  if (ELEM(node->type,
1020  CMP_NODE_TIME,
1024  callback((CurveMapping *)node->storage);
1025  }
1026  }
1027  }
1029 
1030  LISTBASE_FOREACH (Light *, light, &bmain->lights) {
1031  if (light->curfalloff) {
1032  callback(light->curfalloff);
1033  }
1034  }
1035 
1036  LISTBASE_FOREACH (Brush *, brush, &bmain->brushes) {
1037  if (brush->curve) {
1038  callback(brush->curve);
1039  }
1040  if (brush->gpencil_settings) {
1041  if (brush->gpencil_settings->curve_sensitivity) {
1042  callback(brush->gpencil_settings->curve_sensitivity);
1043  }
1044  if (brush->gpencil_settings->curve_strength) {
1045  callback(brush->gpencil_settings->curve_strength);
1046  }
1047  if (brush->gpencil_settings->curve_jitter) {
1048  callback(brush->gpencil_settings->curve_jitter);
1049  }
1050  }
1051  }
1052 
1053  LISTBASE_FOREACH (ParticleSettings *, part, &bmain->particles) {
1054  if (part->clumpcurve) {
1055  callback(part->clumpcurve);
1056  }
1057  if (part->roughcurve) {
1058  callback(part->roughcurve);
1059  }
1060  if (part->twistcurve) {
1061  callback(part->twistcurve);
1062  }
1063  }
1064 
1065  /* Object */
1066  LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
1067  /* Object modifiers */
1068  LISTBASE_FOREACH (ModifierData *, md, &ob->modifiers) {
1069  if (md->type == eModifierType_Hook) {
1070  HookModifierData *hmd = (HookModifierData *)md;
1071 
1072  if (hmd->curfalloff) {
1073  callback(hmd->curfalloff);
1074  }
1075  }
1076  else if (md->type == eModifierType_Warp) {
1077  WarpModifierData *tmd = (WarpModifierData *)md;
1078  if (tmd->curfalloff) {
1079  callback(tmd->curfalloff);
1080  }
1081  }
1082  else if (md->type == eModifierType_WeightVGEdit) {
1084 
1085  if (wmd->cmap_curve) {
1086  callback(wmd->cmap_curve);
1087  }
1088  }
1089  }
1090  /* Grease pencil modifiers */
1091  LISTBASE_FOREACH (ModifierData *, md, &ob->greasepencil_modifiers) {
1092  if (md->type == eGpencilModifierType_Thick) {
1094 
1095  if (gpmd->curve_thickness) {
1096  callback(gpmd->curve_thickness);
1097  }
1098  }
1099  else if (md->type == eGpencilModifierType_Hook) {
1101 
1102  if (gpmd->curfalloff) {
1103  callback(gpmd->curfalloff);
1104  }
1105  }
1106  else if (md->type == eGpencilModifierType_Noise) {
1108 
1109  if (gpmd->curve_intensity) {
1110  callback(gpmd->curve_intensity);
1111  }
1112  }
1113  else if (md->type == eGpencilModifierType_Tint) {
1115 
1116  if (gpmd->curve_intensity) {
1117  callback(gpmd->curve_intensity);
1118  }
1119  }
1120  else if (md->type == eGpencilModifierType_Smooth) {
1122 
1123  if (gpmd->curve_intensity) {
1124  callback(gpmd->curve_intensity);
1125  }
1126  }
1127  else if (md->type == eGpencilModifierType_Color) {
1129 
1130  if (gpmd->curve_intensity) {
1131  callback(gpmd->curve_intensity);
1132  }
1133  }
1134  else if (md->type == eGpencilModifierType_Opacity) {
1136 
1137  if (gpmd->curve_intensity) {
1138  callback(gpmd->curve_intensity);
1139  }
1140  }
1141  }
1142  }
1143 
1144  /* Free Style */
1147  switch (m->type) {
1150  break;
1153  break;
1156  break;
1157  case LS_MODIFIER_MATERIAL:
1159  break;
1160  case LS_MODIFIER_TANGENT:
1162  break;
1163  case LS_MODIFIER_NOISE:
1165  break;
1168  break;
1171  break;
1172  }
1173  }
1174 
1176  switch (m->type) {
1179  break;
1182  break;
1185  break;
1186  case LS_MODIFIER_MATERIAL:
1188  break;
1189  case LS_MODIFIER_TANGENT:
1191  break;
1194  break;
1197  break;
1198  }
1199  }
1200  }
1201 }
1202 
1204  struct FCurve *fcu,
1205  void *UNUSED(user_data))
1206 {
1207  if (fcu->rna_path == NULL || !STREQ(fcu->rna_path, "hide")) {
1208  return;
1209  }
1210 
1211  MEM_freeN(fcu->rna_path);
1212  fcu->rna_path = BLI_strdupn("hide_viewport", 13);
1213 }
1214 
1216 {
1217  bool use_collection_compat_28 = true;
1218 
1219  if (!MAIN_VERSION_ATLEAST(bmain, 280, 0)) {
1220  use_collection_compat_28 = false;
1221 
1222  /* Convert group layer visibility flags to hidden nested collection. */
1223  for (Collection *collection = bmain->collections.first; collection;
1224  collection = collection->id.next) {
1225  /* Add fake user for all existing groups. */
1226  id_fake_user_set(&collection->id);
1227 
1229  continue;
1230  }
1231 
1232  Collection *hidden_collection_array[20] = {NULL};
1233  for (CollectionObject *cob = collection->gobject.first, *cob_next = NULL; cob;
1234  cob = cob_next) {
1235  cob_next = cob->next;
1236  Object *ob = cob->ob;
1237 
1238  if (!(ob->lay & collection->layer)) {
1239  /* Find or create hidden collection matching object's first layer. */
1240  Collection **collection_hidden = NULL;
1241  int coll_idx = 0;
1242  for (; coll_idx < 20; coll_idx++) {
1243  if (ob->lay & (1 << coll_idx)) {
1244  collection_hidden = &hidden_collection_array[coll_idx];
1245  break;
1246  }
1247  }
1248  if (collection_hidden == NULL) {
1249  /* This should never happen (objects are always supposed to be instantiated in a
1250  * scene), but it does sometimes, see e.g. T81168.
1251  * Just put them in first hidden collection in those cases. */
1252  collection_hidden = &hidden_collection_array[0];
1253  }
1254 
1255  if (*collection_hidden == NULL) {
1256  char name[MAX_ID_NAME];
1257  BLI_snprintf(name, sizeof(name), DATA_("Hidden %d"), coll_idx + 1);
1258  *collection_hidden = BKE_collection_add(bmain, collection, name);
1259  (*collection_hidden)->flag |= COLLECTION_RESTRICT_VIEWPORT |
1261  }
1262 
1263  BKE_collection_object_add(bmain, *collection_hidden, ob);
1264  BKE_collection_object_remove(bmain, collection, ob, true);
1265  }
1266  }
1267  }
1268 
1269  /* We need to assign lib pointer to generated hidden collections *after* all have been
1270  * created, otherwise we'll end up with several data-blocks sharing same name/library,
1271  * which is FORBIDDEN! Note: we need this to be recursive, since a child collection may be
1272  * sorted before its parent in bmain. */
1273  for (Collection *collection = bmain->collections.first; collection != NULL;
1274  collection = collection->id.next) {
1276  }
1277 
1278  /* Convert layers to collections. */
1279  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
1281  }
1282  }
1283 
1284  if (!MAIN_VERSION_ATLEAST(bmain, 280, 0)) {
1285  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
1286  /* same render-layer as do_version_workspaces_after_lib_link will activate,
1287  * so same layer as BKE_view_layer_default_view would return */
1288  ViewLayer *layer = screen->scene->view_layers.first;
1289 
1290  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
1291  LISTBASE_FOREACH (SpaceLink *, space, &area->spacedata) {
1292  if (space->spacetype == SPACE_OUTLINER) {
1293  SpaceOutliner *space_outliner = (SpaceOutliner *)space;
1294 
1295  space_outliner->outlinevis = SO_VIEW_LAYER;
1296 
1297  if (BLI_listbase_count_at_most(&layer->layer_collections, 2) == 1) {
1298  if (space_outliner->treestore == NULL) {
1299  space_outliner->treestore = BLI_mempool_create(
1300  sizeof(TreeStoreElem), 1, 512, BLI_MEMPOOL_ALLOW_ITER);
1301  }
1302 
1303  /* Create a tree store element for the collection. This is normally
1304  * done in check_persistent (outliner_tree.c), but we need to access
1305  * it here :/ (expand element if it's the only one) */
1306  TreeStoreElem *tselem = BLI_mempool_calloc(space_outliner->treestore);
1307  tselem->type = TSE_LAYER_COLLECTION;
1308  tselem->id = layer->layer_collections.first;
1309  tselem->nr = tselem->used = 0;
1310  tselem->flag &= ~TSE_CLOSED;
1311  }
1312  }
1313  }
1314  }
1315  }
1316  }
1317 
1318  if (!MAIN_VERSION_ATLEAST(bmain, 280, 0)) {
1319  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
1320  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
1321  LISTBASE_FOREACH (SpaceLink *, space, &area->spacedata) {
1322  if (space->spacetype == SPACE_IMAGE) {
1323  SpaceImage *sima = (SpaceImage *)space;
1324  if ((sima) && (sima->gpd)) {
1325  sima->gpd->flag |= GP_DATA_ANNOTATIONS;
1327  }
1328  }
1329  if (space->spacetype == SPACE_CLIP) {
1330  SpaceClip *spclip = (SpaceClip *)space;
1331  MovieClip *clip = spclip->clip;
1332  if ((clip) && (clip->gpd)) {
1333  clip->gpd->flag |= GP_DATA_ANNOTATIONS;
1335  }
1336  }
1337  }
1338  }
1339  }
1340  }
1341 
1342  /* New workspace design */
1343  if (!MAIN_VERSION_ATLEAST(bmain, 280, 1)) {
1345  }
1346 
1347  if (!MAIN_VERSION_ATLEAST(bmain, 280, 2)) {
1348  /* Cleanup any remaining SceneRenderLayer data for files that were created
1349  * with Blender 2.8 before the SceneRenderLayer > RenderLayer refactor. */
1350  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
1351  LISTBASE_FOREACH (SceneRenderLayer *, srl, &scene->r.layers) {
1352  if (srl->prop) {
1353  IDP_FreeProperty(srl->prop);
1354  }
1355  BKE_freestyle_config_free(&srl->freestyleConfig, true);
1356  }
1357  BLI_freelistN(&scene->r.layers);
1358  }
1359  }
1360 
1361  if (!MAIN_VERSION_ATLEAST(bmain, 280, 3)) {
1362  /* Due to several changes to particle RNA and draw code particles from older files may
1363  * no longer be visible.
1364  * Here we correct this by setting a default draw size for those files. */
1365  for (Object *object = bmain->objects.first; object; object = object->id.next) {
1366  LISTBASE_FOREACH (ParticleSystem *, psys, &object->particlesystem) {
1367  if (psys->part->draw_size == 0.0f) {
1368  psys->part->draw_size = 0.1f;
1369  }
1370  }
1371  }
1372  }
1373 
1374  if (!MAIN_VERSION_ATLEAST(bmain, 280, 4)) {
1375  for (Object *object = bmain->objects.first; object; object = object->id.next) {
1376  if (object->particlesystem.first) {
1377  object->duplicator_visibility_flag = OB_DUPLI_FLAG_VIEWPORT;
1378  LISTBASE_FOREACH (ParticleSystem *, psys, &object->particlesystem) {
1379  if (psys->part->draw & PART_DRAW_EMITTER) {
1380  object->duplicator_visibility_flag |= OB_DUPLI_FLAG_RENDER;
1381  break;
1382  }
1383  }
1384  }
1385  else if (object->transflag & OB_DUPLI) {
1386  object->duplicator_visibility_flag = OB_DUPLI_FLAG_VIEWPORT;
1387  }
1388  else {
1389  object->duplicator_visibility_flag = OB_DUPLI_FLAG_VIEWPORT | OB_DUPLI_FLAG_RENDER;
1390  }
1391  }
1392 
1393  /* Cleanup deprecated flag from particle-settings data-blocks. */
1394  for (ParticleSettings *part = bmain->particles.first; part; part = part->id.next) {
1395  part->draw &= ~PART_DRAW_EMITTER;
1396  }
1397  }
1398 
1399  /* SpaceTime & SpaceLogic removal/replacing */
1400  if (!MAIN_VERSION_ATLEAST(bmain, 280, 9)) {
1401  const wmWindowManager *wm = bmain->wm.first;
1402  const Scene *scene = bmain->scenes.first;
1403 
1404  if (wm != NULL) {
1405  /* Action editors need a scene for creation. First, update active
1406  * screens using the active scene of the window they're displayed in.
1407  * Next, update remaining screens using first scene in main listbase. */
1408 
1409  LISTBASE_FOREACH (wmWindow *, win, &wm->windows) {
1410  const bScreen *screen = BKE_workspace_active_screen_get(win->workspace_hook);
1411  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
1412  if (ELEM(area->butspacetype, SPACE_TIME, SPACE_LOGIC)) {
1414 
1415  /* Don't forget to unset! */
1416  area->butspacetype = SPACE_EMPTY;
1417  }
1418  }
1419  }
1420  }
1421  if (scene != NULL) {
1422  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
1423  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
1424  if (ELEM(area->butspacetype, SPACE_TIME, SPACE_LOGIC)) {
1425  /* Areas that were already handled won't be handled again */
1427 
1428  /* Don't forget to unset! */
1429  area->butspacetype = SPACE_EMPTY;
1430  }
1431  }
1432  }
1433  }
1434  }
1435 
1436 #ifdef USE_COLLECTION_COMPAT_28
1437  if (use_collection_compat_28 && !MAIN_VERSION_ATLEAST(bmain, 280, 14)) {
1438  for (Collection *group = bmain->collections.first; group; group = group->id.next) {
1439  do_version_group_collection_to_collection(bmain, group);
1440  }
1441 
1442  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
1443  do_version_scene_collection_to_collection(bmain, scene);
1444  }
1445  }
1446 #endif
1447 
1448  /* Update Curve object Shape Key data layout to include the Radius property */
1449  if (!MAIN_VERSION_ATLEAST(bmain, 280, 23)) {
1450  for (Curve *cu = bmain->curves.first; cu; cu = cu->id.next) {
1451  if (!cu->key || cu->key->elemsize != sizeof(float[4])) {
1452  continue;
1453  }
1454 
1455  cu->key->elemstr[0] = 3; /*KEYELEM_ELEM_SIZE_CURVE*/
1456  cu->key->elemsize = sizeof(float[3]);
1457 
1458  int new_count = BKE_keyblock_curve_element_count(&cu->nurb);
1459 
1460  LISTBASE_FOREACH (KeyBlock *, block, &cu->key->block) {
1461  int old_count = block->totelem;
1462  void *old_data = block->data;
1463 
1464  if (!old_data || old_count <= 0) {
1465  continue;
1466  }
1467 
1468  block->totelem = new_count;
1469  block->data = MEM_callocN(sizeof(float[3]) * new_count, __func__);
1470 
1471  float *oldptr = old_data;
1472  float(*newptr)[3] = block->data;
1473 
1474  LISTBASE_FOREACH (Nurb *, nu, &cu->nurb) {
1475  if (nu->bezt) {
1476  BezTriple *bezt = nu->bezt;
1477 
1478  for (int a = 0; a < nu->pntsu; a++, bezt++) {
1479  if ((old_count -= 3) < 0) {
1480  memcpy(newptr, bezt->vec, sizeof(float[3][3]));
1481  newptr[3][0] = bezt->tilt;
1482  }
1483  else {
1484  memcpy(newptr, oldptr, sizeof(float[3][4]));
1485  }
1486 
1487  newptr[3][1] = bezt->radius;
1488 
1489  oldptr += 3 * 4;
1490  newptr += 4; /*KEYELEM_ELEM_LEN_BEZTRIPLE*/
1491  }
1492  }
1493  else if (nu->bp) {
1494  BPoint *bp = nu->bp;
1495 
1496  for (int a = 0; a < nu->pntsu * nu->pntsv; a++, bp++) {
1497  if (--old_count < 0) {
1498  copy_v3_v3(newptr[0], bp->vec);
1499  newptr[1][0] = bp->tilt;
1500  }
1501  else {
1502  memcpy(newptr, oldptr, sizeof(float[4]));
1503  }
1504 
1505  newptr[1][1] = bp->radius;
1506 
1507  oldptr += 4;
1508  newptr += 2; /*KEYELEM_ELEM_LEN_BPOINT*/
1509  }
1510  }
1511  }
1512 
1513  MEM_freeN(old_data);
1514  }
1515  }
1516  }
1517 
1518  /* Move B-Bone custom handle settings from bPoseChannel to Bone. */
1519  if (!MAIN_VERSION_ATLEAST(bmain, 280, 25)) {
1520  for (Object *ob = bmain->objects.first; ob; ob = ob->id.next) {
1521  bArmature *arm = ob->data;
1522 
1523  /* If it is an armature from the same file. */
1524  if (ob->pose && arm && arm->id.lib == ob->id.lib) {
1525  bool rebuild = false;
1526 
1527  LISTBASE_FOREACH (bPoseChannel *, pchan, &ob->pose->chanbase) {
1528  /* If the 2.7 flag is enabled, processing is needed. */
1529  if (pchan->bone && (pchan->bboneflag & PCHAN_BBONE_CUSTOM_HANDLES)) {
1530  /* If the settings in the Bone are not set, copy. */
1531  if (pchan->bone->bbone_prev_type == BBONE_HANDLE_AUTO &&
1532  pchan->bone->bbone_next_type == BBONE_HANDLE_AUTO &&
1533  pchan->bone->bbone_prev == NULL && pchan->bone->bbone_next == NULL) {
1534  pchan->bone->bbone_prev_type = (pchan->bboneflag & PCHAN_BBONE_CUSTOM_START_REL) ?
1537  pchan->bone->bbone_next_type = (pchan->bboneflag & PCHAN_BBONE_CUSTOM_END_REL) ?
1540 
1541  if (pchan->bbone_prev) {
1542  pchan->bone->bbone_prev = pchan->bbone_prev->bone;
1543  }
1544  if (pchan->bbone_next) {
1545  pchan->bone->bbone_next = pchan->bbone_next->bone;
1546  }
1547  }
1548 
1549  rebuild = true;
1550  pchan->bboneflag = 0;
1551  }
1552  }
1553 
1554  /* Tag pose rebuild for all objects that use this armature. */
1555  if (rebuild) {
1556  for (Object *ob2 = bmain->objects.first; ob2; ob2 = ob2->id.next) {
1557  if (ob2->pose && ob2->data == arm) {
1558  ob2->pose->flag |= POSE_RECALC;
1559  }
1560  }
1561  }
1562  }
1563  }
1564  }
1565 
1566  if (!MAIN_VERSION_ATLEAST(bmain, 280, 30)) {
1567  for (Brush *brush = bmain->brushes.first; brush; brush = brush->id.next) {
1568  if (brush->gpencil_settings != NULL) {
1569  brush->gpencil_tool = brush->gpencil_settings->brush_type;
1570  }
1571  }
1573  }
1574 
1575  if (!MAIN_VERSION_ATLEAST(bmain, 280, 38)) {
1576  /* Ensure we get valid rigidbody object/constraint data in relevant collections' objects.
1577  */
1578  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
1580 
1581  if (rbw == NULL) {
1582  continue;
1583  }
1584 
1587  }
1588  }
1589 
1590  if (!MAIN_VERSION_ATLEAST(bmain, 280, 69)) {
1591  /* Unify DOF settings (EEVEE part only) */
1592  const int SCE_EEVEE_DOF_ENABLED = (1 << 7);
1593  LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
1595  if (scene->eevee.flag & SCE_EEVEE_DOF_ENABLED) {
1596  Object *cam_ob = scene->camera;
1597  if (cam_ob && cam_ob->type == OB_CAMERA) {
1598  Camera *cam = cam_ob->data;
1599  cam->dof.flag |= CAM_DOF_ENABLED;
1600  }
1601  }
1602  }
1603  }
1604 
1605  LISTBASE_FOREACH (Camera *, camera, &bmain->cameras) {
1606  camera->dof.focus_object = camera->dof_ob;
1607  camera->dof.focus_distance = camera->dof_distance;
1608  camera->dof.aperture_fstop = camera->gpu_dof.fstop;
1609  camera->dof.aperture_rotation = camera->gpu_dof.rotation;
1610  camera->dof.aperture_ratio = camera->gpu_dof.ratio;
1611  camera->dof.aperture_blades = camera->gpu_dof.num_blades;
1612  camera->dof_ob = NULL;
1613  }
1614  }
1615 
1616  if (!MAIN_VERSION_ATLEAST(bmain, 281, 2)) {
1617  /* Replace Multiply and Additive blend mode by Alpha Blend
1618  * now that we use dualsource blending. */
1619  /* We take care of doing only nodetrees that are always part of materials
1620  * with old blending modes. */
1621  for (Material *ma = bmain->materials.first; ma; ma = ma->id.next) {
1622  bNodeTree *ntree = ma->nodetree;
1623  if (ma->blend_method == 1 /* MA_BM_ADD */) {
1624  if (ma->use_nodes) {
1626  }
1627  ma->blend_method = MA_BM_BLEND;
1628  }
1629  else if (ma->blend_method == 2 /* MA_BM_MULTIPLY */) {
1630  if (ma->use_nodes) {
1631  do_versions_material_convert_legacy_blend_mode(ntree, 2 /* MA_BM_MULTIPLY */);
1632  }
1633  ma->blend_method = MA_BM_BLEND;
1634  }
1635  }
1636 
1637  /* Update all ruler layers to set new flag. */
1638  LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
1639  bGPdata *gpd = scene->gpd;
1640  if (gpd == NULL) {
1641  continue;
1642  }
1643  LISTBASE_FOREACH (bGPDlayer *, gpl, &gpd->layers) {
1644  if (STREQ(gpl->info, "RulerData3D")) {
1645  gpl->flag |= GP_LAYER_IS_RULER;
1646  break;
1647  }
1648  }
1649  }
1650 
1651  /* This versioning could probably be done only on earlier versions, not sure however
1652  * which exact version fully deprecated tessfaces, so think we can keep that one here, no
1653  * harm to be expected anyway for being over-conservative. */
1654  for (Mesh *me = bmain->meshes.first; me != NULL; me = me->id.next) {
1655  /*check if we need to convert mfaces to mpolys*/
1656  if (me->totface && !me->totpoly) {
1657  /* temporarily switch main so that reading from
1658  * external CustomData works */
1659  Main *gmain = G_MAIN;
1660  G_MAIN = bmain;
1661 
1663 
1664  G_MAIN = gmain;
1665  }
1666 
1667  /* Deprecated, only kept for conversion. */
1669 
1670  /* Moved from do_versions because we need updated polygons for calculating normals. */
1671  if (!MAIN_VERSION_ATLEAST(bmain, 256, 6)) {
1673  }
1674  }
1675  }
1676 
1677  if (!MAIN_VERSION_ATLEAST(bmain, 282, 2)) {
1678  /* Init all Vertex/Sculpt and Weight Paint brushes. */
1679  Brush *brush;
1680  Material *ma;
1681  /* Pen Soft brush. */
1682  brush = (Brush *)rename_id_for_versioning(bmain, ID_BR, "Draw Soft", "Pencil Soft");
1683  if (brush) {
1685  }
1686  rename_id_for_versioning(bmain, ID_BR, "Draw Pencil", "Pencil");
1687  rename_id_for_versioning(bmain, ID_BR, "Draw Pen", "Pen");
1688  rename_id_for_versioning(bmain, ID_BR, "Draw Ink", "Ink Pen");
1689  rename_id_for_versioning(bmain, ID_BR, "Draw Noise", "Ink Pen Rough");
1690  rename_id_for_versioning(bmain, ID_BR, "Draw Marker", "Marker Bold");
1691  rename_id_for_versioning(bmain, ID_BR, "Draw Block", "Marker Chisel");
1692 
1693  ma = BLI_findstring(&bmain->materials, "Black", offsetof(ID, name) + 2);
1694  if (ma && ma->gp_style) {
1695  rename_id_for_versioning(bmain, ID_MA, "Black", "Solid Stroke");
1696  }
1697  ma = BLI_findstring(&bmain->materials, "Red", offsetof(ID, name) + 2);
1698  if (ma && ma->gp_style) {
1699  rename_id_for_versioning(bmain, ID_MA, "Red", "Squares Stroke");
1700  }
1701  ma = BLI_findstring(&bmain->materials, "Grey", offsetof(ID, name) + 2);
1702  if (ma && ma->gp_style) {
1703  rename_id_for_versioning(bmain, ID_MA, "Grey", "Solid Fill");
1704  }
1705  ma = BLI_findstring(&bmain->materials, "Black Dots", offsetof(ID, name) + 2);
1706  if (ma && ma->gp_style) {
1707  rename_id_for_versioning(bmain, ID_MA, "Black Dots", "Dots Stroke");
1708  }
1709 
1710  brush = BLI_findstring(&bmain->brushes, "Pencil", offsetof(ID, name) + 2);
1711 
1712  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
1714 
1715  /* Ensure new Paint modes. */
1720 
1721  /* Set default Draw brush. */
1722  if (brush != NULL) {
1723  Paint *paint = &ts->gp_paint->paint;
1724  BKE_paint_brush_set(paint, brush);
1725  /* Enable cursor by default. */
1726  paint->flags |= PAINT_SHOW_BRUSH;
1727  }
1728  }
1729  }
1730 
1731  if (!MAIN_VERSION_ATLEAST(bmain, 283, 8)) {
1732 
1733  /* During development of Blender 2.80 the "Object.hide" property was
1734  * removed, and reintroduced in 5e968a996a53 as "Object.hide_viewport". */
1735  LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
1737  }
1738 
1739  /* Reset all grease pencil brushes. */
1740  LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
1741  /* Ensure new Paint modes. */
1745  }
1746  }
1747 
1758  {
1759  /* Keep this block, even when empty. */
1760  /* Paint Brush. This ensure that the brush paints by default. Used during the development and
1761  * patch review of the initial Sculpt Vertex Colors implementation (D5975) */
1762  LISTBASE_FOREACH (Brush *, brush, &bmain->brushes) {
1763  if (brush->ob_mode & OB_MODE_SCULPT && brush->sculpt_tool == SCULPT_TOOL_PAINT) {
1764  brush->tip_roundness = 1.0f;
1765  brush->flow = 1.0f;
1766  brush->density = 1.0f;
1767  brush->tip_scale_x = 1.0f;
1768  }
1769  }
1770 
1771  /* Pose Brush with support for loose parts. */
1772  LISTBASE_FOREACH (Brush *, brush, &bmain->brushes) {
1773  if (brush->sculpt_tool == SCULPT_TOOL_POSE && brush->disconnected_distance_max == 0.0f) {
1774  brush->flag2 |= BRUSH_USE_CONNECTED_ONLY;
1775  brush->disconnected_distance_max = 0.1f;
1776  }
1777  }
1778  }
1779 }
1780 
1781 /* NOTE: This version patch is intended for versions < 2.52.2,
1782  * but was initially introduced in 2.27 already.
1783  * But in 2.79 another case generating non-unique names was discovered
1784  * (see T55668, involving Meta strips). */
1786 {
1787  for (Sequence *seq = seqbasep->first; seq != NULL; seq = seq->next) {
1789  if (seq->seqbase.first != NULL) {
1790  do_versions_seq_unique_name_all_strips(sce, &seq->seqbase);
1791  }
1792  }
1793 }
1794 
1796 {
1800  ed->recycle_max_cost = 10.0f;
1801 }
1802 
1803 /* NOLINTNEXTLINE: readability-function-size */
1805 {
1806  bool use_collection_compat_28 = true;
1807 
1808  if (!MAIN_VERSION_ATLEAST(bmain, 280, 0)) {
1809  use_collection_compat_28 = false;
1810 
1811  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
1812  scene->r.gauss = 1.5f;
1813  }
1814  }
1815 
1816  if (!MAIN_VERSION_ATLEAST(bmain, 280, 1)) {
1817  if (!DNA_struct_elem_find(fd->filesdna, "Lamp", "float", "bleedexp")) {
1818  for (Light *la = bmain->lights.first; la; la = la->id.next) {
1819  la->bleedexp = 2.5f;
1820  }
1821  }
1822 
1823  if (!DNA_struct_elem_find(fd->filesdna, "GPUDOFSettings", "float", "ratio")) {
1824  for (Camera *ca = bmain->cameras.first; ca; ca = ca->id.next) {
1825  ca->gpu_dof.ratio = 1.0f;
1826  }
1827  }
1828 
1829  /* MTexPoly now removed. */
1830  if (DNA_struct_find(fd->filesdna, "MTexPoly")) {
1831  for (Mesh *me = bmain->meshes.first; me; me = me->id.next) {
1832  /* If we have UV's, so this file will have MTexPoly layers too! */
1833  if (me->mloopuv != NULL) {
1834  CustomData_update_typemap(&me->pdata);
1835  CustomData_free_layers(&me->pdata, CD_MTEXPOLY, me->totpoly);
1837  }
1838  }
1839  }
1840  }
1841 
1842  if (!MAIN_VERSION_ATLEAST(bmain, 280, 2)) {
1843  if (!DNA_struct_elem_find(fd->filesdna, "Lamp", "float", "cascade_max_dist")) {
1844  for (Light *la = bmain->lights.first; la; la = la->id.next) {
1845  la->cascade_max_dist = 1000.0f;
1846  la->cascade_count = 4;
1847  la->cascade_exponent = 0.8f;
1848  la->cascade_fade = 0.1f;
1849  }
1850  }
1851 
1852  if (!DNA_struct_elem_find(fd->filesdna, "Lamp", "float", "contact_dist")) {
1853  for (Light *la = bmain->lights.first; la; la = la->id.next) {
1854  la->contact_dist = 0.2f;
1855  la->contact_bias = 0.03f;
1856  la->contact_spread = 0.2f;
1857  la->contact_thickness = 0.2f;
1858  }
1859  }
1860 
1861  if (!DNA_struct_elem_find(fd->filesdna, "LightProbe", "float", "vis_bias")) {
1862  for (LightProbe *probe = bmain->lightprobes.first; probe; probe = probe->id.next) {
1863  probe->vis_bias = 1.0f;
1864  probe->vis_blur = 0.2f;
1865  }
1866  }
1867 
1868  typedef enum eNTreeDoVersionErrors {
1869  NTREE_DOVERSION_NO_ERROR = 0,
1870  NTREE_DOVERSION_NEED_OUTPUT = (1 << 0),
1871  NTREE_DOVERSION_TRANSPARENCY_EMISSION = (1 << 1),
1872  } eNTreeDoVersionErrors;
1873 
1874  /* Eevee shader nodes renamed because of the output node system.
1875  * Note that a new output node is not being added here, because it would be overkill
1876  * to handle this case in lib_verify_nodetree.
1877  *
1878  * Also, metallic node is now unified into the principled node. */
1879  eNTreeDoVersionErrors error = NTREE_DOVERSION_NO_ERROR;
1880 
1881  FOREACH_NODETREE_BEGIN (bmain, ntree, id) {
1882  if (ntree->type == NTREE_SHADER) {
1884  if (node->type == 194 /* SH_NODE_EEVEE_METALLIC */ &&
1885  STREQ(node->idname, "ShaderNodeOutputMetallic")) {
1886  BLI_strncpy(node->idname, "ShaderNodeEeveeMetallic", sizeof(node->idname));
1887  error |= NTREE_DOVERSION_NEED_OUTPUT;
1888  }
1889 
1890  else if (node->type == SH_NODE_EEVEE_SPECULAR &&
1891  STREQ(node->idname, "ShaderNodeOutputSpecular")) {
1892  BLI_strncpy(node->idname, "ShaderNodeEeveeSpecular", sizeof(node->idname));
1893  error |= NTREE_DOVERSION_NEED_OUTPUT;
1894  }
1895 
1896  else if (node->type == 196 /* SH_NODE_OUTPUT_EEVEE_MATERIAL */ &&
1897  STREQ(node->idname, "ShaderNodeOutputEeveeMaterial")) {
1898  node->type = SH_NODE_OUTPUT_MATERIAL;
1899  BLI_strncpy(node->idname, "ShaderNodeOutputMaterial", sizeof(node->idname));
1900  }
1901 
1902  else if (node->type == 194 /* SH_NODE_EEVEE_METALLIC */ &&
1903  STREQ(node->idname, "ShaderNodeEeveeMetallic")) {
1904  node->type = SH_NODE_BSDF_PRINCIPLED;
1905  BLI_strncpy(node->idname, "ShaderNodeBsdfPrincipled", sizeof(node->idname));
1906  node->custom1 = SHD_GLOSSY_MULTI_GGX;
1907  error |= NTREE_DOVERSION_TRANSPARENCY_EMISSION;
1908  }
1909  }
1910  }
1911  }
1913 
1914  if (error & NTREE_DOVERSION_NEED_OUTPUT) {
1915  BKE_report(fd->reports, RPT_ERROR, "Eevee material conversion problem. Error in console");
1916  printf(
1917  "You need to connect Principled and Eevee Specular shader nodes to new material "
1918  "output "
1919  "nodes.\n");
1920  }
1921 
1922  if (error & NTREE_DOVERSION_TRANSPARENCY_EMISSION) {
1923  BKE_report(fd->reports, RPT_ERROR, "Eevee material conversion problem. Error in console");
1924  printf(
1925  "You need to combine transparency and emission shaders to the converted Principled "
1926  "shader nodes.\n");
1927  }
1928 
1929 #ifdef USE_COLLECTION_COMPAT_28
1930  if (use_collection_compat_28 &&
1931  (DNA_struct_elem_find(fd->filesdna, "ViewLayer", "FreestyleConfig", "freestyle_config") ==
1932  false) &&
1933  DNA_struct_elem_find(fd->filesdna, "Scene", "ListBase", "view_layers")) {
1934  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
1935  ViewLayer *view_layer;
1936  for (view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) {
1937  view_layer->flag |= VIEW_LAYER_FREESTYLE;
1938  view_layer->layflag = 0x7FFF; /* solid ztra halo edge strand */
1939  view_layer->passflag = SCE_PASS_COMBINED | SCE_PASS_Z;
1940  view_layer->pass_alpha_threshold = 0.5f;
1942  }
1943  }
1944  }
1945 #endif
1946 
1947  {
1948  /* Init grease pencil edit line color */
1949  if (!DNA_struct_elem_find(fd->filesdna, "bGPdata", "float", "line_color[4]")) {
1950  for (bGPdata *gpd = bmain->gpencils.first; gpd; gpd = gpd->id.next) {
1951  ARRAY_SET_ITEMS(gpd->line_color, 0.6f, 0.6f, 0.6f, 0.5f);
1952  }
1953  }
1954 
1955  /* Init grease pencil pixel size factor */
1956  if (!DNA_struct_elem_find(fd->filesdna, "bGPdata", "float", "pixfactor")) {
1957  for (bGPdata *gpd = bmain->gpencils.first; gpd; gpd = gpd->id.next) {
1958  gpd->pixfactor = GP_DEFAULT_PIX_FACTOR;
1959  }
1960  }
1961 
1962  /* Grease pencil multiframe falloff curve */
1963  if (!DNA_struct_elem_find(
1964  fd->filesdna, "GP_Sculpt_Settings", "CurveMapping", "cur_falloff")) {
1965  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
1966  /* sculpt brushes */
1968  if ((gset) && (gset->cur_falloff == NULL)) {
1969  gset->cur_falloff = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
1972  &gset->cur_falloff->clipr,
1975  }
1976  }
1977  }
1978  }
1979 
1980  /* 2.79 style Maintain Volume mode. */
1981  LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
1983  if (ob->pose) {
1984  LISTBASE_FOREACH (bPoseChannel *, pchan, &ob->pose->chanbase) {
1986  }
1987  }
1988  }
1989  }
1990 
1991 #ifdef USE_COLLECTION_COMPAT_28
1992  if (use_collection_compat_28 && !MAIN_VERSION_ATLEAST(bmain, 280, 3)) {
1993  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
1994  ViewLayer *view_layer;
1995  for (view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) {
1996  do_version_view_layer_visibility(view_layer);
1997  }
1998  }
1999 
2000  for (Collection *group = bmain->collections.first; group; group = group->id.next) {
2001  if (group->view_layer != NULL) {
2002  do_version_view_layer_visibility(group->view_layer);
2003  }
2004  }
2005  }
2006 #endif
2007 
2008  if (!MAIN_VERSION_ATLEAST(bmain, 280, 3)) {
2009  /* init grease pencil grids and paper */
2010  if (!DNA_struct_elem_find(fd->filesdna, "View3DOverlay", "float", "gpencil_paper_color[3]")) {
2011  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
2012  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
2013  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
2014  if (sl->spacetype == SPACE_VIEW3D) {
2015  View3D *v3d = (View3D *)sl;
2016  v3d->overlay.gpencil_paper_opacity = 0.5f;
2017  v3d->overlay.gpencil_grid_opacity = 0.9f;
2018  }
2019  }
2020  }
2021  }
2022  }
2023  }
2024 
2025  if (!MAIN_VERSION_ATLEAST(bmain, 280, 6)) {
2026  if (DNA_struct_elem_find(fd->filesdna, "SpaceOutliner", "int", "filter") == false) {
2027  bScreen *screen;
2028  ScrArea *area;
2029  SpaceLink *sl;
2030 
2031  /* Update files using invalid (outdated) outlinevis Outliner values. */
2032  for (screen = bmain->screens.first; screen; screen = screen->id.next) {
2033  for (area = screen->areabase.first; area; area = area->next) {
2034  for (sl = area->spacedata.first; sl; sl = sl->next) {
2035  if (sl->spacetype == SPACE_OUTLINER) {
2036  SpaceOutliner *space_outliner = (SpaceOutliner *)sl;
2037 
2038  if (!ELEM(space_outliner->outlinevis,
2039  SO_SCENES,
2040  SO_LIBRARIES,
2041  SO_SEQUENCE,
2042  SO_DATA_API,
2043  SO_ID_ORPHANS)) {
2044  space_outliner->outlinevis = SO_VIEW_LAYER;
2045  }
2046  }
2047  }
2048  }
2049  }
2050  }
2051 
2052  if (!DNA_struct_elem_find(fd->filesdna, "LightProbe", "float", "intensity")) {
2053  for (LightProbe *probe = bmain->lightprobes.first; probe; probe = probe->id.next) {
2054  probe->intensity = 1.0f;
2055  }
2056  }
2057 
2058  for (Object *ob = bmain->objects.first; ob; ob = ob->id.next) {
2059  bConstraint *con, *con_next;
2060  con = ob->constraints.first;
2061  while (con) {
2062  con_next = con->next;
2063  if (con->type == 17) { /* CONSTRAINT_TYPE_RIGIDBODYJOINT */
2064  BLI_remlink(&ob->constraints, con);
2066  MEM_freeN(con);
2067  }
2068  con = con_next;
2069  }
2070  }
2071 
2072  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
2073  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
2074  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
2075  if (sl->spacetype == SPACE_VIEW3D) {
2076  View3D *v3d = (View3D *)sl;
2079 
2080  /* Assume (demo) files written with 2.8 want to show
2081  * Eevee renders in the viewport. */
2082  if (MAIN_VERSION_ATLEAST(bmain, 280, 0)) {
2083  v3d->drawtype = OB_MATERIAL;
2084  }
2085  }
2086  }
2087  }
2088  }
2089  }
2090 
2091  if (!MAIN_VERSION_ATLEAST(bmain, 280, 7)) {
2092  /* Render engine storage moved elsewhere and back during 2.8
2093  * development, we assume any files saved in 2.8 had Eevee set
2094  * as scene render engine. */
2095  if (MAIN_VERSION_ATLEAST(bmain, 280, 0)) {
2096  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
2098  }
2099  }
2100  }
2101 
2102  if (!MAIN_VERSION_ATLEAST(bmain, 280, 8)) {
2103  /* Blender Internal removal */
2104  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
2105  if (STR_ELEM(scene->r.engine, "BLENDER_RENDER", "BLENDER_GAME")) {
2107  }
2108 
2109  scene->r.bake_mode = 0;
2110  }
2111 
2112  for (Tex *tex = bmain->textures.first; tex; tex = tex->id.next) {
2113  /* Removed environment map, point-density, voxel-data, ocean textures. */
2114  if (ELEM(tex->type, 10, 14, 15, 16)) {
2115  tex->type = 0;
2116  }
2117  }
2118  }
2119 
2120  if (!MAIN_VERSION_ATLEAST(bmain, 280, 11)) {
2121 
2122  /* Remove info editor, but only if at the top of the window. */
2123  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
2124  /* Calculate window width/height from screen vertices */
2125  int win_width = 0, win_height = 0;
2126  LISTBASE_FOREACH (ScrVert *, vert, &screen->vertbase) {
2127  win_width = MAX2(win_width, vert->vec.x);
2128  win_height = MAX2(win_height, vert->vec.y);
2129  }
2130 
2131  for (ScrArea *area = screen->areabase.first, *area_next; area; area = area_next) {
2132  area_next = area->next;
2133 
2134  if (area->spacetype == SPACE_INFO) {
2135  if ((area->v2->vec.y == win_height) && (area->v1->vec.x == 0) &&
2136  (area->v4->vec.x == win_width)) {
2138 
2139  BLI_remlink(&screen->areabase, area);
2140 
2144 
2145  MEM_freeN(area);
2146  }
2147  }
2148  /* AREA_TEMP_INFO is deprecated from now on, it should only be set for info areas
2149  * which are deleted above, so don't need to unset it. Its slot/bit can be reused */
2150  }
2151  }
2152  }
2153 
2154  if (!MAIN_VERSION_ATLEAST(bmain, 280, 11)) {
2155  for (Light *la = bmain->lights.first; la; la = la->id.next) {
2156  if (la->mode & (1 << 13)) { /* LA_SHAD_RAY */
2157  la->mode |= LA_SHADOW;
2158  la->mode &= ~(1 << 13);
2159  }
2160  }
2161  }
2162 
2163  if (!MAIN_VERSION_ATLEAST(bmain, 280, 12)) {
2164  /* Remove tool property regions. */
2165  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
2166  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
2167  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
2168  if (ELEM(sl->spacetype, SPACE_VIEW3D, SPACE_CLIP)) {
2169  ListBase *regionbase = (sl == area->spacedata.first) ? &area->regionbase :
2170  &sl->regionbase;
2171 
2172  for (ARegion *region = regionbase->first, *region_next; region; region = region_next) {
2173  region_next = region->next;
2174 
2175  if (region->regiontype == RGN_TYPE_TOOL_PROPS) {
2176  BKE_area_region_free(NULL, region);
2177  BLI_freelinkN(regionbase, region);
2178  }
2179  }
2180  }
2181  }
2182  }
2183  }
2184  }
2185 
2186  if (!MAIN_VERSION_ATLEAST(bmain, 280, 13)) {
2187  /* Initialize specular factor. */
2188  if (!DNA_struct_elem_find(fd->filesdna, "Lamp", "float", "spec_fac")) {
2189  for (Light *la = bmain->lights.first; la; la = la->id.next) {
2190  la->spec_fac = 1.0f;
2191  }
2192  }
2193 
2194  /* Initialize new view3D options. */
2195  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
2196  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
2197  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
2198  if (sl->spacetype == SPACE_VIEW3D) {
2199  View3D *v3d = (View3D *)sl;
2202  copy_v3_fl(v3d->shading.single_color, 0.8f);
2203  v3d->shading.shadow_intensity = 0.5;
2204 
2205  v3d->overlay.backwire_opacity = 0.5f;
2206  v3d->overlay.normals_length = 0.1f;
2207  v3d->overlay.flag = 0;
2208  }
2209  }
2210  }
2211  }
2212  }
2213 
2214  if (!MAIN_VERSION_ATLEAST(bmain, 280, 14)) {
2215  if (!DNA_struct_elem_find(fd->filesdna, "Scene", "SceneDisplay", "display")) {
2216  /* Initialize new scene.SceneDisplay */
2217  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
2218  copy_v3_v3(scene->display.light_direction, (float[3]){-M_SQRT1_3, -M_SQRT1_3, M_SQRT1_3});
2219  }
2220  }
2221  if (!DNA_struct_elem_find(fd->filesdna, "SceneDisplay", "float", "shadow_shift")) {
2222  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
2223  scene->display.shadow_shift = 0.1;
2224  }
2225  }
2226 
2227  if (!DNA_struct_elem_find(fd->filesdna, "ToolSettings", "char", "transform_pivot_point")) {
2228  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
2230  }
2231  }
2232 
2233  if (!DNA_struct_find(fd->filesdna, "SceneEEVEE")) {
2234  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
2235  /* First set the default for all the properties. */
2236 
2240 
2241  scene->eevee.taa_samples = 16;
2243 
2244  scene->eevee.sss_samples = 7;
2246 
2247  scene->eevee.ssr_quality = 0.25f;
2248  scene->eevee.ssr_max_roughness = 0.5f;
2249  scene->eevee.ssr_thickness = 0.2f;
2250  scene->eevee.ssr_border_fade = 0.075f;
2251  scene->eevee.ssr_firefly_fac = 10.0f;
2252 
2253  scene->eevee.volumetric_start = 0.1f;
2254  scene->eevee.volumetric_end = 100.0f;
2260 
2261  scene->eevee.gtao_distance = 0.2f;
2262  scene->eevee.gtao_factor = 1.0f;
2263  scene->eevee.gtao_quality = 0.25f;
2264 
2265  scene->eevee.bokeh_max_size = 100.0f;
2266  scene->eevee.bokeh_threshold = 1.0f;
2267 
2269  scene->eevee.bloom_threshold = 0.8f;
2270  scene->eevee.bloom_knee = 0.5f;
2271  scene->eevee.bloom_intensity = 0.05f;
2272  scene->eevee.bloom_radius = 6.5f;
2273  scene->eevee.bloom_clamp = 0.0f;
2274 
2275  scene->eevee.motion_blur_samples = 8;
2277 
2278  scene->eevee.shadow_method = SHADOW_ESM;
2279  scene->eevee.shadow_cube_size = 512;
2281 
2285 
2286  /* If the file is pre-2.80 move on. */
2287  if (scene->layer_properties == NULL) {
2288  continue;
2289  }
2290 
2291  /* Now we handle eventual properties that may be set in the file. */
2292 #define EEVEE_GET_BOOL(_props, _name, _flag) \
2293  { \
2294  IDProperty *_idprop = IDP_GetPropertyFromGroup(_props, #_name); \
2295  if (_idprop != NULL) { \
2296  const int _value = IDP_Int(_idprop); \
2297  if (_value) { \
2298  scene->eevee.flag |= _flag; \
2299  } \
2300  else { \
2301  scene->eevee.flag &= ~_flag; \
2302  } \
2303  } \
2304  } \
2305  ((void)0)
2306 
2307 #define EEVEE_GET_INT(_props, _name) \
2308  { \
2309  IDProperty *_idprop = IDP_GetPropertyFromGroup(_props, #_name); \
2310  if (_idprop != NULL) { \
2311  scene->eevee._name = IDP_Int(_idprop); \
2312  } \
2313  } \
2314  ((void)0)
2315 
2316 #define EEVEE_GET_FLOAT(_props, _name) \
2317  { \
2318  IDProperty *_idprop = IDP_GetPropertyFromGroup(_props, #_name); \
2319  if (_idprop != NULL) { \
2320  scene->eevee._name = IDP_Float(_idprop); \
2321  } \
2322  } \
2323  ((void)0)
2324 
2325 #define EEVEE_GET_FLOAT_ARRAY(_props, _name, _length) \
2326  { \
2327  IDProperty *_idprop = IDP_GetPropertyFromGroup(_props, #_name); \
2328  if (_idprop != NULL) { \
2329  const float *_values = IDP_Array(_idprop); \
2330  for (int _i = 0; _i < _length; _i++) { \
2331  scene->eevee._name[_i] = _values[_i]; \
2332  } \
2333  } \
2334  } \
2335  ((void)0)
2336  const int SCE_EEVEE_DOF_ENABLED = (1 << 7);
2339  // EEVEE_GET_BOOL(props, volumetric_enable, SCE_EEVEE_VOLUMETRIC_ENABLED);
2340  EEVEE_GET_BOOL(props, volumetric_lights, SCE_EEVEE_VOLUMETRIC_LIGHTS);
2341  EEVEE_GET_BOOL(props, volumetric_shadows, SCE_EEVEE_VOLUMETRIC_SHADOWS);
2342  EEVEE_GET_BOOL(props, gtao_enable, SCE_EEVEE_GTAO_ENABLED);
2343  EEVEE_GET_BOOL(props, gtao_use_bent_normals, SCE_EEVEE_GTAO_BENT_NORMALS);
2344  EEVEE_GET_BOOL(props, gtao_bounce, SCE_EEVEE_GTAO_BOUNCE);
2345  EEVEE_GET_BOOL(props, dof_enable, SCE_EEVEE_DOF_ENABLED);
2346  EEVEE_GET_BOOL(props, bloom_enable, SCE_EEVEE_BLOOM_ENABLED);
2347  EEVEE_GET_BOOL(props, motion_blur_enable, SCE_EEVEE_MOTION_BLUR_ENABLED);
2348  EEVEE_GET_BOOL(props, shadow_high_bitdepth, SCE_EEVEE_SHADOW_HIGH_BITDEPTH);
2349  EEVEE_GET_BOOL(props, taa_reprojection, SCE_EEVEE_TAA_REPROJECTION);
2350  // EEVEE_GET_BOOL(props, sss_enable, SCE_EEVEE_SSS_ENABLED);
2351  // EEVEE_GET_BOOL(props, sss_separate_albedo, SCE_EEVEE_SSS_SEPARATE_ALBEDO);
2352  EEVEE_GET_BOOL(props, ssr_enable, SCE_EEVEE_SSR_ENABLED);
2353  EEVEE_GET_BOOL(props, ssr_refraction, SCE_EEVEE_SSR_REFRACTION);
2354  EEVEE_GET_BOOL(props, ssr_halfres, SCE_EEVEE_SSR_HALF_RESOLUTION);
2355 
2356  EEVEE_GET_INT(props, gi_diffuse_bounces);
2357  EEVEE_GET_INT(props, gi_diffuse_bounces);
2358  EEVEE_GET_INT(props, gi_cubemap_resolution);
2359  EEVEE_GET_INT(props, gi_visibility_resolution);
2360 
2361  EEVEE_GET_INT(props, taa_samples);
2362  EEVEE_GET_INT(props, taa_render_samples);
2363 
2364  EEVEE_GET_INT(props, sss_samples);
2365  EEVEE_GET_FLOAT(props, sss_jitter_threshold);
2366 
2367  EEVEE_GET_FLOAT(props, ssr_quality);
2368  EEVEE_GET_FLOAT(props, ssr_max_roughness);
2369  EEVEE_GET_FLOAT(props, ssr_thickness);
2370  EEVEE_GET_FLOAT(props, ssr_border_fade);
2371  EEVEE_GET_FLOAT(props, ssr_firefly_fac);
2372 
2373  EEVEE_GET_FLOAT(props, volumetric_start);
2374  EEVEE_GET_FLOAT(props, volumetric_end);
2375  EEVEE_GET_INT(props, volumetric_tile_size);
2376  EEVEE_GET_INT(props, volumetric_samples);
2377  EEVEE_GET_FLOAT(props, volumetric_sample_distribution);
2378  EEVEE_GET_FLOAT(props, volumetric_light_clamp);
2379  EEVEE_GET_INT(props, volumetric_shadow_samples);
2380 
2381  EEVEE_GET_FLOAT(props, gtao_distance);
2382  EEVEE_GET_FLOAT(props, gtao_factor);
2383  EEVEE_GET_FLOAT(props, gtao_quality);
2384 
2385  EEVEE_GET_FLOAT(props, bokeh_max_size);
2386  EEVEE_GET_FLOAT(props, bokeh_threshold);
2387 
2388  EEVEE_GET_FLOAT_ARRAY(props, bloom_color, 3);
2389  EEVEE_GET_FLOAT(props, bloom_threshold);
2390  EEVEE_GET_FLOAT(props, bloom_knee);
2391  EEVEE_GET_FLOAT(props, bloom_intensity);
2392  EEVEE_GET_FLOAT(props, bloom_radius);
2393  EEVEE_GET_FLOAT(props, bloom_clamp);
2394 
2395  EEVEE_GET_INT(props, motion_blur_samples);
2396  EEVEE_GET_FLOAT(props, motion_blur_shutter);
2397 
2398  EEVEE_GET_INT(props, shadow_method);
2399  EEVEE_GET_INT(props, shadow_cube_size);
2400  EEVEE_GET_INT(props, shadow_cascade_size);
2401 
2402  /* Cleanup. */
2405 
2406 #undef EEVEE_GET_FLOAT_ARRAY
2407 #undef EEVEE_GET_FLOAT
2408 #undef EEVEE_GET_INT
2409 #undef EEVEE_GET_BOOL
2410  }
2411  }
2412 
2413  if (!MAIN_VERSION_ATLEAST(bmain, 280, 15)) {
2414  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
2418  }
2419 
2420  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
2421  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
2422  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
2423  if (sl->spacetype == SPACE_OUTLINER) {
2424  SpaceOutliner *space_outliner = (SpaceOutliner *)sl;
2425  space_outliner->filter_id_type = ID_GR;
2426  space_outliner->outlinevis = SO_VIEW_LAYER;
2427  }
2428  }
2429  }
2430  }
2431 
2432  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
2433  switch (scene->toolsettings->snap_mode) {
2434  case 0:
2436  break;
2437  case 1:
2439  break;
2440  case 2:
2442  break;
2443  case 3:
2445  break;
2446  case 4:
2448  break;
2449  }
2450  switch (scene->toolsettings->snap_node_mode) {
2451  case 5:
2453  break;
2454  case 6:
2456  break;
2457  case 7:
2459  break;
2460  case 8:
2462  break;
2463  }
2464  switch (scene->toolsettings->snap_uv_mode) {
2465  case 0:
2467  break;
2468  case 1:
2470  break;
2471  }
2472  }
2473 
2474  ParticleSettings *part;
2475  for (part = bmain->particles.first; part; part = part->id.next) {
2477  part->shape = 0.0f;
2478  part->rad_root = 1.0f;
2479  part->rad_tip = 0.0f;
2480  part->rad_scale = 0.01f;
2481  }
2482  }
2483  }
2484 
2485  if (!MAIN_VERSION_ATLEAST(bmain, 280, 18)) {
2486  if (!DNA_struct_elem_find(fd->filesdna, "Material", "float", "roughness")) {
2487  for (Material *mat = bmain->materials.first; mat; mat = mat->id.next) {
2488  if (mat->use_nodes) {
2489  if (MAIN_VERSION_ATLEAST(bmain, 280, 0)) {
2490  mat->roughness = mat->gloss_mir;
2491  }
2492  else {
2493  mat->roughness = 0.25f;
2494  }
2495  }
2496  else {
2497  mat->roughness = 1.0f - mat->gloss_mir;
2498  }
2499  mat->metallic = mat->ray_mirror;
2500  }
2501 
2502  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
2503  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
2504  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
2505  if (sl->spacetype == SPACE_VIEW3D) {
2506  View3D *v3d = (View3D *)sl;
2508  }
2509  }
2510  }
2511  }
2512  }
2513 
2514  if (!DNA_struct_elem_find(fd->filesdna, "View3DShading", "float", "xray_alpha")) {
2515  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
2516  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
2517  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
2518  if (sl->spacetype == SPACE_VIEW3D) {
2519  View3D *v3d = (View3D *)sl;
2520  v3d->shading.xray_alpha = 0.5f;
2521  }
2522  }
2523  }
2524  }
2525  }
2526  if (!DNA_struct_elem_find(fd->filesdna, "View3DShading", "char", "matcap[256]")) {
2528  /* when loading the internal file is loaded before the matcaps */
2529  if (default_matcap) {
2530  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
2531  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
2532  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
2533  if (sl->spacetype == SPACE_VIEW3D) {
2534  View3D *v3d = (View3D *)sl;
2535  BLI_strncpy(v3d->shading.matcap, default_matcap->name, FILE_MAXFILE);
2536  }
2537  }
2538  }
2539  }
2540  }
2541  }
2542  if (!DNA_struct_elem_find(fd->filesdna, "View3DOverlay", "float", "wireframe_threshold")) {
2543  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
2544  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
2545  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
2546  if (sl->spacetype == SPACE_VIEW3D) {
2547  View3D *v3d = (View3D *)sl;
2548  v3d->overlay.wireframe_threshold = 0.5f;
2549  }
2550  }
2551  }
2552  }
2553  }
2554  if (!DNA_struct_elem_find(fd->filesdna, "View3DShading", "float", "cavity_valley_factor")) {
2555  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
2556  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
2557  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
2558  if (sl->spacetype == SPACE_VIEW3D) {
2559  View3D *v3d = (View3D *)sl;
2560  v3d->shading.cavity_valley_factor = 1.0f;
2561  v3d->shading.cavity_ridge_factor = 1.0f;
2562  }
2563  }
2564  }
2565  }
2566  }
2567  if (!DNA_struct_elem_find(fd->filesdna, "View3DOverlay", "float", "xray_alpha_bone")) {
2568  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
2569  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
2570  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
2571  if (sl->spacetype == SPACE_VIEW3D) {
2572  View3D *v3d = (View3D *)sl;
2573  v3d->overlay.xray_alpha_bone = 0.5f;
2574  }
2575  }
2576  }
2577  }
2578  }
2579  }
2580 
2581  if (!MAIN_VERSION_ATLEAST(bmain, 280, 19)) {
2582  if (!DNA_struct_elem_find(fd->filesdna, "Image", "ListBase", "renderslot")) {
2583  for (Image *ima = bmain->images.first; ima; ima = ima->id.next) {
2584  if (ima->type == IMA_TYPE_R_RESULT) {
2585  for (int i = 0; i < 8; i++) {
2586  RenderSlot *slot = MEM_callocN(sizeof(RenderSlot), "Image Render Slot Init");
2587  BLI_snprintf(slot->name, sizeof(slot->name), "Slot %d", i + 1);
2588  BLI_addtail(&ima->renderslots, slot);
2589  }
2590  }
2591  }
2592  }
2593  if (!DNA_struct_elem_find(fd->filesdna, "SpaceAction", "char", "mode_prev")) {
2594  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
2595  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
2596  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
2597  if (sl->spacetype == SPACE_ACTION) {
2598  SpaceAction *saction = (SpaceAction *)sl;
2599  /* "Dopesheet" should be default here,
2600  * unless it looks like the Action Editor was active instead. */
2601  if ((saction->mode_prev == 0) && (saction->action == NULL)) {
2602  saction->mode_prev = SACTCONT_DOPESHEET;
2603  }
2604  }
2605  }
2606  }
2607  }
2608  }
2609 
2610  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
2611  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
2612  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
2613  if (sl->spacetype == SPACE_VIEW3D) {
2614  View3D *v3d = (View3D *)sl;
2615  if (v3d->drawtype == OB_TEXTURE) {
2616  v3d->drawtype = OB_SOLID;
2619  }
2620  }
2621  }
2622  }
2623  }
2624  }
2625 
2626  if (!MAIN_VERSION_ATLEAST(bmain, 280, 21)) {
2627  for (Scene *sce = bmain->scenes.first; sce != NULL; sce = sce->id.next) {
2628  if (sce->ed != NULL && sce->ed->seqbase.first != NULL) {
2629  do_versions_seq_unique_name_all_strips(sce, &sce->ed->seqbase);
2630  }
2631  }
2632 
2633  if (!DNA_struct_elem_find(
2634  fd->filesdna, "View3DOverlay", "float", "texture_paint_mode_opacity")) {
2635  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
2636  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
2637  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
2638  if (sl->spacetype == SPACE_VIEW3D) {
2639  enum {
2640  V3D_SHOW_MODE_SHADE_OVERRIDE = (1 << 15),
2641  };
2642  View3D *v3d = (View3D *)sl;
2643  float alpha = (v3d->flag2 & V3D_SHOW_MODE_SHADE_OVERRIDE) ? 0.0f : 1.0f;
2647  }
2648  }
2649  }
2650  }
2651  }
2652 
2653  if (!DNA_struct_elem_find(fd->filesdna, "View3DShading", "char", "background_type")) {
2654  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
2655  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
2656  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
2657  if (sl->spacetype == SPACE_VIEW3D) {
2658  View3D *v3d = (View3D *)sl;
2659  copy_v3_fl(v3d->shading.background_color, 0.05f);
2660  }
2661  }
2662  }
2663  }
2664  }
2665 
2666  if (!DNA_struct_elem_find(fd->filesdna, "SceneEEVEE", "float", "gi_cubemap_draw_size")) {
2667  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
2670  }
2671  }
2672 
2673  if (!DNA_struct_elem_find(
2674  fd->filesdna, "RigidBodyWorld", "RigidBodyWorld_Shared", "*shared")) {
2675  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
2677 
2678  if (rbw == NULL) {
2679  continue;
2680  }
2681 
2682  if (rbw->shared == NULL) {
2683  rbw->shared = MEM_callocN(sizeof(*rbw->shared), "RigidBodyWorld_Shared");
2684  }
2685 
2686  /* Move shared pointers from deprecated location to current location */
2687  rbw->shared->pointcache = rbw->pointcache;
2688  rbw->shared->ptcaches = rbw->ptcaches;
2689 
2690  rbw->pointcache = NULL;
2691  BLI_listbase_clear(&rbw->ptcaches);
2692 
2693  if (rbw->shared->pointcache == NULL) {
2694  rbw->shared->pointcache = BKE_ptcache_add(&(rbw->shared->ptcaches));
2695  }
2696  }
2697  }
2698 
2699  if (!DNA_struct_elem_find(fd->filesdna, "SoftBody", "SoftBody_Shared", "*shared")) {
2700  for (Object *ob = bmain->objects.first; ob; ob = ob->id.next) {
2701  SoftBody *sb = ob->soft;
2702  if (sb == NULL) {
2703  continue;
2704  }
2705  if (sb->shared == NULL) {
2706  sb->shared = MEM_callocN(sizeof(*sb->shared), "SoftBody_Shared");
2707  }
2708 
2709  /* Move shared pointers from deprecated location to current location */
2710  sb->shared->pointcache = sb->pointcache;
2711  sb->shared->ptcaches = sb->ptcaches;
2712 
2713  sb->pointcache = NULL;
2714  BLI_listbase_clear(&sb->ptcaches);
2715  }
2716  }
2717 
2718  if (!DNA_struct_elem_find(fd->filesdna, "View3DShading", "short", "type")) {
2719  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
2720  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
2721  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
2722  if (sl->spacetype == SPACE_VIEW3D) {
2723  View3D *v3d = (View3D *)sl;
2724  if (v3d->drawtype == OB_RENDER) {
2725  v3d->drawtype = OB_SOLID;
2726  }
2727  v3d->shading.type = v3d->drawtype;
2728  v3d->shading.prev_type = OB_SOLID;
2729  }
2730  }
2731  }
2732  }
2733  }
2734 
2735  if (!DNA_struct_elem_find(fd->filesdna, "SceneDisplay", "View3DShading", "shading")) {
2736  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
2738  }
2739  }
2740  /* initialize grease pencil view data */
2741  if (!DNA_struct_elem_find(fd->filesdna, "SpaceView3D", "float", "vertex_opacity")) {
2742  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
2743  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
2744  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
2745  if (sl->spacetype == SPACE_VIEW3D) {
2746  View3D *v3d = (View3D *)sl;
2747  v3d->vertex_opacity = 1.0f;
2749  }
2750  }
2751  }
2752  }
2753  }
2754  }
2755 
2756  if (!MAIN_VERSION_ATLEAST(bmain, 280, 22)) {
2757  if (!DNA_struct_elem_find(fd->filesdna, "ToolSettings", "char", "annotate_v3d_align")) {
2758  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
2761  }
2762  }
2763  if (!DNA_struct_elem_find(fd->filesdna, "bGPDlayer", "short", "line_change")) {
2764  for (bGPdata *gpd = bmain->gpencils.first; gpd; gpd = gpd->id.next) {
2765  LISTBASE_FOREACH (bGPDlayer *, gpl, &gpd->layers) {
2766  gpl->line_change = gpl->thickness;
2767  if ((gpl->thickness < 1) || (gpl->thickness > 10)) {
2768  gpl->thickness = 3;
2769  }
2770  }
2771  }
2772  }
2773  if (!DNA_struct_elem_find(fd->filesdna, "View3DOverlay", "float", "gpencil_paper_opacity")) {
2774  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
2775  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
2776  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
2777  if (sl->spacetype == SPACE_VIEW3D) {
2778  View3D *v3d = (View3D *)sl;
2779  v3d->overlay.gpencil_paper_opacity = 0.5f;
2780  }
2781  }
2782  }
2783  }
2784  }
2785  if (!DNA_struct_elem_find(fd->filesdna, "View3DOverlay", "float", "gpencil_grid_opacity")) {
2786  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
2787  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
2788  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
2789  if (sl->spacetype == SPACE_VIEW3D) {
2790  View3D *v3d = (View3D *)sl;
2791  v3d->overlay.gpencil_grid_opacity = 0.5f;
2792  }
2793  }
2794  }
2795  }
2796  }
2797 
2798  /* default loc axis */
2799  if (!DNA_struct_elem_find(fd->filesdna, "GP_Sculpt_Settings", "int", "lock_axis")) {
2800  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
2801  /* lock axis */
2803  if (gset) {
2804  gset->lock_axis = GP_LOCKAXIS_Y;
2805  }
2806  }
2807  }
2808 
2809  /* Versioning code for Subsurf modifier. */
2810  if (!DNA_struct_elem_find(fd->filesdna, "SubsurfModifier", "short", "uv_smooth")) {
2811  for (Object *object = bmain->objects.first; object != NULL; object = object->id.next) {
2812  LISTBASE_FOREACH (ModifierData *, md, &object->modifiers) {
2813  if (md->type == eModifierType_Subsurf) {
2817  }
2818  else {
2820  }
2821  }
2822  }
2823  }
2824  }
2825 
2826  if (!DNA_struct_elem_find(fd->filesdna, "SubsurfModifier", "short", "quality")) {
2827  for (Object *object = bmain->objects.first; object != NULL; object = object->id.next) {
2828  LISTBASE_FOREACH (ModifierData *, md, &object->modifiers) {
2829  if (md->type == eModifierType_Subsurf) {
2831  smd->quality = min_ii(smd->renderLevels, 3);
2832  }
2833  }
2834  }
2835  }
2836  /* Versioning code for Multires modifier. */
2837  if (!DNA_struct_elem_find(fd->filesdna, "MultiresModifier", "short", "quality")) {
2838  for (Object *object = bmain->objects.first; object != NULL; object = object->id.next) {
2839  LISTBASE_FOREACH (ModifierData *, md, &object->modifiers) {
2840  if (md->type == eModifierType_Multires) {
2842  mmd->quality = 3;
2845  }
2846  else {
2848  }
2849  }
2850  }
2851  }
2852  }
2853 
2854  if (!DNA_struct_elem_find(fd->filesdna, "ClothSimSettings", "short", "bending_model")) {
2855  for (Object *ob = bmain->objects.first; ob; ob = ob->id.next) {
2856  LISTBASE_FOREACH (ModifierData *, md, &ob->modifiers) {
2857  ClothModifierData *clmd = NULL;
2858  if (md->type == eModifierType_Cloth) {
2859  clmd = (ClothModifierData *)md;
2860  }
2861  else if (md->type == eModifierType_ParticleSystem) {
2863  ParticleSystem *psys = psmd->psys;
2864  clmd = psys->clmd;
2865  }
2866  if (clmd != NULL) {
2868  clmd->sim_parms->tension = clmd->sim_parms->structural;
2869  clmd->sim_parms->compression = clmd->sim_parms->structural;
2870  clmd->sim_parms->shear = clmd->sim_parms->structural;
2871  clmd->sim_parms->max_tension = clmd->sim_parms->max_struct;
2872  clmd->sim_parms->max_compression = clmd->sim_parms->max_struct;
2873  clmd->sim_parms->max_shear = clmd->sim_parms->max_struct;
2875  clmd->sim_parms->tension_damp = clmd->sim_parms->Cdis;
2876  clmd->sim_parms->compression_damp = clmd->sim_parms->Cdis;
2877  clmd->sim_parms->shear_damp = clmd->sim_parms->Cdis;
2878  }
2879  }
2880  }
2881  }
2882 
2883  if (!DNA_struct_elem_find(fd->filesdna, "BrushGpencilSettings", "float", "era_strength_f")) {
2884  for (Brush *brush = bmain->brushes.first; brush; brush = brush->id.next) {
2885  if (brush->gpencil_settings != NULL) {
2886  BrushGpencilSettings *gp = brush->gpencil_settings;
2887  if (gp->brush_type == GPAINT_TOOL_ERASE) {
2888  gp->era_strength_f = 100.0f;
2889  gp->era_thickness_f = 10.0f;
2890  }
2891  }
2892  }
2893  }
2894 
2895  for (Object *ob = bmain->objects.first; ob; ob = ob->id.next) {
2896  LISTBASE_FOREACH (ModifierData *, md, &ob->modifiers) {
2897  if (md->type == eModifierType_Cloth) {
2898  ClothModifierData *clmd = (ClothModifierData *)md;
2899 
2900  if (!(clmd->sim_parms->flags & CLOTH_SIMSETTINGS_FLAG_GOAL)) {
2901  clmd->sim_parms->vgroup_mass = 0;
2902  }
2903 
2905  clmd->sim_parms->vgroup_struct = 0;
2906  clmd->sim_parms->vgroup_shear = 0;
2907  clmd->sim_parms->vgroup_bend = 0;
2908  }
2909 
2910  if (!(clmd->sim_parms->flags & CLOTH_SIMSETTINGS_FLAG_SEW)) {
2911  clmd->sim_parms->shrink_min = 0.0f;
2912  clmd->sim_parms->vgroup_shrink = 0;
2913  }
2914 
2917  }
2918  }
2919  }
2920  }
2921  }
2922 
2923  if (!MAIN_VERSION_ATLEAST(bmain, 280, 24)) {
2924  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
2925  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
2926  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
2927  if (sl->spacetype == SPACE_VIEW3D) {
2928  View3D *v3d = (View3D *)sl;
2933  }
2934  }
2935  }
2936  }
2937 
2938  if (!DNA_struct_elem_find(fd->filesdna, "ShrinkwrapModifierData", "char", "shrinkMode")) {
2939  for (Object *ob = bmain->objects.first; ob; ob = ob->id.next) {
2940  LISTBASE_FOREACH (ModifierData *, md, &ob->modifiers) {
2941  if (md->type == eModifierType_Shrinkwrap) {
2943  if (smd->shrinkOpts & MOD_SHRINKWRAP_KEEP_ABOVE_SURFACE) {
2945  smd->shrinkOpts &= ~MOD_SHRINKWRAP_KEEP_ABOVE_SURFACE;
2946  }
2947  }
2948  }
2949  }
2950  }
2951 
2952  if (!DNA_struct_elem_find(fd->filesdna, "PartDeflect", "float", "pdef_cfrict")) {
2953  for (Object *ob = bmain->objects.first; ob; ob = ob->id.next) {
2954  if (ob->pd) {
2955  ob->pd->pdef_cfrict = 5.0f;
2956  }
2957 
2958  LISTBASE_FOREACH (ModifierData *, md, &ob->modifiers) {
2959  if (md->type == eModifierType_Cloth) {
2960  ClothModifierData *clmd = (ClothModifierData *)md;
2961 
2962  clmd->coll_parms->selfepsilon = 0.015f;
2963  }
2964  }
2965  }
2966  }
2967 
2968  if (!DNA_struct_elem_find(fd->filesdna, "View3DShading", "float", "xray_alpha_wire")) {
2969  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
2970  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
2971  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
2972  if (sl->spacetype == SPACE_VIEW3D) {
2973  View3D *v3d = (View3D *)sl;
2975  }
2976  }
2977  }
2978  }
2979  }
2980  }
2981 
2982  if (!MAIN_VERSION_ATLEAST(bmain, 280, 25)) {
2983  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
2984  UnitSettings *unit = &scene->unit;
2985  if (unit->system != USER_UNIT_NONE) {
2988  }
2990  }
2991 
2992  /* gpencil grid settings */
2993  for (bGPdata *gpd = bmain->gpencils.first; gpd; gpd = gpd->id.next) {
2994  ARRAY_SET_ITEMS(gpd->grid.color, 0.5f, 0.5f, 0.5f); /* Color */
2995  ARRAY_SET_ITEMS(gpd->grid.scale, 1.0f, 1.0f); /* Scale */
2996  gpd->grid.lines = GP_DEFAULT_GRID_LINES; /* Number of lines */
2997  }
2998  }
2999 
3000  if (!MAIN_VERSION_ATLEAST(bmain, 280, 28)) {
3001  for (Mesh *mesh = bmain->meshes.first; mesh; mesh = mesh->id.next) {
3003  }
3004  }
3005 
3006  if (!MAIN_VERSION_ATLEAST(bmain, 280, 29)) {
3007  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
3008  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
3009  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
3010  if (sl->spacetype == SPACE_VIEW3D) {
3011  enum { V3D_OCCLUDE_WIRE = (1 << 14) };
3012  View3D *v3d = (View3D *)sl;
3013  if (v3d->flag2 & V3D_OCCLUDE_WIRE) {
3015  v3d->flag2 &= ~V3D_OCCLUDE_WIRE;
3016  }
3017  }
3018  }
3019  }
3020  }
3021 
3022  /* Files stored pre 2.5 (possibly re-saved with newer versions) may have non-visible
3023  * spaces without a header (visible/active ones are properly versioned).
3024  * Multiple version patches below assume there's always a header though. So inserting this
3025  * patch in-between older ones to add a header when needed.
3026  *
3027  * From here on it should be fine to assume there always is a header.
3028  */
3029  if (!MAIN_VERSION_ATLEAST(bmain, 283, 1)) {
3030  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
3031  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
3032  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
3033  ListBase *regionbase = (sl == area->spacedata.first) ? &area->regionbase :
3034  &sl->regionbase;
3035  ARegion *region_header = do_versions_find_region_or_null(regionbase, RGN_TYPE_HEADER);
3036 
3037  if (!region_header) {
3038  /* Headers should always be first in the region list, except if there's also a
3039  * tool-header. These were only introduced in later versions though, so should be
3040  * fine to always insert headers first. */
3042 
3044  "header 2.83.1 versioning");
3045  region->alignment = (U.uiflag & USER_HEADER_BOTTOM) ? RGN_ALIGN_BOTTOM :
3046  RGN_ALIGN_TOP;
3047  BLI_addhead(regionbase, region);
3048  }
3049  }
3050  }
3051  }
3052  }
3053 
3054  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
3055  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
3056  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
3057  if (sl->spacetype == SPACE_PROPERTIES) {
3058  ListBase *regionbase = (sl == area->spacedata.first) ? &area->regionbase :
3059  &sl->regionbase;
3060  ARegion *region = MEM_callocN(sizeof(ARegion), "navigation bar for properties");
3061  ARegion *region_header = NULL;
3062 
3063  for (region_header = regionbase->first; region_header;
3064  region_header = region_header->next) {
3065  if (region_header->regiontype == RGN_TYPE_HEADER) {
3066  break;
3067  }
3068  }
3069  BLI_assert(region_header);
3070 
3071  BLI_insertlinkafter(regionbase, region_header, region);
3072 
3073  region->regiontype = RGN_TYPE_NAV_BAR;
3074  region->alignment = RGN_ALIGN_LEFT;
3075  }
3076  }
3077  }
3078  }
3079 
3080  /* grease pencil fade layer opacity */
3081  if (!DNA_struct_elem_find(fd->filesdna, "View3DOverlay", "float", "gpencil_fade_layer")) {
3082  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
3083  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
3084  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
3085  if (sl->spacetype == SPACE_VIEW3D) {
3086  View3D *v3d = (View3D *)sl;
3087  v3d->overlay.gpencil_fade_layer = 0.5f;
3088  }
3089  }
3090  }
3091  }
3092  }
3093  }
3094 
3095  if (!MAIN_VERSION_ATLEAST(bmain, 280, 30)) {
3096  /* grease pencil main material show switches */
3097  for (Material *mat = bmain->materials.first; mat; mat = mat->id.next) {
3098  if (mat->gp_style) {
3099  mat->gp_style->flag |= GP_MATERIAL_STROKE_SHOW;
3100  mat->gp_style->flag |= GP_MATERIAL_FILL_SHOW;
3101  }
3102  }
3103  }
3104 
3105  if (!MAIN_VERSION_ATLEAST(bmain, 280, 33)) {
3106 
3107  if (!DNA_struct_elem_find(fd->filesdna, "SceneEEVEE", "float", "overscan")) {
3108  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
3109  scene->eevee.overscan = 3.0f;
3110  }
3111  }
3112 
3113  for (Light *la = bmain->lights.first; la; la = la->id.next) {
3114  /* Removed Hemi lights. */
3115  if (!ELEM(la->type, LA_LOCAL, LA_SUN, LA_SPOT, LA_AREA)) {
3116  la->type = LA_SUN;
3117  }
3118  }
3119 
3120  if (!DNA_struct_elem_find(fd->filesdna, "SceneEEVEE", "float", "light_threshold")) {
3121  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
3122  scene->eevee.light_threshold = 0.01f;
3123  }
3124  }
3125 
3126  if (!DNA_struct_elem_find(fd->filesdna, "SceneEEVEE", "float", "gi_irradiance_smoothing")) {
3127  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
3129  }
3130  }
3131 
3132  if (!DNA_struct_elem_find(fd->filesdna, "SceneEEVEE", "float", "gi_filter_quality")) {
3133  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
3134  scene->eevee.gi_filter_quality = 1.0f;
3135  }
3136  }
3137 
3138  if (!DNA_struct_elem_find(fd->filesdna, "Lamp", "float", "att_dist")) {
3139  for (Light *la = bmain->lights.first; la; la = la->id.next) {
3140  la->att_dist = la->clipend;
3141  }
3142  }
3143 
3144  if (!DNA_struct_elem_find(fd->filesdna, "Brush", "char", "weightpaint_tool")) {
3145  /* Magic defines from old files (2.7x) */
3146 
3147 #define PAINT_BLEND_MIX 0
3148 #define PAINT_BLEND_ADD 1
3149 #define PAINT_BLEND_SUB 2
3150 #define PAINT_BLEND_MUL 3
3151 #define PAINT_BLEND_BLUR 4
3152 #define PAINT_BLEND_LIGHTEN 5
3153 #define PAINT_BLEND_DARKEN 6
3154 #define PAINT_BLEND_AVERAGE 7
3155 #define PAINT_BLEND_SMEAR 8
3156 #define PAINT_BLEND_COLORDODGE 9
3157 #define PAINT_BLEND_DIFFERENCE 10
3158 #define PAINT_BLEND_SCREEN 11
3159 #define PAINT_BLEND_HARDLIGHT 12
3160 #define PAINT_BLEND_OVERLAY 13
3161 #define PAINT_BLEND_SOFTLIGHT 14
3162 #define PAINT_BLEND_EXCLUSION 15
3163 #define PAINT_BLEND_LUMINOSITY 16
3164 #define PAINT_BLEND_SATURATION 17
3165 #define PAINT_BLEND_HUE 18
3166 #define PAINT_BLEND_ALPHA_SUB 19
3167 #define PAINT_BLEND_ALPHA_ADD 20
3168 
3169  for (Brush *brush = bmain->brushes.first; brush; brush = brush->id.next) {
3170  if (brush->ob_mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT)) {
3171  const char tool_init = brush->vertexpaint_tool;
3172  bool is_blend = false;
3173 
3174  {
3175  char tool = tool_init;
3176  switch (tool_init) {
3177  case PAINT_BLEND_MIX:
3178  tool = VPAINT_TOOL_DRAW;
3179  break;
3180  case PAINT_BLEND_BLUR:
3181  tool = VPAINT_TOOL_BLUR;
3182  break;
3183  case PAINT_BLEND_AVERAGE:
3184  tool = VPAINT_TOOL_AVERAGE;
3185  break;
3186  case PAINT_BLEND_SMEAR:
3187  tool = VPAINT_TOOL_SMEAR;
3188  break;
3189  default:
3190  tool = VPAINT_TOOL_DRAW;
3191  is_blend = true;
3192  break;
3193  }
3194  brush->vertexpaint_tool = tool;
3195  }
3196 
3197  if (is_blend == false) {
3198  brush->blend = IMB_BLEND_MIX;
3199  }
3200  else {
3201  short blend = IMB_BLEND_MIX;
3202  switch (tool_init) {
3203  case PAINT_BLEND_ADD:
3204  blend = IMB_BLEND_ADD;
3205  break;
3206  case PAINT_BLEND_SUB:
3207  blend = IMB_BLEND_SUB;
3208  break;
3209  case PAINT_BLEND_MUL:
3210  blend = IMB_BLEND_MUL;
3211  break;
3212  case PAINT_BLEND_LIGHTEN:
3214  break;
3215  case PAINT_BLEND_DARKEN:
3217  break;
3220  break;
3223  break;
3224  case PAINT_BLEND_SCREEN:
3226  break;
3227  case PAINT_BLEND_HARDLIGHT:
3229  break;
3230  case PAINT_BLEND_OVERLAY:
3232  break;
3233  case PAINT_BLEND_SOFTLIGHT:
3235  break;
3236  case PAINT_BLEND_EXCLUSION:
3238  break;
3241  break;
3244  break;
3245  case PAINT_BLEND_HUE:
3246  blend = IMB_BLEND_HUE;
3247  break;
3248  case PAINT_BLEND_ALPHA_SUB:
3250  break;
3251  case PAINT_BLEND_ALPHA_ADD:
3253  break;
3254  }
3255  brush->blend = blend;
3256  }
3257  }
3258  /* For now these match, in the future new items may not. */
3259  brush->weightpaint_tool = brush->vertexpaint_tool;
3260  }
3261 
3262 #undef PAINT_BLEND_MIX
3263 #undef PAINT_BLEND_ADD
3264 #undef PAINT_BLEND_SUB
3265 #undef PAINT_BLEND_MUL
3266 #undef PAINT_BLEND_BLUR
3267 #undef PAINT_BLEND_LIGHTEN
3268 #undef PAINT_BLEND_DARKEN
3269 #undef PAINT_BLEND_AVERAGE
3270 #undef PAINT_BLEND_SMEAR
3271 #undef PAINT_BLEND_COLORDODGE
3272 #undef PAINT_BLEND_DIFFERENCE
3273 #undef PAINT_BLEND_SCREEN
3274 #undef PAINT_BLEND_HARDLIGHT
3275 #undef PAINT_BLEND_OVERLAY
3276 #undef PAINT_BLEND_SOFTLIGHT
3277 #undef PAINT_BLEND_EXCLUSION
3278 #undef PAINT_BLEND_LUMINOSITY
3279 #undef PAINT_BLEND_SATURATION
3280 #undef PAINT_BLEND_HUE
3281 #undef PAINT_BLEND_ALPHA_SUB
3282 #undef PAINT_BLEND_ALPHA_ADD
3283  }
3284  }
3285 
3286  if (!MAIN_VERSION_ATLEAST(bmain, 280, 34)) {
3287  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
3288  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
3289  LISTBASE_FOREACH (SpaceLink *, slink, &area->spacedata) {
3290  if (slink->spacetype == SPACE_USERPREF) {
3291  ARegion *navigation_region = BKE_spacedata_find_region_type(
3292  slink, area, RGN_TYPE_NAV_BAR);
3293 
3294  if (!navigation_region) {
3296  ListBase *regionbase = (slink == area->spacedata.first) ? &area->regionbase :
3297  &slink->regionbase;
3298 
3299  navigation_region = MEM_callocN(sizeof(ARegion),
3300  "userpref navigation-region do_versions");
3301 
3302  /* Order matters, addhead not addtail! */
3303  BLI_insertlinkbefore(regionbase, main_region, navigation_region);
3304 
3305  navigation_region->regiontype = RGN_TYPE_NAV_BAR;
3306  navigation_region->alignment = RGN_ALIGN_LEFT;
3307  }
3308  }
3309  }
3310  }
3311  }
3312  }
3313 
3314  if (!MAIN_VERSION_ATLEAST(bmain, 280, 36)) {
3315  if (!DNA_struct_elem_find(fd->filesdna, "View3DShading", "float", "curvature_ridge_factor")) {
3316  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
3317  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
3318  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
3319  if (sl->spacetype == SPACE_VIEW3D) {
3320  View3D *v3d = (View3D *)sl;
3321  v3d->shading.curvature_ridge_factor = 1.0f;
3322  v3d->shading.curvature_valley_factor = 1.0f;
3323  }
3324  }
3325  }
3326  }
3327  }
3328 
3329  /* Rename OpenGL to Workbench. */
3330  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
3331  if (STREQ(scene->r.engine, "BLENDER_OPENGL")) {
3333  }
3334  }
3335 
3336  /* init Annotations onion skin */
3337  if (!DNA_struct_elem_find(fd->filesdna, "bGPDlayer", "int", "gstep")) {
3338  for (bGPdata *gpd = bmain->gpencils.first; gpd; gpd = gpd->id.next) {
3339  LISTBASE_FOREACH (bGPDlayer *, gpl, &gpd->layers) {
3340  ARRAY_SET_ITEMS(gpl->gcolor_prev, 0.302f, 0.851f, 0.302f);
3341  ARRAY_SET_ITEMS(gpl->gcolor_next, 0.250f, 0.1f, 1.0f);
3342  }
3343  }
3344  }
3345 
3346  /* Move studio_light selection to lookdev_light. */
3347  if (!DNA_struct_elem_find(fd->filesdna, "View3DShading", "char", "lookdev_light[256]")) {
3348  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
3349  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
3350  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
3351  if (sl->spacetype == SPACE_VIEW3D) {
3352  View3D *v3d = (View3D *)sl;
3353  memcpy(v3d->shading.lookdev_light, v3d->shading.studio_light, sizeof(char[256]));
3354  }
3355  }
3356  }
3357  }
3358  }
3359 
3360  /* Change Solid mode shadow orientation. */
3361  if (!DNA_struct_elem_find(fd->filesdna, "SceneDisplay", "float", "shadow_focus")) {
3362  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
3363  float *dir = scene->display.light_direction;
3364  SWAP(float, dir[2], dir[1]);
3365  dir[2] = -dir[2];
3366  dir[0] = -dir[0];
3367  }
3368  }
3369  }
3370 
3371  if (!MAIN_VERSION_ATLEAST(bmain, 280, 37)) {
3372  for (Camera *ca = bmain->cameras.first; ca; ca = ca->id.next) {
3373  ca->drawsize *= 2.0f;
3374  }
3375 
3376  /* Grease pencil primitive curve */
3377  if (!DNA_struct_elem_find(
3378  fd->filesdna, "GP_Sculpt_Settings", "CurveMapping", "cur_primitive")) {
3379  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
3381  if ((gset) && (gset->cur_primitive == NULL)) {
3382  gset->cur_primitive = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
3385  &gset->cur_primitive->clipr,
3388  }
3389  }
3390  }
3391  }
3392 
3393  if (!MAIN_VERSION_ATLEAST(bmain, 280, 38)) {
3394  if (DNA_struct_elem_find(fd->filesdna, "Object", "char", "empty_image_visibility_flag")) {
3395  for (Object *ob = bmain->objects.first; ob; ob = ob->id.next) {
3396  ob->empty_image_visibility_flag ^= (OB_EMPTY_IMAGE_HIDE_PERSPECTIVE |
3399  }
3400  }
3401 
3402  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
3403  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
3404  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
3405  switch (sl->spacetype) {
3406  case SPACE_IMAGE: {
3407  SpaceImage *sima = (SpaceImage *)sl;
3412  break;
3413  }
3414  case SPACE_VIEW3D: {
3415  View3D *v3d = (View3D *)sl;
3420  break;
3421  }
3422  case SPACE_OUTLINER: {
3423  SpaceOutliner *space_outliner = (SpaceOutliner *)sl;
3424  space_outliner->filter &= ~(SO_FILTER_CLEARED_1 | SO_FILTER_UNUSED_5 |
3426  space_outliner->storeflag &= ~(SO_TREESTORE_UNUSED_1);
3427  break;
3428  }
3429  case SPACE_FILE: {
3430  SpaceFile *sfile = (SpaceFile *)sl;
3431  if (sfile->params) {
3434  }
3435  break;
3436  }
3437  case SPACE_NODE: {
3438  SpaceNode *snode = (SpaceNode *)sl;
3440  break;
3441  }
3442  case SPACE_PROPERTIES: {
3443  SpaceProperties *sbuts = (SpaceProperties *)sl;
3444  sbuts->flag &= ~(SB_FLAG_UNUSED_2 | SB_FLAG_UNUSED_3);
3445  break;
3446  }
3447  case SPACE_NLA: {
3448  SpaceNla *snla = (SpaceNla *)sl;
3450  break;
3451  }
3452  }
3453  }
3454  }
3455  }
3456 
3457  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
3463 
3466 
3467  if (scene->toolsettings->sculpt) {
3470  }
3471 
3472  if (scene->ed) {
3473  Sequence *seq;
3474  SEQ_ALL_BEGIN (scene->ed, seq) {
3477  if (seq->type == SEQ_TYPE_SPEED) {
3479  s->flags &= ~(SEQ_SPEED_UNUSED_1);
3480  }
3481  }
3482  SEQ_ALL_END;
3483  }
3484  }
3485 
3486  for (World *world = bmain->worlds.first; world; world = world->id.next) {
3489  }
3490 
3491  for (Image *image = bmain->images.first; image; image = image->id.next) {
3495  }
3496 
3497  for (Object *ob = bmain->objects.first; ob; ob = ob->id.next) {
3498  ob->flag &= ~(OB_FLAG_UNUSED_11 | OB_FLAG_UNUSED_12);
3500  ob->shapeflag &= ~OB_SHAPE_FLAG_UNUSED_1;
3501  }
3502 
3503  for (Mesh *me = bmain->meshes.first; me; me = me->id.next) {
3506  }
3507 
3508  for (Material *mat = bmain->materials.first; mat; mat = mat->id.next) {
3509  mat->blend_flag &= ~(1 << 2); /* UNUSED */
3510  }
3511  }
3512 
3513  if (!MAIN_VERSION_ATLEAST(bmain, 280, 40)) {
3514  if (!DNA_struct_elem_find(fd->filesdna, "ToolSettings", "char", "snap_transform_mode_flag")) {
3515  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
3517  }
3518  }
3519 
3520  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
3521  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
3522  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
3523  switch (sl->spacetype) {
3524  case SPACE_VIEW3D: {
3525  enum { V3D_BACKFACE_CULLING = (1 << 10) };
3526  View3D *v3d = (View3D *)sl;
3527  if (v3d->flag2 & V3D_BACKFACE_CULLING) {
3528  v3d->flag2 &= ~V3D_BACKFACE_CULLING;
3530  }
3531  break;
3532  }
3533  }
3534  }
3535  }
3536  }
3537 
3538  if (!DNA_struct_find(fd->filesdna, "TransformOrientationSlot")) {
3539  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
3540  for (int i = 0; i < ARRAY_SIZE(scene->orientation_slots); i++) {
3542  }
3543  }
3544  }
3545 
3546  /* Grease pencil cutter/select segment intersection threshold */
3547  if (!DNA_struct_elem_find(fd->filesdna, "GP_Sculpt_Settings", "float", "isect_threshold")) {
3548  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
3550  if (gset) {
3551  gset->isect_threshold = 0.1f;
3552  }
3553  }
3554  }
3555 
3556  /* Fix anamorphic bokeh eevee rna limits.*/
3557  for (Camera *ca = bmain->cameras.first; ca; ca = ca->id.next) {
3558  if (ca->gpu_dof.ratio < 0.01f) {
3559  ca->gpu_dof.ratio = 0.01f;
3560  }
3561  }
3562 
3563  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
3564  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
3565  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
3566  if (sl->spacetype == SPACE_USERPREF) {
3568 
3569  if (!execute_region) {
3570  ListBase *regionbase = (sl == area->spacedata.first) ? &area->regionbase :
3571  &sl->regionbase;
3573 
3574  execute_region = MEM_callocN(sizeof(ARegion), "execute region for properties");
3575 
3576  BLI_assert(region_navbar);
3577 
3578  BLI_insertlinkafter(regionbase, region_navbar, execute_region);
3579 
3580  execute_region->regiontype = RGN_TYPE_EXECUTE;
3581  execute_region->alignment = RGN_ALIGN_BOTTOM | RGN_SPLIT_PREV;
3582  execute_region->flag |= RGN_FLAG_DYNAMIC_SIZE;
3583  }
3584  }
3585  }
3586  }
3587  }
3588  }
3589 
3590  if (!MAIN_VERSION_ATLEAST(bmain, 280, 43)) {
3591  ListBase *lb = which_libbase(bmain, ID_BR);
3593  }
3594 
3595  if (!MAIN_VERSION_ATLEAST(bmain, 280, 44)) {
3596  if (!DNA_struct_elem_find(fd->filesdna, "Material", "float", "a")) {
3597  for (Material *mat = bmain->materials.first; mat; mat = mat->id.next) {
3598  mat->a = 1.0f;
3599  }
3600  }
3601 
3602  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
3603  enum {
3604  R_ALPHAKEY = 2,
3605  };
3608  if (scene->r.alphamode == R_ALPHAKEY) {
3610  }
3612  ts->particle.flag &= ~PE_UNUSED_6;
3613  if (ts->sculpt != NULL) {
3615  }
3616  }
3617  }
3618 
3619  if (!MAIN_VERSION_ATLEAST(bmain, 280, 46)) {
3620  /* Add wireframe color. */
3621  if (!DNA_struct_elem_find(fd->filesdna, "View3DShading", "char", "wire_color_type")) {
3622  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
3623  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
3624  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
3625  if (sl->spacetype == SPACE_VIEW3D) {
3626  View3D *v3d = (View3D *)sl;
3628  }
3629  }
3630  }
3631  }
3632  }
3633 
3634  if (!DNA_struct_elem_find(fd->filesdna, "View3DCursor", "short", "rotation_mode")) {
3635  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
3638  scene->cursor.rotation_quaternion[0] = 1.0f;
3639  scene->cursor.rotation_axis[1] = 1.0f;
3640  }
3641  }
3642  }
3643  }
3644 
3645  if (!MAIN_VERSION_ATLEAST(bmain, 280, 47)) {
3646  LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
3648  if (pset->brushtype < 0) {
3649  pset->brushtype = PE_BRUSH_COMB;
3650  }
3651  }
3652 
3653  LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
3654  {
3655  enum { PARCURVE = 1, PARKEY = 2, PAR_DEPRECATED = 16 };
3656  if (ELEM(ob->partype, PARCURVE, PARKEY, PAR_DEPRECATED)) {
3657  ob->partype = PAROBJECT;
3658  }
3659  }
3660 
3661  {
3662  enum { OB_WAVE = 21, OB_LIFE = 23, OB_SECTOR = 24 };
3663  if (ELEM(ob->type, OB_WAVE, OB_LIFE, OB_SECTOR)) {
3664  ob->type = OB_EMPTY;
3665  }
3666  }
3667 
3670 
3671  ob->nlaflag &= ~(OB_ADS_UNUSED_1 | OB_ADS_UNUSED_2);
3672  }
3673 
3674  LISTBASE_FOREACH (bArmature *, arm, &bmain->armatures) {
3677  }
3678 
3679  LISTBASE_FOREACH (Text *, text, &bmain->texts) {
3680  text->flags &= ~(TXT_FLAG_UNUSED_8 | TXT_FLAG_UNUSED_9);
3681  }
3682  }
3683 
3684  if (!MAIN_VERSION_ATLEAST(bmain, 280, 48)) {
3685  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
3686  /* Those are not currently used, but are accessible through RNA API and were not
3687  * properly initialized previously. This is mere copy of #scene_init_data code. */
3688  if (scene->r.im_format.view_settings.look[0] == '\0') {
3692  }
3693 
3694  if (scene->r.bake.im_format.view_settings.look[0] == '\0') {
3698  "Filmic");
3699  }
3700  }
3701  }
3702 
3703  if (!MAIN_VERSION_ATLEAST(bmain, 280, 49)) {
3704  /* All tool names changed, reset to defaults. */
3705  for (WorkSpace *workspace = bmain->workspaces.first; workspace;
3706  workspace = workspace->id.next) {
3707  while (!BLI_listbase_is_empty(&workspace->tools)) {
3708  BKE_workspace_tool_remove(workspace, workspace->tools.first);
3709  }
3710  }
3711  }
3712 
3713  if (!MAIN_VERSION_ATLEAST(bmain, 280, 52)) {
3714  LISTBASE_FOREACH (ParticleSettings *, part, &bmain->particles) {
3715  /* Replace deprecated PART_DRAW_BB by PART_DRAW_NOT */
3716  if (part->ren_as == PART_DRAW_BB) {
3717  part->ren_as = PART_DRAW_NOT;
3718  }
3719  if (part->draw_as == PART_DRAW_BB) {
3720  part->draw_as = PART_DRAW_NOT;
3721  }
3722  }
3723 
3724  if (!DNA_struct_elem_find(fd->filesdna, "TriangulateModifierData", "int", "min_vertices")) {
3725  for (Object *ob = bmain->objects.first; ob; ob = ob->id.next) {
3726  LISTBASE_FOREACH (ModifierData *, md, &ob->modifiers) {
3727  if (md->type == eModifierType_Triangulate) {
3729  smd->min_vertices = 4;
3730  }
3731  }
3732  }
3733  }
3734 
3735  FOREACH_NODETREE_BEGIN (bmain, ntree, id) {
3736  if (ntree->type == NTREE_SHADER) {
3738  /* Fix missing version patching from earlier changes. */
3739  if (STREQ(node->idname, "ShaderNodeOutputLamp")) {
3740  STRNCPY(node->idname, "ShaderNodeOutputLight");
3741  }
3742  if (node->type == SH_NODE_BSDF_PRINCIPLED && node->custom2 == 0) {
3743  node->custom2 = SHD_SUBSURFACE_BURLEY;
3744  }
3745  }
3746  }
3747  }
3749  }
3750 
3751  if (!MAIN_VERSION_ATLEAST(bmain, 280, 53)) {
3752  for (Material *mat = bmain->materials.first; mat; mat = mat->id.next) {
3753  /* Eevee: Keep material appearance consistent with previous behavior. */
3754  if (!mat->use_nodes || !mat->nodetree || mat->blend_method == MA_BM_SOLID) {
3755  mat->blend_shadow = MA_BS_SOLID;
3756  }
3757  }
3758 
3759  /* grease pencil default animation channel color */
3760  {
3761  for (bGPdata *gpd = bmain->gpencils.first; gpd; gpd = gpd->id.next) {
3762  if (gpd->flag & GP_DATA_ANNOTATIONS) {
3763  continue;
3764  }
3765  LISTBASE_FOREACH (bGPDlayer *, gpl, &gpd->layers) {
3766  /* default channel color */
3767  ARRAY_SET_ITEMS(gpl->color, 0.2f, 0.2f, 0.2f);
3768  }
3769  }
3770  }
3771  }
3772 
3773  if (!MAIN_VERSION_ATLEAST(bmain, 280, 54)) {
3774  for (Object *ob = bmain->objects.first; ob; ob = ob->id.next) {
3775  bool is_first_subdiv = true;
3776  LISTBASE_FOREACH (ModifierData *, md, &ob->modifiers) {
3777  if (md->type == eModifierType_Subsurf) {
3779  if (is_first_subdiv) {
3781  }
3782  else {
3784  }
3785  is_first_subdiv = false;
3786  }
3787  else if (md->type == eModifierType_Multires) {
3789  if (is_first_subdiv) {
3791  }
3792  else {
3794  }
3795  is_first_subdiv = false;
3796  }
3797  }
3798  }
3799  }
3800 
3801  if (!MAIN_VERSION_ATLEAST(bmain, 280, 55)) {
3802  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
3803  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
3804  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
3805  if (sl->spacetype == SPACE_TEXT) {
3806  ListBase *regionbase = (sl == area->spacedata.first) ? &area->regionbase :
3807  &sl->regionbase;
3808 
3809  /* Remove multiple footers that were added by mistake. */
3811 
3812  /* Add footer. */
3813  ARegion *region = do_versions_add_region(RGN_TYPE_FOOTER, "footer for text");
3814  region->alignment = (U.uiflag & USER_HEADER_BOTTOM) ? RGN_ALIGN_TOP : RGN_ALIGN_BOTTOM;
3815 
3816  ARegion *region_header = do_versions_find_region(regionbase, RGN_TYPE_HEADER);
3817  BLI_insertlinkafter(regionbase, region_header, region);
3818  }
3819  }
3820  }
3821  }
3822  }
3823 
3824  if (!MAIN_VERSION_ATLEAST(bmain, 280, 56)) {
3825  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
3826  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
3827  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
3828  if (sl->spacetype == SPACE_VIEW3D) {
3829  View3D *v3d = (View3D *)sl;
3835  }
3836  }
3837  }
3838  }
3839  }
3840 
3841  if (!MAIN_VERSION_ATLEAST(bmain, 280, 57)) {
3842  /* Enable Show Interpolation in dopesheet by default. */
3843  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
3844  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
3845  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
3846  if (sl->spacetype == SPACE_ACTION) {
3847  SpaceAction *saction = (SpaceAction *)sl;
3848  if ((saction->flag & SACTION_SHOW_EXTREMES) == 0) {
3849  saction->flag |= SACTION_SHOW_INTERPOLATION;
3850  }
3851  }
3852  }
3853  }
3854  }
3855 
3856  /* init grease pencil brush gradients */
3857  if (!DNA_struct_elem_find(fd->filesdna, "BrushGpencilSettings", "float", "hardeness")) {
3858  for (Brush *brush = bmain->brushes.first; brush; brush = brush->id.next) {
3859  if (brush->gpencil_settings != NULL) {
3860  BrushGpencilSettings *gp = brush->gpencil_settings;
3861  gp->hardeness = 1.0f;
3862  copy_v2_fl(gp->aspect_ratio, 1.0f);
3863  }
3864  }
3865  }
3866 
3867  /* init grease pencil stroke gradients */
3868  if (!DNA_struct_elem_find(fd->filesdna, "bGPDstroke", "float", "hardeness")) {
3869  for (bGPdata *gpd = bmain->gpencils.first; gpd; gpd = gpd->id.next) {
3870  LISTBASE_FOREACH (bGPDlayer *, gpl, &gpd->layers) {
3871  LISTBASE_FOREACH (bGPDframe *, gpf, &gpl->frames) {
3872  LISTBASE_FOREACH (bGPDstroke *, gps, &gpf->strokes) {
3873  gps->hardeness = 1.0f;
3874  copy_v2_fl(gps->aspect_ratio, 1.0f);
3875  }
3876  }
3877  }
3878  }
3879  }
3880 
3881  /* enable the axis aligned ortho grid by default */
3882  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
3883  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
3884  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
3885  if (sl->spacetype == SPACE_VIEW3D) {
3886  View3D *v3d = (View3D *)sl;
3887  v3d->gridflag |= V3D_SHOW_ORTHO_GRID;
3888  }
3889  }
3890  }
3891  }
3892  }
3893 
3894  /* Keep un-versioned until we're finished adding space types. */
3895  {
3896  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
3897  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
3898  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
3899  ListBase *regionbase = (sl == area->spacedata.first) ? &area->regionbase :
3900  &sl->regionbase;
3901  /* All spaces that use tools must be eventually added. */
3902  ARegion *region = NULL;
3903  if (ELEM(sl->spacetype, SPACE_VIEW3D, SPACE_IMAGE, SPACE_SEQ) &&
3904  ((region = do_versions_find_region_or_null(regionbase, RGN_TYPE_TOOL_HEADER)) ==
3905  NULL)) {
3906  /* Add tool header. */
3907  region = do_versions_add_region(RGN_TYPE_TOOL_HEADER, "tool header");
3908  region->alignment = (U.uiflag & USER_HEADER_BOTTOM) ? RGN_ALIGN_BOTTOM : RGN_ALIGN_TOP;
3909 
3910  ARegion *region_header = do_versions_find_region(regionbase, RGN_TYPE_HEADER);
3911  BLI_insertlinkbefore(regionbase, region_header, region);
3912  /* Hide by default, enable for painting workspaces (startup only). */
3913  region->flag |= RGN_FLAG_HIDDEN | RGN_FLAG_HIDDEN_BY_USER;
3914  }
3915  if (region != NULL) {
3917  region->flag, region->flag & RGN_FLAG_HIDDEN_BY_USER, RGN_FLAG_HIDDEN);
3918  }
3919  }
3920  }
3921  }
3922  }
3923 
3924  if (!MAIN_VERSION_ATLEAST(bmain, 280, 60)) {
3925  if (!DNA_struct_elem_find(fd->filesdna, "bSplineIKConstraint", "short", "yScaleMode")) {
3926  for (Object *ob = bmain->objects.first; ob; ob = ob->id.next) {
3927  if (ob->pose) {
3928  LISTBASE_FOREACH (bPoseChannel *, pchan, &ob->pose->chanbase) {
3929  LISTBASE_FOREACH (bConstraint *, con, &pchan->constraints) {
3930  if (con->type == CONSTRAINT_TYPE_SPLINEIK) {
3932  if ((data->flag & CONSTRAINT_SPLINEIK_SCALE_LIMITED) == 0) {
3933  data->yScaleMode = CONSTRAINT_SPLINEIK_YS_FIT_CURVE;
3934  }
3935  }
3936  }
3937  }
3938  }
3939  }
3940  }
3941 
3942  if (!DNA_struct_elem_find(
3943  fd->filesdna, "View3DOverlay", "float", "sculpt_mode_mask_opacity")) {
3944  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
3945  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
3946  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
3947  if (sl->spacetype == SPACE_VIEW3D) {
3948  View3D *v3d = (View3D *)sl;
3949  v3d->overlay.sculpt_mode_mask_opacity = 0.75f;
3950  }
3951  }
3952  }
3953  }
3954  }
3955  if (!DNA_struct_elem_find(fd->filesdna, "SceneDisplay", "char", "render_aa")) {
3956  LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
3959  }
3960  }
3961 
3962  /* Split bbone_scalein/bbone_scaleout into x and y fields. */
3963  if (!DNA_struct_elem_find(fd->filesdna, "bPoseChannel", "float", "scale_out_y")) {
3964  /* Update armature data and pose channels. */
3965  LISTBASE_FOREACH (bArmature *, arm, &bmain->armatures) {
3966  do_version_bones_split_bbone_scale(&arm->bonebase);
3967  }
3968 
3969  LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
3970  if (ob->pose) {
3971  LISTBASE_FOREACH (bPoseChannel *, pchan, &ob->pose->chanbase) {
3972  pchan->scale_in_y = pchan->scale_in_x;
3973  pchan->scale_out_y = pchan->scale_out_x;
3974  }
3975  }
3976  }
3977 
3978  /* Update action curves and drivers. */
3979  LISTBASE_FOREACH (bAction *, act, &bmain->actions) {
3980  LISTBASE_FOREACH_MUTABLE (FCurve *, fcu, &act->curves) {
3981  do_version_bbone_scale_fcurve_fix(&act->curves, fcu);
3982  }
3983  }
3984 
3986  }
3987 
3988  for (Scene *sce = bmain->scenes.first; sce != NULL; sce = sce->id.next) {
3989  if (sce->ed != NULL) {
3991  }
3992  }
3993  }
3994 
3995  if (!MAIN_VERSION_ATLEAST(bmain, 280, 61)) {
3996  /* Added a power option to Copy Scale. */
3997  if (!DNA_struct_elem_find(fd->filesdna, "bSizeLikeConstraint", "float", "power")) {
3998  LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
3999  do_version_constraints_copy_scale_power(&ob->constraints);
4000  if (ob->pose) {
4001  LISTBASE_FOREACH (bPoseChannel *, pchan, &ob->pose->chanbase) {
4002  do_version_constraints_copy_scale_power(&pchan->constraints);
4003  }
4004  }
4005  }
4006  }
4007 
4008  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
4009  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
4010  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
4011  if (ELEM(sl->spacetype, SPACE_CLIP, SPACE_GRAPH, SPACE_SEQ)) {
4012  ListBase *regionbase = (sl == area->spacedata.first) ? &area->regionbase :
4013  &sl->regionbase;
4014 
4015  ARegion *region = NULL;
4016  if (sl->spacetype == SPACE_CLIP) {
4017  if (((SpaceClip *)sl)->view == SC_VIEW_GRAPH) {
4018  region = do_versions_find_region_or_null(regionbase, RGN_TYPE_PREVIEW);
4019  }
4020  }
4021  else {
4022  region = do_versions_find_region_or_null(regionbase, RGN_TYPE_WINDOW);
4023  }
4024 
4025  if (region != NULL) {
4026  region->v2d.scroll &= ~V2D_SCROLL_LEFT;
4027  region->v2d.scroll |= V2D_SCROLL_RIGHT;
4028  }
4029  }
4030  }
4031  }
4032  }
4033 
4034  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
4035  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
4036  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
4037  if (sl->spacetype != SPACE_OUTLINER) {
4038  continue;
4039  }
4040  SpaceOutliner *space_outliner = (SpaceOutliner *)sl;
4041  space_outliner->filter &= ~SO_FLAG_UNUSED_1;
4043  }
4044  }
4045  }
4046  }
4047 
4048  if (!MAIN_VERSION_ATLEAST(bmain, 280, 69)) {
4049  LISTBASE_FOREACH (bArmature *, arm, &bmain->armatures) {
4050  arm->flag &= ~(ARM_FLAG_UNUSED_7 | ARM_FLAG_UNUSED_9);
4051  }
4052 
4053  /* Initializes sun lights with the new angular diameter property */
4054  if (!DNA_struct_elem_find(fd->filesdna, "Lamp", "float", "sun_angle")) {
4055  LISTBASE_FOREACH (Light *, light, &bmain->lights) {
4056  light->sun_angle = 2.0f * atanf(light->area_size);
4057  }
4058  }
4059  }
4060 
4061  if (!MAIN_VERSION_ATLEAST(bmain, 280, 70)) {
4062  /* New image alpha modes. */
4063  LISTBASE_FOREACH (Image *, image, &bmain->images) {
4064  const int IMA_IGNORE_ALPHA = (1 << 12);
4065  if (image->flag & IMA_IGNORE_ALPHA) {
4066  image->alpha_mode = IMA_ALPHA_IGNORE;
4067  image->flag &= ~IMA_IGNORE_ALPHA;
4068  }
4069  }
4070  }
4071 
4072  if (!MAIN_VERSION_ATLEAST(bmain, 280, 71)) {
4073  /* This assumes the Blender builtin config. Depending on the OCIO
4074  * environment variable for versioning is weak, and these deprecated view
4075  * transforms and look names don't seem to exist in other commonly used
4076  * OCIO configs so .blend files created for those would be unaffected. */
4077  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
4078  ColorManagedViewSettings *view_settings;
4079  view_settings = &scene->view_settings;
4080 
4081  if (STREQ(view_settings->view_transform, "Default")) {
4082  STRNCPY(view_settings->view_transform, "Standard");
4083  }
4084  else if (STR_ELEM(view_settings->view_transform, "RRT", "Film")) {
4085  STRNCPY(view_settings->view_transform, "Filmic");
4086  }
4087  else if (STREQ(view_settings->view_transform, "Log")) {
4088  STRNCPY(view_settings->view_transform, "Filmic Log");
4089  }
4090 
4091  if (STREQ(view_settings->look, "Filmic - Base Contrast")) {
4092  STRNCPY(view_settings->look, "None");
4093  }
4094  }
4095  }
4096 
4097  if (!MAIN_VERSION_ATLEAST(bmain, 280, 74)) {
4098  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
4099  if (scene->ed != NULL) {
4101  }
4102  }
4103  }
4104 
4105  if (!MAIN_VERSION_ATLEAST(bmain, 280, 75)) {
4106  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
4107  if (scene->master_collection != NULL) {
4111  }
4112 
4113  UnitSettings *unit = &scene->unit;
4114  if (unit->system == USER_UNIT_NONE) {
4115  unit->length_unit = (char)USER_UNIT_ADAPTIVE;
4116  unit->mass_unit = (char)USER_UNIT_ADAPTIVE;
4117  }
4118 
4119  RenderData *render_data = &scene->r;
4120  switch (render_data->ffcodecdata.ffmpeg_preset) {
4121  case FFM_PRESET_ULTRAFAST:
4122  case FFM_PRESET_SUPERFAST:
4124  break;
4125  case FFM_PRESET_VERYFAST:
4126  case FFM_PRESET_FASTER:
4127  case FFM_PRESET_FAST:
4128  case FFM_PRESET_MEDIUM:
4129  render_data->ffcodecdata.ffmpeg_preset = FFM_PRESET_GOOD;
4130  break;
4131  case FFM_PRESET_SLOW:
4132  case FFM_PRESET_SLOWER:
4133  case FFM_PRESET_VERYSLOW:
4134  render_data->ffcodecdata.ffmpeg_preset = FFM_PRESET_BEST;
4135  }
4136  }
4137 
4138  LISTBASE_FOREACH (bArmature *, arm, &bmain->armatures) {
4139  arm->flag &= ~(ARM_FLAG_UNUSED_6);
4140  }
4141  }
4142 
4143  if (!MAIN_VERSION_ATLEAST(bmain, 281, 1)) {
4144  LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
4145  LISTBASE_FOREACH (ModifierData *, md, &ob->modifiers) {
4146  if (md->type == eModifierType_DataTransfer) {
4147  /* Now datatransfer's mix factor is multiplied with weights when any,
4148  * instead of being ignored,
4149  * we need to take care of that to keep 'old' files compatible. */
4151  if (dtmd->defgrp_name[0] != '\0') {
4152  dtmd->mix_factor = 1.0f;
4153  }
4154  }
4155  }
4156  }
4157  }
4158 
4159  if (!MAIN_VERSION_ATLEAST(bmain, 281, 3)) {
4160  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
4161  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
4162  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
4163  if (sl->spacetype == SPACE_TEXT) {
4164  ListBase *regionbase = (sl == area->spacedata.first) ? &area->regionbase :
4165  &sl->regionbase;
4166  ARegion *region = do_versions_find_region_or_null(regionbase, RGN_TYPE_UI);
4167  if (region) {
4168  region->alignment = RGN_ALIGN_RIGHT;
4169  }
4170  }
4171  /* Mark outliners as dirty for syncing and enable synced selection */
4172  if (sl->spacetype == SPACE_OUTLINER) {
4173  SpaceOutliner *space_outliner = (SpaceOutliner *)sl;
4175  space_outliner->flag |= SO_SYNC_SELECT;
4176  }
4177  }
4178  }
4179  }
4180  for (Mesh *mesh = bmain->meshes.first; mesh; mesh = mesh->id.next) {
4181  if (mesh->remesh_voxel_size == 0.0f) {
4182  mesh->remesh_voxel_size = 0.1f;
4183  }
4184  }
4185  }
4186 
4187  if (!MAIN_VERSION_ATLEAST(bmain, 281, 4)) {
4188  ID *id;
4189  FOREACH_MAIN_ID_BEGIN (bmain, id) {
4190  bNodeTree *ntree = ntreeFromID(id);
4191  if (ntree) {
4193  }
4194  }
4196  }
4197 
4198  if (!MAIN_VERSION_ATLEAST(bmain, 281, 5)) {
4199  for (Brush *br = bmain->brushes.first; br; br = br->id.next) {
4200  if (br->ob_mode & OB_MODE_SCULPT && br->normal_radius_factor == 0.0f) {
4201  br->normal_radius_factor = 0.5f;
4202  }
4203  }
4204 
4205  LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
4206  /* Older files do not have a master collection, which is then added through
4207  * `BKE_collection_master_add()`, so everything is fine. */
4208  if (scene->master_collection != NULL) {
4210  }
4211  }
4212  }
4213 
4214  if (!MAIN_VERSION_ATLEAST(bmain, 281, 6)) {
4215  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
4216  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
4217  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
4218  if (sl->spacetype == SPACE_VIEW3D) {
4219  View3D *v3d = (View3D *)sl;
4221 
4222  /* files by default don't have studio lights selected unless interacted
4223  * with the shading popover. When no studio-light could be read, we will
4224  * select the default world one. */
4227  if (studio_light != NULL) {
4228  STRNCPY(v3d->shading.lookdev_light, studio_light->name);
4229  }
4230  }
4231  }
4232  }
4233  }
4234  }
4235 
4236  if (!MAIN_VERSION_ATLEAST(bmain, 281, 9)) {
4237  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
4238  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
4239  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
4240  if (sl->spacetype == SPACE_FILE) {
4241  SpaceFile *sfile = (SpaceFile *)sl;
4242  ListBase *regionbase = (sl == area->spacedata.first) ? &area->regionbase :
4243  &sl->regionbase;
4244  ARegion *region_ui = do_versions_find_region(regionbase, RGN_TYPE_UI);
4245  ARegion *region_header = do_versions_find_region(regionbase, RGN_TYPE_HEADER);
4246  ARegion *region_toolprops = do_versions_find_region_or_null(regionbase,
4248 
4249  /* Reinsert UI region so that it spawns entire area width */
4250  BLI_remlink(regionbase, region_ui);
4251  BLI_insertlinkafter(regionbase, region_header, region_ui);
4252 
4253  region_ui->flag |= RGN_FLAG_DYNAMIC_SIZE;
4254 
4255  if (region_toolprops &&
4256  (region_toolprops->alignment == (RGN_ALIGN_BOTTOM | RGN_SPLIT_PREV))) {
4257  SpaceType *stype = BKE_spacetype_from_id(sl->spacetype);
4258 
4259  /* Remove empty region at old location. */
4260  BLI_assert(sfile->op == NULL);
4261  BKE_area_region_free(stype, region_toolprops);
4262  BLI_freelinkN(regionbase, region_toolprops);
4263  }
4264 
4265  if (sfile->params) {
4267  }
4268  }
4269  }
4270  }
4271  }
4272 
4273  /* Convert the BONE_NO_SCALE flag to inherit_scale_mode enum. */
4274  if (!DNA_struct_elem_find(fd->filesdna, "Bone", "char", "inherit_scale_mode")) {
4275  LISTBASE_FOREACH (bArmature *, arm, &bmain->armatures) {
4276  do_version_bones_inherit_scale(&arm->bonebase);
4277  }
4278  }
4279 
4280  /* Convert the Offset flag to the mix mode enum. */
4281  if (!DNA_struct_elem_find(fd->filesdna, "bRotateLikeConstraint", "char", "mix_mode")) {
4282  LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
4284  if (ob->pose) {
4285  LISTBASE_FOREACH (bPoseChannel *, pchan, &ob->pose->chanbase) {
4286  do_version_constraints_copy_rotation_mix_mode(&pchan->constraints);
4287  }
4288  }
4289  }
4290  }
4291 
4292  /* Added studio-light intensity. */
4293  if (!DNA_struct_elem_find(fd->filesdna, "View3DShading", "float", "studiolight_intensity")) {
4294  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
4295  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
4296  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
4297  if (sl->spacetype == SPACE_VIEW3D) {
4298  View3D *v3d = (View3D *)sl;
4299  v3d->shading.studiolight_intensity = 1.0f;
4300  }
4301  }
4302  }
4303  }
4304  }
4305 
4306  /* Elastic deform brush */
4307  for (Brush *br = bmain->brushes.first; br; br = br->id.next) {
4308  if (br->ob_mode & OB_MODE_SCULPT && br->elastic_deform_volume_preservation == 0.0f) {
4309  br->elastic_deform_volume_preservation = 0.5f;
4310  }
4311  }
4312  }
4313 
4314  if (!MAIN_VERSION_ATLEAST(bmain, 281, 15)) {
4315  LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
4318  }
4319  }
4320 
4321  if (!DNA_struct_elem_find(
4322  fd->filesdna, "LayerCollection", "short", "local_collections_bits")) {
4323  LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
4324  LISTBASE_FOREACH (ViewLayer *, view_layer, &scene->view_layers) {
4325  LISTBASE_FOREACH (LayerCollection *, layer_collection, &view_layer->layer_collections) {
4326  do_versions_local_collection_bits_set(layer_collection);
4327  }
4328  }
4329  }
4330  }
4331 
4332  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
4333  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
4334  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
4335  if (sl->spacetype == SPACE_VIEW3D) {
4336  View3D *v3d = (View3D *)sl;
4337 
4338  LISTBASE_FOREACH (ScrArea *, area_other, &screen->areabase) {
4339  LISTBASE_FOREACH (SpaceLink *, sl_other, &area_other->spacedata) {
4340  if (sl != sl_other && sl_other->spacetype == SPACE_VIEW3D) {
4341  View3D *v3d_other = (View3D *)sl_other;
4342 
4343  if (v3d->shading.prop == v3d_other->shading.prop) {
4344  v3d_other->shading.prop = NULL;
4345  }
4346  }
4347  }
4348  }
4349  }
4350  else if (sl->spacetype == SPACE_FILE) {
4351  ListBase *regionbase = (sl == area->spacedata.first) ? &area->regionbase :
4352  &sl->regionbase;
4353  ARegion *region_tools = do_versions_find_region_or_null(regionbase, RGN_TYPE_TOOLS);
4354  ARegion *region_header = do_versions_find_region(regionbase, RGN_TYPE_HEADER);
4355 
4356  if (region_tools) {
4357  ARegion *region_next = region_tools->next;
4358 
4359  /* We temporarily had two tools regions, get rid of the second one. */
4360  if (region_next && region_next->regiontype == RGN_TYPE_TOOLS) {
4361  do_versions_remove_region(regionbase, region_next);
4362  }
4363 
4364  BLI_remlink(regionbase, region_tools);
4365  BLI_insertlinkafter(regionbase, region_header, region_tools);
4366  }
4367  else {
4368  region_tools = do_versions_add_region(RGN_TYPE_TOOLS,
4369  "versioning file tools region");
4370  BLI_insertlinkafter(regionbase, region_header, region_tools);
4371  region_tools->alignment = RGN_ALIGN_LEFT;
4372  }
4373  }
4374  }
4375  }
4376  }
4377 
4378  for (Brush *br = bmain->brushes.first; br; br = br->id.next) {
4379  if (br->ob_mode & OB_MODE_SCULPT && br->area_radius_factor == 0.0f) {
4380  br->area_radius_factor = 0.5f;
4381  }
4382  }
4383  }
4384 
4385  if (!MAIN_VERSION_ATLEAST(bmain, 282, 2)) {
4387 
4388  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
4389  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
4390  area->flag &= ~AREA_FLAG_UNUSED_6;
4391  }
4392  }
4393 
4394  /* Add custom curve profile to toolsettings for bevel tool */
4395  if (!DNA_struct_elem_find(fd->filesdna, "ToolSettings", "CurveProfile", "custom_profile")) {
4396  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
4398  if ((ts) && (ts->custom_bevel_profile_preset == NULL)) {
4400  }
4401  }
4402  }
4403 
4404  /* Add custom curve profile to bevel modifier */
4405  if (!DNA_struct_elem_find(fd->filesdna, "BevelModifier", "CurveProfile", "custom_profile")) {
4406  for (Object *object = bmain->objects.first; object != NULL; object = object->id.next) {
4407  LISTBASE_FOREACH (ModifierData *, md, &object->modifiers) {
4408  if (md->type == eModifierType_Bevel) {
4409  BevelModifierData *bmd = (BevelModifierData *)md;
4410  if (!bmd->custom_profile) {
4412  }
4413  }
4414  }
4415  }
4416  }
4417 
4418  /* Dash Ratio and Dash Samples */
4419  if (!DNA_struct_elem_find(fd->filesdna, "Brush", "float", "dash_ratio")) {
4420  for (Brush *br = bmain->brushes.first; br; br = br->id.next) {
4421  br->dash_ratio = 1.0f;
4422  br->dash_samples = 20;
4423  }
4424  }
4425 
4426  /* Pose brush smooth iterations */
4427  if (!DNA_struct_elem_find(fd->filesdna, "Brush", "float", "pose_smooth_iterations")) {
4428  for (Brush *br = bmain->brushes.first; br; br = br->id.next) {
4429  br->pose_smooth_iterations = 4;
4430  }
4431  }
4432 
4433  /* Cloth pressure */
4434  for (Object *ob = bmain->objects.first; ob; ob = ob->id.next) {
4435  LISTBASE_FOREACH (ModifierData *, md, &ob->modifiers) {
4436  if (md->type == eModifierType_Cloth) {
4437  ClothModifierData *clmd = (ClothModifierData *)md;
4438 
4439  clmd->sim_parms->pressure_factor = 1;
4440  }
4441  }
4442  }
4443  }
4444 
4445  if (!MAIN_VERSION_ATLEAST(bmain, 282, 3)) {
4446  /* Remove Unified pressure/size and pressure/alpha */
4447  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
4451  }
4452 
4453  /* Set the default render pass in the viewport to Combined. */
4454  if (!DNA_struct_elem_find(fd->filesdna, "View3DShading", "int", "render_pass")) {
4455  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
4457  }
4458 
4459  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
4460  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
4461  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
4462  if (sl->spacetype == SPACE_VIEW3D) {
4463  View3D *v3d = (View3D *)sl;
4465  }
4466  }
4467  }
4468  }
4469  }
4470 
4471  /* Make markers region visible by default. */
4472  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
4473  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
4474  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
4475  switch (sl->spacetype) {
4476  case SPACE_SEQ: {
4477  SpaceSeq *sseq = (SpaceSeq *)sl;
4478  sseq->flag |= SEQ_SHOW_MARKERS;
4479  break;
4480  }
4481  case SPACE_ACTION: {
4482  SpaceAction *saction = (SpaceAction *)sl;
4483  saction->flag |= SACTION_SHOW_MARKERS;
4484  break;
4485  }
4486  case SPACE_GRAPH: {
4487  SpaceGraph *sipo = (SpaceGraph *)sl;
4488  sipo->flag |= SIPO_SHOW_MARKERS;
4489  break;
4490  }
4491  case SPACE_NLA: {
4492  SpaceNla *snla = (SpaceNla *)sl;
4493  snla->flag |= SNLA_SHOW_MARKERS;
4494  break;
4495  }
4496  }
4497  }
4498  }
4499  }
4500  }
4501 
4502  if (!MAIN_VERSION_ATLEAST(bmain, 283, 3)) {
4503  /* Color Management Look. */
4504  for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
4505  ColorManagedViewSettings *view_settings;
4506  view_settings = &scene->view_settings;
4507  if (BLI_str_startswith(view_settings->look, "Filmic - ")) {
4508  char *src = view_settings->look + strlen("Filmic - ");
4509  memmove(view_settings->look, src, strlen(src) + 1);
4510  }
4511  else if (BLI_str_startswith(view_settings->look, "Standard - ")) {
4512  char *src = view_settings->look + strlen("Standard - ");
4513  memmove(view_settings->look, src, strlen(src) + 1);
4514  }
4515  }
4516 
4517  /* Sequencer Tool region */
4519 
4520  /* Cloth internal springs */
4521  for (Object *ob = bmain->objects.first; ob; ob = ob->id.next) {
4522  LISTBASE_FOREACH (ModifierData *, md, &ob->modifiers) {
4523  if (md->type == eModifierType_Cloth) {
4524  ClothModifierData *clmd = (ClothModifierData *)md;
4525 
4526  clmd->sim_parms->internal_tension = 15.0f;
4527  clmd->sim_parms->max_internal_tension = 15.0f;
4528  clmd->sim_parms->internal_compression = 15.0f;
4529  clmd->sim_parms->max_internal_compression = 15.0f;
4531  }
4532  }
4533  }
4534 
4535  /* Add primary tile to images. */
4536  if (!DNA_struct_elem_find(fd->filesdna, "Image", "ListBase", "tiles")) {
4537  for (Image *ima = bmain->images.first; ima; ima = ima->id.next) {
4538  ImageTile *tile = MEM_callocN(sizeof(ImageTile), "Image Tile");
4539  tile->ok = 1;
4540  tile->tile_number = 1001;
4541  BLI_addtail(&ima->tiles, tile);
4542  }
4543  }
4544 
4545  /* UDIM Image Editor change. */
4546  if (!DNA_struct_elem_find(fd->filesdna, "SpaceImage", "int", "tile_grid_shape[2]")) {
4547  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
4548  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
4549  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
4550  if (sl->spacetype == SPACE_IMAGE) {
4551  SpaceImage *sima = (SpaceImage *)sl;
4552  sima->tile_grid_shape[0] = 1;
4553  sima->tile_grid_shape[1] = 1;
4554  }
4555  }
4556  }
4557  }
4558  }
4559 
4560  for (Brush *br = bmain->brushes.first; br; br = br->id.next) {
4561  br->add_col[3] = 0.9f;
4562  br->sub_col[3] = 0.9f;
4563  }
4564 
4565  /* Pose brush IK segments. */
4566  for (Brush *br = bmain->brushes.first; br; br = br->id.next) {
4567  if (br->pose_ik_segments == 0) {
4568  br->pose_ik_segments = 1;
4569  }
4570  }
4571 
4572  /* Pose brush keep anchor point. */
4573  for (Brush *br = bmain->brushes.first; br; br = br->id.next) {
4574  if (br->sculpt_tool == SCULPT_TOOL_POSE) {
4575  br->flag2 |= BRUSH_POSE_IK_ANCHORED;
4576  }
4577  }
4578 
4579  /* Tip Roundness. */
4580  if (!DNA_struct_elem_find(fd->filesdna, "Brush", "float", "tip_roundness")) {
4581  for (Brush *br = bmain->brushes.first; br; br = br->id.next) {
4582  if (br->ob_mode & OB_MODE_SCULPT && br->sculpt_tool == SCULPT_TOOL_CLAY_STRIPS) {
4583  br->tip_roundness = 0.18f;
4584  }
4585  }
4586  }
4587 
4588  /* EEVEE: Cascade shadow bias fix */
4589  LISTBASE_FOREACH (Light *, light, &bmain->lights) {
4590  if (light->type == LA_SUN) {
4591  /* Should be 0.0004 but for practical reason we make it bigger.
4592  * Correct factor is scene dependent. */
4593  light->bias *= 0.002f;
4594  }
4595  }
4596  }
4597 
4598  if (!MAIN_VERSION_ATLEAST(bmain, 283, 5)) {
4599  /* Alembic Transform Cache changed from world to local space. */
4600  LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
4601  LISTBASE_FOREACH (bConstraint *, con, &ob->constraints) {
4602  if (con->type == CONSTRAINT_TYPE_TRANSFORM_CACHE) {
4603  con->ownspace = CONSTRAINT_SPACE_LOCAL;
4604  }
4605  }
4606  }
4607 
4608  /* Add 2D transform to UV Warp modifier. */
4609  if (!DNA_struct_elem_find(fd->filesdna, "UVWarpModifierData", "float", "scale[2]")) {
4610  for (Object *ob = bmain->objects.first; ob; ob = ob->id.next) {
4611  LISTBASE_FOREACH (ModifierData *, md, &ob->modifiers) {
4612  if (md->type == eModifierType_UVWarp) {
4614  copy_v2_fl(umd->scale, 1.0f);
4615  }
4616  }
4617  }
4618  }
4619 
4620  /* Add Lookdev blur property. */
4621  if (!DNA_struct_elem_find(fd->filesdna, "View3DShading", "float", "studiolight_blur")) {
4622  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
4623  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
4624  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
4625  if (sl->spacetype == SPACE_VIEW3D) {
4626  View3D *v3d = (View3D *)sl;
4627  v3d->shading.studiolight_blur = 0.5f;
4628  }
4629  }
4630  }
4631  }
4632  }
4633  }
4634 
4635  if (!MAIN_VERSION_ATLEAST(bmain, 283, 7)) {
4636  /* Init default Grease Pencil Vertex paint mix factor for Viewport. */
4637  if (!DNA_struct_elem_find(
4638  fd->filesdna, "View3DOverlay", "float", "gpencil_vertex_paint_opacity")) {
4639  LISTBASE_FOREACH (bScreen *, screen, &bmain->screens) {
4640  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
4641  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
4642  if (sl->spacetype == SPACE_VIEW3D) {
4643  View3D *v3d = (View3D *)sl;
4645  }
4646  }
4647  }
4648  }
4649  }
4650 
4651  /* Update Grease Pencil after drawing engine and code refactor.
4652  * It uses the seed variable of Array modifier to avoid double patching for
4653  * files created with a development version. */
4654  if (!DNA_struct_elem_find(fd->filesdna, "ArrayGpencilModifierData", "int", "seed")) {
4655  /* Init new Grease Pencil Paint tools. */
4656  {
4657  LISTBASE_FOREACH (Brush *, brush, &bmain->brushes) {
4658  if (brush->gpencil_settings != NULL) {
4659  brush->gpencil_vertex_tool = brush->gpencil_settings->brush_type;
4660  brush->gpencil_sculpt_tool = brush->gpencil_settings->brush_type;
4661  brush->gpencil_weight_tool = brush->gpencil_settings->brush_type;
4662  }
4663  }
4664  }
4665 
4666  LISTBASE_FOREACH (Material *, mat, &bmain->materials) {
4667  MaterialGPencilStyle *gp_style = mat->gp_style;
4668  if (gp_style == NULL) {
4669  continue;
4670  }
4671  /* Fix Grease Pencil Material colors to Linear. */
4672  srgb_to_linearrgb_v4(gp_style->stroke_rgba, gp_style->stroke_rgba);
4673  srgb_to_linearrgb_v4(gp_style->fill_rgba, gp_style->fill_rgba);
4674 
4675  /* Move old gradient variables to texture. */
4676  if (gp_style->fill_style == GP_MATERIAL_FILL_STYLE_GRADIENT) {
4677  gp_style->texture_angle = gp_style->gradient_angle;
4678  copy_v2_v2(gp_style->texture_scale, gp_style->gradient_scale);
4679  copy_v2_v2(gp_style->texture_offset, gp_style->gradient_shift);
4680  }
4681  /* Set Checker material as Solid. This fill mode has been removed and replaced
4682  * by textures. */
4683  if (gp_style->fill_style == GP_MATERIAL_FILL_STYLE_CHECKER) {
4685  }
4686  /* Update Alpha channel for texture opacity. */
4687  if (gp_style->fill_style == GP_MATERIAL_FILL_STYLE_TEXTURE) {
4688  gp_style->fill_rgba[3] *= gp_style->texture_opacity;
4689  }
4690  /* Stroke stencil mask to mix = 1. */
4691  if (gp_style->flag & GP_MATERIAL_STROKE_PATTERN) {
4692  gp_style->mix_stroke_factor = 1.0f;
4693  gp_style->flag &= ~GP_MATERIAL_STROKE_PATTERN;
4694  }
4695  /* Mix disabled, set mix factor to 0. */
4696  else if ((gp_style->flag & GP_MATERIAL_STROKE_TEX_MIX) == 0) {
4697  gp_style->mix_stroke_factor = 0.0f;
4698  }
4699  }
4700 
4701  /* Fix Grease Pencil VFX and modifiers. */
4702  LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
4703  if (ob->type != OB_GPENCIL) {
4704  continue;
4705  }
4706 
4707  /* VFX. */
4708  LISTBASE_FOREACH (ShaderFxData *, fx, &ob->shader_fx) {
4709  switch (fx->type) {
4710  case eShaderFxType_Colorize: {
4713  vfx->factor = 1.0f;
4714  }
4717  break;
4718  }
4719  case eShaderFxType_Pixel: {
4720  PixelShaderFxData *vfx = (PixelShaderFxData *)fx;
4721  srgb_to_linearrgb_v4(vfx->rgba, vfx->rgba);
4722  break;
4723  }
4724  case eShaderFxType_Rim: {
4725  RimShaderFxData *vfx = (RimShaderFxData *)fx;
4728  break;
4729  }
4730  case eShaderFxType_Shadow: {
4733  break;
4734  }
4735  case eShaderFxType_Glow: {
4736  GlowShaderFxData *vfx = (GlowShaderFxData *)fx;
4738  vfx->glow_color[3] = 1.0f;
4740  vfx->blur[1] = vfx->blur[0];
4741  break;
4742  }
4743  default:
4744  break;
4745  }
4746  }
4747 
4748  /* Modifiers. */
4749  LISTBASE_FOREACH (GpencilModifierData *, md, &ob->greasepencil_modifiers) {
4750  switch ((GpencilModifierType)md->type) {
4753  mmd->seed = 1;
4754  if ((mmd->offset[0] != 0.0f) || (mmd->offset[1] != 0.0f) ||
4755  (mmd->offset[2] != 0.0f)) {
4756  mmd->flag |= GP_ARRAY_USE_OFFSET;
4757  }
4758  if ((mmd->shift[0] != 0.0f) || (mmd->shift[1] != 0.0f) || (mmd->shift[2] != 0.0f)) {
4759  mmd->flag |= GP_ARRAY_USE_OFFSET;
4760  }
4761  if (mmd->object != NULL) {
4762  mmd->flag |= GP_ARRAY_USE_OB_OFFSET;
4763  }
4764  break;
4765  }
4768  float factor = mmd->factor / 25.0f;
4769  mmd->factor = (mmd->flag & GP_NOISE_MOD_LOCATION) ? factor : 0.0f;
4770  mmd->factor_thickness = (mmd->flag & GP_NOISE_MOD_STRENGTH) ? factor : 0.0f;
4771  mmd->factor_strength = (mmd->flag & GP_NOISE_MOD_THICKNESS) ? factor : 0.0f;
4772  mmd->factor_uvs = (mmd->flag & GP_NOISE_MOD_UV) ? factor : 0.0f;
4773 
4774  mmd->noise_scale = (mmd->flag & GP_NOISE_FULL_STROKE) ? 0.0f : 1.0f;
4775 
4776  if (mmd->curve_intensity == NULL) {
4777  mmd->curve_intensity = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
4778  if (mmd->curve_intensity) {
4780  }
4781  }
4782  break;
4783  }
4786  srgb_to_linearrgb_v3_v3(mmd->rgb, mmd->rgb);
4787  if (mmd->curve_intensity == NULL) {
4788  mmd->curve_intensity = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
4789  if (mmd->curve_intensity) {
4791  }
4792  }
4793  break;
4794  }
4797  if (mmd->curve_intensity == NULL) {
4798  mmd->curve_intensity = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
4799  if (mmd->curve_intensity) {
4801  }
4802  }
4803  break;
4804  }
4807  if (mmd->curve_intensity == NULL) {
4808  mmd->curve_intensity = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
4809  if (mmd->curve_intensity) {
4811  }
4812  }
4813  break;
4814  }
4817  if (mmd->curve_intensity == NULL) {
4818  mmd->curve_intensity = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
4819  if (mmd->curve_intensity) {
4821  }
4822  }
4823  break;
4824  }
4826  if (!DNA_struct_elem_find(
4827  fd->filesdna, "ThickGpencilModifierData", "float", "thickness_fac")) {
4829  mmd->thickness_fac = mmd->thickness;
4830  }
4831  break;
4832  }
4835  mmd->fading_opacity = 1.0 - mmd->fading_opacity;
4836  break;
4837  }
4839  const short simple = (1 << 0);
4841  if (mmd->flag & simple) {
4842  mmd->flag &= ~simple;
4843  mmd->type = GP_SUBDIV_SIMPLE;
4844  }
4845  break;
4846  }
4847  default:
4848  break;
4849  }
4850  }
4851  }
4852 
4853  /* Fix Layers Colors and Vertex Colors to Linear.
4854  * Also set lights to on for layers. */
4855  LISTBASE_FOREACH (bGPdata *, gpd, &bmain->gpencils) {
4856  if (gpd->flag & GP_DATA_ANNOTATIONS) {
4857  continue;
4858  }
4859  /* Onion colors. */
4860  srgb_to_linearrgb_v3_v3(gpd->gcolor_prev, gpd->gcolor_prev);
4861  srgb_to_linearrgb_v3_v3(gpd->gcolor_next, gpd->gcolor_next);
4862  /* Z-depth Offset. */
4863  gpd->zdepth_offset = 0.150f;
4864 
4865  LISTBASE_FOREACH (bGPDlayer *, gpl, &gpd->layers) {
4866  gpl->flag |= GP_LAYER_USE_LIGHTS;
4867  srgb_to_linearrgb_v4(gpl->tintcolor, gpl->tintcolor);
4868  gpl->vertex_paint_opacity = 1.0f;
4869 
4870  LISTBASE_FOREACH (bGPDframe *, gpf, &gpl->frames) {
4871  LISTBASE_FOREACH (bGPDstroke *, gps, &gpf->strokes) {
4872  /* Set initial opacity for fill color. */
4873  gps->fill_opacity_fac = 1.0f;
4874 
4875  /* Calc geometry data because in old versions this data was not saved. */
4877 
4878  srgb_to_linearrgb_v4(gps->vert_color_fill, gps->vert_color_fill);
4879  int i;
4880  bGPDspoint *pt;
4881  for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
4883  }
4884  }
4885  }
4886  }
4887  }
4888  }
4889  }
4890 
4891  if (!MAIN_VERSION_ATLEAST(bmain, 283, 8)) {
4892  if (!DNA_struct_elem_find(
4893  fd->filesdna, "View3DOverlay", "float", "sculpt_mode_face_sets_opacity")) {
4894  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
4895  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
4896  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
4897  if (sl->spacetype == SPACE_VIEW3D) {
4898  View3D *v3d = (View3D *)sl;
4900  }
4901  }
4902  }
4903  }
4904  }
4905 
4906  /* Alembic Transform Cache changed from local to world space. */
4907  LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
4908  LISTBASE_FOREACH (bConstraint *, con, &ob->constraints) {
4909  if (con->type == CONSTRAINT_TYPE_TRANSFORM_CACHE) {
4910  con->ownspace = CONSTRAINT_SPACE_WORLD;
4911  }
4912  }
4913  }
4914 
4915  /* Boundary Edges Auto-masking. */
4916  if (!DNA_struct_elem_find(
4917  fd->filesdna, "Brush", "int", "automasking_boundary_edges_propagation_steps")) {
4918  for (Brush *br = bmain->brushes.first; br; br = br->id.next) {
4919  br->automasking_boundary_edges_propagation_steps = 1;
4920  }
4921  }
4922 
4923  /* Corrective smooth modifier scale*/
4924  if (!DNA_struct_elem_find(fd->filesdna, "CorrectiveSmoothModifierData", "float", "scale")) {
4925  for (Object *ob = bmain->objects.first; ob; ob = ob->id.next) {
4926  LISTBASE_FOREACH (ModifierData *, md, &ob->modifiers) {
4927  if (md->type == eModifierType_CorrectiveSmooth) {
4929  csmd->scale = 1.0f;
4930  }
4931  }
4932  }
4933  }
4934 
4935  /* Default Face Set Color. */
4936  for (Mesh *me = bmain->meshes.first; me != NULL; me = me->id.next) {
4937  if (me->totpoly > 0) {
4938  int *face_sets = CustomData_get_layer(&me->pdata, CD_SCULPT_FACE_SETS);
4939  if (face_sets) {
4940  me->face_sets_color_default = abs(face_sets[0]);
4941  }
4942  }
4943  }
4944  }
4945 
4946  if (!MAIN_VERSION_ATLEAST(bmain, 283, 11)) {
4947  if (!DNA_struct_elem_find(fd->filesdna, "OceanModifierData", "float", "fetch_jonswap")) {
4948  for (Object *object = bmain->objects.first; object != NULL; object = object->id.next) {
4949  LISTBASE_FOREACH (ModifierData *, md, &object->modifiers) {
4950  if (md->type == eModifierType_Ocean) {
4951  OceanModifierData *omd = (OceanModifierData *)md;
4952  omd->fetch_jonswap = 120.0f;
4953  }
4954  }
4955  }
4956  }
4957 
4958  if (!DNA_struct_find(fd->filesdna, "XrSessionSettings")) {
4959  for (wmWindowManager *wm = bmain->wm.first; wm; wm = wm->id.next) {
4960  const View3D *v3d_default = DNA_struct_default_get(View3D);
4961 
4962  wm->xr.session_settings.shading = v3d_default->shading;
4963  wm->xr.session_settings.draw_flags = (V3D_OFSDRAW_SHOW_GRIDFLOOR |
4965  wm->xr.session_settings.clip_start = v3d_default->clip_start;
4966  wm->xr.session_settings.clip_end = v3d_default->clip_end;
4967 
4968  wm->xr.session_settings.flag = XR_SESSION_USE_POSITION_TRACKING;
4969  }
4970  }
4971 
4972  /* Surface deform modifier strength*/
4973  if (!DNA_struct_elem_find(fd->filesdna, "SurfaceDeformModifierData", "float", "strength")) {
4974  for (Object *ob = bmain->objects.first; ob; ob = ob->id.next) {
4975  LISTBASE_FOREACH (ModifierData *, md, &ob->modifiers) {
4976  if (md->type == eModifierType_SurfaceDeform) {
4978  sdmd->strength = 1.0f;
4979  }
4980  }
4981  }
4982  }
4983  }
4984 
4985  if (!MAIN_VERSION_ATLEAST(bmain, 283, 12)) {
4986  /* Activate f-curve drawing in the sequencer. */
4987  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
4988  for (ScrArea *area = screen->areabase.first; area; area = area->next) {
4989  for (SpaceLink *sl = area->spacedata.first; sl; sl = sl->next) {
4990  if (sl->spacetype == SPACE_SEQ) {
4991  SpaceSeq *sseq = (SpaceSeq *)sl;
4992  sseq->flag |= SEQ_SHOW_FCURVES;
4993  }
4994  }
4995  }
4996  }
4997 
4998  /* Remesh Modifier Voxel Mode. */
4999  if (!DNA_struct_elem_find(fd->filesdna, "RemeshModifierData", "float", "voxel_size")) {
5000  for (Object *ob = bmain->objects.first; ob; ob = ob->id.next) {
5001  LISTBASE_FOREACH (ModifierData *, md, &ob->modifiers) {
5002  if (md->type == eModifierType_Remesh) {
5004  rmd->voxel_size = 0.1f;
5005  rmd->adaptivity = 0.0f;
5006  }
5007  }
5008  }
5009  }
5010  }
5011 
5012  if (!MAIN_VERSION_ATLEAST(bmain, 283, 14)) {
5013  /* Solidify modifier merge tolerance. */
5014  if (!DNA_struct_elem_find(fd->filesdna, "SolidifyModifierData", "float", "merge_tolerance")) {
5015  for (Object *ob = bmain->objects.first; ob; ob = ob->id.next) {
5016  for (ModifierData *md = ob->modifiers.first; md; md = md->next) {
5017  if (md->type == eModifierType_Solidify) {
5019  /* set to 0.0003 since that is what was used before, default now is 0.0001 */
5020  smd->merge_tolerance = 0.0003f;
5021  }
5022  }
5023  }
5024  }
5025 
5026  /* Enumerator was incorrect for a time in 2.83 development.
5027  * Note that this only corrects values known to be invalid. */
5028  for (Object *ob = bmain->objects.first; ob; ob = ob->id.next) {
5029  RigidBodyCon *rbc = ob->rigidbody_constraint;
5030  if (rbc != NULL) {
5031  enum {
5032  INVALID_RBC_TYPE_SLIDER = 2,
5033  INVALID_RBC_TYPE_6DOF_SPRING = 4,
5034  INVALID_RBC_TYPE_MOTOR = 7,
5035  };
5036  switch (rbc->type) {
5037  case INVALID_RBC_TYPE_SLIDER:
5038  rbc->type = RBC_TYPE_SLIDER;
5039  break;
5040  case INVALID_RBC_TYPE_6DOF_SPRING:
5041  rbc->type = RBC_TYPE_6DOF_SPRING;
5042  break;
5043  case INVALID_RBC_TYPE_MOTOR:
5044  rbc->type = RBC_TYPE_MOTOR;
5045  break;
5046  }
5047  }
5048  }
5049  }
5050 
5051  /* Match scale of fluid modifier gravity with scene gravity. */
5052  if (!MAIN_VERSION_ATLEAST(bmain, 283, 15)) {
5053  for (Object *ob = bmain->objects.first; ob; ob = ob->id.next) {
5054  for (ModifierData *md = ob->modifiers.first; md; md = md->next) {
5055  if (md->type == eModifierType_Fluid) {
5056  FluidModifierData *fmd = (FluidModifierData *)md;
5057  if (fmd->domain != NULL) {
5058  mul_v3_fl(fmd->domain->gravity, 9.81f);
5059  }
5060  }
5061  }
5062  }
5063  }
5064 
5065  if (!MAIN_VERSION_ATLEAST(bmain, 283, 16)) {
5066  /* Init SMAA threshold for grease pencil render. */
5067  LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
5069  }
5070  }
5071 
5072  if (!MAIN_VERSION_ATLEAST(bmain, 283, 17)) {
5073  /* Reset the cloth mass to 1.0 in brushes with an invalid value. */
5074  for (Brush *br = bmain->brushes.first; br; br = br->id.next) {
5075  if (br->sculpt_tool == SCULPT_TOOL_CLOTH) {
5076  if (br->cloth_mass == 0.0f) {
5077  br->cloth_mass = 1.0f;
5078  }
5079  }
5080  }
5081 
5082  /* Set Brush default color for grease pencil. */
5083  LISTBASE_FOREACH (Brush *, brush, &bmain->brushes) {
5084  if (brush->gpencil_settings) {
5085  brush->rgb[0] = 0.498f;
5086  brush->rgb[1] = 1.0f;
5087  brush->rgb[2] = 0.498f;
5088  }
5089  }
5090  }
5091 
5102  {
5103  /* Set the cloth wind factor to 1 for old forces. */
5104  if (!DNA_struct_elem_find(fd->filesdna, "PartDeflect", "float", "f_wind_factor")) {
5105  LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
5106  if (ob->pd) {
5107  ob->pd->f_wind_factor = 1.0f;
5108  }
5109  }
5110  LISTBASE_FOREACH (ParticleSettings *, part, &bmain->particles) {
5111  if (part->pd) {
5112  part->pd->f_wind_factor = 1.0f;
5113  }
5114  if (part->pd2) {
5115  part->pd2->f_wind_factor = 1.0f;
5116  }
5117  }
5118  }
5119 
5120  for (wmWindowManager *wm = bmain->wm.first; wm; wm = wm->id.next) {
5121  /* Don't rotate light with the viewer by default, make it fixed. Shading settings can't be
5122  * edited and this flag should always be set. So we can always execute this. */
5123  wm->xr.session_settings.shading.flag |= V3D_SHADING_WORLD_ORIENTATION;
5124  }
5125 
5126  /* Keep this block, even when empty. */
5127  }
5128 }
typedef float(TangentPoint)[2]
void BKE_fcurves_id_cb(struct ID *id, ID_FCurve_Edit_Callback func, void *user_data)
Definition: anim_data.c:1278
void BKE_animdata_main_cb(struct Main *bmain, ID_AnimData_Edit_Callback func, void *user_data)
Definition: anim_data.c:1300
struct Collection * BKE_collection_add(struct Main *bmain, struct Collection *parent, const char *name)
Definition: collection.c:435
bool BKE_collection_object_add(struct Main *bmain, struct Collection *collection, struct Object *ob)
Definition: collection.c:1134
struct Collection * BKE_collection_master_add(void)
Definition: collection.c:892
bool BKE_collection_object_remove(struct Main *bmain, struct Collection *collection, struct Object *object, const bool free_us)
Definition: collection.c:1193
void BKE_curvemapping_init(struct CurveMapping *cumap)
Definition: colortools.c:1200
void BKE_curvemap_reset(struct CurveMap *cuma, const struct rctf *clipr, int preset, int slope)
void BKE_color_managed_view_settings_init_render(struct ColorManagedViewSettings *settings, const struct ColorManagedDisplaySettings *display_settings, const char *view_transform)
void BKE_color_managed_display_settings_init(struct ColorManagedDisplaySettings *settings)
Definition: colortools.c:1753
@ CURVEMAP_SLOPE_POSITIVE
struct CurveMapping * BKE_curvemapping_add(int tot, float minx, float miny, float maxx, float maxy)
Definition: colortools.c:88
void BKE_constraint_free_data(struct bConstraint *con)
Definition: constraint.c:5492
struct CurveProfile * BKE_curveprofile_add(eCurveProfilePresets preset)
Definition: curveprofile.c:887
CustomData interface, see also DNA_customdata_types.h.
void CustomData_free_layers(struct CustomData *data, int type, int totelem)
Definition: customdata.c:2716
void * CustomData_get_layer(const struct CustomData *data, int type)
void CustomData_update_typemap(struct CustomData *data)
Definition: customdata.c:2071
struct FCurve * BKE_fcurve_copy(const struct FCurve *fcu)
#define DRIVER_TARGETS_LOOPER_BEGIN(dvar)
#define DRIVER_TARGETS_LOOPER_END
void BKE_freestyle_config_free(struct FreestyleConfig *config, const bool do_id_user)
Definition: freestyle.c:56
void BKE_freestyle_config_init(struct FreestyleConfig *config)
Definition: freestyle.c:43
#define G_MAIN
Definition: BKE_global.h:232
void BKE_gpencil_stroke_geometry_update(struct bGPdata *gpd, struct bGPDstroke *gps)
void IDP_FreeProperty(struct IDProperty *prop)
Definition: idprop.c:1040
struct IDProperty * IDP_GetPropertyFromGroup(const struct IDProperty *prop, const char *name) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
int BKE_keyblock_curve_element_count(struct ListBase *nurb)
Definition: key.c:2044
struct ViewLayer * BKE_view_layer_add(struct Scene *scene, const char *name, struct ViewLayer *view_layer_source, const int type)
Definition: layer.c:200
@ VIEWLAYER_ADD_NEW
Definition: BKE_layer.h:50
struct ViewLayer * BKE_view_layer_default_view(const struct Scene *scene)
struct Base * BKE_view_layer_base_find(struct ViewLayer *view_layer, struct Object *ob)
Definition: layer.c:394
struct LayerCollection * BKE_layer_collection_first_from_scene_collection(struct ViewLayer *view_layer, const struct Collection *collection)
void BKE_layer_collection_sync(const struct Scene *scene, struct ViewLayer *view_layer)
void id_us_min(struct ID *id)
Definition: lib_id.c:297
void BKE_main_id_repair_duplicate_names_listbase(struct ListBase *lb)
Definition: lib_id.c:966
void id_fake_user_set(struct ID *id)
Definition: lib_id.c:328
void BLI_libblock_ensure_unique_name(struct Main *bmain, const char *name) ATTR_NONNULL()
Definition: lib_id.c:2165
#define FOREACH_MAIN_ID_END
Definition: BKE_main.h:250
#define MAIN_VERSION_ATLEAST(main, ver, subver)
Definition: BKE_main.h:269
#define FOREACH_MAIN_ID_BEGIN(_bmain, _id)
Definition: BKE_main.h:244
struct ListBase * which_libbase(struct Main *bmain, short type)
Definition: main.c:447
void BKE_mesh_tessface_clear(struct Mesh *mesh)
Definition: mesh.c:1567
void BKE_mesh_do_versions_convert_mfaces_to_mpolys(struct Mesh *mesh)
void BKE_mesh_calc_edges_loose(struct Mesh *mesh)
void BKE_mesh_calc_normals(struct Mesh *me)
void BKE_mesh_update_customdata_pointers(struct Mesh *me, const bool do_ensure_tess_cd)
Definition: mesh.c:766
struct bNodeTree * ntreeFromID(struct ID *id)
Definition: node.cc:3147
#define SH_NODE_BSDF_PRINCIPLED
Definition: BKE_node.h:1058
void nodeRemLink(struct bNodeTree *ntree, struct bNodeLink *link)
Definition: node.cc:2231
void ntreeUpdateTree(struct Main *main, struct bNodeTree *ntree)
Definition: node.cc:4262
#define SH_NODE_SHADERTORGB
Definition: BKE_node.h:977
#define FOREACH_NODETREE_END
Definition: BKE_node.h:945
struct bNodeLink * nodeAddLink(struct bNodeTree *ntree, struct bNode *fromnode, struct bNodeSocket *fromsock, struct bNode *tonode, struct bNodeSocket *tosock)
Definition: node.cc:2189
struct bNodeSocket * nodeFindSocket(const struct bNode *node, eNodeSocketInOut in_out, const char *identifier)
#define SH_NODE_CURVE_RGB
Definition: BKE_node.h:983
#define SH_NODE_EEVEE_SPECULAR
Definition: BKE_node.h:1060
#define FOREACH_NODETREE_BEGIN(bmain, _nodetree, _id)
Definition: BKE_node.h:935
#define TEX_NODE_CURVE_TIME
Definition: BKE_node.h:1337
struct bNode * nodeAddStaticNode(const struct bContext *C, struct bNodeTree *ntree, int type)
Definition: node.cc:2004
#define CMP_NODE_CURVE_VEC
Definition: BKE_node.h:1139
void BKE_paint_brush_set(struct Paint *paint, struct Brush *br)
Definition: paint.c:609
bool BKE_paint_ensure_from_paintmode(struct Scene *sce, ePaintMode mode)
Definition: paint.c:306
@ PAINT_MODE_GPENCIL
Definition: BKE_paint.h:88
@ PAINT_MODE_VERTEX_GPENCIL
Definition: BKE_paint.h:90
@ PAINT_MODE_WEIGHT_GPENCIL
Definition: BKE_paint.h:92
@ PAINT_MODE_SCULPT_GPENCIL
Definition: BKE_paint.h:91
void BKE_paint_toolslots_init_from_main(struct Main *bmain)
struct PointCache * BKE_ptcache_add(struct ListBase *ptcaches)
Definition: pointcache.c:3072
void BKE_report(ReportList *reports, ReportType type, const char *message)
Definition: report.c:104
API for Blender-side Rigid Body stuff.
void BKE_rigidbody_constraints_collection_validate(struct Scene *scene, struct RigidBodyWorld *rbw)
Definition: rigidbody.c:2351
void BKE_rigidbody_objects_collection_validate(struct Scene *scene, struct RigidBodyWorld *rbw)
Definition: rigidbody.c:2348
struct ARegion * BKE_spacedata_find_region_type(const struct SpaceLink *slink, const struct ScrArea *area, int region_type) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
void BKE_screen_area_free(struct ScrArea *area)
Definition: screen.c:709
struct ARegion * BKE_area_find_region_type(const struct ScrArea *area, int type)
void BKE_screen_remove_double_scredges(struct bScreen *screen)
Definition: screen.c:817
void BKE_screen_view3d_shading_init(struct View3DShading *shading)
Definition: screen.c:1054
void BKE_screen_remove_unused_scrverts(struct bScreen *screen)
Definition: screen.c:878
void BKE_screen_remove_unused_scredges(struct bScreen *screen)
Definition: screen.c:833
void BKE_area_region_free(struct SpaceType *st, struct ARegion *region)
Definition: screen.c:663
struct SpaceType * BKE_spacetype_from_id(int spaceid)
Definition: screen.c:382
@ STUDIOLIGHT_TYPE_MATCAP
@ STUDIOLIGHT_TYPE_WORLD
struct StudioLight * BKE_studiolight_find(const char *name, int flag)
Definition: studiolight.c:1483
struct StudioLight * BKE_studiolight_find_default(int flag)
Definition: studiolight.c:1458
int BKE_unit_base_of_type_get(int system, int type)
Definition: unit.c:1285
@ B_UNIT_LENGTH
Definition: BKE_unit.h:79
@ B_UNIT_MASS
Definition: BKE_unit.h:82
@ B_UNIT_TIME
Definition: BKE_unit.h:84
void BKE_workspace_active_layout_set(struct WorkSpaceInstanceHook *hook, const int winid, struct WorkSpace *workspace, struct WorkSpaceLayout *layout) SETTER_ATTRS
Activate a layout.
Definition: workspace.c:594
struct WorkSpaceLayout * BKE_workspace_layout_add(struct Main *bmain, struct WorkSpace *workspace, struct bScreen *screen, const char *name) ATTR_NONNULL()
Definition: workspace.c:367
void BKE_workspace_tool_remove(struct WorkSpace *workspace, struct bToolRef *tref) ATTR_NONNULL(1
struct WorkSpaceInstanceHook * BKE_workspace_instance_hook_create(const struct Main *bmain, const int winid)
struct WorkSpace * BKE_workspace_add(struct Main *bmain, const char *name)
Definition: workspace.c:307
struct bScreen * BKE_workspace_active_screen_get(const struct WorkSpaceInstanceHook *hook) GETTER_ATTRS
void BKE_workspace_active_set(struct WorkSpaceInstanceHook *hook, struct WorkSpace *workspace) SETTER_ATTRS
Definition: workspace.c:539
struct WorkSpaceLayout * BKE_workspace_layout_find(const struct WorkSpace *workspace, const struct bScreen *screen) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT
#define BLI_assert(a)
Definition: BLI_assert.h:58
struct GSet GSet
Definition: BLI_ghash.h:189
unsigned int BLI_ghashutil_ptrhash(const void *key)
GHash * BLI_ghash_new(GHashHashFP hashfp, GHashCmpFP cmpfp, const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
Definition: BLI_ghash.c:718
GSet * BLI_gset_new(GSetHashFP hashfp, GSetCmpFP cmpfp, const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
Definition: BLI_ghash.c:1125
void BLI_gset_insert(GSet *gs, void *key)
Definition: BLI_ghash.c:1147
bool BLI_ghashutil_ptrcmp(const void *a, const void *b)
bool BLI_gset_haskey(GSet *gs, const void *key) ATTR_WARN_UNUSED_RESULT
Definition: BLI_ghash.c:1216
void BLI_ghash_insert(GHash *gh, void *key, void *val)
Definition: BLI_ghash.c:756
void BLI_ghash_free(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
Definition: BLI_ghash.c:1008
void BLI_gset_free(GSet *gs, GSetKeyFreeFP keyfreefp)
Definition: BLI_ghash.c:1253
void * BLI_ghash_lookup(GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
Definition: BLI_ghash.c:803
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
Definition: BLI_listbase.h:124
void BLI_addhead(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition: listbase.c:87
#define LISTBASE_FOREACH(type, var, list)
Definition: BLI_listbase.h:172
void BLI_freelinkN(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition: listbase.c:281
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
Definition: BLI_listbase.h:188
BLI_INLINE void BLI_listbase_clear(struct ListBase *lb)
Definition: BLI_listbase.h:128
void BLI_insertlinkafter(struct ListBase *listbase, void *vprevlink, void *vnewlink) ATTR_NONNULL(1)
Definition: listbase.c:352
int BLI_listbase_count_at_most(const struct ListBase *listbase, const int count_max) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void void BLI_freelistN(struct ListBase *listbase) ATTR_NONNULL(1)
Definition: listbase.c:547
void void BLI_INLINE bool BLI_listbase_is_single(const struct ListBase *lb)
Definition: BLI_listbase.h:120
void * BLI_findstring(const struct ListBase *listbase, const char *id, const int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition: listbase.c:110
void BLI_remlink(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition: listbase.c:133
void BLI_insertlinkbefore(struct ListBase *listbase, void *vnextlink, void *vnewlink) ATTR_NONNULL(1)
Definition: listbase.c:395
void * BLI_findlink(const struct ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
MINLINE int min_ii(int a, int b)
#define M_PI
Definition: BLI_math_base.h:38
MINLINE void srgb_to_linearrgb_v3_v3(float linear[3], const float srgb[3])
MINLINE void srgb_to_linearrgb_v4(float linear[4], const float srgb[4])
MINLINE void copy_v4_v4(float r[4], const float a[4])
MINLINE void copy_v2_v2(float r[2], const float a[2])
MINLINE void mul_v3_fl(float r[3], float f)
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE bool is_zero_v3(const float a[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void copy_v3_fl(float r[3], float f)
MINLINE void copy_v2_fl(float r[2], float f)
void * BLI_mempool_calloc(BLI_mempool *pool) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
Definition: BLI_mempool.c:362
@ BLI_MEMPOOL_ALLOW_ITER
Definition: BLI_mempool.h:85
BLI_mempool * BLI_mempool_create(unsigned int esize, unsigned int totelem, unsigned int pchunk, unsigned int flag) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
Definition: BLI_mempool.c:268
#define FILE_MAXFILE
bool BLI_str_startswith(const char *__restrict str, const char *__restrict start) ATTR_NONNULL()
Definition: string.c:1006
#define STR_ELEM(...)
Definition: BLI_string.h:218
#define STRNCPY(dst, src)
Definition: BLI_string.h:163
char * BLI_strdupn(const char *str, const size_t len) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
Definition: string.c:54
char * BLI_strdupcat(const char *__restrict str1, const char *__restrict str2) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL() ATTR_MALLOC
Definition: string.c:81
bool BLI_str_endswith(const char *__restrict str, const char *__restrict end) ATTR_NONNULL()
Definition: string.c:1040
size_t BLI_snprintf(char *__restrict dst, size_t maxncpy, const char *__restrict format,...) ATTR_NONNULL(1
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, const size_t maxncpy) ATTR_NONNULL()
Definition: string.c:108
#define ARRAY_SIZE(arr)
#define ARRAY_SET_ITEMS(...)
#define SWAP(type, a, b)
#define UNUSED(x)
#define SET_FLAG_FROM_TEST(value, test, flag)
#define MAX2(a, b)
#define ELEM(...)
#define STREQ(a, b)
external readfile function prototypes.
#define DATA_(msgid)
@ LIB_TAG_INDIRECT
Definition: DNA_ID.h:524
#define MAX_ID_NAME
Definition: DNA_ID.h:269
@ LIB_EMBEDDED_DATA
Definition: DNA_ID.h:482
@ ID_BR
Definition: DNA_ID_enums.h:81
@ ID_MA
Definition: DNA_ID_enums.h:63
@ ID_GR
Definition: DNA_ID_enums.h:77
@ ADS_FILTER_SUMMARY
@ ROT_MODE_XYZ
@ ADS_FLAG_SUMMARY_COLLAPSED
@ POSE_RECALC
@ SACTCONT_TIMELINE
@ SACTCONT_DOPESHEET
@ SACTION_SHOW_INTERPOLATION
@ SACTION_SHOW_EXTREMES
@ SACTION_SHOW_MARKERS
@ BBONE_HANDLE_AUTO
@ BBONE_HANDLE_ABSOLUTE
@ BBONE_HANDLE_RELATIVE
@ ARM_FLAG_UNUSED_5
@ ARM_FLAG_UNUSED_12
@ ARM_FLAG_UNUSED_6
@ ARM_FLAG_UNUSED_7
@ ARM_FLAG_UNUSED_1
@ ARM_FLAG_UNUSED_9
@ BONE_INHERIT_SCALE_NONE_LEGACY
@ GPAINT_TOOL_ERASE
@ SCULPT_TOOL_CLOTH
@ SCULPT_TOOL_PAINT
@ SCULPT_TOOL_POSE
@ SCULPT_TOOL_CLAY_STRIPS
@ VPAINT_TOOL_BLUR
@ VPAINT_TOOL_DRAW
@ VPAINT_TOOL_SMEAR
@ VPAINT_TOOL_AVERAGE
@ GP_BRUSH_ICON_PEN
@ BRUSH_USE_CONNECTED_ONLY
@ BRUSH_POSE_IK_ANCHORED
@ CAM_DOF_ENABLED
@ CLOTH_BENDING_LINEAR
@ CLOTH_COLLSETTINGS_FLAG_ENABLED
@ CLOTH_COLLSETTINGS_FLAG_SELF
@ CLOTH_SIMSETTINGS_FLAG_GOAL
@ CLOTH_SIMSETTINGS_FLAG_SCALING
@ CLOTH_SIMSETTINGS_FLAG_SEW
Object groups, one object can be in many groups at once.
@ COLLECTION_RESTRICT_RENDER
@ COLLECTION_RESTRICT_VIEWPORT
@ COLLECTION_IS_MASTER
@ COLLECTION_RESTRICT_SELECT
@ CUMA_EXTEND_EXTRAPOLATE
@ CURVE_PRESET_GAUSS
@ CURVE_PRESET_BELL
@ ROTLIKE_MIX_OFFSET
@ ROTLIKE_MIX_REPLACE
@ CONSTRAINT_TYPE_ROTLIKE
@ CONSTRAINT_TYPE_SPLINEIK
@ CONSTRAINT_TYPE_SIZELIKE
@ CONSTRAINT_TYPE_SAMEVOL
@ CONSTRAINT_TYPE_TRANSFORM_CACHE
@ CONSTRAINT_SPLINEIK_YS_FIT_CURVE
@ CONSTRAINT_SPACE_WORLD
@ CONSTRAINT_SPACE_LOCAL
@ SAMEVOL_UNIFORM
@ PROF_PRESET_LINE
@ CD_SCULPT_FACE_SETS
#define DNA_struct_default_get(struct_name)
Definition: DNA_defaults.h:44
#define MAX_NAME
Definition: DNA_defs.h:62
blenloader genfile private function prototypes
bool DNA_struct_find(const struct SDNA *sdna, const char *stype)
bool DNA_struct_elem_find(const struct SDNA *sdna, const char *stype, const char *vartype, const char *name)
@ GP_ARRAY_USE_OB_OFFSET
@ eGpencilModifierType_Array
@ eGpencilModifierType_Noise
@ eGpencilModifierType_Color
@ eGpencilModifierType_Multiply
@ eGpencilModifierType_Subdiv
@ eGpencilModifierType_Opacity
@ eGpencilModifierType_Hook
@ eGpencilModifierType_Smooth
@ eGpencilModifierType_Tint
@ eGpencilModifierType_Thick
@ GP_NOISE_MOD_THICKNESS
#define GP_DEFAULT_PIX_FACTOR
@ GP_LAYER_IS_RULER
@ GP_LAYER_LOCKED
@ GP_LAYER_HIDE
@ GP_LAYER_USE_LIGHTS
#define GP_DEFAULT_GRID_LINES
@ GP_DATA_ANNOTATIONS
@ IMA_FLAG_UNUSED_16
@ IMA_FLAG_UNUSED_8
@ IMA_FLAG_UNUSED_6
@ IMA_FLAG_UNUSED_1
@ IMA_FLAG_UNUSED_15
@ IMA_HIGH_BITDEPTH
@ IMA_FLAG_UNUSED_4
@ IMA_TYPE_R_RESULT
@ IMA_ALPHA_IGNORE
@ LAYER_COLLECTION_EXCLUDE
@ LAYER_COLLECTION_INDIRECT_ONLY
@ LAYER_COLLECTION_HOLDOUT
@ BASE_SELECTABLE
@ BASE_SELECTED
@ VIEW_LAYER_FREESTYLE
@ VIEW_LAYER_RENDER
#define LA_AREA
#define LA_SPOT
#define LA_SUN
#define LA_SHADOW
#define LA_LOCAL
#define LS_MODIFIER_DISTANCE_FROM_CAMERA
#define LS_MODIFIER_TANGENT
#define LS_MODIFIER_CREASE_ANGLE
#define LS_MODIFIER_DISTANCE_FROM_OBJECT
#define LS_MODIFIER_NOISE
#define LS_MODIFIER_ALONG_STROKE
#define LS_MODIFIER_CURVATURE_3D
#define LS_MODIFIER_MATERIAL
@ GP_MATERIAL_STROKE_PATTERN
@ GP_MATERIAL_STROKE_TEX_MIX
@ GP_MATERIAL_STROKE_SHOW
@ GP_MATERIAL_FILL_SHOW
@ MA_BM_SOLID
@ MA_BM_BLEND
@ MA_BS_SOLID
@ GP_MATERIAL_FILL_STYLE_GRADIENT
@ GP_MATERIAL_FILL_STYLE_TEXTURE
@ GP_MATERIAL_FILL_STYLE_CHECKER
@ GP_MATERIAL_FILL_STYLE_SOLID
@ ME_FLAG_UNUSED_6
@ ME_FLAG_UNUSED_4
@ ME_REMESH_REPROJECT_VERTEX_COLORS
@ ME_FLAG_UNUSED_3
@ ME_FLAG_UNUSED_7
@ ME_FLAG_UNUSED_1
@ ME_FLAG_UNUSED_0
@ eMultiresModifierFlag_PlainUv_DEPRECATED
@ eMultiresModifierFlag_UseCrease
@ MOD_SHRINKWRAP_ABOVE_SURFACE
@ eModifierType_ParticleSystem
@ eModifierType_Solidify
@ eModifierType_Subsurf
@ eModifierType_Cloth
@ eModifierType_Fluid
@ eModifierType_Shrinkwrap
@ eModifierType_Hook
@ eModifierType_Ocean
@ eModifierType_DataTransfer
@ eModifierType_UVWarp
@ eModifierType_SurfaceDeform
@ eModifierType_Warp
@ eModifierType_CorrectiveSmooth
@ eModifierType_Bevel
@ eModifierType_Remesh
@ eModifierType_WeightVGEdit
@ eModifierType_Multires
@ eModifierType_Triangulate
@ eSubsurfModifierFlag_SubsurfUv_DEPRECATED
@ eSubsurfModifierFlag_UseCrease
@ SUBSURF_UV_SMOOTH_PRESERVE_CORNERS
@ SUBSURF_UV_SMOOTH_NONE
@ SHD_OUTPUT_ALL
@ SHD_OUTPUT_EEVEE
@ SOCK_OUT
@ SOCK_IN
@ SHD_SUBSURFACE_BURLEY
@ SOCK_SHADER
#define SHD_GLOSSY_MULTI_GGX
#define NTREE_SHADER
@ OB_TEXTURE
@ OB_SOLID
@ OB_RENDER
@ OB_MATERIAL
@ OB_MODE_WEIGHT_PAINT
@ OB_MODE_SCULPT
@ OB_MODE_VERTEX_PAINT
Object is a sort of wrapper for general info.
@ OB_ADS_UNUSED_1
@ OB_ADS_UNUSED_2
@ OB_TRANSFORM_ADJUST_ROOT_PARENT_FOR_VIEW_LOCK
@ OB_DUPLI
@ OB_TRANSFLAG_UNUSED_1
@ OB_TRANSFLAG_UNUSED_12
@ OB_TRANSFLAG_UNUSED_6
@ OB_TRANSFLAG_UNUSED_3
@ PAROBJECT
@ OB_EMPTY
@ OB_CAMERA
@ OB_GPENCIL
@ OB_DUPLI_FLAG_VIEWPORT
@ OB_DUPLI_FLAG_RENDER
@ OB_EMPTY_IMAGE_HIDE_ORTHOGRAPHIC
@ OB_EMPTY_IMAGE_HIDE_BACK
@ OB_EMPTY_IMAGE_HIDE_PERSPECTIVE
@ TSE_LAYER_COLLECTION
@ TSE_CLOSED
@ PART_SHAPE_CLOSE_TIP
#define PART_DRAW_NOT
#define PART_DRAW_BB
Types and defines for representing Rigid Body entities.
@ RBC_TYPE_SLIDER
@ RBC_TYPE_MOTOR
@ RBC_TYPE_6DOF_SPRING
#define R_SCEMODE_UNUSED_19
#define R_MODE_UNUSED_6
#define SCE_SNAP_MODE_NODE_Y
@ R_ADDSKY
@ R_SEQ_UNUSED_0
@ R_SEQ_UNUSED_2
@ R_SEQ_UNUSED_1
@ SCULPT_FLAG_UNUSED_1
@ SCULPT_FLAG_UNUSED_2
@ SCULPT_FLAG_UNUSED_0
@ SCULPT_FLAG_UNUSED_6
#define R_MODE_UNUSED_21
@ UNIFIED_PAINT_FLAG_UNUSED_0
@ UNIFIED_PAINT_FLAG_UNUSED_1
@ SCE_DISPLAY_AA_SAMPLES_8
@ SCE_DISPLAY_AA_FXAA
#define R_MODE_UNUSED_27
#define R_SCEMODE_UNUSED_11
#define USER_UNIT_NONE
#define SCE_SNAP_MODE_FACE
#define R_MODE_UNUSED_16
@ GP_LOCKAXIS_Y
@ FFM_PRESET_GOOD
@ FFM_PRESET_REALTIME
@ FFM_PRESET_BEST
#define SCE_SNAP_MODE_NODE_X
#define R_MODE_UNUSED_20
#define R_MODE_UNUSED_4
#define R_MODE_UNUSED_10
#define R_MODE_UNUSED_13
#define R_SCEMODE_UNUSED_17
#define R_MODE_UNUSED_5
@ PAINT_SHOW_BRUSH
@ SHADOW_ESM
#define PE_UNUSED_6
#define R_SCEMODE_UNUSED_8
#define R_MODE_UNUSED_8
#define R_SCEMODE_UNUSED_13
@ R_COLOR_MANAGEMENT_UNUSED_1
#define R_MODE_UNUSED_1
#define SCE_SNAP_MODE_VOLUME
#define R_MODE_UNUSED_19
@ GP_PROJECT_VIEWSPACE
@ GP_PROJECT_CURSOR
#define R_SCEMODE_UNUSED_16
#define R_MODE_UNUSED_3
#define R_MODE_UNUSED_7
@ SCE_EEVEE_SHADOW_HIGH_BITDEPTH
@ SCE_EEVEE_VOLUMETRIC_SHADOWS
@ SCE_EEVEE_SSR_ENABLED
@ SCE_EEVEE_MOTION_BLUR_ENABLED
@ SCE_EEVEE_SSR_REFRACTION
@ SCE_EEVEE_BLOOM_ENABLED
@ SCE_EEVEE_GTAO_BOUNCE
@ SCE_EEVEE_SSR_HALF_RESOLUTION
@ SCE_EEVEE_TAA_REPROJECTION
@ SCE_EEVEE_GTAO_BENT_NORMALS
@ SCE_EEVEE_GTAO_ENABLED
@ SCE_EEVEE_VOLUMETRIC_LIGHTS
@ SCE_SNAP_TRANSFORM_MODE_TRANSLATE
#define USER_UNIT_ADAPTIVE
#define SCE_SNAP_MODE_VERTEX
#define SCE_SNAP_MODE_GRID
#define R_MODE_UNUSED_2
#define R_MODE_UNUSED_18
#define PE_BRUSH_COMB
#define SCE_LAY_DISABLE
#define SCE_LAY_FRS
#define SCE_SNAP_MODE_EDGE
@ SCE_PASS_COMBINED
@ SCE_PASS_Z
#define SCE_SNAP_MODE_INCREMENT
#define R_MODE_UNUSED_17
@ RGN_ALIGN_BOTTOM
@ RGN_ALIGN_LEFT
@ RGN_ALIGN_TOP
@ RGN_ALIGN_RIGHT
@ RGN_SPLIT_PREV
@ SCREENFULL
@ SCREENMAXIMIZED
@ AREA_FLAG_UNUSED_6
@ RGN_FLAG_DYNAMIC_SIZE
@ RGN_FLAG_HIDDEN
@ RGN_FLAG_HIDDEN_BY_USER
@ RGN_TYPE_CHANNELS
@ RGN_TYPE_TOOL_HEADER
@ RGN_TYPE_EXECUTE
@ RGN_TYPE_UI
@ RGN_TYPE_WINDOW
@ RGN_TYPE_PREVIEW
@ RGN_TYPE_NAV_BAR
@ RGN_TYPE_FOOTER
@ RGN_TYPE_HEADER
@ RGN_TYPE_TOOLS
@ RGN_TYPE_TOOL_PROPS
@ SEQ_FLAG_UNUSED_18
@ SEQ_FLAG_UNUSED_19
@ SEQ_FLAG_UNUSED_6
@ SEQ_FLAG_UNUSED_21
@ SEQ_CACHE_STORE_FINAL_OUT
@ SEQ_CACHE_VIEW_ENABLE
@ SEQ_CACHE_VIEW_FINAL_OUT
#define SEQ_SPEED_UNUSED_1
@ seqModifierType_Curves
@ seqModifierType_HueCorrect
@ SEQ_TYPE_SOUND_RAM
@ SEQ_TYPE_SOUND_HD
@ SEQ_TYPE_SPEED
@ eShaderFxColorizeMode_GrayScale
@ eShaderFxColorizeMode_Sepia
@ eShaderFxType_Pixel
@ eShaderFxType_Rim
@ eShaderFxType_Glow
@ eShaderFxType_Shadow
@ eShaderFxType_Colorize
@ SI_FLAG_UNUSED_8
@ SI_FLAG_UNUSED_0
@ SI_FLAG_UNUSED_7
@ SI_FLAG_UNUSED_17
@ SI_FLAG_UNUSED_23
@ SI_FLAG_UNUSED_3
@ SI_FLAG_UNUSED_24
@ SI_FLAG_UNUSED_1
@ SI_FLAG_UNUSED_18
@ SI_FLAG_UNUSED_6
@ SNODE_FLAG_UNUSED_6
@ SNODE_FLAG_UNUSED_11
@ SNODE_FLAG_UNUSED_10
@ SPACE_TEXT
@ SPACE_CLIP
@ SPACE_ACTION
@ SPACE_OUTLINER
@ SPACE_NODE
@ SPACE_USERPREF
@ SPACE_FILE
@ SPACE_PROPERTIES
@ SPACE_NLA
@ SPACE_SEQ
@ SPACE_EMPTY
@ SPACE_IMAGE
@ SPACE_GRAPH
@ SPACE_VIEW3D
@ SPACE_INFO
@ SC_VIEW_GRAPH
@ FILE_DETAILS_DATETIME
@ FILE_DETAILS_SIZE
@ SIPO_SHOW_MARKERS
@ SO_RESTRICT_HIDE
@ SO_RESTRICT_ENABLE
@ SO_FILTER_CLEARED_1
@ SO_FILTER_OB_STATE_SELECTABLE
@ SO_FILTER_UNUSED_5
@ SNLA_FLAG_UNUSED_0
@ SNLA_FLAG_UNUSED_1
@ SNLA_FLAG_UNUSED_3
@ SNLA_SHOW_MARKERS
@ SO_SYNC_SELECT
@ SO_FLAG_UNUSED_1
@ SB_FLAG_UNUSED_3
@ SB_FLAG_UNUSED_2
@ SO_TREESTORE_UNUSED_1
@ FILE_PARAMS_FLAG_UNUSED_6
@ FILE_PARAMS_FLAG_UNUSED_1
@ FILE_OBDATA_INSTANCE
@ SEQ_SHOW_MARKERS
@ SEQ_SHOW_FCURVES
@ SO_SEQUENCE
@ SO_DATA_API
@ SO_LIBRARIES
@ SO_VIEW_LAYER
@ SO_SCENES
@ SO_ID_ORPHANS
@ TXT_FLAG_UNUSED_9
@ TXT_FLAG_UNUSED_8
@ USER_HEADER_BOTTOM
@ V2D_SCROLL_LEFT
@ V2D_SCROLL_RIGHT
@ V3D_OFSDRAW_SHOW_GRIDFLOOR
@ V3D_OFSDRAW_SHOW_ANNOTATION
@ V3D_SHADING_TEXTURE_COLOR
@ V3D_SHADING_MATERIAL_COLOR
@ V3D_SHADING_SINGLE_COLOR
@ V3D_LIGHTING_STUDIO
@ V3D_GIZMO_SHOW_ARMATURE_BBONE
@ V3D_GIZMO_SHOW_ARMATURE_ROLL
#define V3D_FLAG_UNUSED_1
@ V3D_AROUND_CENTER_MEDIAN
#define V3D_FLAG_UNUSED_10
@ V3D_OVERLAY_EDIT_FREESTYLE_FACE
@ V3D_OVERLAY_EDIT_CREASES
@ V3D_OVERLAY_EDIT_FREESTYLE_EDGE
@ V3D_OVERLAY_EDIT_FACES
@ V3D_OVERLAY_EDIT_OCCLUDE_WIRE
@ V3D_OVERLAY_EDIT_SEAMS
@ V3D_OVERLAY_EDIT_BWEIGHTS
@ V3D_OVERLAY_EDIT_SHARP
@ V3D_OVERLAY_EDIT_EDGES
@ V3D_GIZMO_SHOW_LIGHT_LOOK_AT
@ V3D_GIZMO_SHOW_LIGHT_SIZE
#define V3D_SHOW_ORTHO_GRID
#define V3D_FLAG2_UNUSED_13
#define V3D_FLAG2_UNUSED_3
#define V3D_FLAG2_UNUSED_6
@ V3D_GIZMO_SHOW_EMPTY_FORCE_FIELD
@ V3D_GIZMO_SHOW_EMPTY_IMAGE
#define V3D_FLAG2_UNUSED_14
@ V3D_GIZMO_SHOW_CAMERA_DOF_DIST
@ V3D_GIZMO_SHOW_CAMERA_LENS
#define V3D_GP_SHOW_EDIT_LINES
#define V3D_FLAG2_UNUSED_15
#define V3D_LOCAL_COLLECTIONS
#define V3D_FLAG2_UNUSED_12
#define V3D_FLAG_UNUSED_12
@ V3D_SHADING_SCENE_WORLD_RENDER
@ V3D_SHADING_SPECULAR_HIGHLIGHT
@ V3D_SHADING_WORLD_ORIENTATION
@ V3D_SHADING_OBJECT_OUTLINE
@ V3D_SHADING_SCENE_LIGHTS_RENDER
@ V3D_SHADING_XRAY_WIREFRAME
@ V3D_SHADING_BACKFACE_CULLING
#define WM_OUTLINER_SYNC_SELECT_FROM_ALL
#define WO_MODE_UNUSED_5
#define WO_MODE_UNUSED_1
#define WO_MODE_UNUSED_2
#define WO_MODE_UNUSED_3
#define WO_MODE_UNUSED_7
#define WO_MODE_UNUSED_4
@ XR_SESSION_USE_POSITION_TRACKING
Definition: DNA_xr_types.h:52
@ IMB_BLEND_EXCLUSION
Definition: IMB_imbuf.h:217
@ IMB_BLEND_DIFFERENCE
Definition: IMB_imbuf.h:216
@ IMB_BLEND_HARDLIGHT
Definition: IMB_imbuf.h:207
@ IMB_BLEND_COLORDODGE
Definition: IMB_imbuf.h:210
@ IMB_BLEND_ERASE_ALPHA
Definition: IMB_imbuf.h:204
@ IMB_BLEND_SCREEN
Definition: IMB_imbuf.h:211
@ IMB_BLEND_HUE
Definition: IMB_imbuf.h:218
@ IMB_BLEND_MUL
Definition: IMB_imbuf.h:201
@ IMB_BLEND_ADD_ALPHA
Definition: IMB_imbuf.h:205
@ IMB_BLEND_DARKEN
Definition: IMB_imbuf.h:203
@ IMB_BLEND_OVERLAY
Definition: IMB_imbuf.h:206
@ IMB_BLEND_SATURATION
Definition: IMB_imbuf.h:219
@ IMB_BLEND_LUMINOSITY
Definition: IMB_imbuf.h:220
@ IMB_BLEND_LIGHTEN
Definition: IMB_imbuf.h:202
@ IMB_BLEND_SOFTLIGHT
Definition: IMB_imbuf.h:212
@ IMB_BLEND_MIX
Definition: IMB_imbuf.h:198
@ IMB_BLEND_ADD
Definition: IMB_imbuf.h:199
@ IMB_BLEND_SUB
Definition: IMB_imbuf.h:200
Read Guarded memory(de)allocation.
Group RGB to Bright Vector Camera Vector Combine Material Light Line Style Layer SH_NODE_ADD_SHADER
Group RGB to Bright Vector Camera Vector Combine Material Light Line Style Layer Add Ambient Diffuse Glossy Refraction Transparent Toon Principled Hair Volume Principled Light Particle Volume Image Sky Noise Wave Voronoi Brick Texture Vector Combine Vertex Separate Vector White CMP_NODE_CURVE_RGB
Group RGB to Bright Vector Camera Vector Combine Material Light Line Style Layer Add Ambient Diffuse Glossy Refraction SH_NODE_BSDF_TRANSPARENT
Group RGB to Bright Vector Camera Vector Combine Material Light Line Style Layer Add Ambient Diffuse Glossy Refraction Transparent Toon Principled Hair Volume Principled Light Particle Volume Image Sky Noise Wave Voronoi Brick Texture Vector Combine Vertex Separate Vector White RGB Map Separate Set Z Dilate Combine Combine Color Channel Split ID Combine Luminance Directional Alpha Distance Hue Movie Ellipse Bokeh View Corner Anti Mix TEX_NODE_CURVE_RGB
Group RGB to Bright Vector Camera Vector Combine Material Light Line Style Layer Add Ambient Diffuse Glossy Refraction Transparent Toon Principled Hair Volume Principled Light Particle Volume Image Sky Noise Wave Voronoi Brick Texture Vector Combine Vertex Separate Vector White RGB Map Separate Set Z Dilate Combine Combine Color Channel Split ID Combine Luminance Directional Alpha Distance CMP_NODE_HUECORRECT
Group RGB to Bright SH_NODE_CURVE_VEC
Group RGB to Bright Vector Camera Vector Combine Material Light Line Style Layer Add Ambient Diffuse Glossy Refraction Transparent Toon Principled Hair Volume Principled Light Particle Volume Image Sky Noise Wave Voronoi Brick Texture Vector Combine Vertex Separate Vector White RGB Map CMP_NODE_TIME
Group RGB to Bright Vector Camera Vector Combine SH_NODE_OUTPUT_MATERIAL
#define SEQ_ALL_END
Definition: SEQ_iterator.h:48
#define SEQ_ALL_BEGIN(ed, _seq)
Definition: SEQ_iterator.h:41
static ShaderNode * add_node(Scene *scene, BL::RenderEngine &b_engine, BL::BlendData &b_data, BL::Depsgraph &b_depsgraph, BL::Scene &b_scene, ShaderGraph *graph, BL::ShaderNodeTree &b_ntree, BL::ShaderNode &b_node)
unsigned int U
Definition: btGjkEpa3.h:78
vector< ShaderInput * > inputs
Definition: graph.h:223
#define SELECT
OperationNode * node
Scene scene
Curve curve
FreestyleLineStyle linestyle
World world
void * user_data
DEGForeachIDComponentCallback callback
static CCL_NAMESPACE_BEGIN const double alpha
bNodeTree * ntree
DRWShaderLibrary * lib
bNodeSocketValueRGBA * color_socket
bool enabled
#define atanf(x)
void(* MEM_freeN)(void *vmemh)
Definition: mallocn.c:41
void *(* MEM_callocN)(size_t len, const char *str)
Definition: mallocn.c:45
static void error(const char *str)
Definition: meshlaplacian.c:65
static unsigned a[3]
Definition: RandGen.cpp:92
static void area(int d1, int d2, int e1, int e2, float weights[2])
const char * RE_engine_id_BLENDER_WORKBENCH
Definition: scene.c:1743
const char * RE_engine_id_BLENDER_EEVEE
Definition: scene.c:1742
const SequenceModifierTypeInfo * SEQ_modifier_type_info_get(int type)
struct ARegion * next
short alignment
short regiontype
ListBase drivers
float vec[4]
float radius
float tilt
struct ImageFormatData im_format
struct CurveProfile * custom_profile
float vec[3][3]
struct BrushGpencilSettings * gpencil_settings
struct CameraDOFSettings dof
ListBase variables
struct ClothSimSettings * sim_parms
struct ClothCollSettings * coll_parms
float max_internal_compression
float internal_spring_max_diversion
struct CurveMapping * curve_intensity
struct CurveMapping * curve_mapping
CurveMap cm[4]
struct CurveMapping curve_mapping
ListBase seqbase
float recycle_max_cost
bActionGroup * grp
char * rna_path
ChannelDriver * driver
struct SDNA * filesdna
Definition: readfile.h:105
struct ReportList * reports
Definition: readfile.h:148
struct FluidDomainSettings * domain
struct CurveMapping * custom_ipo
struct CurveMapping * cur_primitive
struct CurveMapping * cur_falloff
struct CurveMapping * curfalloff
struct CurveMapping curve_mapping
Definition: DNA_ID.h:273
int tag
Definition: DNA_ID.h:292
struct Library * lib
Definition: DNA_ID.h:277
short flag
Definition: DNA_ID.h:288
void * next
Definition: DNA_ID.h:274
char name[66]
Definition: DNA_ID.h:283
ColorManagedDisplaySettings display_settings
ColorManagedViewSettings view_settings
struct LayerCollection * next
ListBase layer_collections
unsigned short local_collections_bits
struct Collection * collection
ID id
Definition: DNA_ID.h:349
void * last
Definition: DNA_listBase.h:47
void * first
Definition: DNA_listBase.h:47
Definition: BKE_main.h:116
ListBase lightprobes
Definition: BKE_main.h:165
ListBase brushes
Definition: BKE_main.h:171
ListBase scenes
Definition: BKE_main.h:146
char is_locked_for_linking
Definition: BKE_main.h:141
ListBase wm
Definition: BKE_main.h:175
ListBase textures
Definition: BKE_main.h:153
ListBase actions
Definition: BKE_main.h:169
ListBase texts
Definition: BKE_main.h:163
ListBase meshes
Definition: BKE_main.h:149
ListBase lights
Definition: BKE_main.h:156
ListBase particles
Definition: BKE_main.h:172
ListBase materials
Definition: BKE_main.h:152
ListBase linestyles
Definition: BKE_main.h:179
ListBase cameras
Definition: BKE_main.h:157
char name[1024]
Definition: BKE_main.h:118
ListBase armatures
Definition: BKE_main.h:168
ListBase curves
Definition: BKE_main.h:150
ListBase worlds
Definition: BKE_main.h:160
ListBase screens
Definition: BKE_main.h:161
ListBase workspaces
Definition: BKE_main.h:181
ListBase collections
Definition: BKE_main.h:167
ListBase images
Definition: BKE_main.h:154
ListBase gpencils
Definition: BKE_main.h:176
ListBase objects
Definition: BKE_main.h:148
struct MaterialGPencilStyle * gp_style
float remesh_voxel_size
struct ModifierData * next
struct bGPdata * gpd
struct CurveMapping * curve_intensity
void * data
struct CurveMapping * cavity_curve
struct ParticleSystem * psys
struct ClothModifierData * clmd
struct CurveMapping mblur_shutter_curve
struct BakeData bake
char engine[32]
struct ImageFormatData im_format
struct FFMpegCodecData ffcodecdata
char name[64]
struct PointCache * pointcache
struct RigidBodyWorld_Shared * shared
ListBase scene_collections
struct SceneCollection * next
float matcap_ssao_distance
float light_direction[3]
float matcap_ssao_attenuation
View3DShading shading
float volumetric_light_clamp
float volumetric_start
float motion_blur_shutter
float bloom_intensity
float ssr_max_roughness
float gi_irradiance_smoothing
float volumetric_end
float sss_jitter_threshold
float bloom_color[3]
float volumetric_sample_distribution
float ssr_border_fade
float bloom_threshold
float bokeh_threshold
int gi_visibility_resolution
float bokeh_max_size
float gi_filter_quality
float gi_irradiance_draw_size
float gi_cubemap_draw_size
float light_threshold
int volumetric_shadow_samples
float ssr_firefly_fac
int volumetric_tile_size
int gi_cubemap_resolution
struct Collection * master_collection
struct RigidBodyWorld * rigidbody_world
IDProperty * layer_properties
struct SceneDisplay display
struct SceneGpencil grease_pencil_settings
struct ToolSettings * toolsettings
ColorManagedViewSettings view_settings
struct Editing * ed
struct bGPdata * gpd
struct RenderData r
View3DCursor cursor
ListBase view_layers
TransformOrientationSlot orientation_slots[4]
struct UnitSettings unit
struct Object * camera
struct SceneEEVEE eevee
Paint paint
struct PointCache * pointcache
struct ListBase ptcaches
struct SoftBody_Shared * shared
bAction * action
bDopeSheet ads
ListBase regionbase
struct MovieClip * clip
struct wmOperator * op
FileSelectParams * params
int tile_grid_shape[2]
struct bGPdata * gpd
struct BLI_mempool * treestore
struct SpaceLink *(* create)(const struct ScrArea *area, const struct Scene *scene)
Definition: BKE_screen.h:86
int spaceid
Definition: BKE_screen.h:81
char name[FILE_MAXFILE]
short type
struct CurveMapping * curve_thickness
struct CurveMapping * curve_intensity
char transform_pivot_point
struct ImagePaintSettings imapaint
struct CurveProfile * custom_bevel_profile_preset
GpPaint * gp_paint
struct UnifiedPaintSettings unified_paint_settings
short annotate_thickness
struct GP_Interpolate_Settings gp_interpolate
struct ParticleEditSettings particle
char snap_transform_mode_flag
UvSculpt * uvsculpt
struct GP_Sculpt_Settings gp_sculpt
float rotation_axis[3]
float rotation_quaternion[4]
float sculpt_mode_mask_opacity
float gpencil_grid_opacity
float sculpt_mode_face_sets_opacity
float gpencil_paper_opacity
float texture_paint_mode_opacity
float vertex_paint_mode_opacity
float gpencil_vertex_paint_opacity
float weight_paint_mode_opacity
float curvature_ridge_factor
float background_color[3]
float cavity_valley_factor
float curvature_valley_factor
float studiolight_intensity
char studio_light[256]
float single_color[3]
char lookdev_light[256]
struct IDProperty * prop
float vertex_opacity
View3DOverlay overlay
char gizmo_show_armature
char gizmo_show_light
char gizmo_show_camera
float clip_end
char gizmo_show_empty
View3DShading shading
float clip_start
short gp_flag
struct FreestyleConfig freestyle_config
struct IDProperty * id_properties
ListBase layer_collections
struct ViewLayer * next
struct Base * basact
ListBase object_bases
float pass_alpha_threshold
struct Material * mat_override
char name[64]
struct CurveMapping * curfalloff
struct CurveMapping * cmap_curve
Wrapper for bScreen.
short flag
struct bConstraint * next
float vert_color[4]
ListBase layers
char identifier[64]
ListBase nodes
ListBase links
short custom1
float locy
float locx
short type
ListBase areabase
static int blend(const Tex *tex, const float texvec[3], TexResult *texres)
__forceinline const avxi abs(const avxi &a)
Definition: util_avxi.h:186
__forceinline const avxi srl(const avxi &a, const int32_t b)
Definition: util_avxi.h:348
void SEQ_sequence_base_unique_name_recursive(ListBase *seqbasep, Sequence *seq)
Definition: utils.c:139
static ARegion * do_versions_find_region(ListBase *regionbase, int regiontype)
static void do_version_collection_propagate_lib_to_children(Collection *collection)
static void do_version_fcurve_hide_viewport_fix(struct ID *UNUSED(id), struct FCurve *fcu, void *UNUSED(user_data))
#define PAINT_BLEND_DIFFERENCE
#define PAINT_BLEND_EXCLUSION
static void do_versions_material_convert_legacy_blend_mode(bNodeTree *ntree, char blend_method)
#define PAINT_BLEND_COLORDODGE
static ARegion * do_versions_add_region(int regiontype, const char *name)
static void do_version_layers_to_collections(Main *bmain, Scene *scene)
static void do_versions_area_ensure_tool_region(Main *bmain, const short space_type, const short region_flag)
#define PAINT_BLEND_SATURATION
#define EEVEE_GET_FLOAT(_props, _name)
#define PAINT_BLEND_SUB
static void do_version_curvemapping_walker(Main *bmain, void(*callback)(CurveMapping *cumap))
static void do_versions_remove_region(ListBase *regionbase, ARegion *region)
static void do_version_bbone_scale_animdata_cb(ID *UNUSED(id), AnimData *adt, void *UNUSED(wrapper_data))
#define PAINT_BLEND_LUMINOSITY
static void do_versions_remove_regions_by_type(ListBase *regionbase, int regiontype)
static bool replace_bbone_scale_rnapath(char **p_old_path)
static bScreen * screen_parent_find(const bScreen *screen)
#define PAINT_BLEND_HARDLIGHT
#define PAINT_BLEND_AVERAGE
#define EEVEE_GET_BOOL(_props, _name, _flag)
static void do_version_bbone_scale_fcurve_fix(ListBase *curves, FCurve *fcu)
#define PAINT_BLEND_BLUR
#define EEVEE_GET_INT(_props, _name)
#define PAINT_BLEND_ALPHA_ADD
static void do_version_curvemapping_flag_extend_extrapolate(CurveMapping *cumap)
static void do_version_constraints_copy_rotation_mix_mode(ListBase *lb)
static void do_version_workspaces_after_lib_link(Main *bmain)
After lib-link versioning for new workspace design.
#define PAINT_BLEND_OVERLAY
#define PAINT_BLEND_ALPHA_SUB
#define CUMA_EXTEND_EXTRAPOLATE_OLD
#define PAINT_BLEND_SOFTLIGHT
#define PAINT_BLEND_SMEAR
#define PAINT_BLEND_SCREEN
void do_versions_after_linking_280(Main *bmain, ReportList *UNUSED(reports))
static void do_version_workspaces_create_from_screens(Main *bmain)
#define PAINT_BLEND_LIGHTEN
void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
static ID * rename_id_for_versioning(Main *bmain, const short id_type, const char *name_src, const char *name_dst)
static void do_version_area_change_space_to_space_action(ScrArea *area, const Scene *scene)
static void do_versions_seq_set_cache_defaults(Editing *ed)
static ARegion * do_versions_find_region_or_null(ListBase *regionbase, int regiontype)
#define EEVEE_GET_FLOAT_ARRAY(_props, _name, _length)
static void do_version_constraints_maintain_volume_mode_uniform(ListBase *lb)
static void do_versions_seq_alloc_transform_and_crop(ListBase *seqbase)
#define PAINT_BLEND_MIX
#define PAINT_BLEND_DARKEN
static void do_versions_seq_unique_name_all_strips(Scene *sce, ListBase *seqbasep)
static void do_versions_local_collection_bits_set(LayerCollection *layer_collection)
static void do_version_bones_inherit_scale(ListBase *lb)
#define PAINT_BLEND_MUL
#define PAINT_BLEND_ADD
#define PAINT_BLEND_HUE
static void do_version_constraints_copy_scale_power(ListBase *lb)
static void do_versions_fix_annotations(bGPdata *gpd)
static void do_version_bones_split_bbone_scale(ListBase *lb)