Fix T64775: crash loading Eevee files with DoF, after recent changes

Version after lib linking due to following ID pointers.
This commit is contained in:
Brecht Van Lommel 2019-05-17 22:28:49 +02:00
parent 3022dd2b27
commit 728d99f446
Notes: blender-bot 2023-02-14 08:08:54 +01:00
Referenced by issue #64775, Startup crash in versioning for some users after bc3139d792 Eevee DOF Unification
1 changed files with 26 additions and 26 deletions

View File

@ -1084,6 +1084,32 @@ void do_versions_after_linking_280(Main *bmain)
BKE_rigidbody_constraints_collection_validate(scene, rbw);
}
}
if (!MAIN_VERSION_ATLEAST(bmain, 280, 69)) {
/* Unify DOF settings (EEVEE part only) */
const int SCE_EEVEE_DOF_ENABLED = (1 << 7);
LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
if (STREQ(scene->r.engine, RE_engine_id_BLENDER_EEVEE)) {
if (scene->eevee.flag & SCE_EEVEE_DOF_ENABLED) {
Object *cam_ob = scene->camera;
if (cam_ob && cam_ob->type == OB_CAMERA) {
Camera *cam = cam_ob->data;
cam->dof.flag |= CAM_DOF_ENABLED;
}
}
}
}
LISTBASE_FOREACH (Camera *, camera, &bmain->cameras) {
camera->dof.focus_object = camera->dof_ob;
camera->dof.focus_distance = camera->dof_distance;
camera->dof.aperture_fstop = camera->gpu_dof.fstop;
camera->dof.aperture_rotation = camera->gpu_dof.rotation;
camera->dof.aperture_ratio = camera->gpu_dof.ratio;
camera->dof.aperture_blades = camera->gpu_dof.num_blades;
camera->dof_ob = NULL;
}
}
}
/* NOTE: This version patch is intended for versions < 2.52.2,
@ -3423,31 +3449,5 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
light->sun_angle = 2.0f * atanf(light->area_size);
}
}
/* Unify DOF settings (EEVEE part only) */
if (!DNA_struct_elem_find(fd->filesdna, "Camera", "CameraDOFSettings", "dof")) {
const int SCE_EEVEE_DOF_ENABLED = (1 << 7);
LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
if (STREQ(scene->r.engine, RE_engine_id_BLENDER_EEVEE)) {
if (scene->eevee.flag & SCE_EEVEE_DOF_ENABLED) {
Object *cam_ob = scene->camera;
if (cam_ob && cam_ob->type == OB_CAMERA) {
Camera *cam = cam_ob->data;
cam->dof.flag |= CAM_DOF_ENABLED;
}
}
}
}
LISTBASE_FOREACH (Camera *, camera, &bmain->cameras) {
camera->dof.focus_object = camera->dof_ob;
camera->dof.focus_distance = camera->dof_distance;
camera->dof.aperture_fstop = camera->gpu_dof.fstop;
camera->dof.aperture_rotation = camera->gpu_dof.rotation;
camera->dof.aperture_ratio = camera->gpu_dof.ratio;
camera->dof.aperture_blades = camera->gpu_dof.num_blades;
camera->dof_ob = NULL;
}
}
}
}