[Bf-blender-cvs] [1c905046d1d] blender2.8: Merge branch 'master' into blender2.8

Campbell Barton noreply at git.blender.org
Sun Jan 28 06:46:35 CET 2018


Commit: 1c905046d1da3a37993376f34f9a438244f4a1f3
Author: Campbell Barton
Date:   Sun Jan 28 16:40:23 2018 +1100
Branches: blender2.8
https://developer.blender.org/rB1c905046d1da3a37993376f34f9a438244f4a1f3

Merge branch 'master' into blender2.8

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



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

diff --cc source/blender/editors/space_view3d/view3d_utils.c
index cb9c7f02db9,e06ae89fa89..7bb3f443ac6
--- a/source/blender/editors/space_view3d/view3d_utils.c
+++ b/source/blender/editors/space_view3d/view3d_utils.c
@@@ -55,6 -53,6 +55,8 @@@
  #include "BIF_gl.h"
  #include "BIF_glutil.h"
  
++#include "GPU_matrix.h"
++
  #include "WM_api.h"
  #include "WM_types.h"
  
@@@ -147,6 -143,35 +149,33 @@@ bool ED_view3d_viewplane_get
   *
   * \{ */
  
+ /**
+  * Use this call when executing an operator,
+  * event system doesn't set for each event the OpenGL drawing context.
+  */
+ void view3d_operator_needs_opengl(const bContext *C)
+ {
+ 	wmWindow *win = CTX_wm_window(C);
+ 	ARegion *ar = CTX_wm_region(C);
+ 
+ 	view3d_region_operator_needs_opengl(win, ar);
+ }
+ 
+ void view3d_region_operator_needs_opengl(wmWindow *win, ARegion *ar)
+ {
+ 	/* for debugging purpose, context should always be OK */
+ 	if ((ar == NULL) || (ar->regiontype != RGN_TYPE_WINDOW)) {
+ 		printf("view3d_region_operator_needs_opengl error, wrong region\n");
+ 	}
+ 	else {
+ 		RegionView3D *rv3d = ar->regiondata;
+ 
+ 		wmSubWindowSet(win, ar->swinid);
 -		glMatrixMode(GL_PROJECTION);
 -		glLoadMatrixf(rv3d->winmat);
 -		glMatrixMode(GL_MODELVIEW);
 -		glLoadMatrixf(rv3d->viewmat);
++		gpuLoadProjectionMatrix(rv3d->winmat);
++		gpuLoadMatrix(rv3d->viewmat);
+ 	}
+ }
+ 
  /**
   * Use instead of: ``bglPolygonOffset(rv3d->dist, ...)`` see bug [#37727]
   */
diff --cc source/blender/editors/space_view3d/view3d_view.c
index acc6d7184ff,baeee0e89d7..0597f2806b3
--- a/source/blender/editors/space_view3d/view3d_view.c
+++ b/source/blender/editors/space_view3d/view3d_view.c
@@@ -47,14 -48,11 +47,13 @@@
  #include "BKE_report.h"
  #include "BKE_scene.h"
  
 -#include "BIF_gl.h"
 +#include "DEG_depsgraph.h"
  
- 
  #include "UI_resources.h"
  
 +#include "GPU_glew.h"
  #include "GPU_select.h"
 +#include "GPU_matrix.h"
  
  #include "WM_api.h"
  #include "WM_types.h"
@@@ -996,7 -966,47 +997,13 @@@ finally
  	return hits;
  }
  
+ /** \} */
+ 
+ /* -------------------------------------------------------------------- */
 -/** \name Local View Operators
++/** \name View Layer Utilities
+  * \{ */
+ 
 -static unsigned int free_localbit(Main *bmain)
 -{
 -	unsigned int lay;
 -	ScrArea *sa;
 -	bScreen *sc;
 -	
 -	lay = 0;
 -	
 -	/* sometimes we loose a localview: when an area is closed */
 -	/* check all areas: which localviews are in use? */
 -	for (sc = bmain->screen.first; sc; sc = sc->id.next) {
 -		for (sa = sc->areabase.first; sa; sa = sa->next) {
 -			SpaceLink *sl = sa->spacedata.first;
 -			for (; sl; sl = sl->next) {
 -				if (sl->spacetype == SPACE_VIEW3D) {
 -					View3D *v3d = (View3D *) sl;
 -					lay |= v3d->lay;
 -				}
 -			}
 -		}
 -	}
 -	
 -	if ((lay & 0x01000000) == 0) return 0x01000000;
 -	if ((lay & 0x02000000) == 0) return 0x02000000;
 -	if ((lay & 0x04000000) == 0) return 0x04000000;
 -	if ((lay & 0x08000000) == 0) return 0x08000000;
 -	if ((lay & 0x10000000) == 0) return 0x10000000;
 -	if ((lay & 0x20000000) == 0) return 0x20000000;
 -	if ((lay & 0x40000000) == 0) return 0x40000000;
 -	if ((lay & 0x80000000) == 0) return 0x80000000;
 -	
 -	return 0;
 -}
 -
 -int ED_view3d_scene_layer_set(int lay, const int *values, int *active)
 +int ED_view3d_view_layer_set(int lay, const int *values, int *active)
  {
  	int i, tot = 0;
  	
@@@ -1034,6 -1044,275 +1041,14 @@@
  	return lay;
  }
  
 -static bool view3d_localview_init(
 -        wmWindowManager *wm, wmWindow *win,
 -        Main *bmain, Scene *scene, ScrArea *sa, const int smooth_viewtx,
 -        ReportList *reports)
 -{
 -	View3D *v3d = sa->spacedata.first;
 -	Base *base;
 -	float min[3], max[3], box[3], mid[3];
 -	float size = 0.0f;
 -	unsigned int locallay;
 -	bool ok = false;
 -
 -	if (v3d->localvd) {
 -		return ok;
 -	}
 -
 -	INIT_MINMAX(min, max);
 -
 -	locallay = free_localbit(bmain);
 -
 -	if (locallay == 0) {
 -		BKE_report(reports, RPT_ERROR, "No more than 8 local views");
 -		ok = false;
 -	}
 -	else {
 -		if (scene->obedit) {
 -			BKE_object_minmax(scene->obedit, min, max, false);
 -			
 -			ok = true;
 -		
 -			BASACT->lay |= locallay;
 -			scene->obedit->lay = BASACT->lay;
 -		}
 -		else {
 -			for (base = FIRSTBASE; base; base = base->next) {
 -				if (TESTBASE(v3d, base)) {
 -					BKE_object_minmax(base->object, min, max, false);
 -					base->lay |= locallay;
 -					base->object->lay = base->lay;
 -					ok = true;
 -				}
 -			}
 -		}
 -
 -		sub_v3_v3v3(box, max, min);
 -		size = max_fff(box[0], box[1], box[2]);
 -	}
 -	
 -	if (ok == true) {
 -		ARegion *ar;
 -		
 -		v3d->localvd = MEM_mallocN(sizeof(View3D), "localview");
 -		
 -		memcpy(v3d->localvd, v3d, sizeof(View3D));
 -
 -		mid_v3_v3v3(mid, min, max);
 -
 -		copy_v3_v3(v3d->cursor, mid);
 -
 -		for (ar = sa->regionbase.first; ar; ar = ar->next) {
 -			if (ar->regiontype == RGN_TYPE_WINDOW) {
 -				RegionView3D *rv3d = ar->regiondata;
 -				bool ok_dist = true;
 -
 -				/* new view values */
 -				Object *camera_old = NULL;
 -				float dist_new, ofs_new[3];
 -
 -				rv3d->localvd = MEM_mallocN(sizeof(RegionView3D), "localview region");
 -				memcpy(rv3d->localvd, rv3d, sizeof(RegionView3D));
 -
 -				negate_v3_v3(ofs_new, mid);
 -
 -				if (rv3d->persp == RV3D_CAMOB) {
 -					rv3d->persp = RV3D_PERSP;
 -					camera_old = v3d->camera;
 -				}
 -
 -				if (rv3d->persp == RV3D_ORTHO) {
 -					if (size < 0.0001f) {
 -						ok_dist = false;
 -					}
 -				}
 -
 -				if (ok_dist) {
 -					dist_new = ED_view3d_radius_to_dist(v3d, ar, rv3d->persp, true, (size / 2) * VIEW3D_MARGIN);
 -					if (rv3d->persp == RV3D_PERSP) {
 -						/* don't zoom closer than the near clipping plane */
 -						dist_new = max_ff(dist_new, v3d->near * 1.5f);
 -					}
 -				}
 -
 -				ED_view3d_smooth_view_ex(
 -				        wm, win, sa, v3d, ar, smooth_viewtx,
 -				            &(const V3D_SmoothParams) {
 -				                .camera_old = camera_old,
 -				                .ofs = ofs_new, .quat = rv3d->viewquat,
 -				                .dist = ok_dist ? &dist_new : NULL, .lens = &v3d->lens});
 -			}
 -		}
 -		
 -		v3d->lay = locallay;
 -	}
 -	else {
 -		/* clear flags */ 
 -		for (base = FIRSTBASE; base; base = base->next) {
 -			if (base->lay & locallay) {
 -				base->lay -= locallay;
 -				if (base->lay == 0) base->lay = v3d->layact;
 -				if (base->object != scene->obedit) base->flag |= SELECT;
 -				base->object->lay = base->lay;
 -			}
 -		}
 -	}
 -
 -	DAG_on_visible_update(bmain, false);
 -
 -	return ok;
 -}
 -
 -static void restore_localviewdata(wmWindowManager *wm, wmWindow *win, Main *bmain, Scene *scene, ScrArea *sa, const int smooth_viewtx)
 -{
 -	const bool free = true;
 -	ARegion *ar;
 -	View3D *v3d = sa->spacedata.first;
 -	Object *camera_old, *camera_new;
 -	
 -	if (v3d->localvd == NULL) return;
 -	
 -	camera_old = v3d->camera;
 -	camera_new = v3d->localvd->camera;
 -
 -	v3d->lay = v3d->localvd->lay;
 -	v3d->layact = v3d->localvd->layact;
 -	v3d->drawtype = v3d->localvd->drawtype;
 -	v3d->camera = v3d->localvd->camera;
 -	
 -	if (free) {
 -		MEM_freeN(v3d->localvd);
 -		v3d->localvd = NULL;
 -	}
 -	
 -	for (ar = sa->regionbase.first; ar; ar = ar->next) {
 -		if (ar->regiontype == RGN_TYPE_WINDOW) {
 -			RegionView3D *rv3d = ar->regiondata;
 -			
 -			if (rv3d->localvd) {
 -				Object *camera_old_rv3d, *camera_new_rv3d;
 -
 -				camera_old_rv3d = (rv3d->persp          == RV3D_CAMOB) ? camera_old : NULL;
 -				camera_new_rv3d = (rv3d->localvd->persp == RV3D_CAMOB) ? camera_new : NULL;
 -
 -				rv3d->view = rv3d->localvd->view;
 -				rv3d->persp = rv3d->localvd->persp;
 -				rv3d->camzoom = rv3d->localvd->camzoom;
 -
 -				ED_view3d_smooth_view_ex(
 -				        wm, win, sa,
 -				        v3d, ar, smooth_viewtx,
 -				        &(const V3D_SmoothParams) {
 -				            .camera_old = camera_old_rv3d, .camera = camera_new_rv3d,
 -				            .ofs = rv3d->localvd->ofs, .quat = rv3d->localvd->viewquat,
 -				            .dist = &rv3d->localvd->dist});
 -
 -				if (free) {
 -					MEM_freeN(rv3d->localvd);
 -					rv3d->localvd = NULL;
 -				}
 -			}
 -
 -			ED_view3d_shade_update(bmain, scene, v3d, sa);
 -		}
 -	}
 -}
 -
 -static bool view3d_localview_exit(
 -        wmWindowManager *wm, wmWindow *win,
 -        Main *bmain, Scene *scene, ScrArea *sa, const int smooth_viewtx)
 -{
 -	View3D *v3d = sa->spacedata.first;
 -	struct Base *base;
 -	unsigned int locallay;
 -	
 -	if (v3d->localvd) {
 -		
 -		locallay = v3d->lay & 0xFF000000;
 -
 -		restore_localviewdata(wm, win, bmain, scene, sa, smooth_viewtx);
 -
 -		/* for when in other window the layers have changed */
 -		if (v3d->scenelock) v3d->lay = scene->lay;
 -		
 -		for (base = FIRSTBASE; base; base = base->next) {
 -			if (base->lay & locallay) {
 -				base->lay -= locallay;
 -				if (base->lay == 0) base->lay = v3d->layact;
 -				if (base->object != scene->obedit) {
 -					base->flag |= SELECT;
 -					base->object->flag |= SELECT;
 -				}
 -				base->object->lay = base->lay;
 -			}
 -		}
 -		
 -		DAG_on_visible_update(bmain, false);
 -
 -		return true;
 -	}
 -	else {
 -		return false;
 -	}
 -}
 -
 -static int localview_exec(bContext *C, wmOperator *op)
 -{
 -	const int smooth_viewtx = WM_operator_smooth_viewtx_get(op);
 -	wmWindowManager *wm = CTX_wm_manager(C);
 -	wmWindow *win = CTX_wm_window(C);
 -	Main *bmain = CTX_data_main(C);
 -	Scene *scene = CTX_data_scene(C);
 -	ScrArea *sa = CTX_wm_area(C);
 -	View3D *v3d = CTX_wm_view3d(C);
 -	bool changed;
 -	
 -	if (v3d->localvd) {
 -		changed = view3d_localview_exit(wm, win, bmain, scene, sa, smooth_viewtx);
 -	}
 -	else {
 -		changed = view3d_localview_init(wm, win, bmain, scene, sa, smooth_viewtx, op->reports);
 -	}
 -
 -	if (changed) {
 -		DAG_id_type_tag(bmain, ID_OB);
 -		ED_area_tag_redraw(sa);
 -
 -		/* unselected objects become selected when exiting */
 -		if (v3d->localvd == NULL) {
 -			WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
 -		}
 -
 -		return OPERATOR_FINISHED;
 -	}
 -	else {
 -		return OPERATOR_CANCELLED;
 -	}
 -}
 -
 -void VIEW3D_OT_localview(wmOperatorType *ot)
 -{
 -	/* identifiers */
 -	ot->name = "Local View";
 -	ot->description = "Toggle display of selected object(s) separately and centered in view";
 -	ot->idname = "VIEW3D_OT_

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list