[Bf-blender-cvs] [80f0bc99a98] blender-v2.81-release: Fix T70850: Scene.frame_set doesn't update camera from markers

Campbell Barton noreply at git.blender.org
Wed Oct 16 10:13:50 CEST 2019


Commit: 80f0bc99a9831709338fdb252546829afdf4912a
Author: Campbell Barton
Date:   Wed Oct 16 19:10:28 2019 +1100
Branches: blender-v2.81-release
https://developer.blender.org/rB80f0bc99a9831709338fdb252546829afdf4912a

Fix T70850: Scene.frame_set doesn't update camera from markers

===================================================================

M	source/blender/blenkernel/BKE_scene.h
M	source/blender/blenkernel/intern/scene.c
M	source/blender/makesrna/intern/rna_scene_api.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_scene.h b/source/blender/blenkernel/BKE_scene.h
index 5b77c36024a..51abc7390b8 100644
--- a/source/blender/blenkernel/BKE_scene.h
+++ b/source/blender/blenkernel/BKE_scene.h
@@ -125,7 +125,7 @@ struct Scene *BKE_scene_find_from_collection(const struct Main *bmain,
 #ifdef DURIAN_CAMERA_SWITCH
 struct Object *BKE_scene_camera_switch_find(struct Scene *scene);  // DURIAN_CAMERA_SWITCH
 #endif
-int BKE_scene_camera_switch_update(struct Scene *scene);
+bool BKE_scene_camera_switch_update(struct Scene *scene);
 
 char *BKE_scene_find_marker_name(struct Scene *scene, int frame);
 char *BKE_scene_find_last_marker_name(struct Scene *scene, int frame);
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index e8e849cdf6d..53e5f1fdfe5 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -1008,19 +1008,19 @@ Object *BKE_scene_camera_switch_find(Scene *scene)
 }
 #endif
 
-int BKE_scene_camera_switch_update(Scene *scene)
+bool BKE_scene_camera_switch_update(Scene *scene)
 {
 #ifdef DURIAN_CAMERA_SWITCH
   Object *camera = BKE_scene_camera_switch_find(scene);
-  if (camera) {
+  if (camera && (camera != scene->camera)) {
     scene->camera = camera;
     DEG_id_tag_update(&scene->id, ID_RECALC_COPY_ON_WRITE);
-    return 1;
+    return true;
   }
 #else
   (void)scene;
 #endif
-  return 0;
+  return false;
 }
 
 char *BKE_scene_find_marker_name(Scene *scene, int frame)
diff --git a/source/blender/makesrna/intern/rna_scene_api.c b/source/blender/makesrna/intern/rna_scene_api.c
index 2b1b23a40f4..8a06d594c1f 100644
--- a/source/blender/makesrna/intern/rna_scene_api.c
+++ b/source/blender/makesrna/intern/rna_scene_api.c
@@ -88,7 +88,11 @@ static void rna_Scene_frame_set(Scene *scene, Main *bmain, int frame, float subf
   BPy_END_ALLOW_THREADS;
 #  endif
 
-  BKE_scene_camera_switch_update(scene);
+  if (BKE_scene_camera_switch_update(scene)) {
+    for (bScreen *sc = bmain->screens.first; sc; sc = sc->id.next) {
+      BKE_screen_view3d_scene_sync(sc, scene);
+    }
+  }
 
   /* don't do notifier when we're rendering, avoid some viewport crashes
    * redrawing while the data is being modified for render */



More information about the Bf-blender-cvs mailing list