[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [58922] trunk/blender/source/blender: border render with cycles had 1 pixel offset on the top-right edge of the image , issue was caused by wmSubWindowScissorSet adding 1 to the ar->drawrct, now only add the padding when drawing the entire area

Campbell Barton ideasman42 at gmail.com
Mon Aug 5 06:52:28 CEST 2013


Revision: 58922
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58922
Author:   campbellbarton
Date:     2013-08-05 04:52:27 +0000 (Mon, 05 Aug 2013)
Log Message:
-----------
border render with cycles had 1 pixel offset on the top-right edge of the image, issue was caused by wmSubWindowScissorSet adding 1 to the ar->drawrct, now only add the padding when drawing the entire area

Modified Paths:
--------------
    trunk/blender/source/blender/editors/screen/area.c
    trunk/blender/source/blender/windowmanager/WM_api.h
    trunk/blender/source/blender/windowmanager/intern/wm_draw.c
    trunk/blender/source/blender/windowmanager/intern/wm_subwindow.c

Modified: trunk/blender/source/blender/editors/screen/area.c
===================================================================
--- trunk/blender/source/blender/editors/screen/area.c	2013-08-05 04:38:54 UTC (rev 58921)
+++ trunk/blender/source/blender/editors/screen/area.c	2013-08-05 04:52:27 UTC (rev 58922)
@@ -387,7 +387,7 @@
 	ar->drawrct = ar->winrct;
 	
 	/* note; this sets state, so we can use wmOrtho and friends */
-	wmSubWindowScissorSet(win, ar->swinid, &ar->drawrct);
+	wmSubWindowScissorSet(win, ar->swinid, &ar->drawrct, true);
 	
 	UI_SetTheme(sa ? sa->spacetype : 0, ar->type ? ar->type->regionid : 0);
 	
@@ -401,21 +401,25 @@
 	wmWindow *win = CTX_wm_window(C);
 	ScrArea *sa = CTX_wm_area(C);
 	ARegionType *at = ar->type;
-	
+	bool scissor_pad;
+
 	/* see BKE_spacedata_draw_locks() */
 	if (at->do_lock)
 		return;
 	
 	/* if no partial draw rect set, full rect */
-	if (ar->drawrct.xmin == ar->drawrct.xmax)
+	if (ar->drawrct.xmin == ar->drawrct.xmax) {
 		ar->drawrct = ar->winrct;
+		scissor_pad = true;
+	}
 	else {
 		/* extra clip for safety */
 		BLI_rcti_isect(&ar->winrct, &ar->drawrct, &ar->drawrct);
+		scissor_pad = false;
 	}
 	
 	/* note; this sets state, so we can use wmOrtho and friends */
-	wmSubWindowScissorSet(win, ar->swinid, &ar->drawrct);
+	wmSubWindowScissorSet(win, ar->swinid, &ar->drawrct, scissor_pad);
 	
 	UI_SetTheme(sa ? sa->spacetype : 0, at->regionid);
 	

Modified: trunk/blender/source/blender/windowmanager/WM_api.h
===================================================================
--- trunk/blender/source/blender/windowmanager/WM_api.h	2013-08-05 04:38:54 UTC (rev 58921)
+++ trunk/blender/source/blender/windowmanager/WM_api.h	2013-08-05 04:52:27 UTC (rev 58922)
@@ -342,7 +342,7 @@
 
 			/* Set a subwindow active in pixelspace view, with optional scissor subset */
 void		wmSubWindowSet			(struct wmWindow *win, int swinid);
-void		wmSubWindowScissorSet	(struct wmWindow *win, int swinid, struct rcti *srct);
+void		wmSubWindowScissorSet	(struct wmWindow *win, int swinid, const struct rcti *srct, bool srct_pad);
 
 			/* OpenGL utilities with safety check + working in modelview matrix mode */
 void		wmFrustum			(float x1, float x2, float y1, float y2, float n, float f);

Modified: trunk/blender/source/blender/windowmanager/intern/wm_draw.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_draw.c	2013-08-05 04:38:54 UTC (rev 58921)
+++ trunk/blender/source/blender/windowmanager/intern/wm_draw.c	2013-08-05 04:52:27 UTC (rev 58922)
@@ -569,7 +569,7 @@
 	
 	/* region blend always is 1, except when blend timer is running */
 	if (fac < 1.0f) {
-		wmSubWindowScissorSet(win, win->screen->mainwin, &ar->winrct);
+		wmSubWindowScissorSet(win, win->screen->mainwin, &ar->winrct, true);
 
 		glEnable(GL_BLEND);
 		wm_triple_draw_textures(win, win->drawdata, 1.0f - fac);

Modified: trunk/blender/source/blender/windowmanager/intern/wm_subwindow.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_subwindow.c	2013-08-05 04:38:54 UTC (rev 58921)
+++ trunk/blender/source/blender/windowmanager/intern/wm_subwindow.c	2013-08-05 04:52:27 UTC (rev 58922)
@@ -239,7 +239,7 @@
 static wmWindow *_curwindow = NULL;
 static wmSubWindow *_curswin = NULL;
 
-void wmSubWindowScissorSet(wmWindow *win, int swinid, rcti *srct)
+void wmSubWindowScissorSet(wmWindow *win, int swinid, const rcti *srct, bool srct_pad)
 {
 	int width, height;
 	_curswin = swin_from_swinid(win, swinid);
@@ -257,8 +257,16 @@
 	glViewport(_curswin->winrct.xmin, _curswin->winrct.ymin, width, height);
 	
 	if (srct) {
-		int scissor_width  = BLI_rcti_size_x(srct) + 1; /* only here */
-		int scissor_height = BLI_rcti_size_y(srct) + 1;
+		int scissor_width  = BLI_rcti_size_x(srct);
+		int scissor_height = BLI_rcti_size_y(srct);
+
+		/* typically a single pixel doesn't matter,
+		 * but one pixel offset is noticable with viewport border render */
+		if (srct_pad) {
+			scissor_width  += 1;
+			scissor_height += 1;
+		}
+
 		glScissor(srct->xmin, srct->ymin, scissor_width, scissor_height);
 	}
 	else
@@ -273,7 +281,7 @@
 /* enable the WM versions of opengl calls */
 void wmSubWindowSet(wmWindow *win, int swinid)
 {
-	wmSubWindowScissorSet(win, swinid, NULL);
+	wmSubWindowScissorSet(win, swinid, NULL, true);
 }
 
 void wmFrustum(float x1, float x2, float y1, float y2, float n, float f)




More information about the Bf-blender-cvs mailing list