[Bf-blender-cvs] [48adef4444a] blender2.8: Merge branch 'master' into blender2.8

Campbell Barton noreply at git.blender.org
Fri Aug 4 23:53:26 CEST 2017


Commit: 48adef4444a8276ce1d89b122346ae0426493574
Author: Campbell Barton
Date:   Sat Aug 5 07:53:07 2017 +1000
Branches: blender2.8
https://developer.blender.org/rB48adef4444a8276ce1d89b122346ae0426493574

Merge branch 'master' into blender2.8

===================================================================



===================================================================

diff --cc source/blender/editors/curve/editcurve_paint.c
index 7f3ec5cc9ef,5c3a694929e..25bad71af88
--- a/source/blender/editors/curve/editcurve_paint.c
+++ b/source/blender/editors/curve/editcurve_paint.c
@@@ -304,9 -212,9 +216,9 @@@ static bool stroke_elem_project
  		    ((unsigned int)mval_i[0] < depths->w) &&
  		    ((unsigned int)mval_i[1] < depths->h))
  		{
- 			const double depth = (double)depth_read_zbuf(&cdd->vc, mval_i[0], mval_i[1]);
+ 			const double depth = (double)ED_view3d_depth_read_cached(&cdd->vc, mval_i);
  			if ((depth > depths->depth_range[0]) && (depth < depths->depth_range[1])) {
- 				if (depth_unproject(ar, mval_i, depth, r_location_world)) {
 -				if (ED_view3d_depth_unproject(ar, &cdd->mats, mval_i, depth, r_location_world)) {
++				if (ED_view3d_depth_unproject(ar, mval_i, depth, r_location_world)) {
  					is_location_world_set = true;
  					if (r_normal_world) {
  						zero_v3(r_normal_world);
@@@ -315,7 -223,7 +227,7 @@@
  					if (surface_offset != 0.0f) {
  						const float offset = cdd->project.use_surface_offset_absolute ? 1.0f : radius;
  						float normal[3];
- 						if (depth_read_normal(&cdd->vc, mval_i, normal)) {
 -						if (ED_view3d_depth_read_cached_normal(&cdd->vc, &cdd->mats, mval_i, normal)) {
++						if (ED_view3d_depth_read_cached_normal(&cdd->vc, mval_i, normal)) {
  							madd_v3_v3fl(r_location_world, normal, offset * surface_offset);
  							if (r_normal_world) {
  								copy_v3_v3(r_normal_world, normal);
@@@ -642,7 -531,7 +554,7 @@@ static void curve_draw_event_add_first(
  		         CURVE_PAINT_SURFACE_PLANE_NORMAL_VIEW,
  		         CURVE_PAINT_SURFACE_PLANE_NORMAL_SURFACE))
  		{
- 			if (depth_read_normal(&cdd->vc, event->mval, normal)) {
 -			if (ED_view3d_depth_read_cached_normal(&cdd->vc, &cdd->mats, event->mval, normal)) {
++			if (ED_view3d_depth_read_cached_normal(&cdd->vc, event->mval, normal)) {
  				if (cps->surface_plane == CURVE_PAINT_SURFACE_PLANE_NORMAL_VIEW) {
  					float cross_a[3], cross_b[3];
  					cross_v3_v3v3(cross_a, rv3d->viewinv[2], normal);
diff --cc source/blender/editors/include/ED_view3d.h
index f34afd176e1,85fb0ee4447..4b7eaa4f3d4
--- a/source/blender/editors/include/ED_view3d.h
+++ b/source/blender/editors/include/ED_view3d.h
@@@ -110,7 -106,14 +110,14 @@@ void ED_view3d_lastview_store(struct Re
  
  /* Depth buffer */
  void  ED_view3d_depth_update(struct ARegion *ar);
- float ED_view3d_depth_read_cached(const struct ViewContext *vc, int x, int y);
+ float ED_view3d_depth_read_cached(const struct ViewContext *vc, const int mval[2]);
+ bool  ED_view3d_depth_read_cached_normal(
 -        const ViewContext *vc, const struct bglMats *mats, const int mval[2],
++        const ViewContext *vc, const int mval[2],
+         float r_normal[3]);
+ bool ED_view3d_depth_unproject(
 -        const struct ARegion *ar, const struct bglMats *mats,
++        const struct ARegion *ar,
+         const int mval[2], const double depth,
+         float r_location_world[3]);
  void  ED_view3d_depth_tag_update(struct RegionView3D *rv3d);
  
  /* Projection */
diff --cc source/blender/editors/space_clip/clip_draw.c
index 95ff76e48cc,a71b2baa96f..f5680bf2265
--- a/source/blender/editors/space_clip/clip_draw.c
+++ b/source/blender/editors/space_clip/clip_draw.c
@@@ -508,31 -471,19 +517,36 @@@ static void draw_track_path(SpaceClip *
  
  	glLineWidth(1);
  
 -	glBegin(GL_LINE_STRIP);
 -	for (i = a; i < b; i++) {
 -		if (i == count + 1)
 -			UI_ThemeColor(TH_PATH_AFTER);
 +	if ((curindex - a + 1) >= 2) {
 +		immUniformThemeColor(TH_PATH_BEFORE);
 +
 +		immBegin(GWN_PRIM_LINE_STRIP, curindex - a + 1);
 +
 +		for (i = a; i <= curindex; i++) {
 +			immVertex2f(pos, path[i][0], path[i][1]);
 +		}
 +
 +		immEnd();
 +	}
 +
 +	if ((b - curindex) >= 2) {
 +		immUniformThemeColor(TH_PATH_AFTER);
 +
 +		immBegin(GWN_PRIM_LINE_STRIP, b - curindex);
 +
 +		for (i = curindex; i < b; i++) {
 +			immVertex2f(pos, path[i][0], path[i][1]);
 +		}
  
 -		glVertex2f(path[i][0], path[i][1]);
 +		immEnd();
  	}
 -	glEnd();
 +
 +	immUnbindProgram();
+ 
+ 	if (path != path_static) {
+ 		MEM_freeN(path);
+ 	}
+ #undef MAX_STATIC_PATH
  }
  
  static void draw_marker_outline(SpaceClip *sc, MovieTrackingTrack *track, MovieTrackingMarker *marker,
diff --cc source/blender/editors/space_view3d/view3d_view.c
index 580213e1fb5,1c919ba1e75..3ffd21294df
--- a/source/blender/editors/space_view3d/view3d_view.c
+++ b/source/blender/editors/space_view3d/view3d_view.c
@@@ -816,15 -821,99 +821,91 @@@ float ED_view3d_depth_read_cached(cons
  {
  	ViewDepths *vd = vc->rv3d->depths;
  		
- 	x -= vc->ar->winrct.xmin;
- 	y -= vc->ar->winrct.ymin;
+ 	int x = mval[0];
+ 	int y = mval[1];
  
- 	if (vd && vd->depths && x > 0 && y > 0 && x < vd->w && y < vd->h)
+ 	if (vd && vd->depths && x > 0 && y > 0 && x < vd->w && y < vd->h) {
  		return vd->depths[y * vd->w + x];
- 	else
- 		return 1;
+ 	}
+ 	else {
+ 		BLI_assert(1.0 <= vd->depth_range[1]);
+ 		return 1.0f;
+ 	}
+ }
+ 
+ bool ED_view3d_depth_read_cached_normal(
 -        const ViewContext *vc, const bglMats *mats, const int mval[2],
++        const ViewContext *vc, const int mval[2],
+         float r_normal[3])
+ {
+ 	/* Note: we could support passing in a radius.
+ 	 * For now just read 9 pixels. */
+ 
+ 	/* pixels surrounding */
+ 	bool  depths_valid[9] = {false};
+ 	float coords[9][3] = {{0}};
+ 
+ 	ARegion *ar = vc->ar;
+ 	const ViewDepths *depths = vc->rv3d->depths;
+ 
+ 	for (int x = 0, i = 0; x < 2; x++) {
+ 		for (int y = 0; y < 2; y++) {
+ 			const int mval_ofs[2] = {mval[0] + (x - 1), mval[1] + (y - 1)};
+ 
+ 			const double depth = (double)ED_view3d_depth_read_cached(vc, mval_ofs);
+ 			if ((depth > depths->depth_range[0]) && (depth < depths->depth_range[1])) {
 -				if (ED_view3d_depth_unproject(ar, mats, mval_ofs, depth, coords[i])) {
++				if (ED_view3d_depth_unproject(ar, mval_ofs, depth, coords[i])) {
+ 					depths_valid[i] = true;
+ 				}
+ 			}
+ 			i++;
+ 		}
+ 	}
+ 
+ 	const int edges[2][6][2] = {
+ 	    /* x edges */
+ 	    {{0, 1}, {1, 2},
+ 	     {3, 4}, {4, 5},
+ 	     {6, 7}, {7, 8}},
+ 	    /* y edges */
+ 	    {{0, 3}, {3, 6},
+ 	     {1, 4}, {4, 7},
+ 	     {2, 5}, {5, 8}},
+ 	};
+ 
+ 	float cross[2][3] = {{0.0f}};
+ 
+ 	for (int i = 0; i < 6; i++) {
+ 		for (int axis = 0; axis < 2; axis++) {
+ 			if (depths_valid[edges[axis][i][0]] && depths_valid[edges[axis][i][1]]) {
+ 				float delta[3];
+ 				sub_v3_v3v3(delta, coords[edges[axis][i][0]], coords[edges[axis][i][1]]);
+ 				add_v3_v3(cross[axis], delta);
+ 			}
+ 		}
+ 	}
+ 
+ 	cross_v3_v3v3(r_normal, cross[0], cross[1]);
+ 
+ 	if (normalize_v3(r_normal) != 0.0f) {
+ 		return true;
+ 	}
+ 	else {
+ 		return false;
+ 	}
  }
  
+ bool ED_view3d_depth_unproject(
 -        const ARegion *ar, const bglMats *mats,
++        const ARegion *ar,
+         const int mval[2], const double depth,
+         float r_location_world[3])
+ {
 -	double p[3];
 -	if (gluUnProject(
 -	        (double)ar->winrct.xmin + mval[0] + 0.5,
 -	        (double)ar->winrct.ymin + mval[1] + 0.5,
 -	        depth, mats->modelview, mats->projection, (const GLint *)mats->viewport,
 -	        &p[0], &p[1], &p[2]))
 -	{
 -		copy_v3fl_v3db(r_location_world, p);
 -		return true;
 -	}
 -	return false;
++	float centx = (float)mval[0] + 0.5f;
++	float centy = (float)mval[1] + 0.5f;
++	return ED_view3d_unproject(ar, centx, centy, depth, r_location_world);
+ }
+ 
+ /** \} */
+ 
  void ED_view3d_depth_tag_update(RegionView3D *rv3d)
  {
  	if (rv3d->depths)




More information about the Bf-blender-cvs mailing list