Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2018-09-05 16:42:32 +0300
committerClément Foucault <foucault.clem@gmail.com>2018-09-05 20:00:12 +0300
commitc05b9bbcc09f15912c741809646902458ea27958 (patch)
tree46ba357a536d171a46d300bcaba5ffac9ccae4fb /source/blender/draw
parente8dc73a0c9962bd0247ea45f6c28f5d5991d1d23 (diff)
Fix T56692: The edges are not highlighted in Mark Freestyle Edge
This was not ported yet.
Diffstat (limited to 'source/blender/draw')
-rw-r--r--source/blender/draw/CMakeLists.txt4
-rw-r--r--source/blender/draw/intern/draw_cache_impl_mesh.c27
-rw-r--r--source/blender/draw/intern/draw_common.c8
-rw-r--r--source/blender/draw/intern/draw_common.h2
-rw-r--r--source/blender/draw/modes/shaders/common_globals_lib.glsl3
-rw-r--r--source/blender/draw/modes/shaders/edit_mesh_overlay_common_lib.glsl8
-rw-r--r--source/blender/draw/modes/shaders/edit_mesh_overlay_facefill_vert.glsl14
-rw-r--r--source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl3
8 files changed, 59 insertions, 10 deletions
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;