[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [30653] trunk/blender/source/blender/ windowmanager/intern/wm_draw.c: Another attempt to solve draw methods on Intel.

Brecht Van Lommel brecht at blender.org
Fri Jul 23 15:42:59 CEST 2010


Revision: 30653
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=30653
Author:   blendix
Date:     2010-07-23 15:42:58 +0200 (Fri, 23 Jul 2010)

Log Message:
-----------
Another attempt to solve draw methods on Intel. Windows and mac now use
overlap, while unixes use overlap flip. Also implemented recent fix for
redrawing after backbuffer selection differently to avoid unneeded
redraws.

Modified Paths:
--------------
    trunk/blender/source/blender/windowmanager/intern/wm_draw.c

Modified: trunk/blender/source/blender/windowmanager/intern/wm_draw.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_draw.c	2010-07-23 10:42:59 UTC (rev 30652)
+++ trunk/blender/source/blender/windowmanager/intern/wm_draw.c	2010-07-23 13:42:58 UTC (rev 30653)
@@ -101,6 +101,14 @@
 		((View3D*)sa->spacedata.first)->flag |= V3D_INVALID_BACKBUF;
 }
 
+static int wm_area_test_invalid_backbuf(ScrArea *sa)
+{
+	if(sa->spacetype == SPACE_VIEW3D)
+		return (((View3D*)sa->spacedata.first)->flag & V3D_INVALID_BACKBUF);
+	else
+		return 0;
+}
+
 /********************** draw all **************************/
 /* - reference method, draw all each time                 */
 
@@ -189,11 +197,11 @@
 	ARegion *ar;
 	static rcti rect= {0, 0, 0, 0};
 
-	/* back needs to be ok for swap, if not, mark for redraw */
+	/* after backbuffer selection draw, we need to redraw */
 	for(sa= screen->areabase.first; sa; sa= sa->next)
 		for(ar= sa->regionbase.first; ar; ar= ar->next)
-			if(ar->swinid && !(ar->swap & WIN_BACK_OK))
-				ar->do_draw= RGN_DRAW;
+			if(ar->swinid && !wm_area_test_invalid_backbuf(sa))
+					ED_region_tag_redraw(ar);
 
 	/* flush overlapping regions */
 	if(screen->regionbase.first) {
@@ -692,11 +700,13 @@
 		/* ATI opensource driver is known to be very slow at this */
 		if(GPU_type_matches(GPU_DEVICE_ATI, GPU_OS_UNIX, GPU_DRIVER_OPENSOURCE))
 			return USER_DRAW_OVERLAP;
-#if 0
-		/* also Intel drivers don't work well with this */
-		else if(GPU_type_matches(GPU_DEVICE_INTEL, GPU_OS_ANY, GPU_DRIVER_ANY))
+		/* also Intel drivers are slow */
+		else if(GPU_type_matches(GPU_DEVICE_INTEL, GPU_OS_UNIX, GPU_DRIVER_ANY))
 			return USER_DRAW_OVERLAP;
-#endif
+		else if(GPU_type_matches(GPU_DEVICE_INTEL, GPU_OS_WIN, GPU_DRIVER_ANY))
+			return USER_DRAW_OVERLAP_FLIP;
+		else if(GPU_type_matches(GPU_DEVICE_INTEL, GPU_OS_MAC, GPU_DRIVER_ANY))
+			return USER_DRAW_OVERLAP_FLIP;
 		/* Windows software driver darkens color on each redraw */
 		else if(GPU_type_matches(GPU_DEVICE_SOFTWARE, GPU_OS_WIN, GPU_DRIVER_SOFTWARE))
 			return USER_DRAW_OVERLAP_FLIP;
@@ -798,3 +808,11 @@
 	win->screen->do_draw= 1;
 }
 
+void wm_draw_region_modified(wmWindow *win, ARegion *ar)
+{
+	int drawmethod= wm_automatic_draw_method(win);
+
+	if(ELEM(drawmethod, USER_DRAW_OVERLAP, USER_DRAW_OVERLAP_FLIP))
+		ED_region_tag_redraw(ar);
+}
+





More information about the Bf-blender-cvs mailing list