[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