Workbench: XFlip Matcap per 3D View
Note: Icons are not yet updated.
This commit is contained in:
parent
fc85096dc8
commit
cbbf8bbbb4
|
@ -3520,14 +3520,16 @@ class VIEW3D_PT_shading(Panel):
|
|||
if shading.light == 'STUDIO':
|
||||
row = col.row()
|
||||
row.template_icon_view(shading, "studio_light")
|
||||
op = row.operator('wm.studiolight_userpref_show', emboss=False, text="", icon='ZOOMIN')
|
||||
row.operator('wm.studiolight_userpref_show', emboss=False, text="", icon='ZOOMIN')
|
||||
if shading.studio_light_orientation == 'WORLD':
|
||||
col.row().prop(shading, "studiolight_rot_z")
|
||||
|
||||
elif shading.light == 'MATCAP':
|
||||
row = col.row()
|
||||
row.template_icon_view(shading, "matcap")
|
||||
op = row.operator('wm.studiolight_userpref_show', emboss=False, text="", icon='ZOOMIN')
|
||||
sub = row.column()
|
||||
sub.operator('VIEW3D_OT_toggle_matcap_flip', emboss=False, text="", icon='ARROW_LEFTRIGHT')
|
||||
sub.operator('wm.studiolight_userpref_show', emboss=False, text="", icon='ZOOMIN')
|
||||
|
||||
if shading.type == 'SOLID':
|
||||
col.separator()
|
||||
|
|
|
@ -16,12 +16,12 @@ struct WorldData {
|
|||
vec4 light_direction_vs;
|
||||
LightData lights[3];
|
||||
int num_lights;
|
||||
int pad[3];
|
||||
int matcap_orientation;
|
||||
int pad[2];
|
||||
};
|
||||
|
||||
struct MaterialData {
|
||||
vec4 diffuse_color;
|
||||
vec4 specular_color;
|
||||
float roughness;
|
||||
int matcap_texture_index;
|
||||
};
|
||||
|
|
|
@ -62,7 +62,11 @@ void main()
|
|||
#endif
|
||||
|
||||
#ifdef STUDIOLIGHT_ORIENTATION_VIEWNORMAL
|
||||
diffuse_color = texture(matcapImage, normal_viewport.xy / 2.0 + 0.5);
|
||||
vec2 matcap_uv = normal_viewport.xy / 2.0 + 0.5;
|
||||
if (world_data.matcap_orientation != 0) {
|
||||
matcap_uv.x = 1.0 - matcap_uv.x;
|
||||
}
|
||||
diffuse_color = texture(matcapImage, matcap_uv);
|
||||
#endif
|
||||
|
||||
#ifdef V3D_SHADING_SPECULAR_HIGHLIGHT
|
||||
|
|
|
@ -43,7 +43,8 @@ void main()
|
|||
#ifdef OB_SOLID
|
||||
diffuseColor = vec4(material_data.diffuse_color.rgb, 0.0);
|
||||
# ifdef STUDIOLIGHT_ORIENTATION_VIEWNORMAL
|
||||
specularColor = vec4(material_data.diffuse_color.rgb, material_data.matcap_texture_index);
|
||||
|
||||
specularColor = vec4(material_data.diffuse_color.rgb, 0.0);
|
||||
# endif
|
||||
#endif /* OB_SOLID */
|
||||
|
||||
|
|
|
@ -35,6 +35,7 @@ void workbench_private_data_init(WORKBENCH_PrivateData *wpd)
|
|||
wpd->shadow_multiplier = 1.0 - wpd->shading.shadow_intensity;
|
||||
|
||||
WORKBENCH_UBO_World *wd = &wpd->world_data;
|
||||
wd->matcap_orientation = (wpd->shading.flag & V3D_SHADING_MATCAP_FLIP_X) > 0;
|
||||
|
||||
if ((v3d->flag3 & V3D_SHOW_WORLD) &&
|
||||
(scene->world != NULL))
|
||||
|
|
|
@ -464,7 +464,7 @@ static void workbench_composite_uniforms(WORKBENCH_PrivateData *wpd, DRWShadingG
|
|||
|
||||
if (STUDIOLIGHT_ORIENTATION_VIEWNORMAL_ENABLED(wpd)) {
|
||||
BKE_studiolight_ensure_flag(wpd->studio_light, STUDIOLIGHT_EQUIRECTANGULAR_RADIANCE_GPUTEXTURE);
|
||||
DRW_shgroup_uniform_texture(grp, "matcapImage", wpd->studio_light->equirectangular_radiance_gputexture);
|
||||
DRW_shgroup_uniform_texture(grp, "matcapImage", wpd->studio_light->equirectangular_radiance_gputexture); DRW_shgroup_uniform_texture(grp, "matcapImage", wpd->studio_light->equirectangular_radiance_gputexture);
|
||||
}
|
||||
|
||||
workbench_material_set_normal_world_matrix(grp, wpd, e_data.normal_world_matrix);
|
||||
|
|
|
@ -128,7 +128,8 @@ typedef struct WORKBENCH_UBO_World {
|
|||
float light_direction_vs[4];
|
||||
WORKBENCH_UBO_Light lights[3];
|
||||
int num_lights;
|
||||
int pad[3];
|
||||
int matcap_orientation;
|
||||
int pad[2];
|
||||
} WORKBENCH_UBO_World;
|
||||
BLI_STATIC_ASSERT_ALIGN(WORKBENCH_UBO_World, 16)
|
||||
|
||||
|
@ -136,8 +137,7 @@ typedef struct WORKBENCH_UBO_Material {
|
|||
float diffuse_color[4];
|
||||
float specular_color[4];
|
||||
float roughness;
|
||||
int matcap_texture_index;
|
||||
float pad[2];
|
||||
float pad[3];
|
||||
} WORKBENCH_UBO_Material;
|
||||
BLI_STATIC_ASSERT_ALIGN(WORKBENCH_UBO_Material, 16)
|
||||
|
||||
|
|
|
@ -259,6 +259,33 @@ void VIEW3D_OT_toggle_xray_draw_option(wmOperatorType *ot)
|
|||
|
||||
/** \} */
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
/** \name Toggle Bone selection Overlay Operator
|
||||
* \{ */
|
||||
|
||||
static int toggle_matcap_flip(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
View3D *v3d = CTX_wm_view3d(C);
|
||||
v3d->shading.flag ^= V3D_SHADING_MATCAP_FLIP_X;
|
||||
ED_view3d_shade_update(CTX_data_main(C), v3d, CTX_wm_area(C));
|
||||
WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, v3d);
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
void VIEW3D_OT_toggle_matcap_flip(wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
ot->name = "Flip MatCap";
|
||||
ot->description = "Flip MatCap";
|
||||
ot->idname = "VIEW3D_OT_toggle_matcap_flip";
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec = toggle_matcap_flip;
|
||||
// ot->poll = toggle_show_xray_poll;
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
|
||||
static void do_view3d_header_buttons(bContext *C, void *UNUSED(arg), int event)
|
||||
{
|
||||
|
|
|
@ -66,6 +66,7 @@ enum {
|
|||
/* view3d_header.c */
|
||||
void VIEW3D_OT_layers(struct wmOperatorType *ot);
|
||||
void VIEW3D_OT_toggle_xray_draw_option(struct wmOperatorType *ot);
|
||||
void VIEW3D_OT_toggle_matcap_flip(struct wmOperatorType *ot);
|
||||
|
||||
/* view3d_ops.c */
|
||||
void view3d_operatortypes(void);
|
||||
|
|
|
@ -223,6 +223,7 @@ void view3d_operatortypes(void)
|
|||
|
||||
WM_operatortype_append(VIEW3D_OT_toggle_render);
|
||||
WM_operatortype_append(VIEW3D_OT_toggle_xray_draw_option);
|
||||
WM_operatortype_append(VIEW3D_OT_toggle_matcap_flip);
|
||||
|
||||
WM_operatortype_append(VIEW3D_OT_ruler_add);
|
||||
|
||||
|
|
|
@ -352,6 +352,7 @@ enum {
|
|||
V3D_SHADING_SCENE_LIGHT = (1 << 3),
|
||||
V3D_SHADING_SPECULAR_HIGHLIGHT = (1 << 4),
|
||||
V3D_SHADING_CAVITY = (1 << 5),
|
||||
V3D_SHADING_MATCAP_FLIP_X = (1 << 6),
|
||||
};
|
||||
|
||||
/* View3DShading->single_color_type */
|
||||
|
|
Loading…
Reference in New Issue