[Bf-blender-cvs] [1b33e1f9ae7] master: Overlay Engine: Cleanup & enable line AA on in front passes

Clément Foucault noreply at git.blender.org
Thu Dec 5 00:44:18 CET 2019


Commit: 1b33e1f9ae77ab5faeee96a89f7c040b026e647b
Author: Clément Foucault
Date:   Thu Dec 5 00:32:21 2019 +0100
Branches: master
https://developer.blender.org/rB1b33e1f9ae77ab5faeee96a89f7c040b026e647b

Overlay Engine: Cleanup & enable line AA on in front passes

- Remove pd->view_default, was a leftover from TAA implementation
- Sanitize active_view switches.
- Sanitize framebuffers switches.

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

M	source/blender/draw/engines/overlay/overlay_antialiasing.c
M	source/blender/draw/engines/overlay/overlay_armature.c
M	source/blender/draw/engines/overlay/overlay_edit_curve.c
M	source/blender/draw/engines/overlay/overlay_edit_mesh.c
M	source/blender/draw/engines/overlay/overlay_edit_text.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_facing.c
M	source/blender/draw/engines/overlay/overlay_grid.c
M	source/blender/draw/engines/overlay/overlay_image.c
M	source/blender/draw/engines/overlay/overlay_lattice.c
M	source/blender/draw/engines/overlay/overlay_paint.c
M	source/blender/draw/engines/overlay/overlay_particle.c
M	source/blender/draw/engines/overlay/overlay_private.h
M	source/blender/draw/engines/overlay/overlay_sculpt.c
M	source/blender/draw/engines/overlay/overlay_wireframe.c

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

diff --git a/source/blender/draw/engines/overlay/overlay_antialiasing.c b/source/blender/draw/engines/overlay/overlay_antialiasing.c
index 5b633bb0883..54bcd91441c 100644
--- a/source/blender/draw/engines/overlay/overlay_antialiasing.c
+++ b/source/blender/draw/engines/overlay/overlay_antialiasing.c
@@ -71,8 +71,6 @@ void OVERLAY_antialiasing_init(OVERLAY_Data *vedata)
   DRW_texture_ensure_2d(&txl->dummy_depth_tx, 1, 1, GPU_DEPTH_COMPONENT24, 0);
 
   if (!DRW_state_is_fbo()) {
-    /* Use default view */
-    pd->view_default = (DRWView *)DRW_view_default_get();
     pd->antialiasing.enabled = false;
     return;
   }
@@ -81,35 +79,37 @@ void OVERLAY_antialiasing_init(OVERLAY_Data *vedata)
   /* TODO Get real userpref option and remove MSAA buffer. */
   pd->antialiasing.enabled = (dtxl->multisample_color != NULL) || need_wire_expansion;
 
-  /* Use default view */
-  pd->view_default = (DRWView *)DRW_view_default_get();
+  GPUTexture *color_tex = NULL;
+  GPUTexture *line_tex = NULL;
 
   if (pd->antialiasing.enabled) {
     DRW_texture_ensure_fullscreen_2d(&txl->overlay_color_tx, GPU_RGBA8, DRW_TEX_FILTER);
     DRW_texture_ensure_fullscreen_2d(&txl->overlay_line_tx, GPU_RGBA8, 0);
 
-    GPU_framebuffer_ensure_config(
-        &fbl->overlay_color_only_fb,
-        {GPU_ATTACHMENT_NONE, GPU_ATTACHMENT_TEXTURE(txl->overlay_color_tx)});
-    GPU_framebuffer_ensure_config(
-        &fbl->overlay_default_fb,
-        {GPU_ATTACHMENT_TEXTURE(dtxl->depth), GPU_ATTACHMENT_TEXTURE(txl->overlay_color_tx)});
-    GPU_framebuffer_ensure_config(&fbl->overlay_line_fb,
-                                  {GPU_ATTACHMENT_TEXTURE(dtxl->depth),
-                                   GPU_ATTACHMENT_TEXTURE(txl->overlay_color_tx),
-                                   GPU_ATTACHMENT_TEXTURE(txl->overlay_line_tx)});
+    color_tex = txl->overlay_color_tx;
+    line_tex = txl->overlay_line_tx;
   }
   else {
     /* Just a copy of the defaults framebuffers. */
-    GPU_framebuffer_ensure_config(&fbl->overlay_color_only_fb,
-                                  {GPU_ATTACHMENT_NONE, GPU_ATTACHMENT_TEXTURE(dtxl->color)});
-    GPU_framebuffer_ensure_config(
-        &fbl->overlay_default_fb,
-        {GPU_ATTACHMENT_TEXTURE(dtxl->depth), GPU_ATTACHMENT_TEXTURE(dtxl->color)});
-    GPU_framebuffer_ensure_config(
-        &fbl->overlay_line_fb,
-        {GPU_ATTACHMENT_TEXTURE(dtxl->depth), GPU_ATTACHMENT_TEXTURE(dtxl->color)});
+    color_tex = dtxl->color;
   }
+
+  GPU_framebuffer_ensure_config(&fbl->overlay_color_only_fb,
+                                {
+                                    GPU_ATTACHMENT_NONE,
+                                    GPU_ATTACHMENT_TEXTURE(color_tex),
+                                });
+  GPU_framebuffer_ensure_config(&fbl->overlay_default_fb,
+                                {
+                                    GPU_ATTACHMENT_TEXTURE(dtxl->depth),
+                                    GPU_ATTACHMENT_TEXTURE(color_tex),
+                                });
+  GPU_framebuffer_ensure_config(&fbl->overlay_line_fb,
+                                {
+                                    GPU_ATTACHMENT_TEXTURE(dtxl->depth),
+                                    GPU_ATTACHMENT_TEXTURE(color_tex),
+                                    GPU_ATTACHMENT_TEXTURE(line_tex),
+                                });
 }
 
 void OVERLAY_antialiasing_cache_init(OVERLAY_Data *vedata)
@@ -149,11 +149,21 @@ void OVERLAY_antialiasing_cache_finish(OVERLAY_Data *vedata)
     GPU_framebuffer_ensure_config(&fbl->overlay_in_front_fb,
                                   {GPU_ATTACHMENT_TEXTURE(dtxl->depth_in_front),
                                    GPU_ATTACHMENT_TEXTURE(txl->overlay_color_tx)});
+
+    GPU_framebuffer_ensure_config(&fbl->overlay_line_in_front_fb,
+                                  {GPU_ATTACHMENT_TEXTURE(dtxl->depth_in_front),
+                                   GPU_ATTACHMENT_TEXTURE(txl->overlay_color_tx),
+                                   GPU_ATTACHMENT_TEXTURE(txl->overlay_line_tx)});
   }
   else {
     GPU_framebuffer_ensure_config(
         &fbl->overlay_in_front_fb,
         {GPU_ATTACHMENT_TEXTURE(dtxl->depth_in_front), GPU_ATTACHMENT_TEXTURE(dtxl->color)});
+
+    GPU_framebuffer_ensure_config(&fbl->overlay_line_in_front_fb,
+                                  {GPU_ATTACHMENT_TEXTURE(dtxl->depth_in_front),
+                                   GPU_ATTACHMENT_TEXTURE(dtxl->color),
+                                   GPU_ATTACHMENT_TEXTURE(txl->overlay_line_tx)});
   }
 }
 
@@ -166,8 +176,13 @@ void OVERLAY_antialiasing_start(OVERLAY_Data *vedata)
     float clear_col[4] = {0.0f, 0.0f, 0.0f, 0.0f};
     GPU_framebuffer_bind(fbl->overlay_line_fb);
     GPU_framebuffer_clear_color(fbl->overlay_line_fb, clear_col);
+  }
 
-    GPU_framebuffer_bind(fbl->overlay_default_fb);
+  /* If we are not in solid shading mode, we clear the depth. */
+  if (DRW_state_is_fbo() && pd->clear_in_front) {
+    /* TODO(fclem) This clear should be done in a global place. */
+    GPU_framebuffer_bind(fbl->overlay_in_front_fb);
+    GPU_framebuffer_clear_depth(fbl->overlay_in_front_fb, 1.0f);
   }
 }
 
diff --git a/source/blender/draw/engines/overlay/overlay_armature.c b/source/blender/draw/engines/overlay/overlay_armature.c
index 23cdfdb89ad..556cab39b30 100644
--- a/source/blender/draw/engines/overlay/overlay_armature.c
+++ b/source/blender/draw/engines/overlay/overlay_armature.c
@@ -2331,14 +2331,20 @@ void OVERLAY_armature_in_front_draw(OVERLAY_Data *vedata)
 void OVERLAY_pose_draw(OVERLAY_Data *vedata)
 {
   OVERLAY_PassList *psl = vedata->psl;
-  DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
+  OVERLAY_FramebufferList *fbl = vedata->fbl;
 
   if (psl->armature_bone_select_ps != NULL) {
+    if (DRW_state_is_fbo()) {
+      GPU_framebuffer_bind(fbl->overlay_default_fb);
+    }
+
     DRW_draw_pass(psl->armature_bone_select_ps);
 
     if (DRW_state_is_fbo()) {
-      GPU_framebuffer_clear_depth(dfbl->default_fb, 1.0f);
+      GPU_framebuffer_bind(fbl->overlay_line_in_front_fb);
+      GPU_framebuffer_clear_depth(fbl->overlay_line_in_front_fb, 1.0f);
     }
+
     /* Selection still works because we are drawing only the pose bones in this case. */
 
     DRW_draw_pass(psl->armature_ps[1]);
diff --git a/source/blender/draw/engines/overlay/overlay_edit_curve.c b/source/blender/draw/engines/overlay/overlay_edit_curve.c
index 81253347632..e4b0c1bcecb 100644
--- a/source/blender/draw/engines/overlay/overlay_edit_curve.c
+++ b/source/blender/draw/engines/overlay/overlay_edit_curve.c
@@ -119,6 +119,9 @@ void OVERLAY_edit_surf_cache_populate(OVERLAY_Data *vedata, Object *ob)
 void OVERLAY_edit_curve_draw(OVERLAY_Data *vedata)
 {
   OVERLAY_PassList *psl = vedata->psl;
+  OVERLAY_FramebufferList *fbl = vedata->fbl;
+
+  GPU_framebuffer_bind(fbl->overlay_default_fb);
 
   DRW_draw_pass(psl->edit_curve_wire_ps[0]);
   DRW_draw_pass(psl->edit_curve_wire_ps[1]);
diff --git a/source/blender/draw/engines/overlay/overlay_edit_mesh.c b/source/blender/draw/engines/overlay/overlay_edit_mesh.c
index a0ebcacec75..c8f98702e60 100644
--- a/source/blender/draw/engines/overlay/overlay_edit_mesh.c
+++ b/source/blender/draw/engines/overlay/overlay_edit_mesh.c
@@ -46,7 +46,6 @@ void OVERLAY_edit_mesh_init(OVERLAY_Data *vedata)
 
   /* Create view with depth offset */
   DRWView *default_view = (DRWView *)DRW_view_default_get();
-  /* Don't use AA view (pd->view_default) because edit mode already has anti-aliasing. */
   pd->view_edit_faces = default_view;
   pd->view_edit_faces_cage = DRW_view_create_with_zoffset(default_view, draw_ctx->rv3d, 0.5f);
   pd->view_edit_edges = DRW_view_create_with_zoffset(default_view, draw_ctx->rv3d, 1.0f);
@@ -353,8 +352,6 @@ static void overlay_edit_mesh_draw_components(OVERLAY_PassList *psl,
 
   DRW_view_set_active(pd->view_edit_verts);
   DRW_draw_pass(psl->edit_mesh_verts_ps[in_front]);
-
-  DRW_view_set_active(pd->view_default);
 }
 
 void OVERLAY_edit_mesh_draw(OVERLAY_Data *vedata)
@@ -363,6 +360,8 @@ void OVERLAY_edit_mesh_draw(OVERLAY_Data *vedata)
   OVERLAY_PrivateData *pd = vedata->stl->pd;
   OVERLAY_FramebufferList *fbl = vedata->fbl;
 
+  GPU_framebuffer_bind(fbl->overlay_default_fb);
+
   DRW_draw_pass(psl->edit_mesh_weight_ps);
   DRW_draw_pass(psl->edit_mesh_analysis_ps);
 
@@ -378,7 +377,7 @@ void OVERLAY_edit_mesh_draw(OVERLAY_Data *vedata)
     DRW_view_set_active(pd->view_edit_faces_cage);
     DRW_draw_pass(psl->edit_mesh_faces_cage_ps[NOT_IN_FRONT]);
 
-    DRW_view_set_active(pd->view_default);
+    DRW_view_set_active(NULL);
 
     GPU_framebuffer_bind(fbl->overlay_in_front_fb);
     GPU_framebuffer_clear_depth(fbl->overlay_in_front_fb, 1.0f);
@@ -389,8 +388,6 @@ void OVERLAY_edit_mesh_draw(OVERLAY_Data *vedata)
 
     DRW_view_set_active(pd->view_edit_verts);
     DRW_draw_pass(psl->edit_mesh_verts_ps[NOT_IN_FRONT]);
-
-    GPU_framebuffer_bind(fbl->overlay_default_fb);
   }
   else {
     const DRWContextState *draw_ctx = DRW_context_state_get();
diff --git a/source/blender/draw/engines/overlay/overlay_edit_text.c b/source/blender/draw/engines/overlay/overlay_edit_text.c
index d8edf34168e..b4e439b2c41 100644
--- a/source/blender/draw/engines/overlay/overlay_edit_text.c
+++ b/source/blender/draw/engines/overlay/overlay_edit_text.c
@@ -191,8 +191,10 @@ void OVERLAY_edit_text_cache_populate(OVERLAY_Data *vedata, Object *ob)
 void OVERLAY_edit_text_draw(OVERLAY_Data *vedata)
 {
   OVERLAY_PassList *psl = vedata->psl;
+  DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
 
-  DRW_view_set_active(NULL);
+  /* Text overlay need final color for color inversion. */
+  GPU_framebuffer_bind(dfbl->default_fb);
 
   DRW_draw_pass(psl->edit_text_wire_ps[0]);
   DRW_draw_pass(psl->edit_text_wire_ps[1]);
diff --git a/source/blender/draw/engines/overlay/overlay_engine.c b/source/blender/draw/engines/overlay/overlay_engine.c
index 561e146045c..5ad24246238 100644
--- a/source/blender/draw/engines/overlay/overlay_engine.c
+++ b/source/blender/draw/engines/overlay/overlay_engine.c
@@ -366,46 +366,51 @@ static void OVERLAY_draw_scene(void *vedata)
   OVERLAY_antialiasing_start(vedata);
 
   DRW_view_set_active(NU

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list