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