[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56883] trunk/blender/source/blender: More work on 3d view render:

Ton Roosendaal ton at blender.org
Fri May 17 18:46:59 CEST 2013


Revision: 56883
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56883
Author:   ton
Date:     2013-05-17 16:46:59 +0000 (Fri, 17 May 2013)
Log Message:
-----------
More work on 3d view render:

- reverted fix for bug 32537 (error report drawing after thread job didn't show)

  This solves very bad 3d view render updates while using transform, it was
  getting into an eternal feedback loop for dependencies. (jobs sending mousemoves
  causing jobs to end, causing mousemoves, causing etc).
  
- The render-update code was not going over all windows, but over every screen to
  send signals (also the invisble ones)

Modified Paths:
--------------
    trunk/blender/source/blender/editors/render/render_internal.c
    trunk/blender/source/blender/editors/render/render_update.c
    trunk/blender/source/blender/windowmanager/WM_api.h
    trunk/blender/source/blender/windowmanager/intern/wm_event_system.c
    trunk/blender/source/blender/windowmanager/intern/wm_jobs.c

Modified: trunk/blender/source/blender/editors/render/render_internal.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_internal.c	2013-05-17 16:37:47 UTC (rev 56882)
+++ trunk/blender/source/blender/editors/render/render_internal.c	2013-05-17 16:46:59 UTC (rev 56883)
@@ -47,6 +47,7 @@
 
 #include "BKE_blender.h"
 #include "BKE_context.h"
+#include "BKE_depsgraph.h"
 #include "BKE_freestyle.h"
 #include "BKE_global.h"
 #include "BKE_image.h"
@@ -926,7 +927,6 @@
 	
 	if (CTX_wm_window(C) == NULL) {
 		engine->flag |= RE_ENGINE_DO_UPDATE;
-		
 		return;
 	}
 
@@ -962,7 +962,7 @@
 
 /* callback for render engine , on changes */
 void render_view3d(RenderEngine *engine, const bContext *C)
-{
+{	
 	render_view3d_do(engine, C, 0);
 }
 
@@ -986,8 +986,12 @@
 		float clipsta, clipend;
 		bool orth;
 
-		if (engine->update_flag == RE_ENGINE_UPDATE_MA)
+		if (engine->update_flag & RE_ENGINE_UPDATE_MA)
 			update |= PR_UPDATE_MATERIAL;
+		
+		if (engine->update_flag & RE_ENGINE_UPDATE_OTHER)
+			update |= PR_UPDATE_MATERIAL;
+		
 		engine->update_flag = 0;
 		
 		if (engine->resolution_x != ar->winx || engine->resolution_y != ar->winy)

Modified: trunk/blender/source/blender/editors/render/render_update.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_update.c	2013-05-17 16:37:47 UTC (rev 56882)
+++ trunk/blender/source/blender/editors/render/render_update.c	2013-05-17 16:46:59 UTC (rev 56883)
@@ -41,6 +41,7 @@
 #include "DNA_space_types.h"
 #include "DNA_view3d_types.h"
 #include "DNA_world_types.h"
+#include "DNA_windowmanager_types.h"
 
 #include "BLI_threads.h"
 #include "BLI_utildefines.h"
@@ -78,11 +79,14 @@
 	/* viewport rendering update on data changes, happens after depsgraph
 	 * updates if there was any change. context is set to the 3d view */
 	bContext *C;
-	bScreen *sc;
-	ScrArea *sa;
-	ARegion *ar;
+	wmWindowManager *wm;
+	wmWindow *win;
 	static int recursive_check = FALSE;
 
+	/* why do this function then? :) */
+	if (updated == 0)
+		return;
+	
 	/* don't do this render engine update if we're updating the scene from
 	 * other threads doing e.g. rendering or baking jobs */
 	if (!BLI_thread_is_main())
@@ -99,8 +103,15 @@
 	CTX_data_scene_set(C, scene);
 
 	CTX_wm_manager_set(C, bmain->wm.first);
-
-	for (sc = bmain->screen.first; sc; sc = sc->id.next) {
+	wm = bmain->wm.first;
+	
+	for (win = wm->windows.first; win; win = win->next) {
+		bScreen *sc = win->screen;
+		ScrArea *sa;
+		ARegion *ar;
+		
+		CTX_wm_window_set(C, win);
+		
 		for (sa = sc->areabase.first; sa; sa = sa->next) {
 			if (sa->spacetype != SPACE_VIEW3D)
 				continue;

Modified: trunk/blender/source/blender/windowmanager/WM_api.h
===================================================================
--- trunk/blender/source/blender/windowmanager/WM_api.h	2013-05-17 16:37:47 UTC (rev 56882)
+++ trunk/blender/source/blender/windowmanager/WM_api.h	2013-05-17 16:46:59 UTC (rev 56883)
@@ -170,7 +170,6 @@
 
 			/* mouse */
 void		WM_event_add_mousemove(struct bContext *C);
-void		WM_event_add_mousemove_window(struct wmWindow *window);
 int			WM_modal_tweak_exit(const struct wmEvent *event, int tweak_event);
 
 			/* notifiers */

Modified: trunk/blender/source/blender/windowmanager/intern/wm_event_system.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_event_system.c	2013-05-17 16:37:47 UTC (rev 56882)
+++ trunk/blender/source/blender/windowmanager/intern/wm_event_system.c	2013-05-17 16:46:59 UTC (rev 56883)
@@ -2255,7 +2255,7 @@
 		/* only add mousemove when queue was read entirely */
 		if (win->addmousemove && win->eventstate) {
 			wmEvent tevent = *(win->eventstate);
-			//printf("adding MOUSEMOVE %d %d\n", tevent.x, tevent.y);
+			// printf("adding MOUSEMOVE %d %d\n", tevent.x, tevent.y);
 			tevent.type = MOUSEMOVE;
 			tevent.prevx = tevent.x;
 			tevent.prevy = tevent.y;
@@ -2540,10 +2540,6 @@
 	window->addmousemove = 1;
 }
 
-void WM_event_add_mousemove_window(wmWindow *window)
-{
-	window->addmousemove = 1;
-}
 
 /* for modal callbacks, check configuration for how to interpret exit with tweaks  */
 int WM_modal_tweak_exit(const wmEvent *event, int tweak_event)

Modified: trunk/blender/source/blender/windowmanager/intern/wm_jobs.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_jobs.c	2013-05-17 16:37:47 UTC (rev 56882)
+++ trunk/blender/source/blender/windowmanager/intern/wm_jobs.c	2013-05-17 16:46:59 UTC (rev 56883)
@@ -529,10 +529,6 @@
 					
 					WM_event_add_notifier(C, NC_WM | ND_JOB, NULL);
 
-					/* so the info header updates on job end even if the mouse doesn't move.
-					 * a rather annoying/obscure bug, see [#32537] (second reply) */
-					WM_event_add_mousemove_window(wm_job->win);
-
 					/* new job added for wm_job? */
 					if (wm_job->customdata) {
 						// printf("job restarted with new data %s\n", wm_job->name);




More information about the Bf-blender-cvs mailing list