[Bf-blender-cvs] [c05b9bbcc09] blender2.8: Fix T56692: The edges are not highlighted in Mark Freestyle Edge

Clément Foucault noreply at git.blender.org
Wed Sep 5 19:00:16 CEST 2018


Commit: c05b9bbcc09f15912c741809646902458ea27958
Author: Clément Foucault
Date:   Wed Sep 5 15:42:32 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBc05b9bbcc09f15912c741809646902458ea27958

Fix T56692: The edges are not highlighted in Mark Freestyle Edge

This was not ported yet.

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

M	source/blender/draw/CMakeLists.txt
M	source/blender/draw/intern/draw_cache_impl_mesh.c
M	source/blender/draw/intern/draw_common.c
M	source/blender/draw/intern/draw_common.h
M	source/blender/draw/modes/shaders/common_globals_lib.glsl
M	source/blender/draw/modes/shaders/edit_mesh_overlay_common_lib.glsl
M	source/blender/draw/modes/shaders/edit_mesh_overlay_facefill_vert.glsl
M	source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl

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

diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index bac3a2f02fb..bfa796da122 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -344,4 +344,8 @@ data_to_c_simple(engines/gpencil/shaders/fx/gpencil_fx_wave_frag.glsl SRC)
 list(APPEND INC
 )
 
+if(WITH_FREESTYLE)
+	add_definitions(-DWITH_FREESTYLE)
+endif()
+
 blender_add_lib(bf_draw "${SRC}" "${INC}" "${INC_SYS}")
diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c b/source/blender/draw/intern/draw_cache_impl_mesh.c
index 8c3ecfadad9..1c70d40d6f1 100644
--- a/source/blender/draw/intern/draw_cache_impl_mesh.c
+++ b/source/blender/draw/intern/draw_cache_impl_mesh.c
@@ -1340,6 +1340,7 @@ enum {
 	VFLAG_VERTEX_SELECTED = 1 << 1,
 	VFLAG_FACE_ACTIVE     = 1 << 2,
 	VFLAG_FACE_SELECTED   = 1 << 3,
+	VFLAG_FACE_FREESTYLE  = 1 << 4,
 };
 
 enum {
@@ -1348,6 +1349,7 @@ enum {
 	VFLAG_EDGE_SELECTED = 1 << 2,
 	VFLAG_EDGE_SEAM     = 1 << 3,
 	VFLAG_EDGE_SHARP    = 1 << 4,
+	VFLAG_EDGE_FREESTYLE = 1 << 5,
 	/* Beware to not go over 1 << 7
 	 * (see gpu_shader_edit_mesh_overlay_geom.glsl) */
 };
@@ -1362,6 +1364,16 @@ static uchar mesh_render_data_looptri_flag(MeshRenderData *rdata, const BMFace *
 	if (BM_elem_flag_test(efa, BM_ELEM_SELECT))
 		fflag |= VFLAG_FACE_SELECTED;
 
+#ifdef WITH_FREESTYLE
+	BMesh *bm = rdata->edit_bmesh->bm;
+	if (CustomData_has_layer(&bm->edata, CD_FREESTYLE_EDGE)) {
+		FreestyleFace *ffa = CustomData_bmesh_get(&bm->pdata, efa->head.data, CD_FREESTYLE_FACE);
+
+		if (ffa->flag & FREESTYLE_FACE_MARK)
+			fflag |= VFLAG_FACE_FREESTYLE;
+	}
+#endif
+
 	return fflag;
 }
 
@@ -1383,11 +1395,21 @@ static void mesh_render_data_edge_flag(
 	if (!BM_elem_flag_test(eed, BM_ELEM_SMOOTH))
 		eattr->e_flag |= VFLAG_EDGE_SHARP;
 
+#ifdef WITH_FREESTYLE
+	BMesh *bm = rdata->edit_bmesh->bm;
+	if (CustomData_has_layer(&bm->edata, CD_FREESTYLE_EDGE)) {
+		FreestyleEdge *fed = CustomData_bmesh_get(&bm->edata, eed->head.data, CD_FREESTYLE_EDGE);
+
+		if (fed->flag & FREESTYLE_EDGE_MARK)
+			eattr->e_flag |= VFLAG_EDGE_FREESTYLE;
+	}
+#endif
+
 	/* Use a byte for value range */
 	if (rdata->cd.offset.crease != -1) {
 		float crease = BM_ELEM_CD_GET_FLOAT(eed, rdata->cd.offset.crease);
 		if (crease > 0) {
-			eattr->crease = (char)(crease * 255.0f);
+			eattr->crease = (uchar)(crease * 255.0f);
 		}
 	}
 
@@ -1395,14 +1417,13 @@ static void mesh_render_data_edge_flag(
 	if (rdata->cd.offset.bweight != -1) {
 		float bweight = BM_ELEM_CD_GET_FLOAT(eed, rdata->cd.offset.bweight);
 		if (bweight > 0) {
-			eattr->bweight = (char)(bweight * 255.0f);
+			eattr->bweight = (uchar)(bweight * 255.0f);
 		}
 	}
 }
 
 static uchar mesh_render_data_vertex_flag(MeshRenderData *rdata, const BMVert *eve)
 {
-
 	uchar vflag = 0;
 
 	/* Current vertex */
diff --git a/source/blender/draw/intern/draw_common.c b/source/blender/draw/intern/draw_common.c
index f675740b414..4e903b264c6 100644
--- a/source/blender/draw/intern/draw_common.c
+++ b/source/blender/draw/intern/draw_common.c
@@ -78,6 +78,14 @@ void DRW_globals_update(void)
 	UI_GetThemeColor4fv(TH_FACE_DOT, ts.colorFaceDot);
 	UI_GetThemeColor4fv(TH_BACK, ts.colorBackground);
 
+#ifdef WITH_FREESTYLE
+	UI_GetThemeColor4fv(TH_FREESTYLE_EDGE_MARK, ts.colorEdgeFreestyle);
+	UI_GetThemeColor4fv(TH_FREESTYLE_FACE_MARK, ts.colorFaceFreestyle);
+#else
+	zero_v4(ts.colorEdgeFreestyle);
+	zero_v4(ts.colorFaceFreestyle);
+#endif
+
 	/* Curve */
 	UI_GetThemeColor4fv(TH_HANDLE_FREE, ts.colorHandleFree);
 	UI_GetThemeColor4fv(TH_HANDLE_AUTO, ts.colorHandleAuto);
diff --git a/source/blender/draw/intern/draw_common.h b/source/blender/draw/intern/draw_common.h
index bab6c67a081..c402f63f6a2 100644
--- a/source/blender/draw/intern/draw_common.h
+++ b/source/blender/draw/intern/draw_common.h
@@ -60,8 +60,10 @@ typedef struct GlobalsUboStorage {
 	float colorEdgeCrease[4];
 	float colorEdgeBWeight[4];
 	float colorEdgeFaceSelect[4];
+	float colorEdgeFreestyle[4];
 	float colorFace[4];
 	float colorFaceSelect[4];
+	float colorFaceFreestyle[4];
 	float colorNormal[4];
 	float colorVNormal[4];
 	float colorLNormal[4];
diff --git a/source/blender/draw/modes/shaders/common_globals_lib.glsl b/source/blender/draw/modes/shaders/common_globals_lib.glsl
index c55457bb6d2..c0243838c65 100644
--- a/source/blender/draw/modes/shaders/common_globals_lib.glsl
+++ b/source/blender/draw/modes/shaders/common_globals_lib.glsl
@@ -21,13 +21,14 @@ layout(std140) uniform globalsBlock {
 	vec4 colorEdgeCrease;
 	vec4 colorEdgeBWeight;
 	vec4 colorEdgeFaceSelect;
+	vec4 colorEdgeFreestyle;
 	vec4 colorFace;
 	vec4 colorFaceSelect;
+	vec4 colorFaceFreestyle;
 	vec4 colorNormal;
 	vec4 colorVNormal;
 	vec4 colorLNormal;
 	vec4 colorFaceDot;
-
 	vec4 colorDeselect;
 	vec4 colorOutline;
 	vec4 colorLampNoAlpha;
diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_common_lib.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_common_lib.glsl
index dabbb4a321a..f0981cca9e7 100644
--- a/source/blender/draw/modes/shaders/edit_mesh_overlay_common_lib.glsl
+++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_common_lib.glsl
@@ -3,6 +3,7 @@
 #define EDGE_SELECTED   (1 << 2)
 #define EDGE_SEAM       (1 << 3)
 #define EDGE_SHARP      (1 << 4)
+#define EDGE_FREESTYLE  (1 << 5)
 #define EDGE_VERTEX_ACTIVE   (1 << (0 + 8))
 #define EDGE_VERTEX_SELECTED (1 << (1 + 8))
 
@@ -13,13 +14,13 @@
 vec4 EDIT_MESH_edge_color_outer(int edge_flag, bool face_active, float crease, float bweight)
 {
 	vec4 color = vec4(0.0);
+	color = ((edge_flag & EDGE_FREESTYLE) != 0) ? colorEdgeFreestyle : color;
 	color = ((edge_flag & EDGE_SHARP) != 0) ? colorEdgeSharp : color;
 	color = (crease > 0.0) ? vec4(colorEdgeCrease.rgb, crease) : color;
 	color = (bweight > 0.0) ? vec4(colorEdgeBWeight.rgb, bweight) : color;
 	color = ((edge_flag & EDGE_SEAM) != 0) ? colorEdgeSeam : color;
 
-	if (face_active)
-	{
+	if (face_active) {
 		color = colorEditMeshActive;
 	}
 	return color;
@@ -41,8 +42,7 @@ vec4 EDIT_MESH_edge_color_inner(int edge_flag, bool face_active)
 
 vec4 EDIT_MESH_vertex_color(int vertex_flag)
 {
-	if ((vertex_flag & (VERTEX_ACTIVE | VERTEX_SELECTED)) != 0)
-	{
+	if ((vertex_flag & (VERTEX_ACTIVE | VERTEX_SELECTED)) != 0) {
 		return colorEdgeSelect;
 	}
 	else {
diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_facefill_vert.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_facefill_vert.glsl
index c9de6d29524..40ea6b301b4 100644
--- a/source/blender/draw/modes/shaders/edit_mesh_overlay_facefill_vert.glsl
+++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_facefill_vert.glsl
@@ -6,10 +6,20 @@ in ivec4 data;
 
 flat out vec4 faceColor;
 
-#define FACE_SELECTED (1 << 3)
+#define FACE_ACTIVE     (1 << 2)
+#define FACE_SELECTED   (1 << 3)
+#define FACE_FREESTYLE  (1 << 4)
 
 void main()
 {
 	gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
-	faceColor = ((data.x & FACE_SELECTED) != 0)? colorFaceSelect: colorFace;
+
+	if ((data.x & FACE_ACTIVE) != 0)
+		faceColor = colorFaceSelect;
+	else if ((data.x & FACE_SELECTED) != 0)
+		faceColor = colorFaceSelect;
+	else if ((data.x & FACE_FREESTYLE) != 0)
+		faceColor = colorFaceFreestyle;
+	else
+		faceColor = colorFace;
 }
diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl
index f19c203a70d..7d6c64afabc 100644
--- a/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl
+++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl
@@ -56,6 +56,7 @@ flat out vec2 ssPos[3];
 
 #define FACE_ACTIVE     (1 << 2)
 #define FACE_SELECTED   (1 << 3)
+#define FACE_FREESTYLE  (1 << 4)
 
 /* project to screen space */
 vec2 proj(vec4 pos)
@@ -108,6 +109,8 @@ void main()
 		faceColor = colorFaceSelect;
 	else if ((vData[0].x & FACE_SELECTED) != 0)
 		faceColor = colorFaceSelect;
+	else if ((vData[0].x & FACE_FREESTYLE) != 0)
+		faceColor = colorFaceFreestyle;
 	else
 		faceColor = colorFace;



More information about the Bf-blender-cvs mailing list