Commit: 375d27f230e41e4bcb53183082739c580f74c709 Author: mano-wii Date: Tue Jan 9 13:29:16 2018 +1100 Branches: blender2.8 https://developer.blender.org/rB375d27f230e41e4bcb53183082739c580f74c709
Curve Edit Mode: Use curve handle theme colors =================================================================== M source/blender/draw/CMakeLists.txt M source/blender/draw/intern/draw_cache_impl_curve.c M source/blender/draw/intern/draw_common.c M source/blender/draw/intern/draw_common.h M source/blender/draw/modes/edit_curve_mode.c M source/blender/draw/modes/shaders/common_globals_lib.glsl A source/blender/draw/modes/shaders/edit_curve_overlay_handle_geom.glsl =================================================================== diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt index 8339b6b8720..03ab9cf9435 100644 --- a/source/blender/draw/CMakeLists.txt +++ b/source/blender/draw/CMakeLists.txt @@ -202,6 +202,7 @@ data_to_c_simple(modes/shaders/edit_mesh_overlay_mix_frag.glsl SRC) data_to_c_simple(modes/shaders/edit_mesh_overlay_facefill_vert.glsl SRC) data_to_c_simple(modes/shaders/edit_mesh_overlay_facefill_frag.glsl SRC) data_to_c_simple(modes/shaders/edit_curve_overlay_frag.glsl SRC) +data_to_c_simple(modes/shaders/edit_curve_overlay_handle_geom.glsl SRC) data_to_c_simple(modes/shaders/edit_curve_overlay_loosevert_vert.glsl SRC) data_to_c_simple(modes/shaders/edit_lattice_overlay_frag.glsl SRC) data_to_c_simple(modes/shaders/edit_lattice_overlay_loosevert_vert.glsl SRC) diff --git a/source/blender/draw/intern/draw_cache_impl_curve.c b/source/blender/draw/intern/draw_cache_impl_curve.c index a6dc52f66c9..8edea5fd963 100644 --- a/source/blender/draw/intern/draw_cache_impl_curve.c +++ b/source/blender/draw/intern/draw_cache_impl_curve.c @@ -40,9 +40,22 @@ #include "GPU_batch.h" +#include "UI_resources.h" + #include "draw_cache_impl.h" /* own include */ -#define SELECT 1 +#define SELECT 1 +#define ACTIVE_NURB 1 << 7 /* last char bite */ +#define HANDLE_SEL_OFFSET (TH_HANDLE_SEL_FREE - TH_HANDLE_FREE) + +/* Used as values of `color_id` in `edit_curve_overlay_handle_geom.glsl` */ +enum { + COLOR_NURB_ULINE_ID = TH_HANDLE_SEL_AUTOCLAMP - TH_HANDLE_FREE + 1, + COLOR_NURB_SEL_ULINE_ID, + COLOR_ACTIVE_SPLINE, + + TOT_HANDLE_COL, +}; /** * TODO @@ -742,47 +755,50 @@ static void curve_batch_cache_create_overlay_batches(Curve *cu) int vbo_len_used = 0; GWN_vertbuf_data_alloc(vbo, vbo_len_capacity); int i = 0; - for (Nurb *nu = rdata->nurbs->first; nu; nu = nu->next) { + for (Nurb *nu = rdata->nurbs->first; nu; nu = nu->next, i++) { + const bool is_active_nurb = (i == cu->actnu); + if (nu->bezt) { int a = 0; for (const BezTriple *bezt = nu->bezt; a < nu->pntsu; a++, bezt++) { if (bezt->hide == false) { - const bool is_active = (i == rdata->actvert); - char vflag; - - vflag = (bezt->f1 & SELECT) ? (is_active ? VFLAG_VERTEX_ACTIVE : VFLAG_VERTEX_SELECTED) : 0; - GWN_vertbuf_attr_set(vbo, attr_id.pos, vbo_len_used, bezt->vec[0]); - GWN_vertbuf_attr_set(vbo, attr_id.data, vbo_len_used, &vflag); - vbo_len_used += 1; + char col_id; - /* same vertex twice, only check different selection */ - for (int j = 0; j < 2; j++) { - vflag = ((j ? bezt->f3 : bezt->f1) & SELECT) ? - (is_active ? VFLAG_VERTEX_ACTIVE : VFLAG_VERTEX_SELECTED) : 0; + for (int j = 0; j < 2; j += 1) { + /* same vertex twice, only check different selection */ GWN_vertbuf_attr_set(vbo, attr_id.pos, vbo_len_used, bezt->vec[1]); - GWN_vertbuf_attr_set(vbo, attr_id.data, vbo_len_used, &vflag); vbo_len_used += 1; - } - vflag = (bezt->f3 & SELECT) ? (is_active ? VFLAG_VERTEX_ACTIVE : VFLAG_VERTEX_SELECTED) : 0; - GWN_vertbuf_attr_set(vbo, attr_id.pos, vbo_len_used, bezt->vec[2]); - GWN_vertbuf_attr_set(vbo, attr_id.data, vbo_len_used, &vflag); - vbo_len_used += 1; + col_id = (&bezt->h1)[j]; + if ((&bezt->f1)[j * 2] & SELECT) { + col_id += HANDLE_SEL_OFFSET; + } + if (is_active_nurb) { + col_id |= ACTIVE_NURB; + } + + GWN_vertbuf_attr_set(vbo, attr_id.pos, vbo_len_used, bezt->vec[j * 2]); + GWN_vertbuf_attr_set(vbo, attr_id.data, vbo_len_used, &col_id); + vbo_len_used += 1; + } } - i += 1; } } else if (nu->bp) { int a = 1; for (const BPoint *bp_prev = nu->bp, *bp_curr = &nu->bp[1]; a < nu->pntsu; a++, bp_prev = bp_curr++) { if ((bp_prev->hide == false) && (bp_curr->hide == false)) { - char vflag; - vflag = ((bp_prev->f1 & SELECT) && (bp_curr->f1 & SELECT)) ? VFLAG_VERTEX_SELECTED : 0; + char col_id = ((bp_prev->f1 & SELECT) && (bp_curr->f1 & SELECT)) ? COLOR_NURB_SEL_ULINE_ID : COLOR_NURB_ULINE_ID; + + if (is_active_nurb) { + col_id |= ACTIVE_NURB; + } + GWN_vertbuf_attr_set(vbo, attr_id.pos, vbo_len_used, bp_prev->vec); - GWN_vertbuf_attr_set(vbo, attr_id.data, vbo_len_used, &vflag); vbo_len_used += 1; + GWN_vertbuf_attr_set(vbo, attr_id.pos, vbo_len_used, bp_curr->vec); - GWN_vertbuf_attr_set(vbo, attr_id.data, vbo_len_used, &vflag); + GWN_vertbuf_attr_set(vbo, attr_id.data, vbo_len_used, &col_id); vbo_len_used += 1; } @@ -1092,4 +1108,4 @@ Gwn_Batch *DRW_curve_batch_cache_get_overlay_cursor(Curve *cu) return cache->text.cursor; } -/** \} */ \ No newline at end of file +/** \} */ diff --git a/source/blender/draw/intern/draw_common.c b/source/blender/draw/intern/draw_common.c index 6ce01056bfc..e86a231c19d 100644 --- a/source/blender/draw/intern/draw_common.c +++ b/source/blender/draw/intern/draw_common.c @@ -81,6 +81,21 @@ void DRW_globals_update(void) UI_GetThemeColor4fv(TH_FACE_DOT, ts.colorFaceDot); UI_GetThemeColor4fv(TH_BACK, ts.colorBackground); + /* Curve */ + UI_GetThemeColor4fv(TH_HANDLE_FREE, ts.colorHandleFree); + UI_GetThemeColor4fv(TH_HANDLE_AUTO, ts.colorHandleAuto); + UI_GetThemeColor4fv(TH_HANDLE_VECT, ts.colorHandleVect); + UI_GetThemeColor4fv(TH_HANDLE_ALIGN, ts.colorHandleAlign); + UI_GetThemeColor4fv(TH_HANDLE_AUTOCLAMP, ts.colorHandleAutoclamp); + UI_GetThemeColor4fv(TH_HANDLE_SEL_FREE, ts.colorHandleSelFree); + UI_GetThemeColor4fv(TH_HANDLE_SEL_AUTO, ts.colorHandleSelAuto); + UI_GetThemeColor4fv(TH_HANDLE_SEL_VECT, ts.colorHandleSelVect); + UI_GetThemeColor4fv(TH_HANDLE_SEL_ALIGN, ts.colorHandleSelAlign); + UI_GetThemeColor4fv(TH_HANDLE_SEL_AUTOCLAMP, ts.colorHandleSelAutoclamp); + UI_GetThemeColor4fv(TH_NURB_ULINE, ts.colorNurbUline); + UI_GetThemeColor4fv(TH_NURB_SEL_ULINE, ts.colorNurbSelUline); + UI_GetThemeColor4fv(TH_ACTIVE_SPLINE, ts.colorActiveSpline); + /* Grid */ UI_GetThemeColorShade4fv(TH_GRID, 10, ts.colorGrid); /* emphasise division lines lighter instead of darker, if background is darker than grid */ diff --git a/source/blender/draw/intern/draw_common.h b/source/blender/draw/intern/draw_common.h index 0bdb79b3a40..0a7227287ea 100644 --- a/source/blender/draw/intern/draw_common.h +++ b/source/blender/draw/intern/draw_common.h @@ -72,6 +72,20 @@ typedef struct GlobalsUboStorage { float colorBackground[4]; + float colorHandleFree[4]; + float colorHandleAuto[4]; + float colorHandleVect[4]; + float colorHandleAlign[4]; + float colorHandleAutoclamp[4]; + float colorHandleSelFree[4]; + float colorHandleSelAuto[4]; + float colorHandleSelVect[4]; + float colorHandleSelAlign[4]; + float colorHandleSelAutoclamp[4]; + float colorNurbUline[4]; + float colorNurbSelUline[4]; + float colorActiveSpline[4]; + float colorGrid[4]; float colorGridEmphasise[4]; float colorGridAxisX[4]; diff --git a/source/blender/draw/modes/edit_curve_mode.c b/source/blender/draw/modes/edit_curve_mode.c index 3f2c75407b7..d1c40fe9b03 100644 --- a/source/blender/draw/modes/edit_curve_mode.c +++ b/source/blender/draw/modes/edit_curve_mode.c @@ -45,10 +45,12 @@ extern struct GlobalsUboStorage ts; /* draw_common.c */ extern char datatoc_common_globals_lib_glsl[]; extern char datatoc_edit_curve_overlay_loosevert_vert_glsl[]; extern char datatoc_edit_curve_overlay_frag_glsl[]; +extern char datatoc_edit_curve_overlay_handle_geom_glsl[]; extern char datatoc_gpu_shader_3D_vert_glsl[]; extern char datatoc_gpu_shader_uniform_color_frag_glsl[]; extern char datatoc_gpu_shader_point_uniform_color_frag_glsl[]; +extern char datatoc_gpu_shader_flat_color_frag_glsl[]; /* *********** LISTS *********** */ /* All lists are per viewport specific datas. @@ -158,7 +160,11 @@ static void EDIT_CURVE_engine_init(void *vedata) } if (!e_data.overlay_edge_sh) { - e_data.overlay_edge_sh = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR); + e_data.overlay_edge_sh = DRW_shader_create_with_lib( + datatoc_edit_curve_overlay_loosevert_vert_glsl, + datatoc_edit_curve_overlay_handle_geom_glsl, + datatoc_gpu_shader_flat_color_frag_glsl, + datatoc_common_globals_lib_glsl, NULL); } if (!e_data.overlay_vert_sh) { @@ -189,15 +195,14 @@ static void EDIT_CURVE_cache_init(void *vedata) stl->g_data->wire_shgrp = DRW_shgroup_create(e_data.wire_sh, psl->wire_pass); - /* TODO: following handle theme colors, - * For now use overlay vert shader for handles (we want them colored): - * TH_NURB_ULINE, TH_NURB_SEL_ULINE, TH_HANDLE_* */ psl->overlay_edge_pass = DRW_pass_create( "Curve Handle Overlay", DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_WIRE); - /* TODO: following handle theme colors, - * For now use overlay vert shader for handles (we want them colored) */ - stl->g_data->overlay_edge_shgrp = DRW_shgroup_create(e_data.overlay_vert_sh, psl->overlay_edge_pass); + + DRWShadingGroup *overlay_edge_shgrp = DRW_shgroup_create(e_data.overlay_edge_sh, psl->overlay_edge_pass); + DRW_shgroup_uniform_vec2(overlay_edge_shgrp, "viewportSize", DRW_viewport_size_get(), 1); + stl->g_data->overlay_edge_shgrp = overlay_edge_shgrp; + psl->overlay_vert_pass = DRW_pass_create( "Curve Vert Overlay", @@ -293,6 +298,7 @@ static void EDIT_CURVE_draw_scene(void *vedata) * Mostly used for freeing shaders */ static void EDIT_CURVE_engine_free(void) { + DRW_SHADER_FREE_SAFE(e_data.overlay_edge_sh); DRW_SHADER_FREE_SAFE(e_data.overlay_vert_sh); } diff --git a/source/blender/draw/modes/shaders/common_globals_lib.glsl b/source/blender/draw/modes/shaders/common_globals_lib.glsl index dc36d252926..0c14c1e7db0 100644 --- a/source/blender/draw/modes/shaders/common_globals_lib.glsl +++ b/source/blender/draw/modes/shaders/common_globals_lib.glsl @@ -37,6 +37,20 @@ layout(std140) uniform globalsBlock { vec4 colorBackground; + vec4 colorHandleFree; + vec4 colorHandleAuto; + vec4 colorHandleVect; + vec4 colorHandleAlign; + vec4 colorHandleAutoclamp; + vec4 colorHandleSelFree; + vec4 colorHandleSelAuto; + vec4 colorH @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs