[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [59611] trunk/blender/source/blender: Fix #36555: preview render in properties editor did not get cancelled and

Brecht Van Lommel brechtvanlommel at pandora.be
Wed Aug 28 21:22:49 CEST 2013


Revision: 59611
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59611
Author:   blendix
Date:     2013-08-28 19:22:48 +0000 (Wed, 28 Aug 2013)
Log Message:
-----------
Fix #36555: preview render in properties editor did not get cancelled and
restarted fast enough on resizing the editor, especially noticeable with
e.g. luxrender which does a progressive refining render.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/render/render_preview.c
    trunk/blender/source/blender/makesrna/intern/rna_object.c
    trunk/blender/source/blender/windowmanager/WM_api.h
    trunk/blender/source/blender/windowmanager/intern/wm_jobs.c

Modified: trunk/blender/source/blender/editors/render/render_preview.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_preview.c	2013-08-28 19:22:46 UTC (rev 59610)
+++ trunk/blender/source/blender/editors/render/render_preview.c	2013-08-28 19:22:48 UTC (rev 59611)
@@ -587,6 +587,7 @@
 		ID *parent = (ID *)parentp;
 		MTex *slot = (MTex *)slotp;
 		SpaceButs *sbuts = sa->spacedata.first;
+		ShaderPreview *sp = WM_jobs_customdata(wm, sa);
 		rcti newrect;
 		int ok;
 		int newx = BLI_rcti_size_x(rect);
@@ -608,9 +609,11 @@
 			*rect = newrect;
 
 		/* start a new preview render job if signalled through sbuts->preview,
-		 * or if no render result was found and no preview render job is running */
+		 * if no render result was found and no preview render job is running,
+		 * or if the job is running and the size of preview changed */
 		if ((sbuts->spacetype == SPACE_BUTS && sbuts->preview) ||
-		    (!ok && !WM_jobs_test(wm, sa, WM_JOB_TYPE_RENDER_PREVIEW)))
+		    (!ok && !WM_jobs_test(wm, sa, WM_JOB_TYPE_RENDER_PREVIEW)) ||
+			(sp && (ABS(sp->sizex - newx) >= 2 || ABS(sp->sizey - newy) > 2)))
 		{
 			sbuts->preview = 0;
 			ED_preview_shader_job(C, sa, id, parent, slot, newx, newy, PR_BUTS_RENDER);

Modified: trunk/blender/source/blender/makesrna/intern/rna_object.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_object.c	2013-08-28 19:22:46 UTC (rev 59610)
+++ trunk/blender/source/blender/makesrna/intern/rna_object.c	2013-08-28 19:22:48 UTC (rev 59611)
@@ -903,6 +903,7 @@
 {
 	rna_Object_internal_update(bmain, scene, ptr);
 	WM_main_add_notifier(NC_OBJECT | ND_OB_SHADING, ptr->id.data);
+	WM_main_add_notifier(NC_MATERIAL | ND_SHADING_LINKS, NULL);
 }
 
 /* why does this have to be so complicated?, can't all this crap be

Modified: trunk/blender/source/blender/windowmanager/WM_api.h
===================================================================
--- trunk/blender/source/blender/windowmanager/WM_api.h	2013-08-28 19:22:46 UTC (rev 59610)
+++ trunk/blender/source/blender/windowmanager/WM_api.h	2013-08-28 19:22:48 UTC (rev 59611)
@@ -386,6 +386,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);
 
 int         WM_jobs_is_running(struct wmJob *);
 void       *WM_jobs_customdata_get(struct wmJob *);

Modified: trunk/blender/source/blender/windowmanager/intern/wm_jobs.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_jobs.c	2013-08-28 19:22:46 UTC (rev 59610)
+++ trunk/blender/source/blender/windowmanager/intern/wm_jobs.c	2013-08-28 19:22:48 UTC (rev 59611)
@@ -255,6 +255,17 @@
 	return NULL;
 }
 
+void *WM_jobs_customdata(wmWindowManager *wm, void *owner)
+{
+	wmJob *wm_job = wm_job_find(wm, owner, WM_JOB_TYPE_ANY);
+	
+	if (wm_job)
+		return WM_jobs_customdata_get(wm_job);
+	
+	return NULL;
+
+}
+
 int WM_jobs_is_running(wmJob *wm_job)
 {
 	return wm_job->running;




More information about the Bf-blender-cvs mailing list