[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24024] trunk/blender/source/blender/ editors: Region post redraw is now split up in a view space and pixel space

Brecht Van Lommel brecht at blender.org
Tue Oct 20 23:05:22 CEST 2009


Revision: 24024
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24024
Author:   blendix
Date:     2009-10-20 23:05:22 +0200 (Tue, 20 Oct 2009)

Log Message:
-----------
Region post redraw is now split up in a view space and pixel space
part. This fixes a bug where transform help line drawing would not
work with view clipping and mess up the z-buffer. This avoids the
transform code having to figure out what kind of opengl state is
enabled and disable it temporarily.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/include/ED_space_api.h
    trunk/blender/source/blender/editors/mesh/loopcut.c
    trunk/blender/source/blender/editors/space_api/spacetypes.c
    trunk/blender/source/blender/editors/space_image/image_draw.c
    trunk/blender/source/blender/editors/space_image/image_ops.c
    trunk/blender/source/blender/editors/space_image/space_image.c
    trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
    trunk/blender/source/blender/editors/transform/transform.c
    trunk/blender/source/blender/editors/transform/transform.h
    trunk/blender/source/blender/editors/transform/transform_generics.c

Modified: trunk/blender/source/blender/editors/include/ED_space_api.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_space_api.h	2009-10-20 20:59:02 UTC (rev 24023)
+++ trunk/blender/source/blender/editors/include/ED_space_api.h	2009-10-20 21:05:22 UTC (rev 24024)
@@ -60,8 +60,8 @@
 void ED_file_init(void);
 void ED_file_exit(void);
 
-#define REGION_DRAW_PRE		1
-#define REGION_DRAW_POST	0
+#define REGION_DRAW_POST_VIEW	0
+#define REGION_DRAW_POST_PIXEL	1
 
 void *ED_region_draw_cb_activate(struct ARegionType *, 
 								 void	(*draw)(const struct bContext *, struct ARegion *, void *),

Modified: trunk/blender/source/blender/editors/mesh/loopcut.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/loopcut.c	2009-10-20 20:59:02 UTC (rev 24023)
+++ trunk/blender/source/blender/editors/mesh/loopcut.c	2009-10-20 21:05:22 UTC (rev 24024)
@@ -301,7 +301,7 @@
 	
 	/* assign the drawing handle for drawing preview line... */
 	lcd->ar= CTX_wm_region(C);
-	lcd->draw_handle= ED_region_draw_cb_activate(lcd->ar->type, ringsel_draw, lcd, REGION_DRAW_POST);
+	lcd->draw_handle= ED_region_draw_cb_activate(lcd->ar->type, ringsel_draw, lcd, REGION_DRAW_POST_VIEW);
 	lcd->ob = CTX_data_edit_object(C);
 	lcd->em= BKE_mesh_get_editmesh((Mesh *)lcd->ob->data);
 	lcd->extend = do_cut ? 0 : RNA_boolean_get(op->ptr, "extend");

Modified: trunk/blender/source/blender/editors/space_api/spacetypes.c
===================================================================
--- trunk/blender/source/blender/editors/space_api/spacetypes.c	2009-10-20 20:59:02 UTC (rev 24023)
+++ trunk/blender/source/blender/editors/space_api/spacetypes.c	2009-10-20 21:05:22 UTC (rev 24024)
@@ -151,10 +151,6 @@
 
 /* ********************** custom drawcall api ***************** */
 
-/* type */
-#define REGION_DRAW_PRE		1
-#define REGION_DRAW_POST	0
-
 typedef struct RegionDrawCB {
 	struct RegionDrawCB *next, *prev;
 	

Modified: trunk/blender/source/blender/editors/space_image/image_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_image/image_draw.c	2009-10-20 20:59:02 UTC (rev 24023)
+++ trunk/blender/source/blender/editors/space_image/image_draw.c	2009-10-20 21:05:22 UTC (rev 24024)
@@ -173,8 +173,6 @@
 {
 	char str[256];
 	int ofs;
-
-	ED_region_pixelspace(ar);
 	
 	ofs= sprintf(str, "X: %d Y: %d ", x, y);
 	if(cp)

Modified: trunk/blender/source/blender/editors/space_image/image_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_image/image_ops.c	2009-10-20 20:59:02 UTC (rev 24023)
+++ trunk/blender/source/blender/editors/space_image/image_ops.c	2009-10-20 21:05:22 UTC (rev 24024)
@@ -1539,7 +1539,7 @@
 	
 	info= MEM_callocN(sizeof(ImageSampleInfo), "ImageSampleInfo");
 	info->art= ar->type;
-	info->draw_handle = ED_region_draw_cb_activate(ar->type, sample_draw, info, REGION_DRAW_POST);
+	info->draw_handle = ED_region_draw_cb_activate(ar->type, sample_draw, info, REGION_DRAW_POST_PIXEL);
 	op->customdata= info;
 
 	sample_apply(C, op, event);

Modified: trunk/blender/source/blender/editors/space_image/space_image.c
===================================================================
--- trunk/blender/source/blender/editors/space_image/space_image.c	2009-10-20 20:59:02 UTC (rev 24023)
+++ trunk/blender/source/blender/editors/space_image/space_image.c	2009-10-20 21:05:22 UTC (rev 24024)
@@ -431,15 +431,17 @@
 	UI_view2d_view_ortho(C, v2d);
 	draw_uvedit_main(sima, ar, scene, obedit);
 
-	ED_region_draw_cb_draw(C, ar, REGION_DRAW_POST);
+	ED_region_draw_cb_draw(C, ar, REGION_DRAW_POST_VIEW);
 		
 	/* Grease Pencil too (in addition to UV's) */
 	draw_image_grease_pencil((bContext *)C, 1); 
 
 	UI_view2d_view_restore(C);
-	
+
 	/* draw Grease Pencil - screen space only */
 	draw_image_grease_pencil((bContext *)C, 0);
+
+	ED_region_draw_cb_draw(C, ar, REGION_DRAW_POST_PIXEL);
 	
 	/* scrollers? */
 	/*scrollers= UI_view2d_scrollers_calc(C, v2d, V2D_UNIT_VALUES, V2D_GRID_CLAMP, V2D_ARG_DUMMY, V2D_ARG_DUMMY);

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_draw.c	2009-10-20 20:59:02 UTC (rev 24023)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_draw.c	2009-10-20 21:05:22 UTC (rev 24024)
@@ -2056,7 +2056,7 @@
 		view3d_update_depths(ar, v3d);
 	}
 	
-	ED_region_draw_cb_draw(C, ar, REGION_DRAW_POST);
+	ED_region_draw_cb_draw(C, ar, REGION_DRAW_POST_VIEW);
 	
 //	REEB_draw();
 	
@@ -2123,6 +2123,8 @@
 	ob= OBACT;
 	if(U.uiflag & USER_DRAWVIEWINFO) 
 		draw_selected_name(scene, ob, v3d);
+
+	ED_region_draw_cb_draw(C, ar, REGION_DRAW_POST_PIXEL);
 	
 	/* XXX here was the blockhandlers for floating panels */
 

Modified: trunk/blender/source/blender/editors/transform/transform.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.c	2009-10-20 20:59:02 UTC (rev 24023)
+++ trunk/blender/source/blender/editors/transform/transform.c	2009-10-20 21:05:22 UTC (rev 24024)
@@ -1124,15 +1124,8 @@
 
 		projectFloatView(t, vecrot, cent);	// no overflow in extreme cases
 
-		glDisable(GL_DEPTH_TEST);
-
-		glMatrixMode(GL_PROJECTION);
 		glPushMatrix();
-		glMatrixMode(GL_MODELVIEW);
-		glPushMatrix();
 
-		ED_region_pixelspace(t->ar);
-
 		switch(t->helpline)
 		{
 			case HLP_SPRING:
@@ -1238,22 +1231,23 @@
 				}
 		}
 
-		glMatrixMode(GL_PROJECTION);
 		glPopMatrix();
-		glMatrixMode(GL_MODELVIEW);
-		glPopMatrix();
-
-		glEnable(GL_DEPTH_TEST);
 	}
 }
 
-void drawTransform(const struct bContext *C, struct ARegion *ar, void *arg)
+void drawTransformView(const struct bContext *C, struct ARegion *ar, void *arg)
 {
 	TransInfo *t = arg;
 
 	drawConstraint(C, t);
 	drawPropCircle(C, t);
 	drawSnapping(C, t);
+}
+
+void drawTransformPixel(const struct bContext *C, struct ARegion *ar, void *arg)
+{
+	TransInfo *t = arg;
+
 	drawHelpline(C, t);
 }
 
@@ -1373,11 +1367,13 @@
 		//calc_manipulator_stats(curarea);
 		initTransformOrientation(C, t);
 
-		t->draw_handle = ED_region_draw_cb_activate(t->ar->type, drawTransform, t, REGION_DRAW_POST);
+		t->draw_handle_view = ED_region_draw_cb_activate(t->ar->type, drawTransformView, t, REGION_DRAW_POST_VIEW);
+		t->draw_handle_pixel = ED_region_draw_cb_activate(t->ar->type, drawTransformPixel, t, REGION_DRAW_POST_PIXEL);
 	}
 	else if(t->spacetype == SPACE_IMAGE) {
 		Mat3One(t->spacemtx);
-		t->draw_handle = ED_region_draw_cb_activate(t->ar->type, drawTransform, t, REGION_DRAW_POST);
+		t->draw_handle_view = ED_region_draw_cb_activate(t->ar->type, drawTransformView, t, REGION_DRAW_POST_VIEW);
+		t->draw_handle_pixel = ED_region_draw_cb_activate(t->ar->type, drawTransformPixel, t, REGION_DRAW_POST_PIXEL);
 	}
 	else
 		Mat3One(t->spacemtx);

Modified: trunk/blender/source/blender/editors/transform/transform.h
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.h	2009-10-20 20:59:02 UTC (rev 24023)
+++ trunk/blender/source/blender/editors/transform/transform.h	2009-10-20 21:05:22 UTC (rev 24024)
@@ -302,7 +302,8 @@
 	struct wmTimer *animtimer;
     short       mval[2];        /* current mouse position               */
     struct Object   *obedit;
-    void		*draw_handle;
+    void		*draw_handle_view;
+    void		*draw_handle_pixel;
 } TransInfo;
 
 

Modified: trunk/blender/source/blender/editors/transform/transform_generics.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_generics.c	2009-10-20 20:59:02 UTC (rev 24023)
+++ trunk/blender/source/blender/editors/transform/transform_generics.c	2009-10-20 21:05:22 UTC (rev 24024)
@@ -1045,10 +1045,10 @@
 {
 	TransData *td;
 	
-	if (t->draw_handle)
-	{
-		ED_region_draw_cb_exit(t->ar->type, t->draw_handle);
-	}
+	if (t->draw_handle_view)
+		ED_region_draw_cb_exit(t->ar->type, t->draw_handle_view);
+	if (t->draw_handle_pixel)
+		ED_region_draw_cb_exit(t->ar->type, t->draw_handle_pixel);
 	
 
 	if (t->customFree) {





More information about the Bf-blender-cvs mailing list