[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [29642] trunk/blender/source/blender: Fix #21470: changing brush settings redraws the 3d view unecessarily,

Brecht Van Lommel brecht at blender.org
Wed Jun 23 11:58:33 CEST 2010


Revision: 29642
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=29642
Author:   blendix
Date:     2010-06-23 11:58:32 +0200 (Wed, 23 Jun 2010)

Log Message:
-----------
Fix #21470: changing brush settings redraws the 3d view unecessarily,
added ED_region_tag_redraw_overlay to only redo overlay drawing, which
in case of triple buffer is much faster.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/include/ED_screen.h
    trunk/blender/source/blender/editors/screen/area.c
    trunk/blender/source/blender/editors/space_view3d/space_view3d.c
    trunk/blender/source/blender/makesdna/DNA_screen_types.h
    trunk/blender/source/blender/windowmanager/intern/wm_draw.c

Modified: trunk/blender/source/blender/editors/include/ED_screen.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_screen.h	2010-06-23 09:58:02 UTC (rev 29641)
+++ trunk/blender/source/blender/editors/include/ED_screen.h	2010-06-23 09:58:32 UTC (rev 29642)
@@ -55,6 +55,7 @@
 void	ED_region_init(struct bContext *C, struct ARegion *ar);
 void	ED_region_tag_redraw(struct ARegion *ar);
 void	ED_region_tag_redraw_partial(struct ARegion *ar, struct rcti *rct);
+void	ED_region_tag_redraw_overlay(struct ARegion *ar);
 void	ED_region_panels_init(struct wmWindowManager *wm, struct ARegion *ar);
 void	ED_region_panels(const struct bContext *C, struct ARegion *ar, int vertical, char *context, int contextnr);
 void	ED_region_header_init(struct ARegion *ar);

Modified: trunk/blender/source/blender/editors/screen/area.c
===================================================================
--- trunk/blender/source/blender/editors/screen/area.c	2010-06-23 09:58:02 UTC (rev 29641)
+++ trunk/blender/source/blender/editors/screen/area.c	2010-06-23 09:58:32 UTC (rev 29642)
@@ -372,6 +372,12 @@
 	}
 }
 
+void ED_region_tag_redraw_overlay(ARegion *ar)
+{
+	if(ar)
+		ar->do_draw_overlay= RGN_DRAW;
+}
+
 void ED_region_tag_redraw_partial(ARegion *ar, rcti *rct)
 {
 	if(ar) {

Modified: trunk/blender/source/blender/editors/space_view3d/space_view3d.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/space_view3d.c	2010-06-23 09:58:02 UTC (rev 29641)
+++ trunk/blender/source/blender/editors/space_view3d/space_view3d.c	2010-06-23 09:58:32 UTC (rev 29642)
@@ -587,7 +587,7 @@
 			break;
 		case NC_BRUSH:
 			if(wmn->action == NA_EDITED)
-				ED_region_tag_redraw(ar);
+				ED_region_tag_redraw_overlay(ar);
 			break;			
 		case NC_MATERIAL:
 			switch(wmn->data) {

Modified: trunk/blender/source/blender/makesdna/DNA_screen_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_screen_types.h	2010-06-23 09:58:02 UTC (rev 29641)
+++ trunk/blender/source/blender/makesdna/DNA_screen_types.h	2010-06-23 09:58:32 UTC (rev 29642)
@@ -152,7 +152,9 @@
 	short sizex, sizey;			/* current split size in pixels (if zero it uses regiontype) */
 	
 	short do_draw;				/* private, cached notifier events */
+	short do_draw_overlay;		/* private, cached notifier events */
 	short swap;					/* private, indicator to survive swap-exchange */
+	short pad[3];
 	
 	struct ARegionType *type;	/* callbacks for this region type */
 	

Modified: trunk/blender/source/blender/windowmanager/intern/wm_draw.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_draw.c	2010-06-23 09:58:02 UTC (rev 29641)
+++ trunk/blender/source/blender/windowmanager/intern/wm_draw.c	2010-06-23 09:58:32 UTC (rev 29642)
@@ -642,6 +642,13 @@
 {
 	ScrArea *sa;
 	ARegion *ar;
+
+	for(ar= win->screen->regionbase.first; ar; ar= ar->next) {
+		if(ar->do_draw_overlay) {
+			wm_tag_redraw_overlay(win, ar);
+			ar->do_draw_overlay= 0;
+		}
+	}
 	
 	if(win->screen->do_refresh)
 		return 1;
@@ -687,8 +694,11 @@
 void wm_tag_redraw_overlay(wmWindow *win, ARegion *ar)
 {
 	/* for draw triple gestures, paint cursors don't need region redraw */
-	if(ar && win && wm_automatic_draw_method(win) != USER_DRAW_TRIPLE)
-		ED_region_tag_redraw(ar);
+	if(ar && win) {
+		if(wm_automatic_draw_method(win) != USER_DRAW_TRIPLE)
+			ED_region_tag_redraw(ar);
+		win->screen->do_draw_paintcursor= 1;
+	}
 }
 
 void wm_draw_update(bContext *C)





More information about the Bf-blender-cvs mailing list