Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2012-04-13 21:42:03 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2012-04-13 21:42:03 +0400
commitb219b5294b15cff95030a15b929d3c7bbf5d35c7 (patch)
treedd91b7247797439f77b249c2229f67c832a0325d
parent440f4492656ec26c90017976553909b48e93c3fa (diff)
Fix #30376: cycles ignores camera override from sequencer.
-rw-r--r--intern/cycles/blender/blender_camera.cpp5
-rw-r--r--intern/cycles/blender/blender_session.cpp4
-rw-r--r--intern/cycles/blender/blender_sync.h2
-rw-r--r--source/blender/makesrna/intern/rna_render.c4
-rw-r--r--source/blender/render/extern/include/RE_engine.h1
-rw-r--r--source/blender/render/intern/source/external_engine.c1
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);