From 9c1134015c34ff19f3ff27c89321c019c67904b8 Mon Sep 17 00:00:00 2001 From: Harley Acheson Date: Sat, 7 Dec 2019 08:16:45 -0800 Subject: UI: Custom Face Orientation Colors Adds theme settings to allow change of front and back faces of the Face Orientation overlay Differential Revision: https://developer.blender.org/D6262 Reviewed by Jeroen Bakker --- source/blender/blenloader/intern/versioning_userdef.c | 2 ++ source/blender/draw/engines/overlay/overlay_facing.c | 1 + source/blender/draw/engines/overlay/overlay_shader.c | 4 ++-- source/blender/draw/engines/overlay/shaders/facing_frag.glsl | 5 +---- source/blender/draw/intern/draw_common.c | 2 ++ source/blender/draw/intern/draw_common.h | 5 ++++- source/blender/draw/intern/shaders/common_globals_lib.glsl | 3 +++ source/blender/editors/include/UI_resources.h | 2 ++ source/blender/editors/interface/resources.c | 6 ++++++ source/blender/makesdna/DNA_userdef_types.h | 2 +- source/blender/makesrna/intern/rna_userdef.c | 10 ++++++++++ 11 files changed, 34 insertions(+), 8 deletions(-) (limited to 'source') diff --git a/source/blender/blenloader/intern/versioning_userdef.c b/source/blender/blenloader/intern/versioning_userdef.c index 4c85b5abd97..d097ed630b0 100644 --- a/source/blender/blenloader/intern/versioning_userdef.c +++ b/source/blender/blenloader/intern/versioning_userdef.c @@ -163,6 +163,8 @@ static void do_versions_theme(const UserDef *userdef, bTheme *btheme) FROM_DEFAULT_V4_UCHAR(space_sequencer.anim_preview_range); FROM_DEFAULT_V4_UCHAR(space_text.line_numbers); FROM_DEFAULT_V4_UCHAR(tui.widget_text_cursor); + FROM_DEFAULT_V4_UCHAR(space_view3d.face_back); + FROM_DEFAULT_V4_UCHAR(space_view3d.face_front); } #undef FROM_DEFAULT_V4_UCHAR diff --git a/source/blender/draw/engines/overlay/overlay_facing.c b/source/blender/draw/engines/overlay/overlay_facing.c index ea6f088e8e1..fd974e9b8b8 100644 --- a/source/blender/draw/engines/overlay/overlay_facing.c +++ b/source/blender/draw/engines/overlay/overlay_facing.c @@ -38,6 +38,7 @@ void OVERLAY_facing_cache_init(OVERLAY_Data *vedata) GPUShader *sh = OVERLAY_shader_facing(); pd->facing_grp = DRW_shgroup_create(sh, psl->facing_ps); + DRW_shgroup_uniform_block_persistent(pd->facing_grp, "globalsBlock", G_draw.block_ubo); } void OVERLAY_facing_cache_populate(OVERLAY_Data *vedata, Object *ob) diff --git a/source/blender/draw/engines/overlay/overlay_shader.c b/source/blender/draw/engines/overlay/overlay_shader.c index 22f025336ef..7bd3cf4a067 100644 --- a/source/blender/draw/engines/overlay/overlay_shader.c +++ b/source/blender/draw/engines/overlay/overlay_shader.c @@ -845,7 +845,7 @@ GPUShader *OVERLAY_shader_facing(void) datatoc_common_view_lib_glsl, datatoc_facing_vert_glsl, NULL}, - .frag = (const char *[]){datatoc_facing_frag_glsl, NULL}, + .frag = (const char *[]){datatoc_common_globals_lib_glsl, datatoc_facing_frag_glsl, NULL}, .defs = (const char *[]){sh_cfg->def, NULL}, }); } @@ -1314,4 +1314,4 @@ void OVERLAY_shader_free(void) for (int i = 0; i < sizeof(g_formats) / sizeof(void *); i++, format++) { MEM_SAFE_FREE(*format); } -} \ No newline at end of file +} diff --git a/source/blender/draw/engines/overlay/shaders/facing_frag.glsl b/source/blender/draw/engines/overlay/shaders/facing_frag.glsl index 1ed35b4a421..ca7b4eeaf47 100644 --- a/source/blender/draw/engines/overlay/shaders/facing_frag.glsl +++ b/source/blender/draw/engines/overlay/shaders/facing_frag.glsl @@ -1,9 +1,6 @@ -uniform vec3 color_towards = vec3(0.0, 0.0, 1.0); -uniform vec3 color_outwards = vec3(1.0, 0.0, 0.0); - out vec4 fragColor; void main() { - fragColor = vec4(gl_FrontFacing ? color_towards : color_outwards, 0.7); + fragColor = gl_FrontFacing ? colorFaceFront : colorFaceBack; } diff --git a/source/blender/draw/intern/draw_common.c b/source/blender/draw/intern/draw_common.c index 52adbcf0f78..65365ef7119 100644 --- a/source/blender/draw/intern/draw_common.c +++ b/source/blender/draw/intern/draw_common.c @@ -80,6 +80,8 @@ void DRW_globals_update(void) UI_GetThemeColor4fv(TH_EDGE_FACESEL, gb->colorEdgeFaceSelect); UI_GetThemeColor4fv(TH_FACE, gb->colorFace); UI_GetThemeColor4fv(TH_FACE_SELECT, gb->colorFaceSelect); + UI_GetThemeColor4fv(TH_FACE_BACK, gb->colorFaceBack); + UI_GetThemeColor4fv(TH_FACE_FRONT, gb->colorFaceFront); UI_GetThemeColor4fv(TH_NORMAL, gb->colorNormal); UI_GetThemeColor4fv(TH_VNORMAL, gb->colorVNormal); UI_GetThemeColor4fv(TH_LNORMAL, gb->colorLNormal); diff --git a/source/blender/draw/intern/draw_common.h b/source/blender/draw/intern/draw_common.h index bffb3ad5a1d..a486eb6ba77 100644 --- a/source/blender/draw/intern/draw_common.h +++ b/source/blender/draw/intern/draw_common.h @@ -34,7 +34,7 @@ struct ParticleSystem; struct ViewLayer; #define UBO_FIRST_COLOR colorWire -#define UBO_LAST_COLOR colorGridAxisZ +#define UBO_LAST_COLOR colorFaceFront /* Used as ubo but colors can be directly referenced as well */ /* Keep in sync with: common_globals_lib.glsl (globalsBlock) */ @@ -109,6 +109,9 @@ typedef struct GlobalsUboStorage { float colorGridAxisY[4]; float colorGridAxisZ[4]; + float colorFaceBack[4]; + float colorFaceFront[4]; + /* NOTE! Put all color before UBO_LAST_COLOR */ float screenVecs[2][4]; /* padded as vec4 */ float sizeViewport[2], sizeViewportInv[2]; /* packed as vec4 in glsl */ diff --git a/source/blender/draw/intern/shaders/common_globals_lib.glsl b/source/blender/draw/intern/shaders/common_globals_lib.glsl index 151932a3b47..676492f227d 100644 --- a/source/blender/draw/intern/shaders/common_globals_lib.glsl +++ b/source/blender/draw/intern/shaders/common_globals_lib.glsl @@ -70,6 +70,9 @@ layout(std140) uniform globalsBlock vec4 colorGridAxisY; vec4 colorGridAxisZ; + vec4 colorFaceBack; + vec4 colorFaceFront; + vec4 screenVecs[2]; vec4 sizeViewport; /* Inverted size in zw. */ diff --git a/source/blender/editors/include/UI_resources.h b/source/blender/editors/include/UI_resources.h index 738a91c085d..bd8eed4e4aa 100644 --- a/source/blender/editors/include/UI_resources.h +++ b/source/blender/editors/include/UI_resources.h @@ -99,6 +99,8 @@ typedef enum ThemeColorID { TH_EDGE_FACESEL, TH_FACE, TH_FACE_SELECT, + TH_FACE_BACK, + TH_FACE_FRONT, TH_NORMAL, TH_VNORMAL, TH_LNORMAL, diff --git a/source/blender/editors/interface/resources.c b/source/blender/editors/interface/resources.c index 99833e9200d..f8b4d85a212 100644 --- a/source/blender/editors/interface/resources.c +++ b/source/blender/editors/interface/resources.c @@ -401,6 +401,12 @@ const uchar *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid) case TH_FACE_SELECT: cp = ts->face_select; break; + case TH_FACE_BACK: + cp = ts->face_back; + break; + case TH_FACE_FRONT: + cp = ts->face_front; + break; case TH_FACE_DOT: cp = ts->face_dot; break; diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h index adab1f31507..fb88f5c9dd4 100644 --- a/source/blender/makesdna/DNA_userdef_types.h +++ b/source/blender/makesdna/DNA_userdef_types.h @@ -276,7 +276,7 @@ typedef struct ThemeSpace { unsigned char edge[4], edge_select[4]; unsigned char edge_seam[4], edge_sharp[4], edge_facesel[4], edge_crease[4], edge_bevel[4]; /** Solid faces. */ - unsigned char face[4], face_select[4]; + unsigned char face[4], face_select[4], face_back[4], face_front[4]; /** selected color. */ unsigned char face_dot[4]; unsigned char extra_edge_len[4], extra_edge_angle[4], extra_face_angle[4], extra_face_area[4]; diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c index af30baf4a80..52ad217a9e8 100644 --- a/source/blender/makesrna/intern/rna_userdef.c +++ b/source/blender/makesrna/intern/rna_userdef.c @@ -1900,6 +1900,16 @@ static void rna_def_userdef_theme_spaces_face(StructRNA *srna) RNA_def_property_array(prop, 4); RNA_def_property_ui_text(prop, "Freestyle Face Mark", ""); RNA_def_property_update(prop, 0, "rna_userdef_theme_update"); + + prop = RNA_def_property(srna, "face_back", PROP_FLOAT, PROP_COLOR_GAMMA); + RNA_def_property_array(prop, 4); + RNA_def_property_ui_text(prop, "Face Orientation Back", ""); + RNA_def_property_update(prop, 0, "rna_userdef_theme_update"); + + prop = RNA_def_property(srna, "face_front", PROP_FLOAT, PROP_COLOR_GAMMA); + RNA_def_property_array(prop, 4); + RNA_def_property_ui_text(prop, "Face Orientation Front", ""); + RNA_def_property_update(prop, 0, "rna_userdef_theme_update"); } static void rna_def_userdef_theme_spaces_paint_curves(StructRNA *srna) -- cgit v1.2.3