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
This commit is contained in:
Harley Acheson 2019-12-07 08:16:45 -08:00
parent 958d0d4236
commit 9c1134015c
12 changed files with 36 additions and 8 deletions

View File

@ -327,6 +327,8 @@ const bTheme U_theme_default = {
.face = RGBA(0xffffff12),
.face_select = RGBA(0xffa5526c),
.face_dot = RGBA(0xff8a00ff),
.face_back = RGBA(0xff0000b3),
.face_front = RGBA(0x0000ffb3),
.extra_edge_len = RGBA(0x150806ff),
.extra_edge_angle = RGBA(0x4d4d00ff),
.extra_face_angle = RGBA(0x0000ccff),

View File

@ -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

View File

@ -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)

View File

@ -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);
}
}
}

View File

@ -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;
}

View File

@ -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);

View File

@ -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 */

View File

@ -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. */

View File

@ -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,

View File

@ -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;

View File

@ -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];

View File

@ -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)