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:
-rw-r--r--source/blender/editors/include/ED_render.h1
-rw-r--r--source/blender/editors/render/render_internal.c10
-rw-r--r--source/blender/editors/space_image/space_image.c12
-rw-r--r--source/blender/windowmanager/WM_api.h1
-rw-r--r--source/blender/windowmanager/intern/wm_jobs.c34
5 files changed, 47 insertions, 11 deletions
diff --git a/source/blender/editors/include/ED_render.h b/source/blender/editors/include/ED_render.h
index 518bee665ae..8f39502b2fe 100644
--- a/source/blender/editors/include/ED_render.h
+++ b/source/blender/editors/include/ED_render.h
@@ -55,6 +55,7 @@ void ED_render_scene_update(struct Main *bmain, struct Scene *scene, int updated
void ED_render_view3d_shade_update(struct Main *bmain, struct View3D *v3d, struct ScrArea *sa);
void ED_viewport_render_kill_jobs(const struct bContext *C, bool free_database);
+struct Scene *ED_render_job_get_scene(const struct bContext *C);
/* render_preview.c */
diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c
index a47235024dd..71bf67220fe 100644
--- a/source/blender/editors/render/render_internal.c
+++ b/source/blender/editors/render/render_internal.c
@@ -1237,3 +1237,13 @@ void ED_viewport_render_kill_jobs(const bContext *C, bool free_database)
}
}
+Scene *ED_render_job_get_scene(const bContext *C)
+{
+ wmWindowManager *wm = CTX_wm_manager(C);
+ RenderJob *rj = (RenderJob *)WM_jobs_customdata_from_type(wm, WM_JOB_TYPE_RENDER);
+
+ if (rj)
+ return rj->scene;
+
+ return NULL;
+}
diff --git a/source/blender/editors/space_image/space_image.c b/source/blender/editors/space_image/space_image.c
index 7b20af340ae..2ba9123b30b 100644
--- a/source/blender/editors/space_image/space_image.c
+++ b/source/blender/editors/space_image/space_image.c
@@ -56,6 +56,7 @@
#include "ED_mask.h"
#include "ED_mesh.h"
#include "ED_node.h"
+#include "ED_render.h"
#include "ED_space_api.h"
#include "ED_screen.h"
#include "ED_uvedit.h"
@@ -653,7 +654,16 @@ static void image_main_area_draw(const bContext *C, ARegion *ar)
glClear(GL_COLOR_BUFFER_BIT);
/* put scene context variable in iuser */
- sima->iuser.scene = scene;
+ if (sima->image && sima->image->type == IMA_TYPE_R_RESULT) {
+ /* for render result, try to use the currently rendering scene */
+ Scene *render_scene = ED_render_job_get_scene(C);
+ if (render_scene)
+ sima->iuser.scene = render_scene;
+ else
+ sima->iuser.scene = scene;
+ }
+ else
+ sima->iuser.scene = scene;
/* we set view2d from own zoom and offset each time */
image_main_area_set_view2d(sima, ar);
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index 9bc12d04b02..75a6e4465bf 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -378,6 +378,7 @@ int WM_jobs_test(struct wmWindowManager *wm, void *owner, int job_type);
float WM_jobs_progress(struct wmWindowManager *wm, void *owner);
char *WM_jobs_name(struct wmWindowManager *wm, void *owner);
void *WM_jobs_customdata(struct wmWindowManager *wm, void *owner);
+void *WM_jobs_customdata_from_type(struct wmWindowManager *wm, int job_type);
int WM_jobs_is_running(struct wmJob *);
void *WM_jobs_customdata_get(struct wmJob *);
diff --git a/source/blender/windowmanager/intern/wm_jobs.c b/source/blender/windowmanager/intern/wm_jobs.c
index c9c3d2df788..6908588ebd7 100644
--- a/source/blender/windowmanager/intern/wm_jobs.c
+++ b/source/blender/windowmanager/intern/wm_jobs.c
@@ -166,22 +166,27 @@ static void wm_job_main_thread_yield(wmJob *wm_job, bool ending)
}
/* finds:
- * if type, compare for it, otherwise any matching job
+ * if type or owner, compare for it, otherwise any matching job
*/
static wmJob *wm_job_find(wmWindowManager *wm, void *owner, const int job_type)
{
wmJob *wm_job;
- for (wm_job = wm->jobs.first; wm_job; wm_job = wm_job->next)
- if (wm_job->owner == owner) {
-
- if (job_type) {
- if ( wm_job->job_type == job_type)
- return wm_job;
- }
- else
+ if (owner && job_type) {
+ for (wm_job = wm->jobs.first; wm_job; wm_job = wm_job->next)
+ if (wm_job->owner == owner && wm_job->job_type == job_type)
return wm_job;
- }
+ }
+ else if (owner) {
+ for (wm_job = wm->jobs.first; wm_job; wm_job = wm_job->next)
+ if (wm_job->owner == owner)
+ return wm_job;
+ }
+ else if (job_type) {
+ for (wm_job = wm->jobs.first; wm_job; wm_job = wm_job->next)
+ if (wm_job->job_type == job_type)
+ return wm_job;
+ }
return NULL;
}
@@ -263,7 +268,16 @@ void *WM_jobs_customdata(wmWindowManager *wm, void *owner)
return WM_jobs_customdata_get(wm_job);
return NULL;
+}
+void *WM_jobs_customdata_from_type(wmWindowManager *wm, int job_type)
+{
+ wmJob *wm_job = wm_job_find(wm, NULL, job_type);
+
+ if (wm_job)
+ return WM_jobs_customdata_get(wm_job);
+
+ return NULL;
}
int WM_jobs_is_running(wmJob *wm_job)