Commit: 85194046e6342b4fb5ddff6fd30155c9ae2e8e34
Author: Clément Foucault
Date:   Wed Feb 1 00:28:16 2017 +0100
Branches: clay-engine
https://developer.blender.org/rB85194046e6342b4fb5ddff6fd30155c9ae2e8e34

Giving Overlay Edges a try

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

M       source/blender/draw/engines/clay/clay.c
M       source/blender/draw/intern/draw_cache.c
M       source/blender/draw/intern/draw_cache.h
M       source/blender/draw/intern/draw_mode_pass.c

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

diff --git a/source/blender/draw/engines/clay/clay.c 
b/source/blender/draw/engines/clay/clay.c
index e187affaed..2be3418171 100644
--- a/source/blender/draw/engines/clay/clay.c
+++ b/source/blender/draw/engines/clay/clay.c
@@ -565,7 +565,7 @@ static void CLAY_create_cache(CLAY_PassList *passes, const 
struct bContext *C)
                }
 
                struct Batch *geom;
-               bool do_outlines, do_wires;
+               bool do_outlines;
 
                switch (ob->type) {
                        case OB_MESH:
@@ -575,9 +575,10 @@ static void CLAY_create_cache(CLAY_PassList *passes, const 
struct bContext *C)
                                DRW_shgroup_call_add(depthbatch, geom, 
ob->obmat);
                                DRW_shgroup_call_add(default_shgrp, geom, 
ob->obmat);
 
-                               do_outlines  = ((ob->base_flag & BASE_SELECTED) 
!= 0);
+                               
DRW_shgroup_wire_overlay(passes->wire_overlay_pass, ob);
 
-                               
DRW_shgroup_wire_outline(passes->wire_outline_pass, ob, false, do_wires, 
do_outlines);
+                               do_outlines  = ((ob->base_flag & BASE_SELECTED) 
!= 0);
+                               
DRW_shgroup_wire_outline(passes->wire_outline_pass, ob, false, false, 
do_outlines);
 
                                /* When encountering a new material :
                                 * - Create new Batch
@@ -649,6 +650,7 @@ static void CLAY_view_draw(RenderEngine *UNUSED(engine), 
const struct bContext *
 
        /* Pass 4 : Overlays */
        DRW_framebuffer_texture_attach(buffers->default_fb, textures->depth, 0);
+       DRW_draw_pass(passes->wire_overlay_pass);
        DRW_draw_pass(passes->wire_outline_pass);
        DRW_draw_pass(passes->non_meshes_pass);
        DRW_draw_pass(passes->ob_center_pass);
diff --git a/source/blender/draw/intern/draw_cache.c 
b/source/blender/draw/intern/draw_cache.c
index a5a465a145..5889410db6 100644
--- a/source/blender/draw/intern/draw_cache.c
+++ b/source/blender/draw/intern/draw_cache.c
@@ -169,6 +169,21 @@ Batch *DRW_cache_single_vert_get(void)
 }
 
 /* Meshes */
+Batch *DRW_cache_wire_overlay_get(Object *ob)
+{
+       Batch *overlay_wire = NULL;
+
+       BLI_assert(ob->type == OB_MESH);
+
+       Mesh *me = ob->data;
+#if 1 /* new version not working */
+       overlay_wire = BKE_mesh_batch_cache_get_overlay_edges(me);
+#else
+       overlay_wire = BKE_mesh_batch_cache_get_all_edges(me);
+#endif
+       return overlay_wire;
+}
+
 Batch *DRW_cache_wire_outline_get(Object *ob)
 {
        Batch *fancy_wire = NULL;
diff --git a/source/blender/draw/intern/draw_cache.h 
b/source/blender/draw/intern/draw_cache.h
index 13b33931b7..54abccdd47 100644
--- a/source/blender/draw/intern/draw_cache.h
+++ b/source/blender/draw/intern/draw_cache.h
@@ -35,6 +35,7 @@ struct Batch *DRW_cache_circle_ball_get(void);
 struct Batch *DRW_cache_single_vert_get(void);
 struct Batch *DRW_cache_plain_axes_get(void);
 /* Meshes */
+struct Batch *DRW_cache_wire_overlay_get(struct Object *ob);
 struct Batch *DRW_cache_wire_outline_get(struct Object *ob);
 struct Batch *DRW_cache_surface_get(struct Object *ob);
 
diff --git a/source/blender/draw/intern/draw_mode_pass.c 
b/source/blender/draw/intern/draw_mode_pass.c
index 71a9582e70..0d5ea5ea6c 100644
--- a/source/blender/draw/intern/draw_mode_pass.c
+++ b/source/blender/draw/intern/draw_mode_pass.c
@@ -86,7 +86,7 @@ void DRW_pass_setup_common(DRWPass **wire_overlay, DRWPass 
**wire_outline, DRWPa
 
        if (wire_overlay) {
                /* This pass can draw mesh edges top of Shaded Meshes without 
any Z fighting */
-               DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH 
| DRW_STATE_DEPTH_EQUAL | DRW_STATE_BLEND;
+               DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH 
| DRW_STATE_BLEND;
                *wire_overlay = DRW_pass_create("Wire Overlays Pass", state);
        }
 
@@ -236,13 +236,24 @@ static int draw_object_wire_theme(Object *ob)
 
 void DRW_shgroup_wire_overlay(DRWPass *wire_overlay, Object *ob)
 {
-       struct Batch *geom = DRW_cache_wire_outline_get(ob);
+#if 1
+       struct Batch *geom = DRW_cache_wire_overlay_get(ob);
        GPUShader *sh = GPU_shader_get_builtin_shader(GPU_SHADER_EDGES_OVERLAY);
 
        DRWShadingGroup *grp = DRW_shgroup_create(sh, wire_overlay);
        DRW_shgroup_uniform_vec2(grp, "viewportSize", DRW_viewport_size_get(), 
1);
 
        DRW_shgroup_call_add(grp, geom, ob->obmat);
+#else
+       static float col[4] = {0.0f, 0.0f, 0.0f, 1.0f};
+       struct Batch *geom = DRW_cache_wire_overlay_get(ob);
+       GPUShader *sh = 
GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
+
+       DRWShadingGroup *grp = DRW_shgroup_create(sh, wire_overlay);
+       DRW_shgroup_uniform_vec4(grp, "color", col, 1);
+
+       DRW_shgroup_call_add(grp, geom, ob->obmat);
+#endif
 }
 
 void DRW_shgroup_wire_outline(DRWPass *wire_outline, Object *ob,

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to