[Bf-blender-cvs] [17370a27a36] blender2.8: Object Mode: Use stipple shader for relationship lines.

Clément Foucault noreply at git.blender.org
Mon May 7 00:21:43 CEST 2018


Commit: 17370a27a36cb0d66cd55a4587639748de112d92
Author: Clément Foucault
Date:   Mon May 7 00:22:03 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB17370a27a36cb0d66cd55a4587639748de112d92

Object Mode: Use stipple shader for relationship lines.

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

M	source/blender/draw/intern/draw_common.c
M	source/blender/draw/intern/draw_common.h
M	source/blender/draw/modes/edit_armature_mode.c
M	source/blender/draw/modes/object_mode.c
M	source/blender/draw/modes/pose_mode.c

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

diff --git a/source/blender/draw/intern/draw_common.c b/source/blender/draw/intern/draw_common.c
index dc54c4e722f..2c606aa57d7 100644
--- a/source/blender/draw/intern/draw_common.c
+++ b/source/blender/draw/intern/draw_common.c
@@ -214,12 +214,18 @@ void DRW_globals_free(void)
 	}
 }
 
-DRWShadingGroup *shgroup_dynlines_uniform_color(DRWPass *pass, float color[4])
+DRWShadingGroup *shgroup_dynlines_dashed_uniform_color(DRWPass *pass, float color[4])
 {
-	GPUShader *sh = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
+	GPUShader *sh = GPU_shader_get_builtin_shader(GPU_SHADER_3D_LINE_DASHED_UNIFORM_COLOR);
 
+	static float dash_width = 12.0f;
+	static float dash_factor = 0.5f;
 	DRWShadingGroup *grp = DRW_shgroup_line_batch_create(sh, pass);
 	DRW_shgroup_uniform_vec4(grp, "color", color, 1);
+	DRW_shgroup_uniform_vec2(grp, "viewport_size", DRW_viewport_size_get(), 1);
+	DRW_shgroup_uniform_float(grp, "dash_width", &dash_width, 1);
+	DRW_shgroup_uniform_float(grp, "dash_factor", &dash_factor, 1);
+	DRW_shgroup_uniform_int_copy(grp, "num_colors", 0); /* "simple" mode */
 
 	return grp;
 }
diff --git a/source/blender/draw/intern/draw_common.h b/source/blender/draw/intern/draw_common.h
index ae1c449399a..73326ff1b29 100644
--- a/source/blender/draw/intern/draw_common.h
+++ b/source/blender/draw/intern/draw_common.h
@@ -99,7 +99,7 @@ typedef struct GlobalsUboStorage {
 void DRW_globals_update(void);
 void DRW_globals_free(void);
 
-struct DRWShadingGroup *shgroup_dynlines_uniform_color(struct DRWPass *pass, float color[4]);
+struct DRWShadingGroup *shgroup_dynlines_dashed_uniform_color(struct DRWPass *pass, float color[4]);
 struct DRWShadingGroup *shgroup_dynpoints_uniform_color(struct DRWPass *pass, float color[4], float *size);
 struct DRWShadingGroup *shgroup_groundlines_uniform_color(struct DRWPass *pass, float color[4]);
 struct DRWShadingGroup *shgroup_groundpoints_uniform_color(struct DRWPass *pass, float color[4]);
diff --git a/source/blender/draw/modes/edit_armature_mode.c b/source/blender/draw/modes/edit_armature_mode.c
index 254d2c12667..5586cf0bae4 100644
--- a/source/blender/draw/modes/edit_armature_mode.c
+++ b/source/blender/draw/modes/edit_armature_mode.c
@@ -109,10 +109,6 @@ static void EDIT_ARMATURE_cache_init(void *vedata)
 		        DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS |
 		        DRW_STATE_BLEND | DRW_STATE_WIRE;
 		psl->relationship = DRW_pass_create("Bone Relationship Pass", state);
-
-		/* Relationship Lines */
-		stl->g_data->relationship_lines = shgroup_dynlines_uniform_color(psl->relationship, ts.colorWire);
-		DRW_shgroup_state_enable(stl->g_data->relationship_lines, DRW_STATE_STIPPLE_3);
 	}
 }
 
diff --git a/source/blender/draw/modes/object_mode.c b/source/blender/draw/modes/object_mode.c
index 8d49899109a..bfb1450935c 100644
--- a/source/blender/draw/modes/object_mode.c
+++ b/source/blender/draw/modes/object_mode.c
@@ -1191,21 +1191,22 @@ static void OBJECT_cache_init(void *vedata)
 
 	{
 		/* -------- STIPPLES ------- */
-		/* TODO port to shader stipple */
 		struct Gwn_Batch *geom;
 
 		/* Relationship Lines */
-		stl->g_data->relationship_lines = shgroup_dynlines_uniform_color(psl->non_meshes, ts.colorWire);
-		DRW_shgroup_state_enable(stl->g_data->relationship_lines, DRW_STATE_STIPPLE_3);
+		stl->g_data->relationship_lines = shgroup_dynlines_dashed_uniform_color(psl->non_meshes, ts.colorWire);
 
 		/* Force Field Curve Guide End (here because of stipple) */
+		/* TODO port to shader stipple */
 		geom = DRW_cache_screenspace_circle_get();
 		stl->g_data->field_curve_end = shgroup_instance_screen_aligned(psl->non_meshes, geom);
 
 		/* Force Field Limits */
+		/* TODO port to shader stipple */
 		geom = DRW_cache_field_tube_limit_get();
 		stl->g_data->field_tube_limit = shgroup_instance_scaled(psl->non_meshes, geom);
 
+		/* TODO port to shader stipple */
 		geom = DRW_cache_field_cone_limit_get();
 		stl->g_data->field_cone_limit = shgroup_instance_scaled(psl->non_meshes, geom);
 	}
@@ -1874,8 +1875,8 @@ static void DRW_shgroup_lightprobe(OBJECT_StorageList *stl, OBJECT_PassList *psl
 static void DRW_shgroup_relationship_lines(OBJECT_StorageList *stl, Object *ob)
 {
 	if (ob->parent && DRW_check_object_visible_within_active_context(ob->parent)) {
-		DRW_shgroup_call_dynamic_add(stl->g_data->relationship_lines, ob->obmat[3]);
 		DRW_shgroup_call_dynamic_add(stl->g_data->relationship_lines, ob->parent->obmat[3]);
+		DRW_shgroup_call_dynamic_add(stl->g_data->relationship_lines, ob->obmat[3]);
 	}
 }
 
diff --git a/source/blender/draw/modes/pose_mode.c b/source/blender/draw/modes/pose_mode.c
index 10d6bffcbe1..efcd53691f8 100644
--- a/source/blender/draw/modes/pose_mode.c
+++ b/source/blender/draw/modes/pose_mode.c
@@ -118,10 +118,6 @@ static void POSE_cache_init(void *vedata)
 		        DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS |
 		        DRW_STATE_BLEND | DRW_STATE_WIRE;
 		psl->relationship = DRW_pass_create("Bone Relationship Pass", state);
-
-		/* Relationship Lines */
-		stl->g_data->relationship_lines = shgroup_dynlines_uniform_color(psl->relationship, ts.colorWire);
-		DRW_shgroup_state_enable(stl->g_data->relationship_lines, DRW_STATE_STIPPLE_3);
 	}
 }



More information about the Bf-blender-cvs mailing list