[Bf-blender-cvs] [1407a111381] blender2.8: Edit Curve: Fix "show handles" option hiding nurbs segments

Clément Foucault noreply at git.blender.org
Wed Sep 26 16:43:05 CEST 2018


Commit: 1407a111381463cd05ca92a661403d9f114dc95a
Author: Clément Foucault
Date:   Wed Sep 26 16:33:44 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB1407a111381463cd05ca92a661403d9f114dc95a

Edit Curve: Fix "show handles" option hiding nurbs segments

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

M	source/blender/draw/modes/edit_curve_mode.c
M	source/blender/draw/modes/shaders/edit_curve_overlay_handle_geom.glsl

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

diff --git a/source/blender/draw/modes/edit_curve_mode.c b/source/blender/draw/modes/edit_curve_mode.c
index 7526d0a47f4..9dc61619503 100644
--- a/source/blender/draw/modes/edit_curve_mode.c
+++ b/source/blender/draw/modes/edit_curve_mode.c
@@ -127,6 +127,8 @@ typedef struct EDIT_CURVE_PrivateData {
 
 	DRWShadingGroup *overlay_edge_shgrp;
 	DRWShadingGroup *overlay_vert_shgrp;
+
+	int show_handles;
 } EDIT_CURVE_PrivateData; /* Transient data */
 
 /* *********** FUNCTIONS *********** */
@@ -183,12 +185,16 @@ static void EDIT_CURVE_cache_init(void *vedata)
 {
 	EDIT_CURVE_PassList *psl = ((EDIT_CURVE_Data *)vedata)->psl;
 	EDIT_CURVE_StorageList *stl = ((EDIT_CURVE_Data *)vedata)->stl;
+	const DRWContextState *draw_ctx = DRW_context_state_get();
+	View3D *v3d = draw_ctx->v3d;
 
 	if (!stl->g_data) {
 		/* Alloc transient pointers */
-		stl->g_data = MEM_mallocN(sizeof(*stl->g_data), __func__);
+		stl->g_data = MEM_callocN(sizeof(*stl->g_data), __func__);
 	}
 
+	stl->g_data->show_handles = (v3d->overlay.edit_flag & V3D_OVERLAY_EDIT_CU_HANDLES) != 0;
+
 	{
 		DRWShadingGroup *grp;
 
@@ -201,7 +207,6 @@ static void EDIT_CURVE_cache_init(void *vedata)
 		DRW_shgroup_uniform_vec4(grp, "color", ts.colorWireEdit, 1);
 		stl->g_data->wire_shgrp = grp;
 
-
 		psl->overlay_edge_pass = DRW_pass_create(
 		        "Curve Handle Overlay",
 		        DRW_STATE_WRITE_COLOR | DRW_STATE_BLEND);
@@ -209,6 +214,7 @@ static void EDIT_CURVE_cache_init(void *vedata)
 		grp = DRW_shgroup_create(e_data.overlay_edge_sh, psl->overlay_edge_pass);
 		DRW_shgroup_uniform_block(grp, "globalsBlock", globals_ubo);
 		DRW_shgroup_uniform_vec2(grp, "viewportSize", DRW_viewport_size_get(), 1);
+		DRW_shgroup_uniform_bool(grp, "showCurveHandles", &stl->g_data->show_handles, 1);
 		stl->g_data->overlay_edge_shgrp = grp;
 
 
@@ -253,16 +259,12 @@ static void EDIT_CURVE_cache_populate(void *vedata, Object *ob)
 				DRW_shgroup_call_add(stl->g_data->wire_shgrp, geom, ob->obmat);
 			}
 
-			bool show_handles = (v3d->overlay.edit_flag & V3D_OVERLAY_EDIT_CU_HANDLES) != 0;
-
-			if (show_handles) {
-				geom = DRW_cache_curve_edge_overlay_get(ob);
-				if (geom) {
-					DRW_shgroup_call_add(stl->g_data->overlay_edge_shgrp, geom, ob->obmat);
-				}
+			geom = DRW_cache_curve_edge_overlay_get(ob);
+			if (geom) {
+				DRW_shgroup_call_add(stl->g_data->overlay_edge_shgrp, geom, ob->obmat);
 			}
 
-			geom = DRW_cache_curve_vert_overlay_get(ob, show_handles);
+			geom = DRW_cache_curve_vert_overlay_get(ob, stl->g_data->show_handles);
 			DRW_shgroup_call_add(stl->g_data->overlay_vert_shgrp, geom, ob->obmat);
 		}
 	}
diff --git a/source/blender/draw/modes/shaders/edit_curve_overlay_handle_geom.glsl b/source/blender/draw/modes/shaders/edit_curve_overlay_handle_geom.glsl
index 734691a02b0..f284a347806 100644
--- a/source/blender/draw/modes/shaders/edit_curve_overlay_handle_geom.glsl
+++ b/source/blender/draw/modes/shaders/edit_curve_overlay_handle_geom.glsl
@@ -36,6 +36,9 @@ void main()
 	int is_active_nurb = (vertFlag[1] & ACTIVE_NURB);
 	int color_id = (vertFlag[1] >> 3);
 
+	/* Don't output any edges if we don't show handles */
+	if (!showCurveHandles && (color_id < 5))
+		return;
 
 	bool edge_selected = (((vertFlag[1] | vertFlag[0]) & VERTEX_SELECTED) != 0);



More information about the Bf-blender-cvs mailing list