[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [52679] trunk/blender/source/blender: Compositor should never add notifiers by himself, notifiers should be added

Sergey Sharybin sergey.vfx at gmail.com
Fri Nov 30 10:12:13 CET 2012


Revision: 52679
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=52679
Author:   nazgul
Date:     2012-11-30 09:12:10 +0000 (Fri, 30 Nov 2012)
Log Message:
-----------
Compositor should never add notifiers by himself, notifiers should be added
from main thread using job update callback.

Added new execution-time callback to bNodeTree which marks job to be updated.

The code here could be a bit not so obvious because in some cases job update
callback need to merge local tree, but it's only needed for old compositor
system which is gonna to be removed soon, so decided not to bother with
cleanup now. Removing old compositor system will also allow to drop stats_draw
callback from bNodeTree.

This should fix following bugs:

Modified Paths:
--------------
    trunk/blender/source/blender/compositor/intern/COM_ExecutionGroup.cpp
    trunk/blender/source/blender/compositor/intern/COM_NodeOperation.h
    trunk/blender/source/blender/compositor/operations/COM_ViewerBaseOperation.cpp
    trunk/blender/source/blender/editors/space_node/node_edit.c
    trunk/blender/source/blender/makesdna/DNA_node_types.h

Modified: trunk/blender/source/blender/compositor/intern/COM_ExecutionGroup.cpp
===================================================================
--- trunk/blender/source/blender/compositor/intern/COM_ExecutionGroup.cpp	2012-11-30 07:27:17 UTC (rev 52678)
+++ trunk/blender/source/blender/compositor/intern/COM_ExecutionGroup.cpp	2012-11-30 09:12:10 UTC (rev 52679)
@@ -352,7 +352,7 @@
 				startEvaluated = true;
 				numberEvaluated++;
 
-				WM_main_add_notifier(NC_WINDOW | ND_DRAW, NULL);
+				bTree->update_draw(bTree->udh);
 			}
 			else if (state == COM_ES_SCHEDULED) {
 				finished = false;

Modified: trunk/blender/source/blender/compositor/intern/COM_NodeOperation.h
===================================================================
--- trunk/blender/source/blender/compositor/intern/COM_NodeOperation.h	2012-11-30 07:27:17 UTC (rev 52678)
+++ trunk/blender/source/blender/compositor/intern/COM_NodeOperation.h	2012-11-30 09:12:10 UTC (rev 52679)
@@ -77,7 +77,7 @@
 	ThreadMutex m_mutex;
 	
 	/**
-	 * @brief reference to the editing bNodeTree only used for break callback
+	 * @brief reference to the editing bNodeTree, used for break and update callback
 	 */
 	const bNodeTree *m_btree;
 
@@ -247,6 +247,9 @@
 		return this->m_btree->test_break(this->m_btree->tbh);
 	}
 
+	inline void updateDraw() {
+		this->m_btree->update_draw(this->m_btree->udh);
+	}
 protected:
 	NodeOperation();
 

Modified: trunk/blender/source/blender/compositor/operations/COM_ViewerBaseOperation.cpp
===================================================================
--- trunk/blender/source/blender/compositor/operations/COM_ViewerBaseOperation.cpp	2012-11-30 07:27:17 UTC (rev 52678)
+++ trunk/blender/source/blender/compositor/operations/COM_ViewerBaseOperation.cpp	2012-11-30 09:12:10 UTC (rev 52679)
@@ -103,7 +103,7 @@
 	                                  this->m_viewSettings, this->m_displaySettings,
 	                                  rect->xmin, rect->ymin, rect->xmax, rect->ymax, FALSE);
 
-	WM_main_add_notifier(NC_WINDOW | ND_DRAW, NULL);
+	this->updateDraw();
 }
 
 void ViewerBaseOperation::deinitExecution()

Modified: trunk/blender/source/blender/editors/space_node/node_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_edit.c	2012-11-30 07:27:17 UTC (rev 52678)
+++ trunk/blender/source/blender/editors/space_node/node_edit.c	2012-11-30 09:12:10 UTC (rev 52679)
@@ -86,6 +86,7 @@
 	short *stop;
 	short *do_update;
 	float *progress;
+	short need_sync;
 } CompoJob;
 
 /* called by compo, only to check job 'stop' value */
@@ -102,8 +103,17 @@
 	        );
 }
 
+/* called by compo, wmJob sends notifier, old compositor system only */
+static void compo_statsdrawjob(void *cjv, char *UNUSED(str))
+{
+	CompoJob *cj = cjv;
+	
+	*(cj->do_update) = TRUE;
+	cj->need_sync = TRUE;
+}
+
 /* called by compo, wmJob sends notifier */
-static void compo_redrawjob(void *cjv, char *UNUSED(str))
+static void compo_redrawjob(void *cjv)
 {
 	CompoJob *cj = cjv;
 	
@@ -133,8 +143,15 @@
 static void compo_updatejob(void *cjv)
 {
 	CompoJob *cj = cjv;
-	
-	ntreeLocalSync(cj->localtree, cj->ntree);
+
+	if (cj->need_sync) {
+		/* was used by old compositor system only */
+		ntreeLocalSync(cj->localtree, cj->ntree);
+
+		cj->need_sync = FALSE;
+	}
+
+	WM_main_add_notifier(NC_WINDOW | ND_DRAW, NULL);
 }
 
 static void compo_progressjob(void *cjv, float progress)
@@ -161,11 +178,13 @@
 
 	ntree->test_break = compo_breakjob;
 	ntree->tbh = cj;
-	ntree->stats_draw = compo_redrawjob;
+	ntree->stats_draw = compo_statsdrawjob;
 	ntree->sdh = cj;
 	ntree->progress = compo_progressjob;
 	ntree->prh = cj;
-	
+	ntree->update_draw = compo_redrawjob;
+	ntree->udh = cj;
+
 	// XXX BIF_store_spare();
 	
 	ntreeCompositExecTree(ntree, &cj->scene->r, 0, 1, &scene->view_settings, &scene->display_settings);  /* 1 is do_previews */

Modified: trunk/blender/source/blender/makesdna/DNA_node_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_node_types.h	2012-11-30 07:27:17 UTC (rev 52678)
+++ trunk/blender/source/blender/makesdna/DNA_node_types.h	2012-11-30 09:12:10 UTC (rev 52679)
@@ -294,7 +294,8 @@
 	void (*progress)(void *, float progress);
 	void (*stats_draw)(void *, char *str);
 	int (*test_break)(void *);
-	void *tbh, *prh, *sdh;
+	void (*update_draw)(void *);
+	void *tbh, *prh, *sdh, *udh;
 	
 } bNodeTree;
 




More information about the Bf-blender-cvs mailing list