From 9ab99ff26b57b2f0c898356d365636697d67e345 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Thu, 14 Feb 2019 20:24:13 +0100 Subject: Sculpt Draw: Add support for wireframe geometry This introduce the wireframe batches. Creating the indices buffer does not seems to slow down the sculpt in my testing (but it is kind of hard to test reliably) This includes a bit of cleanup in gpu_buffers.c. --- source/blender/draw/modes/overlay_mode.c | 12 ++++++------ source/blender/draw/modes/sculpt_mode.c | 2 +- .../draw/modes/shaders/overlay_face_wireframe_vert.glsl | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) (limited to 'source/blender/draw/modes') diff --git a/source/blender/draw/modes/overlay_mode.c b/source/blender/draw/modes/overlay_mode.c index ea502e176f1..9929e4ca6e4 100644 --- a/source/blender/draw/modes/overlay_mode.c +++ b/source/blender/draw/modes/overlay_mode.c @@ -319,11 +319,11 @@ static void overlay_cache_populate(void *vedata, Object *ob) if (geom || is_sculpt_mode) { shgrp = DRW_shgroup_create_sub(pd->face_wires_shgrp); - static float all_wires_param = 10.0f; - DRW_shgroup_uniform_float( - shgrp, "wireStepParam", - (all_wires || is_sculpt_mode) ? &all_wires_param : &pd->wire_step_param, - 1); + float wire_step_param = 10.0f; + if (!is_sculpt_mode) { + wire_step_param = (all_wires) ? 1.0f : pd->wire_step_param; + } + DRW_shgroup_uniform_float_copy(shgrp, "wireStepParam", wire_step_param); if (!(DRW_state_is_select() || DRW_state_is_depth())) { DRW_shgroup_stencil_mask(shgrp, stencil_mask); @@ -332,7 +332,7 @@ static void overlay_cache_populate(void *vedata, Object *ob) } if (is_sculpt_mode) { - DRW_shgroup_call_sculpt_add(shgrp, ob, ob->obmat); + DRW_shgroup_call_sculpt_wires_add(shgrp, ob, ob->obmat); } else { DRW_shgroup_call_add(shgrp, geom, ob->obmat); diff --git a/source/blender/draw/modes/sculpt_mode.c b/source/blender/draw/modes/sculpt_mode.c index 76312942613..546270f8a18 100644 --- a/source/blender/draw/modes/sculpt_mode.c +++ b/source/blender/draw/modes/sculpt_mode.c @@ -177,7 +177,7 @@ static void sculpt_draw_mask_cb( if (pbvh) { BKE_pbvh_draw_cb( - pbvh, NULL, NULL, false, true, + pbvh, NULL, NULL, false, false, true, (void (*)(void *, struct GPUBatch *))draw_fn, shgroup); } } diff --git a/source/blender/draw/modes/shaders/overlay_face_wireframe_vert.glsl b/source/blender/draw/modes/shaders/overlay_face_wireframe_vert.glsl index 2a328a71366..8cb4db23b7e 100644 --- a/source/blender/draw/modes/shaders/overlay_face_wireframe_vert.glsl +++ b/source/blender/draw/modes/shaders/overlay_face_wireframe_vert.glsl @@ -10,7 +10,7 @@ uniform float ofs; #ifndef USE_SCULPT float get_edge_sharpness(float wd) { - return (wd == 1.0) ? 1.0 : ((wd == 0.0) ? -1.0 : (wd + wireStepParam)); + return ((wd == 1.0) ? 1.0 : ((wd == 0.0) ? -1.5 : wd)) + wireStepParam; } #else float get_edge_sharpness(float wd) { return 1.0; } -- cgit v1.2.3