Changeset View
Changeset View
Standalone View
Standalone View
source/blender/blenloader/intern/versioning_280.c
| Show First 20 Lines • Show All 81 Lines • ▼ Show 20 Lines | static bScreen *screen_parent_find(const bScreen *screen) | ||||
| return NULL; | return NULL; | ||||
| } | } | ||||
| static void do_version_workspaces_create_from_screens(Main *bmain) | static void do_version_workspaces_create_from_screens(Main *bmain) | ||||
| { | { | ||||
| for (bScreen *screen = bmain->screen.first; screen; screen = screen->id.next) { | for (bScreen *screen = bmain->screen.first; screen; screen = screen->id.next) { | ||||
| const bScreen *screen_parent = screen_parent_find(screen); | const bScreen *screen_parent = screen_parent_find(screen); | ||||
| WorkSpace *workspace; | WorkSpace *workspace; | ||||
| SceneLayer *layer = BKE_scene_layer_from_scene_get(screen->scene); | ViewLayer *layer = BKE_view_layer_from_scene_get(screen->scene); | ||||
| ListBase *transform_orientations; | ListBase *transform_orientations; | ||||
| if (screen_parent) { | if (screen_parent) { | ||||
| /* fullscreen with "Back to Previous" option, don't create | /* fullscreen with "Back to Previous" option, don't create | ||||
| * a new workspace, add layout workspace containing parent */ | * a new workspace, add layout workspace containing parent */ | ||||
| workspace = BLI_findstring( | workspace = BLI_findstring( | ||||
| &bmain->workspaces, screen_parent->id.name + 2, offsetof(ID, name) + 2); | &bmain->workspaces, screen_parent->id.name + 2, offsetof(ID, name) + 2); | ||||
| } | } | ||||
| else { | else { | ||||
| workspace = BKE_workspace_add(bmain, screen->id.name + 2); | workspace = BKE_workspace_add(bmain, screen->id.name + 2); | ||||
| } | } | ||||
| BKE_workspace_layout_add(workspace, screen, screen->id.name + 2); | BKE_workspace_layout_add(workspace, screen, screen->id.name + 2); | ||||
| BKE_workspace_render_layer_set(workspace, layer); | BKE_workspace_view_layer_set(workspace, layer); | ||||
| #ifdef WITH_CLAY_ENGINE | #ifdef WITH_CLAY_ENGINE | ||||
| BLI_strncpy(workspace->view_render.engine_id, RE_engine_id_BLENDER_CLAY, | BLI_strncpy(workspace->view_render.engine_id, RE_engine_id_BLENDER_CLAY, | ||||
| sizeof(workspace->view_render.engine_id)); | sizeof(workspace->view_render.engine_id)); | ||||
| #else | #else | ||||
| BLI_strncpy(workspace->view_render.engine_id, RE_engine_id_BLENDER_EEVEE, | BLI_strncpy(workspace->view_render.engine_id, RE_engine_id_BLENDER_EEVEE, | ||||
| sizeof(workspace->view_render.engine_id)); | sizeof(workspace->view_render.engine_id)); | ||||
| #endif | #endif | ||||
| ▲ Show 20 Lines • Show All 52 Lines • ▼ Show 20 Lines | enum { | ||||
| DO_VERSION_COLLECTION_HIDE_ALL = 3, | DO_VERSION_COLLECTION_HIDE_ALL = 3, | ||||
| }; | }; | ||||
| void do_versions_after_linking_280(Main *main) | void do_versions_after_linking_280(Main *main) | ||||
| { | { | ||||
| if (!MAIN_VERSION_ATLEAST(main, 280, 0)) { | if (!MAIN_VERSION_ATLEAST(main, 280, 0)) { | ||||
| for (Scene *scene = main->scene.first; scene; scene = scene->id.next) { | for (Scene *scene = main->scene.first; scene; scene = scene->id.next) { | ||||
| /* since we don't have access to FileData we check the (always valid) first render layer instead */ | /* since we don't have access to FileData we check the (always valid) first render layer instead */ | ||||
| if (scene->render_layers.first == NULL) { | if (scene->view_layers.first == NULL) { | ||||
| SceneCollection *sc_master = BKE_collection_master(scene); | SceneCollection *sc_master = BKE_collection_master(scene); | ||||
| BLI_strncpy(sc_master->name, "Master Collection", sizeof(sc_master->name)); | BLI_strncpy(sc_master->name, "Master Collection", sizeof(sc_master->name)); | ||||
| struct DoVersionSceneCollections { | struct DoVersionSceneCollections { | ||||
| SceneCollection *collections[20]; | SceneCollection *collections[20]; | ||||
| int created; | int created; | ||||
| const char *suffix; | const char *suffix; | ||||
| int flag_viewport; | int flag_viewport; | ||||
| ▲ Show 20 Lines • Show All 113 Lines • ▼ Show 20 Lines | for (Scene *scene = main->scene.first; scene; scene = scene->id.next) { | ||||
| scene_collection_parent->scene_collections.last); | scene_collection_parent->scene_collections.last); | ||||
| } | } | ||||
| scene_collection_parent = scene_collection_parent->next; | scene_collection_parent = scene_collection_parent->next; | ||||
| } | } | ||||
| } | } | ||||
| BLI_assert(scene_collection_parent == NULL); | BLI_assert(scene_collection_parent == NULL); | ||||
| scene->active_layer = 0; | scene->active_view_layer = 0; | ||||
| /* Handle legacy render layers. */ | /* Handle legacy render layers. */ | ||||
| if (!BKE_scene_uses_blender_game(scene)) { | if (!BKE_scene_uses_blender_game(scene)) { | ||||
| for (SceneRenderLayer *srl = scene->r.layers.first; srl; srl = srl->next) { | for (SceneRenderLayer *srl = scene->r.layers.first; srl; srl = srl->next) { | ||||
| SceneLayer *scene_layer = BKE_scene_layer_add(scene, srl->name); | ViewLayer *view_layer = BKE_view_layer_add(scene, srl->name); | ||||
| if (srl->samples != 0) { | if (srl->samples != 0) { | ||||
| /* It is up to the external engine to handle | /* It is up to the external engine to handle | ||||
| * its own doversion in this case. */ | * its own doversion in this case. */ | ||||
| BKE_override_scene_layer_int_add( | BKE_override_view_layer_int_add( | ||||
| scene_layer, | view_layer, | ||||
| ID_SCE, | ID_SCE, | ||||
| "samples", | "samples", | ||||
| srl->samples); | srl->samples); | ||||
| } | } | ||||
| if (srl->mat_override) { | if (srl->mat_override) { | ||||
| BKE_override_scene_layer_datablock_add( | BKE_override_view_layer_datablock_add( | ||||
| scene_layer, | view_layer, | ||||
| ID_MA, | ID_MA, | ||||
| "self", | "self", | ||||
| (ID *)srl->mat_override); | (ID *)srl->mat_override); | ||||
| } | } | ||||
| if (srl->layflag & SCE_LAY_DISABLE) { | if (srl->layflag & SCE_LAY_DISABLE) { | ||||
| scene_layer->flag &= ~SCENE_LAYER_RENDER; | view_layer->flag &= ~VIEW_LAYER_RENDER; | ||||
| } | } | ||||
| if ((srl->layflag & SCE_LAY_FRS) == 0) { | if ((srl->layflag & SCE_LAY_FRS) == 0) { | ||||
| scene_layer->flag &= ~SCENE_LAYER_FREESTYLE; | view_layer->flag &= ~VIEW_LAYER_FREESTYLE; | ||||
| } | } | ||||
| /* XXX If we are to keep layflag it should be merged with flag (dfelinto). */ | /* XXX If we are to keep layflag it should be merged with flag (dfelinto). */ | ||||
| scene_layer->layflag = srl->layflag; | view_layer->layflag = srl->layflag; | ||||
| /* XXX Not sure if we should keep the passes (dfelinto). */ | /* XXX Not sure if we should keep the passes (dfelinto). */ | ||||
| scene_layer->passflag = srl->passflag; | view_layer->passflag = srl->passflag; | ||||
| scene_layer->pass_xor = srl->pass_xor; | view_layer->pass_xor = srl->pass_xor; | ||||
| scene_layer->pass_alpha_threshold = srl->pass_alpha_threshold; | view_layer->pass_alpha_threshold = srl->pass_alpha_threshold; | ||||
| BKE_freestyle_config_free(&scene_layer->freestyle_config); | BKE_freestyle_config_free(&view_layer->freestyle_config); | ||||
| scene_layer->freestyle_config = srl->freestyleConfig; | view_layer->freestyle_config = srl->freestyleConfig; | ||||
| scene_layer->id_properties = srl->prop; | view_layer->id_properties = srl->prop; | ||||
| /* unlink master collection */ | /* unlink master collection */ | ||||
| BKE_collection_unlink(scene_layer, scene_layer->layer_collections.first); | BKE_collection_unlink(view_layer, view_layer->layer_collections.first); | ||||
| /* Add new collection bases. */ | /* Add new collection bases. */ | ||||
| for (int layer = 0; layer < 20; layer++) { | for (int layer = 0; layer < 20; layer++) { | ||||
| if ((scene->lay & srl->lay & ~(srl->lay_exclude) & (1 << layer)) || | if ((scene->lay & srl->lay & ~(srl->lay_exclude) & (1 << layer)) || | ||||
| (srl->lay_zmask & (scene->lay | srl->lay_exclude) & (1 << layer))) | (srl->lay_zmask & (scene->lay | srl->lay_exclude) & (1 << layer))) | ||||
| { | { | ||||
| if (collections[DO_VERSION_COLLECTION_VISIBLE].created & (1 << layer)) { | if (collections[DO_VERSION_COLLECTION_VISIBLE].created & (1 << layer)) { | ||||
| LayerCollection *layer_collection_parent; | LayerCollection *layer_collection_parent; | ||||
| layer_collection_parent = BKE_collection_link(scene_layer, | layer_collection_parent = BKE_collection_link(view_layer, | ||||
| collections[DO_VERSION_COLLECTION_VISIBLE].collections[layer]); | collections[DO_VERSION_COLLECTION_VISIBLE].collections[layer]); | ||||
| if (srl->lay_zmask & (1 << layer)) { | if (srl->lay_zmask & (1 << layer)) { | ||||
| BKE_override_layer_collection_boolean_add( | BKE_override_layer_collection_boolean_add( | ||||
| layer_collection_parent, | layer_collection_parent, | ||||
| ID_OB, | ID_OB, | ||||
| "cycles.is_holdout", | "cycles.is_holdout", | ||||
| true); | true); | ||||
| Show All 10 Lines | for (Scene *scene = main->scene.first; scene; scene = scene->id.next) { | ||||
| LayerCollection *layer_collection_child; | LayerCollection *layer_collection_child; | ||||
| layer_collection_child = layer_collection_parent->layer_collections.first; | layer_collection_child = layer_collection_parent->layer_collections.first; | ||||
| for (int j = 1; j < 4; j++) { | for (int j = 1; j < 4; j++) { | ||||
| if (collections[j].created & (1 << layer)) { | if (collections[j].created & (1 << layer)) { | ||||
| layer_collection_child->flag = collections[j].flag_render & (~COLLECTION_DISABLED); | layer_collection_child->flag = collections[j].flag_render & (~COLLECTION_DISABLED); | ||||
| if (collections[j].flag_render & COLLECTION_DISABLED) { | if (collections[j].flag_render & COLLECTION_DISABLED) { | ||||
| BKE_collection_disable(scene_layer, layer_collection_child); | BKE_collection_disable(view_layer, layer_collection_child); | ||||
| } | } | ||||
| layer_collection_child = layer_collection_child->next; | layer_collection_child = layer_collection_child->next; | ||||
| } | } | ||||
| } | } | ||||
| BLI_assert(layer_collection_child == NULL); | BLI_assert(layer_collection_child == NULL); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| /* for convenience set the same active object in all the layers */ | /* for convenience set the same active object in all the layers */ | ||||
| if (scene->basact) { | if (scene->basact) { | ||||
| scene_layer->basact = BKE_scene_layer_base_find(scene_layer, scene->basact->object); | view_layer->basact = BKE_view_layer_base_find(view_layer, scene->basact->object); | ||||
| } | } | ||||
| for (Base *base = scene_layer->object_bases.first; base; base = base->next) { | for (Base *base = view_layer->object_bases.first; base; base = base->next) { | ||||
| if ((base->flag & BASE_SELECTABLED) && (base->object->flag & SELECT)) { | if ((base->flag & BASE_SELECTABLED) && (base->object->flag & SELECT)) { | ||||
| base->flag |= BASE_SELECTED; | base->flag |= BASE_SELECTED; | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| if (BLI_findlink(&scene->render_layers, scene->r.actlay)) { | if (BLI_findlink(&scene->view_layers, scene->r.actlay)) { | ||||
| scene->active_layer = scene->r.actlay; | scene->active_view_layer = scene->r.actlay; | ||||
| } | } | ||||
| } | } | ||||
| else { | else { | ||||
| for (SceneRenderLayer *srl = scene->r.layers.first; srl; srl = srl->next) { | for (SceneRenderLayer *srl = scene->r.layers.first; srl; srl = srl->next) { | ||||
| if (srl->prop) { | if (srl->prop) { | ||||
| IDP_FreeProperty(srl->prop); | IDP_FreeProperty(srl->prop); | ||||
| MEM_freeN(srl->prop); | MEM_freeN(srl->prop); | ||||
| } | } | ||||
| BKE_freestyle_config_free(&srl->freestyleConfig); | BKE_freestyle_config_free(&srl->freestyleConfig); | ||||
| } | } | ||||
| } | } | ||||
| BLI_freelistN(&scene->r.layers); | BLI_freelistN(&scene->r.layers); | ||||
| SceneLayer *scene_layer = BKE_scene_layer_add(scene, "Viewport"); | ViewLayer *view_layer = BKE_view_layer_add(scene, "Viewport"); | ||||
| /* If we ported all the original render layers, we don't need to make the viewport layer renderable. */ | /* If we ported all the original render layers, we don't need to make the viewport layer renderable. */ | ||||
| if (!BLI_listbase_is_single(&scene->render_layers)) { | if (!BLI_listbase_is_single(&scene->view_layers)) { | ||||
| scene_layer->flag &= ~SCENE_LAYER_RENDER; | view_layer->flag &= ~VIEW_LAYER_RENDER; | ||||
| } | } | ||||
| /* If layer was not set, disable it. */ | /* If layer was not set, disable it. */ | ||||
| LayerCollection *layer_collection_parent; | LayerCollection *layer_collection_parent; | ||||
| layer_collection_parent = ((LayerCollection *)scene_layer->layer_collections.first)->layer_collections.first; | layer_collection_parent = ((LayerCollection *)view_layer->layer_collections.first)->layer_collections.first; | ||||
| for (int layer = 0; layer < 20; layer++) { | for (int layer = 0; layer < 20; layer++) { | ||||
| if (collections[DO_VERSION_COLLECTION_VISIBLE].created & (1 << layer)) { | if (collections[DO_VERSION_COLLECTION_VISIBLE].created & (1 << layer)) { | ||||
| const bool is_disabled = (scene->lay & (1 << layer)) == 0; | const bool is_disabled = (scene->lay & (1 << layer)) == 0; | ||||
| /* We only need to disable the parent collection. */ | /* We only need to disable the parent collection. */ | ||||
| if (is_disabled) { | if (is_disabled) { | ||||
| BKE_collection_disable(scene_layer, layer_collection_parent); | BKE_collection_disable(view_layer, layer_collection_parent); | ||||
| } | } | ||||
| LayerCollection *layer_collection_child; | LayerCollection *layer_collection_child; | ||||
| layer_collection_child = layer_collection_parent->layer_collections.first; | layer_collection_child = layer_collection_parent->layer_collections.first; | ||||
| for (int j = 1; j < 4; j++) { | for (int j = 1; j < 4; j++) { | ||||
| if (collections[j].created & (1 << layer)) { | if (collections[j].created & (1 << layer)) { | ||||
| layer_collection_child->flag = collections[j].flag_viewport & (~COLLECTION_DISABLED); | layer_collection_child->flag = collections[j].flag_viewport & (~COLLECTION_DISABLED); | ||||
| if (collections[j].flag_viewport & COLLECTION_DISABLED) { | if (collections[j].flag_viewport & COLLECTION_DISABLED) { | ||||
| BKE_collection_disable(scene_layer, layer_collection_child); | BKE_collection_disable(view_layer, layer_collection_child); | ||||
| } | } | ||||
| layer_collection_child = layer_collection_child->next; | layer_collection_child = layer_collection_child->next; | ||||
| } | } | ||||
| } | } | ||||
| BLI_assert(layer_collection_child == NULL); | BLI_assert(layer_collection_child == NULL); | ||||
| layer_collection_parent = layer_collection_parent->next; | layer_collection_parent = layer_collection_parent->next; | ||||
| } | } | ||||
| } | } | ||||
| BLI_assert(layer_collection_parent == NULL); | BLI_assert(layer_collection_parent == NULL); | ||||
| /* convert active base */ | /* convert active base */ | ||||
| if (scene->basact) { | if (scene->basact) { | ||||
| scene_layer->basact = BKE_scene_layer_base_find(scene_layer, scene->basact->object); | view_layer->basact = BKE_view_layer_base_find(view_layer, scene->basact->object); | ||||
| } | } | ||||
| /* convert selected bases */ | /* convert selected bases */ | ||||
| for (Base *base = scene->base.first; base; base = base->next) { | for (Base *base = scene->base.first; base; base = base->next) { | ||||
| if ((base->flag & BASE_SELECTABLED) && (base->object->flag & SELECT)) { | if ((base->flag & BASE_SELECTABLED) && (base->object->flag & SELECT)) { | ||||
| base->flag |= BASE_SELECTED; | base->flag |= BASE_SELECTED; | ||||
| } | } | ||||
| Show All 14 Lines | for (Scene *scene = main->scene.first; scene; scene = scene->id.next) { | ||||
| scene->basact = NULL; | scene->basact = NULL; | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| if (!MAIN_VERSION_ATLEAST(main, 280, 0)) { | if (!MAIN_VERSION_ATLEAST(main, 280, 0)) { | ||||
| for (bScreen *screen = main->screen.first; screen; screen = screen->id.next) { | for (bScreen *screen = main->screen.first; screen; screen = screen->id.next) { | ||||
| /* same render-layer as do_version_workspaces_after_lib_link will activate, | /* same render-layer as do_version_workspaces_after_lib_link will activate, | ||||
| * so same layer as BKE_scene_layer_from_workspace_get would return */ | * so same layer as BKE_view_layer_from_workspace_get would return */ | ||||
| SceneLayer *layer = screen->scene->render_layers.first; | ViewLayer *layer = screen->scene->view_layers.first; | ||||
| for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) { | for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) { | ||||
| for (SpaceLink *scene_layer = sa->spacedata.first; scene_layer; scene_layer = scene_layer->next) { | for (SpaceLink *view_layer = sa->spacedata.first; view_layer; view_layer = view_layer->next) { | ||||
| if (scene_layer->spacetype == SPACE_OUTLINER) { | if (view_layer->spacetype == SPACE_OUTLINER) { | ||||
| SpaceOops *soutliner = (SpaceOops *)scene_layer; | SpaceOops *soutliner = (SpaceOops *)view_layer; | ||||
| soutliner->outlinevis = SO_ACT_LAYER; | soutliner->outlinevis = SO_ACT_LAYER; | ||||
| if (BLI_listbase_count_ex(&layer->layer_collections, 2) == 1) { | if (BLI_listbase_count_ex(&layer->layer_collections, 2) == 1) { | ||||
| if (soutliner->treestore == NULL) { | if (soutliner->treestore == NULL) { | ||||
| soutliner->treestore = BLI_mempool_create( | soutliner->treestore = BLI_mempool_create( | ||||
| sizeof(TreeStoreElem), 1, 512, BLI_MEMPOOL_ALLOW_ITER); | sizeof(TreeStoreElem), 1, 512, BLI_MEMPOOL_ALLOW_ITER); | ||||
| } | } | ||||
| Show All 13 Lines | if (!MAIN_VERSION_ATLEAST(main, 280, 0)) { | ||||
| } | } | ||||
| } | } | ||||
| /* New workspace design */ | /* New workspace design */ | ||||
| if (!MAIN_VERSION_ATLEAST(main, 280, 1)) { | if (!MAIN_VERSION_ATLEAST(main, 280, 1)) { | ||||
| do_version_workspaces_after_lib_link(main); | do_version_workspaces_after_lib_link(main); | ||||
| } | } | ||||
| { | if (!MAIN_VERSION_ATLEAST(main, 280, 2)) { | ||||
| /* Cleanup any remaining SceneRenderLayer data for files that were created | /* Cleanup any remaining SceneRenderLayer data for files that were created | ||||
| * with Blender 2.8 before the SceneRenderLayer > RenderLayer refactor. */ | * with Blender 2.8 before the SceneRenderLayer > RenderLayer refactor. */ | ||||
| for (Scene *scene = main->scene.first; scene; scene = scene->id.next) { | for (Scene *scene = main->scene.first; scene; scene = scene->id.next) { | ||||
| for (SceneRenderLayer *srl = scene->r.layers.first; srl; srl = srl->next) { | for (SceneRenderLayer *srl = scene->r.layers.first; srl; srl = srl->next) { | ||||
| if (srl->prop) { | if (srl->prop) { | ||||
| IDP_FreeProperty(srl->prop); | IDP_FreeProperty(srl->prop); | ||||
| MEM_freeN(srl->prop); | MEM_freeN(srl->prop); | ||||
| } | } | ||||
| Show All 32 Lines | |||||
| #ifdef WITH_CLAY_ENGINE | #ifdef WITH_CLAY_ENGINE | ||||
| BLI_strncpy(scene->r.engine, RE_engine_id_BLENDER_CLAY, sizeof(scene->r.engine)); | BLI_strncpy(scene->r.engine, RE_engine_id_BLENDER_CLAY, sizeof(scene->r.engine)); | ||||
| #else | #else | ||||
| BLI_strncpy(scene->r.engine, RE_engine_id_BLENDER_EEVEE, sizeof(scene->r.engine)); | BLI_strncpy(scene->r.engine, RE_engine_id_BLENDER_EEVEE, sizeof(scene->r.engine)); | ||||
| #endif | #endif | ||||
| } | } | ||||
| } | } | ||||
| if (!DNA_struct_elem_find(fd->filesdna, "Scene", "ListBase", "render_layers")) { | if (!DNA_struct_elem_find(fd->filesdna, "Scene", "ListBase", "view_layers")) { | ||||
| for (Scene *scene = main->scene.first; scene; scene = scene->id.next) { | for (Scene *scene = main->scene.first; scene; scene = scene->id.next) { | ||||
| /* Master Collection */ | /* Master Collection */ | ||||
| scene->collection = MEM_callocN(sizeof(SceneCollection), "Master Collection"); | scene->collection = MEM_callocN(sizeof(SceneCollection), "Master Collection"); | ||||
| BLI_strncpy(scene->collection->name, "Master Collection", sizeof(scene->collection->name)); | BLI_strncpy(scene->collection->name, "Master Collection", sizeof(scene->collection->name)); | ||||
| } | } | ||||
| } | } | ||||
| if (DNA_struct_elem_find(fd->filesdna, "LayerCollection", "ListBase", "engine_settings") && | if (DNA_struct_elem_find(fd->filesdna, "LayerCollection", "ListBase", "engine_settings") && | ||||
| !DNA_struct_elem_find(fd->filesdna, "LayerCollection", "IDProperty", "properties")) | !DNA_struct_elem_find(fd->filesdna, "LayerCollection", "IDProperty", "properties")) | ||||
| { | { | ||||
| for (Scene *scene = main->scene.first; scene; scene = scene->id.next) { | for (Scene *scene = main->scene.first; scene; scene = scene->id.next) { | ||||
| for (SceneLayer *scene_layer = scene->render_layers.first; scene_layer; scene_layer = scene_layer->next) { | for (ViewLayer *view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) { | ||||
| do_version_layer_collections_idproperties(&scene_layer->layer_collections); | do_version_layer_collections_idproperties(&view_layer->layer_collections); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| if (!MAIN_VERSION_ATLEAST(main, 280, 1)) { | if (!MAIN_VERSION_ATLEAST(main, 280, 1)) { | ||||
| if (!DNA_struct_elem_find(fd->filesdna, "Lamp", "float", "bleedexp")) { | if (!DNA_struct_elem_find(fd->filesdna, "Lamp", "float", "bleedexp")) { | ||||
| for (Lamp *la = main->lamp.first; la; la = la->id.next) { | for (Lamp *la = main->lamp.first; la; la = la->id.next) { | ||||
| la->bleedexp = 2.5f; | la->bleedexp = 2.5f; | ||||
| } | } | ||||
| } | } | ||||
| if (!DNA_struct_elem_find(fd->filesdna, "GPUDOFSettings", "float", "ratio")) { | if (!DNA_struct_elem_find(fd->filesdna, "GPUDOFSettings", "float", "ratio")) { | ||||
| for (Camera *ca = main->camera.first; ca; ca = ca->id.next) { | for (Camera *ca = main->camera.first; ca; ca = ca->id.next) { | ||||
| ca->gpu_dof.ratio = 1.0f; | ca->gpu_dof.ratio = 1.0f; | ||||
| } | } | ||||
| } | } | ||||
| if (!DNA_struct_elem_find(fd->filesdna, "SceneLayer", "IDProperty", "*properties")) { | if (!DNA_struct_elem_find(fd->filesdna, "ViewLayer", "IDProperty", "*properties")) { | ||||
| for (Scene *scene = main->scene.first; scene; scene = scene->id.next) { | for (Scene *scene = main->scene.first; scene; scene = scene->id.next) { | ||||
| for (SceneLayer *scene_layer = scene->render_layers.first; scene_layer; scene_layer = scene_layer->next) { | for (ViewLayer *view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) { | ||||
| IDPropertyTemplate val = {0}; | IDPropertyTemplate val = {0}; | ||||
| scene_layer->properties = IDP_New(IDP_GROUP, &val, ROOT_PROP); | view_layer->properties = IDP_New(IDP_GROUP, &val, ROOT_PROP); | ||||
| BKE_scene_layer_engine_settings_create(scene_layer->properties); | BKE_view_layer_engine_settings_create(view_layer->properties); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| /* MTexPoly now removed. */ | /* MTexPoly now removed. */ | ||||
| if (DNA_struct_find(fd->filesdna, "MTexPoly")) { | if (DNA_struct_find(fd->filesdna, "MTexPoly")) { | ||||
| const int cd_mtexpoly = 15; /* CD_MTEXPOLY, deprecated */ | const int cd_mtexpoly = 15; /* CD_MTEXPOLY, deprecated */ | ||||
| for (Mesh *me = main->mesh.first; me; me = me->id.next) { | for (Mesh *me = main->mesh.first; me; me = me->id.next) { | ||||
| /* If we have UV's, so this file will have MTexPoly layers too! */ | /* If we have UV's, so this file will have MTexPoly layers too! */ | ||||
| if (me->mloopuv != NULL) { | if (me->mloopuv != NULL) { | ||||
| CustomData_update_typemap(&me->pdata); | CustomData_update_typemap(&me->pdata); | ||||
| CustomData_free_layers(&me->pdata, cd_mtexpoly, me->totpoly); | CustomData_free_layers(&me->pdata, cd_mtexpoly, me->totpoly); | ||||
| BKE_mesh_update_customdata_pointers(me, false); | BKE_mesh_update_customdata_pointers(me, false); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| { | if (!MAIN_VERSION_ATLEAST(main, 280, 2)) { | ||||
| if (!DNA_struct_elem_find(fd->filesdna, "View3D", "short", "custom_orientation_index")) { | if (!DNA_struct_elem_find(fd->filesdna, "View3D", "short", "custom_orientation_index")) { | ||||
| for (bScreen *screen = main->screen.first; screen; screen = screen->id.next) { | for (bScreen *screen = main->screen.first; screen; screen = screen->id.next) { | ||||
| for (ScrArea *area = screen->areabase.first; area; area = area->next) { | for (ScrArea *area = screen->areabase.first; area; area = area->next) { | ||||
| for (SpaceLink *sl = area->spacedata.first; sl; sl = sl->next) { | for (SpaceLink *sl = area->spacedata.first; sl; sl = sl->next) { | ||||
| if (sl->spacetype == SPACE_VIEW3D) { | if (sl->spacetype == SPACE_VIEW3D) { | ||||
| View3D *v3d = (View3D *)sl; | View3D *v3d = (View3D *)sl; | ||||
| if (v3d->twmode >= V3D_MANIP_CUSTOM) { | if (v3d->twmode >= V3D_MANIP_CUSTOM) { | ||||
| v3d->custom_orientation_index = v3d->twmode - V3D_MANIP_CUSTOM; | v3d->custom_orientation_index = v3d->twmode - V3D_MANIP_CUSTOM; | ||||
| Show All 20 Lines | if (!MAIN_VERSION_ATLEAST(main, 280, 2)) { | ||||
| if (!DNA_struct_elem_find(fd->filesdna, "Lamp", "float", "contact_dist")) { | if (!DNA_struct_elem_find(fd->filesdna, "Lamp", "float", "contact_dist")) { | ||||
| for (Lamp *la = main->lamp.first; la; la = la->id.next) { | for (Lamp *la = main->lamp.first; la; la = la->id.next) { | ||||
| la->contact_dist = 1.0f; | la->contact_dist = 1.0f; | ||||
| la->contact_bias = 0.03f; | la->contact_bias = 0.03f; | ||||
| la->contact_spread = 0.2f; | la->contact_spread = 0.2f; | ||||
| la->contact_thickness = 0.5f; | la->contact_thickness = 0.5f; | ||||
| } | } | ||||
| } | } | ||||
| } | |||||
| { | |||||
| typedef enum eNTreeDoVersionErrors { | typedef enum eNTreeDoVersionErrors { | ||||
| NTREE_DOVERSION_NO_ERROR = 0, | NTREE_DOVERSION_NO_ERROR = 0, | ||||
| NTREE_DOVERSION_NEED_OUTPUT = (1 << 0), | NTREE_DOVERSION_NEED_OUTPUT = (1 << 0), | ||||
| NTREE_DOVERSION_TRANSPARENCY_EMISSION = (1 << 1), | NTREE_DOVERSION_TRANSPARENCY_EMISSION = (1 << 1), | ||||
| } eNTreeDoVersionErrors; | } eNTreeDoVersionErrors; | ||||
| /* Eevee shader nodes renamed because of the output node system. | /* Eevee shader nodes renamed because of the output node system. | ||||
| * Note that a new output node is not being added here, because it would be overkill | * Note that a new output node is not being added here, because it would be overkill | ||||
| Show All 40 Lines | if (error & NTREE_DOVERSION_NEED_OUTPUT) { | ||||
| BKE_report(fd->reports, RPT_ERROR, "Eevee material conversion problem. Error in console"); | BKE_report(fd->reports, RPT_ERROR, "Eevee material conversion problem. Error in console"); | ||||
| printf("You need to connect Principled and Eevee Specular shader nodes to new material output nodes.\n"); | printf("You need to connect Principled and Eevee Specular shader nodes to new material output nodes.\n"); | ||||
| } | } | ||||
| if (error & NTREE_DOVERSION_TRANSPARENCY_EMISSION) { | if (error & NTREE_DOVERSION_TRANSPARENCY_EMISSION) { | ||||
| BKE_report(fd->reports, RPT_ERROR, "Eevee material conversion problem. Error in console"); | BKE_report(fd->reports, RPT_ERROR, "Eevee material conversion problem. Error in console"); | ||||
| printf("You need to combine transparency and emission shaders to the converted Principled shader nodes.\n"); | printf("You need to combine transparency and emission shaders to the converted Principled shader nodes.\n"); | ||||
| } | } | ||||
| } | |||||
| { | |||||
| if (!DNA_struct_elem_find(fd->filesdna, "Scene", "ViewRender", "view_render")) { | if (!DNA_struct_elem_find(fd->filesdna, "Scene", "ViewRender", "view_render")) { | ||||
| for (Scene *scene = main->scene.first; scene; scene = scene->id.next) { | for (Scene *scene = main->scene.first; scene; scene = scene->id.next) { | ||||
| BLI_strncpy_utf8(scene->view_render.engine_id, scene->r.engine, | BLI_strncpy_utf8(scene->view_render.engine_id, scene->r.engine, | ||||
| sizeof(scene->view_render.engine_id)); | sizeof(scene->view_render.engine_id)); | ||||
| } | } | ||||
| for (WorkSpace *workspace = main->workspaces.first; workspace; workspace = workspace->id.next) { | for (WorkSpace *workspace = main->workspaces.first; workspace; workspace = workspace->id.next) { | ||||
| BKE_viewrender_init(&workspace->view_render); | BKE_viewrender_init(&workspace->view_render); | ||||
| } | } | ||||
| } | } | ||||
| } | |||||
| { | if ((DNA_struct_elem_find(fd->filesdna, "ViewLayer", "FreestyleConfig", "freestyle_config") == false) && | ||||
| if ((DNA_struct_elem_find(fd->filesdna, "SceneLayer", "FreestyleConfig", "freestyle_config") == false) && | DNA_struct_elem_find(fd->filesdna, "Scene", "ListBase", "view_layers")) | ||||
| DNA_struct_elem_find(fd->filesdna, "Scene", "ListBase", "render_layers")) | |||||
| { | { | ||||
| for (Scene *scene = main->scene.first; scene; scene = scene->id.next) { | for (Scene *scene = main->scene.first; scene; scene = scene->id.next) { | ||||
| SceneLayer *scene_layer; | ViewLayer *view_layer; | ||||
| for (scene_layer = scene->render_layers.first; scene_layer; scene_layer = scene_layer->next) { | for (view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) { | ||||
| scene_layer->flag |= SCENE_LAYER_FREESTYLE; | view_layer->flag |= VIEW_LAYER_FREESTYLE; | ||||
| scene_layer->layflag = 0x7FFF; /* solid ztra halo edge strand */ | view_layer->layflag = 0x7FFF; /* solid ztra halo edge strand */ | ||||
| scene_layer->passflag = SCE_PASS_COMBINED | SCE_PASS_Z; | view_layer->passflag = SCE_PASS_COMBINED | SCE_PASS_Z; | ||||
| scene_layer->pass_alpha_threshold = 0.5f; | view_layer->pass_alpha_threshold = 0.5f; | ||||
| BKE_freestyle_config_init(&scene_layer->freestyle_config); | BKE_freestyle_config_init(&view_layer->freestyle_config); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||