[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12831] trunk/blender/source/blender/src: [#6779] Fix backdrop draw in nodes

Martin Poirier theeth at yahoo.com
Sun Dec 9 23:12:01 CET 2007


Revision: 12831
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12831
Author:   theeth
Date:     2007-12-09 23:12:01 +0100 (Sun, 09 Dec 2007)

Log Message:
-----------
[#6779] Fix backdrop draw in nodes
by Matthew Plough

Replaces the glDrawPixel call with glaDrawPixelsTex for faster and interpolated drawing.

Adds autocenter and autozoom instead of the clipping that happened previously.

Fixes the button event for timely redraw.

Modified Paths:
--------------
    trunk/blender/source/blender/src/drawnode.c
    trunk/blender/source/blender/src/header_node.c

Modified: trunk/blender/source/blender/src/drawnode.c
===================================================================
--- trunk/blender/source/blender/src/drawnode.c	2007-12-09 18:42:44 UTC (rev 12830)
+++ trunk/blender/source/blender/src/drawnode.c	2007-12-09 22:12:01 UTC (rev 12831)
@@ -1949,25 +1949,40 @@
 		Image *ima= BKE_image_verify_viewer(IMA_TYPE_COMPOSITE, "Viewer Node");
 		ImBuf *ibuf= BKE_image_get_ibuf(ima, NULL);
 		if(ibuf) {
-			int x, y; 
-			/* somehow the offset has to be calculated inverse */
+			int x, y;
+            float zoom = 1.0;
+            
+            glMatrixMode(GL_PROJECTION);
+            glPushMatrix();
+            glMatrixMode(GL_MODELVIEW);
+            glPushMatrix();
 			
 			glaDefine2DArea(&sa->winrct);
-			/* ortho at pixel level curarea */
-			myortho2(-0.375, sa->winx-0.375, -0.375, sa->winy-0.375);
 
-			x = (sa->winx-ibuf->x)/2 + snode->xof;
-			y = (sa->winx-ibuf->y)/2 + snode->yof;
+            if(ibuf->x > sa->winx || ibuf->y > sa->winy) {
+                float zoomx, zoomy;
+                zoomx= (float)sa->winx/ibuf->x;
+                zoomy= (float)sa->winy/ibuf->y;
+                zoom = MIN2(zoomx, zoomy);
+            }
+			
+            x = (sa->winx-zoom*ibuf->x)/2 + snode->xof;
+			y = (sa->winy-zoom*ibuf->y)/2 + snode->yof;
 
+            glPixelZoom(zoom, zoom);
+
+            glColor4f(1.0, 1.0, 1.0, 1.0);
 			if(ibuf->rect)
-				glaDrawPixelsSafe(x, y, ibuf->x, ibuf->y, ibuf->x, GL_RGBA, GL_UNSIGNED_BYTE, ibuf->rect);
+                glaDrawPixelsTex(x, y, ibuf->x, ibuf->y, GL_UNSIGNED_BYTE, ibuf->rect);
 			else if(ibuf->channels==4)
-				glaDrawPixelsSafe(x, y, ibuf->x, ibuf->y, ibuf->x, GL_RGBA, GL_FLOAT, ibuf->rect_float);
-			
-			/* sort this out, this should not be needed */
-			myortho2(snode->v2d.cur.xmin, snode->v2d.cur.xmax, snode->v2d.cur.ymin, snode->v2d.cur.ymax);
-			bwin_clear_viewmat(sa->win);	/* clear buttons view */
-			glLoadIdentity();
+                glaDrawPixelsTex(x, y, ibuf->x, ibuf->y, GL_FLOAT, ibuf->rect_float);
+		
+            glPixelZoom(1.0, 1.0);
+
+            glMatrixMode(GL_PROJECTION);
+            glPopMatrix();
+            glMatrixMode(GL_MODELVIEW);
+            glPopMatrix();
 		}
 	}
 }

Modified: trunk/blender/source/blender/src/header_node.c
===================================================================
--- trunk/blender/source/blender/src/header_node.c	2007-12-09 18:42:44 UTC (rev 12830)
+++ trunk/blender/source/blender/src/header_node.c	2007-12-09 22:12:01 UTC (rev 12831)
@@ -662,7 +662,7 @@
 		xco+= 80;
 		uiDefButBitS(block, TOG, R_COMP_FREE, B_NOP, "Free Unused", xco+5,0,80,19, &G.scene->r.scemode, 0.0f, 0.0f, 0, 0, "Free Nodes that are not used while composite");
 		xco+= 80;
-		uiDefButBitS(block, TOG, SNODE_BACKDRAW, B_NOP, "Backdrop", xco+5,0,80,19, &snode->flag, 0.0f, 0.0f, 0, 0, "Use active Viewer Node output as backdrop");
+		uiDefButBitS(block, TOG, SNODE_BACKDRAW, REDRAWNODE, "Backdrop", xco+5,0,80,19, &snode->flag, 0.0f, 0.0f, 0, 0, "Use active Viewer Node output as backdrop");
 		xco+= 80;
 	}
 	





More information about the Bf-blender-cvs mailing list