Fix doversion crash with 2.8 files that had freestyle 2.8

Crash introduced on: 3a95bdfc65
We can't decrease user count of freestyle linestyle IDs before linking.

Moving doversion for after linking.
And for the records we are simply removing the freestyle data altogether.
This is only for files created with 2.8, so it should be fine.
This commit is contained in:
Dalai Felinto 2017-11-22 15:36:52 -02:00
parent 73c4ba18d5
commit 94d40aca0c
1 changed files with 17 additions and 10 deletions

View File

@ -526,6 +526,21 @@ void do_versions_after_linking_280(Main *main)
if (!MAIN_VERSION_ATLEAST(main, 280, 1)) {
do_version_workspaces_after_lib_link(main);
}
{
/* Cleanup any remaining SceneRenderLayer data for files that were created
* with Blender 2.8 before the SceneRenderLayer > RenderLayer refactor. */
for (Scene *scene = main->scene.first; scene; scene = scene->id.next) {
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);
}
}
}
static void do_version_layer_collections_idproperties(ListBase *lb)
@ -730,7 +745,8 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *main)
{
if ((DNA_struct_elem_find(fd->filesdna, "SceneLayer", "FreestyleConfig", "freestyle_config") == false) &&
DNA_struct_elem_find(fd->filesdna, "Scene", "ListBase", "render_layers")) {
DNA_struct_elem_find(fd->filesdna, "Scene", "ListBase", "render_layers"))
{
for (Scene *scene = main->scene.first; scene; scene = scene->id.next) {
SceneLayer *scene_layer;
for (scene_layer = scene->render_layers.first; scene_layer; scene_layer = scene_layer->next) {
@ -740,15 +756,6 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *main)
scene_layer->pass_alpha_threshold = 0.5f;
BKE_freestyle_config_init(&scene_layer->freestyle_config);
}
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);
}
}
}