diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2012-04-13 21:42:03 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2012-04-13 21:42:03 +0400 |
commit | b219b5294b15cff95030a15b929d3c7bbf5d35c7 (patch) | |
tree | dd91b7247797439f77b249c2229f67c832a0325d | |
parent | 440f4492656ec26c90017976553909b48e93c3fa (diff) |
Fix #30376: cycles ignores camera override from sequencer.
-rw-r--r-- | intern/cycles/blender/blender_camera.cpp | 5 | ||||
-rw-r--r-- | intern/cycles/blender/blender_session.cpp | 4 | ||||
-rw-r--r-- | intern/cycles/blender/blender_sync.h | 2 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_render.c | 4 | ||||
-rw-r--r-- | source/blender/render/extern/include/RE_engine.h | 1 | ||||
-rw-r--r-- | source/blender/render/intern/source/external_engine.c | 1 |
6 files changed, 13 insertions, 4 deletions
diff --git a/intern/cycles/blender/blender_camera.cpp b/intern/cycles/blender/blender_camera.cpp index def1c64c0f0..a21b22bc35a 100644 --- a/intern/cycles/blender/blender_camera.cpp +++ b/intern/cycles/blender/blender_camera.cpp @@ -250,7 +250,7 @@ static void blender_camera_sync(Camera *cam, BlenderCamera *bcam, int width, int /* Sync Render Camera */ -void BlenderSync::sync_camera(int width, int height) +void BlenderSync::sync_camera(BL::Object b_override, int width, int height) { BlenderCamera bcam; blender_camera_init(&bcam); @@ -264,6 +264,9 @@ void BlenderSync::sync_camera(int width, int height) /* camera object */ BL::Object b_ob = b_scene.camera(); + if(b_override) + b_ob = b_override; + if(b_ob) { blender_camera_from_object(&bcam, b_ob); bcam.matrix = get_transform(b_ob.matrix_world()); diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp index a5471655b5f..dc6c69e2904 100644 --- a/intern/cycles/blender/blender_session.cpp +++ b/intern/cycles/blender/blender_session.cpp @@ -96,7 +96,7 @@ void BlenderSession::create_session() if(b_rv3d) sync->sync_view(b_v3d, b_rv3d, width, height); else - sync->sync_camera(width, height); + sync->sync_camera(b_engine.camera_override(), width, height); /* create session */ session = new Session(session_params); @@ -314,7 +314,7 @@ void BlenderSession::synchronize() if(b_rv3d) sync->sync_view(b_v3d, b_rv3d, width, height); else - sync->sync_camera(width, height); + sync->sync_camera(b_engine.camera_override(), width, height); /* unlock */ session->scene->mutex.unlock(); diff --git a/intern/cycles/blender/blender_sync.h b/intern/cycles/blender/blender_sync.h index db26f304d84..d2550a1ffd7 100644 --- a/intern/cycles/blender/blender_sync.h +++ b/intern/cycles/blender/blender_sync.h @@ -55,7 +55,7 @@ public: /* sync */ bool sync_recalc(); void sync_data(BL::SpaceView3D b_v3d, const char *layer = 0); - void sync_camera(int width, int height); + void sync_camera(BL::Object b_override, int width, int height); void sync_view(BL::SpaceView3D b_v3d, BL::RegionView3D b_rv3d, int width, int height); /* get parameters */ diff --git a/source/blender/makesrna/intern/rna_render.c b/source/blender/makesrna/intern/rna_render.c index 22e9bbf6dda..6e9d94bd7fb 100644 --- a/source/blender/makesrna/intern/rna_render.c +++ b/source/blender/makesrna/intern/rna_render.c @@ -356,6 +356,10 @@ static void rna_def_render_engine(BlenderRNA *brna) prop = RNA_def_property(srna, "is_preview", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", RE_ENGINE_PREVIEW); + prop= RNA_def_property(srna, "camera_override", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "camera_override"); + RNA_def_property_struct_type(prop, "Object"); + /* registration */ prop = RNA_def_property(srna, "bl_idname", PROP_STRING, PROP_NONE); diff --git a/source/blender/render/extern/include/RE_engine.h b/source/blender/render/extern/include/RE_engine.h index 5e4a5e05a56..5afdb2a29ce 100644 --- a/source/blender/render/extern/include/RE_engine.h +++ b/source/blender/render/extern/include/RE_engine.h @@ -84,6 +84,7 @@ typedef struct RenderEngine { void *py_instance; int flag; + struct Object *camera_override; struct Render *re; ListBase fullresult; diff --git a/source/blender/render/intern/source/external_engine.c b/source/blender/render/intern/source/external_engine.c index ea352a16934..d8888cb4acc 100644 --- a/source/blender/render/intern/source/external_engine.c +++ b/source/blender/render/intern/source/external_engine.c @@ -311,6 +311,7 @@ int RE_engine_render(Render *re, int do_all) engine->flag |= RE_ENGINE_ANIMATION; if (re->r.scemode & R_PREVIEWBUTS) engine->flag |= RE_ENGINE_PREVIEW; + engine->camera_override = re->camera_override; if ((re->r.scemode & (R_NO_FRAME_UPDATE|R_PREVIEWBUTS))==0) scene_update_for_newframe(re->main, re->scene, re->lay); |