[Bf-blender-cvs] [277d9012741] blender2.8: T55456 EditMeshMode
Jeroen Bakker
noreply at git.blender.org
Thu Jun 14 14:20:36 CEST 2018
Commit: 277d90127417881a13be6b8c8db46fb4339391e9
Author: Jeroen Bakker
Date: Thu Jun 14 08:51:42 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB277d90127417881a13be6b8c8db46fb4339391e9
T55456 EditMeshMode
- see the face selection color when face is active
- test different masks for active face, finally chosen for no mask at
all.
===================================================================
M source/blender/draw/modes/edit_mesh_mode.c
M source/blender/draw/modes/shaders/edit_mesh_overlay_facefill_frag.glsl
M source/blender/draw/modes/shaders/edit_mesh_overlay_facefill_vert.glsl
M source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl
M source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl
===================================================================
diff --git a/source/blender/draw/modes/edit_mesh_mode.c b/source/blender/draw/modes/edit_mesh_mode.c
index 5be98b12bb7..d51f3a85105 100644
--- a/source/blender/draw/modes/edit_mesh_mode.c
+++ b/source/blender/draw/modes/edit_mesh_mode.c
@@ -156,29 +156,29 @@ static char *EDIT_MESH_sh_defines(ToolSettings *tsettings, RegionView3D *rv3d, b
if (selectmode & SCE_SELECT_VERTEX)
{
- BLI_dynstr_appendf(ds, "#define VERTEX_SELECTION\n");
+ BLI_dynstr_append(ds, "#define VERTEX_SELECTION\n");
}
if (selectmode & SCE_SELECT_EDGE)
{
- BLI_dynstr_appendf(ds, "#define EDGE_SELECTION\n");
+ BLI_dynstr_append(ds, "#define EDGE_SELECTION\n");
}
if (selectmode & SCE_SELECT_FACE)
{
- BLI_dynstr_appendf(ds, "#define FACE_SELECTION\n");
+ BLI_dynstr_append(ds, "#define FACE_SELECTION\n");
}
if (!fast_mode)
{
- BLI_dynstr_appendf(ds, "#define EDGE_FIX\n");
+ BLI_dynstr_append(ds, "#define EDGE_FIX\n");
}
if (anti_alias)
{
- BLI_dynstr_appendf(ds, "#define ANTI_ALIASING\n");
+ BLI_dynstr_append(ds, "#define ANTI_ALIASING\n");
}
- BLI_dynstr_appendf(ds, "#define VERTEX_FACING\n");
+ BLI_dynstr_append(ds, "#define VERTEX_FACING\n");
str = BLI_dynstr_get_cstring(ds);
BLI_dynstr_free(ds);
@@ -213,7 +213,6 @@ static GPUShader *EDIT_MESH_ensure_shader(ToolSettings *tsettings, RegionView3D
datatoc_edit_mesh_overlay_frag_glsl,
datatoc_common_globals_lib_glsl,
defines);
-
MEM_freeN(defines);
}
return e_data.overlay_tri_sh_cache[index];
diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_facefill_frag.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_facefill_frag.glsl
index 23b794d9b8b..2e729009a38 100644
--- a/source/blender/draw/modes/shaders/edit_mesh_overlay_facefill_frag.glsl
+++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_facefill_frag.glsl
@@ -1,29 +1,7 @@
-
-/* Solid Wirefram implementation
- * Mike Erwin, Clément Foucault */
-
-/* This shader follows the principles of
- * http://developer.download.nvidia.com/SDK/10/direct3d/Source/SolidWireframe/Doc/SolidWireframe.pdf */
-
flat in vec4 faceColor;
-flat in int faceActive;
-
out vec4 FragColor;
-const vec4 stipple_matrix[4] = vec4[4](
- vec4(1.0, 0.0, 0.0, 0.0),
- vec4(0.0, 0.0, 0.0, 0.0),
- vec4(0.0, 0.0, 1.0, 0.0),
- vec4(0.0, 0.0, 0.0, 0.0)
-);
-
void main()
{
FragColor = faceColor;
-
- if (faceActive == 1) {
- int x = int(gl_FragCoord.x) & 0x3; /* mod 4 */
- int y = int(gl_FragCoord.y) & 0x3; /* mod 4 */
- FragColor *= stipple_matrix[x][y];
- }
}
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 3b9aa77306f..c9de6d29524 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
@@ -5,25 +5,11 @@ in vec3 pos;
in ivec4 data;
flat out vec4 faceColor;
-flat out int faceActive;
-#define FACE_ACTIVE (1 << 2)
#define FACE_SELECTED (1 << 3)
void main()
{
gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
-
- if ((data.x & FACE_ACTIVE) != 0) {
- faceColor = colorEditMeshActive;
- faceActive = 1;
- }
- else if ((data.x & FACE_SELECTED) != 0) {
- faceColor = colorFaceSelect;
- faceActive = 0;
- }
- else {
- faceColor = colorFace;
- faceActive = 0;
- }
+ faceColor = ((data.x & FACE_SELECTED) != 0)? colorFaceSelect: colorFace;
}
diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl
index 4bf5f348c27..b7935d43bff 100644
--- a/source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl
+++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl
@@ -54,6 +54,10 @@ out vec4 FragColor;
#define VERTEX_SELECTED (1 << (1 + 8))
#define FACE_ACTIVE (1 << (2 + 8))
+#define LARGE_EDGE_SIZE 3.0
+#define LARGE_EDGE_SIZE_ACTIVE_FACE 5.0
+
+
/* Style Parameters in pixel */
/* Array to retrieve vert/edge indices */
@@ -75,13 +79,6 @@ const ivec3 clipPointIdx[6] = ivec3[6](
ivec3(2, 1, 0)
);
-const vec4 stipple_matrix[4] = vec4[4](
- vec4(1.0, 0.0, 0.0, 0.0),
- vec4(0.0, 0.0, 0.0, 0.0),
- vec4(0.0, 0.0, 1.0, 0.0),
- vec4(0.0, 0.0, 0.0, 0.0)
-);
-
void colorDist(vec4 color, float dist)
{
FragColor = (dist < 0) ? color : FragColor;
@@ -145,21 +142,13 @@ void main()
/* First */
FragColor = faceColor;
-
- if ((flag[0] & FACE_ACTIVE) != 0) {
- int x = int(gl_FragCoord.x) & 0x3; /* mod 4 */
- int y = int(gl_FragCoord.y) & 0x3; /* mod 4 */
- FragColor *= stipple_matrix[x][y];
- }
- else {
- FragColor.a *= faceAlphaMod;
- }
+ FragColor.a *= faceAlphaMod;
/* Edges */
for (int v = 0; v < 3; ++v) {
if ((flag[v] & EDGE_EXISTS) != 0) {
/* Outer large edge */
- float largeEdge = e[v] - sizeEdge * 3.0;
+ float largeEdge = e[v] - sizeEdge * LARGE_EDGE_SIZE;
vec4 large_edge_color = vec4(0.0);
large_edge_color = ((flag[v] & EDGE_SHARP) != 0) ? colorEdgeSharp : large_edge_color;
@@ -167,6 +156,12 @@ void main()
large_edge_color = (edgesBweight[v] > 0.0) ? vec4(colorEdgeBWeight.rgb, edgesBweight[v]) : large_edge_color;
large_edge_color = ((flag[v] & EDGE_SEAM) != 0) ? colorEdgeSeam : large_edge_color;
+ if ((flag[0] & FACE_ACTIVE) != 0)
+ {
+ large_edge_color = colorEditMeshActive;
+ largeEdge = e[v] - sizeEdge * LARGE_EDGE_SIZE_ACTIVE_FACE;
+ }
+
if (large_edge_color.a != 0.0) {
colorDistEdge(large_edge_color, largeEdge);
}
@@ -183,7 +178,8 @@ void main()
# ifdef EDGE_SELECTION
vec4 inner_edge_color = colorWireEdit;
inner_edge_color = ((flag[v] & EDGE_SELECTED) != 0) ? colorEdgeSelect : inner_edge_color;
- inner_edge_color = ((flag[v] & EDGE_ACTIVE) != 0) ? vec4(colorEditMeshActive.xyz, 1.0) : inner_edge_color;
+ inner_edge_color = ((flag[v] & EDGE_ACTIVE) != 0) ? vec4(colorEditMeshActive.rgb, 1.0) : inner_edge_color;
+
# else
vec4 inner_edge_color = colorWireInactive;
# endif
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 a22cc56c74f..7e778c325a6 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
@@ -167,7 +167,7 @@ void main()
/* Face */
if ((vData[0].x & FACE_ACTIVE) != 0)
- faceColor = colorEditMeshActive;
+ faceColor = colorFaceSelect;
else if ((vData[0].x & FACE_SELECTED) != 0)
faceColor = colorFaceSelect;
else
More information about the Bf-blender-cvs
mailing list