[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56276] trunk/blender/source/blender/ render/intern/source/pipeline.c: Fix flickering black tiles in preview render, after viewport render commit , it's

Brecht Van Lommel brechtvanlommel at pandora.be
Wed Apr 24 21:21:16 CEST 2013


Revision: 56276
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56276
Author:   blendix
Date:     2013-04-24 19:21:16 +0000 (Wed, 24 Apr 2013)
Log Message:
-----------
Fix flickering black tiles in preview render, after viewport render commit, it's
nicer when the new preview draws over the old one.

The code was changed so that the render result is freed all the time because
freestyle manipulates render layers. Now it only does it when freestyle is
enabled so cycles and regular blender internal can still avoid it.

Modified Paths:
--------------
    trunk/blender/source/blender/render/intern/source/pipeline.c

Modified: trunk/blender/source/blender/render/intern/source/pipeline.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/pipeline.c	2013-04-24 19:21:14 UTC (rev 56275)
+++ trunk/blender/source/blender/render/intern/source/pipeline.c	2013-04-24 19:21:16 UTC (rev 56276)
@@ -463,6 +463,8 @@
 /* disprect is optional, if NULL it assumes full window render */
 void RE_InitState(Render *re, Render *source, RenderData *rd, SceneRenderLayer *srl, int winx, int winy, rcti *disprect)
 {
+	bool had_freestyle = (re->r.mode & R_EDGE_FRS);
+
 	re->ok = TRUE;   /* maybe flag */
 	
 	re->i.starttime = PIL_check_seconds_timer();
@@ -570,9 +572,22 @@
 	BLI_rw_mutex_lock(&re->resultmutex, THREAD_LOCK_WRITE);
 
 	if (re->r.scemode & R_PREVIEWBUTS) {
-		/* always fresh, freestyle layers need it */
-		render_result_free(re->result);
-		re->result = NULL;
+		if (had_freestyle || (re->r.mode & R_EDGE_FRS)) {
+			/* freestyle manipulates render layers so always have to free */
+			render_result_free(re->result);
+			re->result = NULL;
+		}
+		else if (re->result) {
+			if (re->result->rectx == re->rectx && re->result->recty == re->recty) {
+				/* keep render result, this avoids flickering black tiles
+				 * when the preview changes */
+			}
+			else {
+				/* free because resolution changed */
+				render_result_free(re->result);
+				re->result = NULL;
+			}
+		}
 	}
 	else {
 		




More information about the Bf-blender-cvs mailing list