[Bf-blender-cvs] [7c17e76e0e5] tmp-overlay-engine: Overlay Engine: Improve In Front pass ordering

Clément Foucault noreply at git.blender.org
Sun Nov 24 02:03:02 CET 2019


Commit: 7c17e76e0e5cf894a92afbc021e86d72ca225025
Author: Clément Foucault
Date:   Fri Nov 22 16:26:27 2019 +0100
Branches: tmp-overlay-engine
https://developer.blender.org/rB7c17e76e0e5cf894a92afbc021e86d72ca225025

Overlay Engine: Improve In Front pass ordering

This does not fix all the issues. For instance extra's are always drawn
occluded.

===================================================================

M	source/blender/draw/engines/overlay/overlay_armature.c
M	source/blender/draw/engines/overlay/overlay_engine.c
M	source/blender/draw/engines/overlay/overlay_extra.c
M	source/blender/draw/engines/overlay/overlay_image.c
M	source/blender/draw/engines/overlay/overlay_private.h
M	source/blender/draw/engines/overlay/overlay_wireframe.c

===================================================================

diff --git a/source/blender/draw/engines/overlay/overlay_armature.c b/source/blender/draw/engines/overlay/overlay_armature.c
index 0b76fe325fd..46347b57993 100644
--- a/source/blender/draw/engines/overlay/overlay_armature.c
+++ b/source/blender/draw/engines/overlay/overlay_armature.c
@@ -2297,6 +2297,12 @@ void OVERLAY_armature_draw(OVERLAY_Data *vedata)
 
   DRW_draw_pass(psl->armature_transp_ps);
   DRW_draw_pass(psl->armature_ps[0]);
+}
+
+void OVERLAY_armature_in_front_draw(OVERLAY_Data *vedata)
+{
+  OVERLAY_PassList *psl = vedata->psl;
+
   if (psl->armature_bone_select_ps == NULL) {
     DRW_draw_pass(psl->armature_ps[1]);
   }
diff --git a/source/blender/draw/engines/overlay/overlay_engine.c b/source/blender/draw/engines/overlay/overlay_engine.c
index 47cc89d39b3..2107e318c87 100644
--- a/source/blender/draw/engines/overlay/overlay_engine.c
+++ b/source/blender/draw/engines/overlay/overlay_engine.c
@@ -58,8 +58,9 @@ static void OVERLAY_engine_init(void *vedata)
       /* Nothing to do. */
       break;
   }
-  OVERLAY_grid_init(vedata);
   OVERLAY_facing_init(vedata);
+  OVERLAY_grid_init(vedata);
+  OVERLAY_image_init(vedata);
   OVERLAY_outline_init(vedata);
   OVERLAY_wireframe_init(vedata);
 }
@@ -331,17 +332,25 @@ static void OVERLAY_draw_scene(void *vedata)
   OVERLAY_image_draw(vedata);
   OVERLAY_facing_draw(vedata);
   OVERLAY_wireframe_draw(vedata);
-  OVERLAY_extra_draw(vedata);
+  OVERLAY_armature_draw(vedata);
   OVERLAY_particle_draw(vedata);
   OVERLAY_metaball_draw(vedata);
-  OVERLAY_armature_draw(vedata);
+  OVERLAY_extra_draw(vedata);
+
   OVERLAY_grid_draw(vedata);
-  OVERLAY_motion_path_draw(vedata);
   OVERLAY_outline_draw(vedata);
 
+  OVERLAY_wireframe_in_front_draw(vedata);
+  OVERLAY_armature_in_front_draw(vedata);
+  OVERLAY_extra_in_front_draw(vedata);
+  OVERLAY_image_in_front_draw(vedata);
+
+  OVERLAY_motion_path_draw(vedata);
+  OVERLAY_extra_centers_draw(vedata);
+
   switch (pd->ctx_mode) {
     case CTX_MODE_EDIT_MESH:
-      OVERLAY_edit_mesh_draw(vedata);
+      OVERLAY_edit_mesh_draw(vedata); /* Clear depth for xray */
       break;
     case CTX_MODE_EDIT_SURFACE:
     case CTX_MODE_EDIT_CURVE:
@@ -355,7 +364,7 @@ static void OVERLAY_draw_scene(void *vedata)
       break;
     case CTX_MODE_POSE:
       OVERLAY_paint_draw(vedata);
-      OVERLAY_pose_draw(vedata);
+      OVERLAY_pose_draw(vedata); /* Clear depth for xray */
       break;
     case CTX_MODE_PAINT_WEIGHT:
     case CTX_MODE_PAINT_VERTEX:
diff --git a/source/blender/draw/engines/overlay/overlay_extra.c b/source/blender/draw/engines/overlay/overlay_extra.c
index ea7cca3cf9c..e32fdc20e34 100644
--- a/source/blender/draw/engines/overlay/overlay_extra.c
+++ b/source/blender/draw/engines/overlay/overlay_extra.c
@@ -1605,8 +1605,20 @@ void OVERLAY_extra_draw(OVERLAY_Data *vedata)
 
   DRW_draw_pass(psl->extra_blend_ps);
   DRW_draw_pass(psl->extra_ps[0]);
+}
+
+void OVERLAY_extra_in_front_draw(OVERLAY_Data *vedata)
+{
+  OVERLAY_PassList *psl = vedata->psl;
+
   DRW_draw_pass(psl->extra_ps[1]);
-  DRW_draw_pass(psl->extra_centers_ps);
 
   OVERLAY_volume_free_smoke_textures(vedata);
 }
+
+void OVERLAY_extra_centers_draw(OVERLAY_Data *vedata)
+{
+  OVERLAY_PassList *psl = vedata->psl;
+
+  DRW_draw_pass(psl->extra_centers_ps);
+}
diff --git a/source/blender/draw/engines/overlay/overlay_image.c b/source/blender/draw/engines/overlay/overlay_image.c
index 4945594dae0..fb7e701ca23 100644
--- a/source/blender/draw/engines/overlay/overlay_image.c
+++ b/source/blender/draw/engines/overlay/overlay_image.c
@@ -38,6 +38,14 @@
 
 #include "overlay_private.h"
 
+void OVERLAY_image_init(OVERLAY_Data *vedata)
+{
+  const DRWContextState *draw_ctx = DRW_context_state_get();
+  OVERLAY_PrivateData *pd = vedata->stl->pd;
+
+  pd->view_reference_images = DRW_view_create_with_zoffset(draw_ctx->rv3d, -1.0f);
+}
+
 void OVERLAY_image_cache_init(OVERLAY_Data *vedata)
 {
   OVERLAY_PassList *psl = vedata->psl;
@@ -431,7 +439,10 @@ void OVERLAY_image_cache_finish(OVERLAY_Data *vedata)
 void OVERLAY_image_draw(OVERLAY_Data *vedata)
 {
   OVERLAY_PassList *psl = vedata->psl;
-  /* TODO better ordering with other passes. */
+  OVERLAY_PrivateData *pd = vedata->stl->pd;
+
+  DRW_view_set_active(pd->view_reference_images);
+
   DRW_draw_pass(psl->image_background_over_ps);
   DRW_draw_pass(psl->image_background_under_ps);
   DRW_draw_pass(psl->image_empties_back_ps);
@@ -439,8 +450,20 @@ void OVERLAY_image_draw(OVERLAY_Data *vedata)
   DRW_draw_pass(psl->image_empties_ps);
   DRW_draw_pass(psl->image_empties_blend_ps);
 
+  DRW_view_set_active(NULL);
+}
+
+void OVERLAY_image_in_front_draw(OVERLAY_Data *vedata)
+{
+  OVERLAY_PassList *psl = vedata->psl;
+  OVERLAY_PrivateData *pd = vedata->stl->pd;
+
+  DRW_view_set_active(pd->view_reference_images);
+
   DRW_draw_pass(psl->image_empties_front_ps);
   DRW_draw_pass(psl->image_foreground_ps);
 
+  DRW_view_set_active(NULL);
+
   OVERLAY_image_free_movieclips_textures(vedata);
 }
diff --git a/source/blender/draw/engines/overlay/overlay_private.h b/source/blender/draw/engines/overlay/overlay_private.h
index 7663193d3b8..03e89f01bba 100644
--- a/source/blender/draw/engines/overlay/overlay_private.h
+++ b/source/blender/draw/engines/overlay/overlay_private.h
@@ -246,6 +246,7 @@ typedef struct OVERLAY_PrivateData {
   DRWView *view_edit_faces_cage;
   DRWView *view_edit_edges;
   DRWView *view_edit_verts;
+  DRWView *view_reference_images;
 
   /** TODO get rid of this. */
   ListBase smoke_domains;
@@ -355,6 +356,7 @@ void OVERLAY_edit_armature_cache_populate(OVERLAY_Data *vedata, Object *ob);
 void OVERLAY_pose_armature_cache_populate(OVERLAY_Data *vedata, Object *ob);
 void OVERLAY_armature_cache_finish(OVERLAY_Data *vedata);
 void OVERLAY_armature_draw(OVERLAY_Data *vedata);
+void OVERLAY_armature_in_front_draw(OVERLAY_Data *vedata);
 void OVERLAY_pose_cache_populate(OVERLAY_Data *vedata, Object *ob);
 void OVERLAY_pose_draw(OVERLAY_Data *vedata);
 
@@ -388,6 +390,8 @@ void OVERLAY_edit_particle_draw(OVERLAY_Data *vedata);
 void OVERLAY_extra_cache_init(OVERLAY_Data *vedata);
 void OVERLAY_extra_cache_populate(OVERLAY_Data *vedata, Object *ob);
 void OVERLAY_extra_draw(OVERLAY_Data *vedata);
+void OVERLAY_extra_in_front_draw(OVERLAY_Data *vedata);
+void OVERLAY_extra_centers_draw(OVERLAY_Data *vedata);
 
 void OVERLAY_camera_cache_populate(OVERLAY_Data *vedata, Object *ob);
 void OVERLAY_empty_cache_populate(OVERLAY_Data *vedata, Object *ob);
@@ -428,11 +432,13 @@ void OVERLAY_grid_init(OVERLAY_Data *vedata);
 void OVERLAY_grid_cache_init(OVERLAY_Data *vedata);
 void OVERLAY_grid_draw(OVERLAY_Data *vedata);
 
+void OVERLAY_image_init(OVERLAY_Data *vedata);
 void OVERLAY_image_cache_init(OVERLAY_Data *vedata);
 void OVERLAY_image_camera_cache_populate(OVERLAY_Data *vedata, Object *ob);
 void OVERLAY_image_empty_cache_populate(OVERLAY_Data *vedata, Object *ob);
 void OVERLAY_image_cache_finish(OVERLAY_Data *vedata);
 void OVERLAY_image_draw(OVERLAY_Data *vedata);
+void OVERLAY_image_in_front_draw(OVERLAY_Data *vedata);
 
 void OVERLAY_metaball_cache_init(OVERLAY_Data *vedata);
 void OVERLAY_edit_metaball_cache_populate(OVERLAY_Data *vedata, Object *ob);
@@ -472,6 +478,7 @@ void OVERLAY_wireframe_cache_populate(OVERLAY_Data *vedata,
                                       OVERLAY_DupliData *dupli,
                                       bool init_dupli);
 void OVERLAY_wireframe_draw(OVERLAY_Data *vedata);
+void OVERLAY_wireframe_in_front_draw(OVERLAY_Data *vedata);
 
 GPUShader *OVERLAY_shader_armature_degrees_of_freedom(void);
 GPUShader *OVERLAY_shader_armature_envelope(bool use_outline);
diff --git a/source/blender/draw/engines/overlay/overlay_wireframe.c b/source/blender/draw/engines/overlay/overlay_wireframe.c
index 38cf1cb6682..35d83f7dea3 100644
--- a/source/blender/draw/engines/overlay/overlay_wireframe.c
+++ b/source/blender/draw/engines/overlay/overlay_wireframe.c
@@ -111,8 +111,7 @@ void OVERLAY_wireframe_cache_populate(OVERLAY_Data *vedata,
                                       bool init_dupli)
 {
   OVERLAY_Data *data = vedata;
-  OVERLAY_StorageList *stl = data->stl;
-  OVERLAY_PrivateData *pd = stl->pd;
+  OVERLAY_PrivateData *pd = data->stl->pd;
   const DRWContextState *draw_ctx = DRW_context_state_get();
   const bool all_wires = (ob->dtx & OB_DRAW_ALL_EDGES) != 0;
   const bool is_xray = (ob->dtx & OB_DRAWXRAY) != 0;
@@ -203,11 +202,21 @@ void OVERLAY_wireframe_cache_populate(OVERLAY_Data *vedata,
 void OVERLAY_wireframe_draw(OVERLAY_Data *data)
 {
   OVERLAY_PassList *psl = data->psl;
-  OVERLAY_StorageList *stl = data->stl;
+  OVERLAY_PrivateData *pd = data->stl->pd;
 
-  DRW_view_set_active(stl->pd->view_wires);
+  DRW_view_set_active(pd->view_wires);
   DRW_draw_pass(psl->wireframe_ps);
 
+  DRW_view_set_active(NULL);
+}
+
+void OVERLAY_wireframe_in_front_draw(OVERLAY_Data *data)
+{
+  OVERLAY_PassList *psl = data->psl;
+  OVERLAY_PrivateData *pd = data->stl->pd;
+
+  DRW_view_set_active(pd->view_wires);
+
   /* First lower the depth where there is no xray object (and set the stencil to xray value). */
   DRW_draw_pass(psl->wireframe_xray_ps);



More information about the Bf-blender-cvs mailing list