[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [60831] trunk/blender/source/blender: Fix #37123: UV editor view does not update when using large faces

Sergey Sharybin sergey.vfx at gmail.com
Thu Oct 17 20:29:01 CEST 2013


Revision: 60831
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=60831
Author:   nazgul
Date:     2013-10-17 18:29:01 +0000 (Thu, 17 Oct 2013)
Log Message:
-----------
Fix #37123: UV editor view does not update when using large faces

Update tagging was happening only after full triangle was handled.
Now made it so images are updating once in 0.5sec, progress bar
will still update only after the whole triangle is done.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/object/object_bake.c
    trunk/blender/source/blender/render/intern/source/bake.c
    trunk/blender/source/blender/render/intern/source/multires_bake.c

Modified: trunk/blender/source/blender/editors/object/object_bake.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_bake.c	2013-10-17 17:49:06 UTC (rev 60830)
+++ trunk/blender/source/blender/editors/object/object_bake.c	2013-10-17 18:29:01 UTC (rev 60831)
@@ -556,7 +556,7 @@
 	wm_job = WM_jobs_get(CTX_wm_manager(C), CTX_wm_window(C), scene, "Multires Bake",
 	                     WM_JOB_EXCL_RENDER | WM_JOB_PRIORITY | WM_JOB_PROGRESS, WM_JOB_TYPE_OBJECT_BAKE_TEXTURE);
 	WM_jobs_customdata_set(wm_job, bkr, multiresbake_freejob);
-	WM_jobs_timer(wm_job, 0.2, NC_IMAGE, 0); /* TODO - only draw bake image, can we enforce this */
+	WM_jobs_timer(wm_job, 0.5, NC_IMAGE, 0); /* TODO - only draw bake image, can we enforce this */
 	WM_jobs_callbacks(wm_job, multiresbake_startjob, NULL, NULL, NULL);
 
 	G.is_break = FALSE;
@@ -816,7 +816,7 @@
 			wm_job = WM_jobs_get(CTX_wm_manager(C), CTX_wm_window(C), scene, "Texture Bake",
 			                     WM_JOB_EXCL_RENDER | WM_JOB_PRIORITY | WM_JOB_PROGRESS, WM_JOB_TYPE_OBJECT_BAKE_TEXTURE);
 			WM_jobs_customdata_set(wm_job, bkr, bake_freejob);
-			WM_jobs_timer(wm_job, 0.2, NC_IMAGE, 0); /* TODO - only draw bake image, can we enforce this */
+			WM_jobs_timer(wm_job, 0.5, NC_IMAGE, 0); /* TODO - only draw bake image, can we enforce this */
 			WM_jobs_callbacks(wm_job, bake_startjob, NULL, bake_update, NULL);
 
 			G.is_break = FALSE;

Modified: trunk/blender/source/blender/render/intern/source/bake.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/bake.c	2013-10-17 17:49:06 UTC (rev 60830)
+++ trunk/blender/source/blender/render/intern/source/bake.c	2013-10-17 18:29:01 UTC (rev 60831)
@@ -322,6 +322,10 @@
 	if (bs->rect_mask) {
 		bs->rect_mask[bs->rectx * y + x] = FILTER_MASK_USED;
 	}
+
+	if (bs->do_update) {
+		*bs->do_update = true;
+	}
 }
 
 static void bake_displacement(void *handle, ShadeInput *UNUSED(shi), float dist, int x, int y)

Modified: trunk/blender/source/blender/render/intern/source/multires_bake.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/multires_bake.c	2013-10-17 17:49:06 UTC (rev 60830)
+++ trunk/blender/source/blender/render/intern/source/multires_bake.c	2013-10-17 18:29:01 UTC (rev 60831)
@@ -95,6 +95,7 @@
 	char *texels;
 	const MResolvePixelData *data;
 	MFlushPixel flush_pixel;
+	short *do_update;
 } MBakeRast;
 
 typedef struct {
@@ -162,7 +163,8 @@
 	}
 }
 
-static void init_bake_rast(MBakeRast *bake_rast, const ImBuf *ibuf, const MResolvePixelData *data, MFlushPixel flush_pixel)
+static void init_bake_rast(MBakeRast *bake_rast, const ImBuf *ibuf, const MResolvePixelData *data,
+                           MFlushPixel flush_pixel, short *do_update)
 {
 	BakeImBufuserData *userdata = (BakeImBufuserData *) ibuf->userdata;
 
@@ -173,6 +175,7 @@
 	bake_rast->h = ibuf->y;
 	bake_rast->data = data;
 	bake_rast->flush_pixel = flush_pixel;
+	bake_rast->do_update = do_update;
 }
 
 static void flush_pixel(const MResolvePixelData *data, const int x, const int y)
@@ -240,6 +243,9 @@
 		if ((bake_rast->texels[y * w + x]) == 0) {
 			bake_rast->texels[y * w + x] = FILTER_MASK_USED;
 			flush_pixel(bake_rast->data, x, y);
+			if (bake_rast->do_update) {
+				*bake_rast->do_update = true;
+			}
 		}
 	}
 }
@@ -529,7 +535,7 @@
 			handle->height_min = FLT_MAX;
 			handle->height_max = -FLT_MAX;
 
-			init_bake_rast(&handle->bake_rast, ibuf, &handle->data, flush_pixel);
+			init_bake_rast(&handle->bake_rast, ibuf, &handle->data, flush_pixel, bkr->do_update);
 
 			if (tot_thread > 1)
 				BLI_insert_thread(&threads, handle);




More information about the Bf-blender-cvs mailing list