[Bf-blender-cvs] [5e9dd6d2b4f] tmp-overlay-engine: Overlay Engine: Origin transform axes
Clément Foucault
noreply at git.blender.org
Fri Nov 15 01:35:19 CET 2019
Commit: 5e9dd6d2b4f4dd0293ba0b9f8bf8f11128a6e56a
Author: Clément Foucault
Date: Sat Nov 9 23:47:44 2019 +0100
Branches: tmp-overlay-engine
https://developer.blender.org/rB5e9dd6d2b4f4dd0293ba0b9f8bf8f11128a6e56a
Overlay Engine: Origin transform axes
===================================================================
M source/blender/draw/engines/overlay/overlay_extra.c
M source/blender/draw/engines/overlay/overlay_private.h
M source/blender/draw/engines/overlay/shaders/extra_vert.glsl
===================================================================
diff --git a/source/blender/draw/engines/overlay/overlay_extra.c b/source/blender/draw/engines/overlay/overlay_extra.c
index eaa74c7539d..4d983ba9c7f 100644
--- a/source/blender/draw/engines/overlay/overlay_extra.c
+++ b/source/blender/draw/engines/overlay/overlay_extra.c
@@ -237,6 +237,11 @@ void OVERLAY_extra_cache_init(OVERLAY_Data *vedata)
cb->field_cone_limit = BUF_INSTANCE(grp_sub, format, DRW_cache_field_cone_limit_get());
cb->field_sphere_limit = BUF_INSTANCE(grp_sub, format, DRW_cache_field_sphere_limit_get());
+ grp_sub = DRW_shgroup_create_sub(grp);
+ DRW_shgroup_state_enable(grp_sub, DRW_STATE_DEPTH_ALWAYS);
+ DRW_shgroup_state_disable(grp_sub, DRW_STATE_DEPTH_LESS_EQUAL);
+ cb->origin_xform = BUF_INSTANCE(grp_sub, format, DRW_cache_bone_arrows_get());
+
/* TODO Own move to transparent pass. */
grp_sub = DRW_shgroup_create_sub(grp);
DRW_shgroup_state_enable(grp_sub, DRW_STATE_CULL_BACK | DRW_STATE_BLEND_ALPHA);
@@ -1508,7 +1513,9 @@ void OVERLAY_extra_cache_populate(OVERLAY_Data *vedata, Object *ob)
OVERLAY_PrivateData *pd = vedata->stl->pd;
const DRWContextState *draw_ctx = DRW_context_state_get();
ViewLayer *view_layer = draw_ctx->view_layer;
+ Scene *scene = draw_ctx->scene;
+ const bool is_select_mode = DRW_state_is_select();
const bool is_paint_mode = (draw_ctx->object_mode &
(OB_MODE_ALL_PAINT | OB_MODE_ALL_PAINT_GPENCIL)) != 0;
const bool from_dupli = (ob->base_flag & (BASE_FROM_SET | BASE_FROM_DUPLI)) != 0;
@@ -1516,13 +1523,16 @@ void OVERLAY_extra_cache_populate(OVERLAY_Data *vedata, Object *ob)
const bool has_texspace = has_bounds &&
!ELEM(ob->type, OB_EMPTY, OB_LATTICE, OB_ARMATURE, OB_GPENCIL);
- const bool draw_relations = ((pd->v3d_flag & V3D_HIDE_HELPLINES) == 0) && !DRW_state_is_select();
+ const bool draw_relations = ((pd->v3d_flag & V3D_HIDE_HELPLINES) == 0) && !is_select_mode;
const bool draw_obcenters = !is_paint_mode &&
(pd->overlay.flag & V3D_OVERLAY_HIDE_OBJECT_ORIGINS) == 0;
const bool draw_texspace = (ob->dtx & OB_TEXSPACE) && has_texspace;
const bool draw_obname = (ob->dtx & OB_DRAWNAME) && DRW_state_show_text();
const bool draw_bounds = has_bounds && ((ob->dt == OB_BOUNDBOX) ||
((ob->dtx & OB_DRAWBOUNDOX) && !from_dupli));
+ const bool draw_xform = draw_ctx->object_mode == OB_MODE_OBJECT &&
+ (scene->toolsettings->transform_flag & SCE_XFORM_DATA_ORIGIN) &&
+ (ob->base_flag & BASE_SELECTED) && !is_select_mode;
float *color;
int theme_id = DRW_object_wire_theme_get(ob, view_layer, &color);
@@ -1535,17 +1545,10 @@ void OVERLAY_extra_cache_populate(OVERLAY_Data *vedata, Object *ob)
OVERLAY_bounds(cb, ob, theme_id, ob->boundtype, false);
}
/* Helpers for when we're transforming origins. */
- // if (draw_ctx->object_mode == OB_MODE_OBJECT) {
- // if (scene->toolsettings->transform_flag & SCE_XFORM_DATA_ORIGIN) {
- // if (ob->base_flag & BASE_SELECTED) {
- // if (!DRW_state_is_select()) {
- // const float color[4] = {0.75, 0.75, 0.75, 0.5};
- // float axes_size = 1.0f;
- // DRW_buffer_add_entry(cb->origin_xform, color, &axes_size, ob->obmat);
- // }
- // }
- // }
- // }
+ if (draw_xform) {
+ float color_xform[4] = {0.75f, 0.75f, 0.75f, 0.5f};
+ DRW_buffer_add_entry(cb->origin_xform, color_xform, ob->obmat);
+ }
/* don't show object extras in set's */
if (!from_dupli) {
if (draw_obcenters) {
diff --git a/source/blender/draw/engines/overlay/overlay_private.h b/source/blender/draw/engines/overlay/overlay_private.h
index 3786adb2bb0..54f35d04732 100644
--- a/source/blender/draw/engines/overlay/overlay_private.h
+++ b/source/blender/draw/engines/overlay/overlay_private.h
@@ -131,6 +131,8 @@ typedef struct OVERLAY_ExtraCallBuffers {
DRWCallBuffer *light_spot_volume_inside;
DRWCallBuffer *light_area[2];
+ DRWCallBuffer *origin_xform;
+
DRWCallBuffer *probe_planar;
DRWCallBuffer *probe_cube;
DRWCallBuffer *probe_grid;
diff --git a/source/blender/draw/engines/overlay/shaders/extra_vert.glsl b/source/blender/draw/engines/overlay/shaders/extra_vert.glsl
index 662ae71ea2b..c0ff3f217aa 100644
--- a/source/blender/draw/engines/overlay/shaders/extra_vert.glsl
+++ b/source/blender/draw/engines/overlay/shaders/extra_vert.glsl
@@ -157,6 +157,11 @@ void main()
vofs = chosen_axis * (1.0 + fract(axis)) * empty_scale;
/* Scale uniformly by axis length */
vpos *= length(chosen_axis) * empty_scale;
+
+ vec3 axis_color = vec3(0.0);
+ axis_color[int(axis)] = 1.0;
+ finalColor.rgb = mix(axis_color + fract(axis), color.rgb, color.a);
+ finalColor.a = 1.0;
}
/* Not exclusive with previous flags. */
More information about the Bf-blender-cvs
mailing list