Changeset View
Changeset View
Standalone View
Standalone View
source/blender/blenloader/intern/versioning_280.c
| Show First 20 Lines • Show All 45 Lines • ▼ Show 20 Lines | |||||
| #include "DNA_scene_types.h" | #include "DNA_scene_types.h" | ||||
| #include "DNA_screen_types.h" | #include "DNA_screen_types.h" | ||||
| #include "DNA_view3d_types.h" | #include "DNA_view3d_types.h" | ||||
| #include "DNA_genfile.h" | #include "DNA_genfile.h" | ||||
| #include "DNA_workspace_types.h" | #include "DNA_workspace_types.h" | ||||
| #include "BKE_collection.h" | #include "BKE_collection.h" | ||||
| #include "BKE_customdata.h" | #include "BKE_customdata.h" | ||||
| #include "BKE_freestyle.h" | |||||
| #include "BKE_idprop.h" | #include "BKE_idprop.h" | ||||
| #include "BKE_layer.h" | #include "BKE_layer.h" | ||||
| #include "BKE_main.h" | #include "BKE_main.h" | ||||
| #include "BKE_mesh.h" | #include "BKE_mesh.h" | ||||
| #include "BKE_node.h" | #include "BKE_node.h" | ||||
| #include "BKE_report.h" | #include "BKE_report.h" | ||||
| #include "BKE_scene.h" | #include "BKE_scene.h" | ||||
| #include "BKE_workspace.h" | #include "BKE_workspace.h" | ||||
| ▲ Show 20 Lines • Show All 239 Lines • ▼ Show 20 Lines | for (Scene *scene = main->scene.first; scene; scene = scene->id.next) { | ||||
| scene->active_layer = 0; | scene->active_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); | SceneLayer *scene_layer = BKE_scene_layer_add(scene, srl->name); | ||||
| if (srl->samples != 0) { | |||||
| /* It is up to the external engine to handle | |||||
| * its own doversion in this case. */ | |||||
| BKE_override_scene_layer_int_add( | |||||
| scene_layer, | |||||
| ID_SCE, | |||||
| "samples", | |||||
| srl->samples); | |||||
| } | |||||
| if (srl->mat_override) { | if (srl->mat_override) { | ||||
| BKE_collection_override_datablock_add((LayerCollection *)scene_layer->layer_collections.first, "material", (ID *)srl->mat_override); | BKE_override_scene_layer_datablock_add( | ||||
| scene_layer, | |||||
| ID_MA, | |||||
| "self", | |||||
| (ID *)srl->mat_override); | |||||
| } | } | ||||
| if (srl->light_override && BKE_scene_uses_blender_internal(scene)) { | if (srl->layflag & SCE_LAY_DISABLE) { | ||||
| /* not sure how we handle this, pending until we design the override system */ | scene_layer->flag &= ~SCENE_LAYER_RENDER; | ||||
| TODO_LAYER_OVERRIDE; | |||||
| } | } | ||||
| if (srl->lay != scene->lay) { | if ((srl->layflag & SCE_LAY_FRS) == 0) { | ||||
| scene_layer->flag &= ~SCENE_LAYER_FREESTYLE; | |||||
| } | |||||
| /* XXX If we are to keep layflag it should be merged with flag (dfelinto). */ | |||||
| scene_layer->layflag = srl->layflag; | |||||
| /* XXX Not sure if we should keep the passes (dfelinto). */ | |||||
| scene_layer->passflag = srl->passflag; | |||||
| scene_layer->pass_xor = srl->pass_xor; | |||||
| scene_layer->pass_alpha_threshold = srl->pass_alpha_threshold; | |||||
| scene_layer->freestyle_config = srl->freestyleConfig; | |||||
| scene_layer->id_properties = srl->prop; | |||||
| /* unlink master collection */ | /* unlink master collection */ | ||||
| BKE_collection_unlink(scene_layer, scene_layer->layer_collections.first); | BKE_collection_unlink(scene_layer, scene_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 ((srl->lay & (1 << layer)) && (scene->lay & (1 << layer))) { | if ((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(scene_layer, | ||||
| collections[DO_VERSION_COLLECTION_VISIBLE].collections[layer]); | collections[DO_VERSION_COLLECTION_VISIBLE].collections[layer]); | ||||
| if (srl->lay_zmask & (1 << layer)) { | |||||
| BKE_override_layer_collection_boolean_add( | |||||
| layer_collection_parent, | |||||
| ID_OB, | |||||
| "cycles.is_holdout", | |||||
| true); | |||||
| } | |||||
| if ((srl->lay & (1 << layer)) == 0) { | |||||
| BKE_override_layer_collection_boolean_add( | |||||
| layer_collection_parent, | |||||
| ID_OB, | |||||
| "cycles_visibility.camera", | |||||
| false); | |||||
| } | |||||
| 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(scene_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); | scene_layer->basact = BKE_scene_layer_base_find(scene_layer, scene->basact->object); | ||||
| } | } | ||||
| for (Base *base = scene_layer->object_bases.first; base; base = base->next) { | for (Base *base = scene_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; | ||||
| } | } | ||||
| } | } | ||||
| /* TODO: passes, samples, mask_layesr, exclude, ... */ | |||||
| } | } | ||||
| if (BLI_findlink(&scene->render_layers, scene->r.actlay)) { | if (BLI_findlink(&scene->render_layers, scene->r.actlay)) { | ||||
| scene->active_layer = scene->r.actlay; | scene->active_layer = scene->r.actlay; | ||||
| } | } | ||||
| } | } | ||||
| else { | |||||
| for (SceneRenderLayer *srl = scene->r.layers.first; srl; srl = srl->next) { | |||||
| if (srl->prop) { | |||||
| IDP_FreeProperty(srl->prop); | |||||
| MEM_freeN(srl->prop); | |||||
| } | |||||
| BKE_freestyle_config_free(&srl->freestyleConfig); | |||||
| } | |||||
| } | |||||
| BLI_freelistN(&scene->r.layers); | |||||
| SceneLayer *scene_layer = BKE_scene_layer_add(scene, "Viewport"); | SceneLayer *scene_layer = BKE_scene_layer_add(scene, "Viewport"); | ||||
| /* 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 *)scene_layer->layer_collections.first)->layer_collections.first; | ||||
| for (int layer = 0; layer < 20; layer++) { | for (int layer = 0; layer < 20; layer++) { | ||||
| Show All 34 Lines | for (Scene *scene = main->scene.first; scene; scene = scene->id.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; | ||||
| } | } | ||||
| /* keep lay around for forward compatibility (open those files in 2.79) */ | /* keep lay around for forward compatibility (open those files in 2.79) */ | ||||
| base->lay = base->object->lay; | base->lay = base->object->lay; | ||||
| } | } | ||||
| /* TODO: copy scene render data to layer */ | |||||
| /* Fallback name if only one layer was found in the original file */ | /* Fallback name if only one layer was found in the original file */ | ||||
| if (BLI_listbase_count_ex(&sc_master->scene_collections, 2) == 1) { | if (BLI_listbase_count_ex(&sc_master->scene_collections, 2) == 1) { | ||||
| BKE_collection_rename(scene, sc_master->scene_collections.first, "Default Collection"); | BKE_collection_rename(scene, sc_master->scene_collections.first, "Default Collection"); | ||||
| } | } | ||||
| /* remove bases once and for all */ | /* remove bases once and for all */ | ||||
| for (Base *base = scene->base.first; base; base = base->next) { | for (Base *base = scene->base.first; base; base = base->next) { | ||||
| id_us_min(&base->object->id); | id_us_min(&base->object->id); | ||||
| ▲ Show 20 Lines • Show All 247 Lines • Show Last 20 Lines | |||||