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:
authorSergey Sharybin <sergey.vfx@gmail.com>2014-05-02 16:52:19 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2014-05-02 16:54:13 +0400
commitb62c2a913bb41f858371594dfab0448bddb773d0 (patch)
tree20b29ef136b6064793dd52d45ff7136b9f878b57 /source/blender/editors/render
parent1552b56d9c0c9368f5f20a18db2e47a80f54537b (diff)
Fix T39985: crash while rendering a scene with compositing nodes using another scene
The issue was caused by the wrong scene used to acquire render result for. Now made it so render pipeline reports currently rendering scene to the job via special callback. This also solves missing tile highlight issue when rendering multiple scenes in the compositor.
Diffstat (limited to 'source/blender/editors/render')
-rw-r--r--source/blender/editors/render/render_internal.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c
index 73d52dc5782..9fa312884da 100644
--- a/source/blender/editors/render/render_internal.c
+++ b/source/blender/editors/render/render_internal.c
@@ -95,6 +95,7 @@ static int render_break(void *rjv);
typedef struct RenderJob {
Main *main;
Scene *scene;
+ Scene *current_scene;
Render *re;
SceneRenderLayer *srl;
struct Object *camera_override;
@@ -562,6 +563,13 @@ static void image_rect_update(void *rjv, RenderResult *rr, volatile rcti *renrec
BKE_image_release_ibuf(ima, ibuf, lock);
}
+static void current_scene_update(void *rjv, Scene *scene)
+{
+ RenderJob *rj = rjv;
+ rj->current_scene = scene;
+ rj->iuser.scene = scene;
+}
+
static void render_startjob(void *rjv, short *stop, short *do_update, float *progress)
{
RenderJob *rj = rjv;
@@ -866,6 +874,7 @@ static int screen_render_invoke(bContext *C, wmOperator *op, const wmEvent *even
rj = MEM_callocN(sizeof(RenderJob), "render job");
rj->main = mainp;
rj->scene = scene;
+ rj->current_scene = rj->scene;
rj->srl = srl;
rj->camera_override = camera_override;
rj->lay_override = 0;
@@ -938,6 +947,7 @@ static int screen_render_invoke(bContext *C, wmOperator *op, const wmEvent *even
RE_test_break_cb(re, rj, render_breakjob);
RE_draw_lock_cb(re, rj, render_drawlock);
RE_display_update_cb(re, rj, image_rect_update);
+ RE_current_scene_update_cb(re, rj, current_scene_update);
RE_stats_draw_cb(re, rj, image_renderinfo_cb);
RE_progress_cb(re, rj, render_progress_update);
@@ -1481,7 +1491,7 @@ Scene *ED_render_job_get_scene(const bContext *C)
RenderJob *rj = (RenderJob *)WM_jobs_customdata_from_type(wm, WM_JOB_TYPE_RENDER);
if (rj)
- return rj->scene;
+ return rj->current_scene;
return NULL;
}