[Bf-blender-cvs] [89b3a9c1479] tmp-overlay-engine: Overlay Engine: Lattice

Clément Foucault noreply at git.blender.org
Mon Nov 18 20:15:25 CET 2019


Commit: 89b3a9c1479c920c1b4f92da44481bd14d31f606
Author: Clément Foucault
Date:   Sat Nov 16 21:44:36 2019 +0100
Branches: tmp-overlay-engine
https://developer.blender.org/rB89b3a9c1479c920c1b4f92da44481bd14d31f606

Overlay Engine: Lattice

Cleanup: Port lattice wireframe coloring to shader

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

M	source/blender/draw/CMakeLists.txt
M	source/blender/draw/engines/overlay/overlay_engine.c
M	source/blender/draw/engines/overlay/overlay_extra.c
A	source/blender/draw/engines/overlay/overlay_lattice.c
M	source/blender/draw/engines/overlay/overlay_private.h
M	source/blender/draw/engines/overlay/overlay_shader.c
A	source/blender/draw/engines/overlay/shaders/edit_lattice_point_vert.glsl
A	source/blender/draw/engines/overlay/shaders/edit_lattice_wire_vert.glsl
M	source/blender/draw/engines/overlay/shaders/extra_wire_vert.glsl
M	source/blender/draw/intern/draw_cache_impl_lattice.c

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

diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 180588c4c06..13909c2a665 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -143,6 +143,7 @@ set(SRC
   engines/overlay/overlay_facing.c
   engines/overlay/overlay_grid.c
   engines/overlay/overlay_image.c
+  engines/overlay/overlay_lattice.c
   engines/overlay/overlay_metaball.c
   engines/overlay/overlay_motion_path.c
   engines/overlay/overlay_outline.c
@@ -394,6 +395,8 @@ data_to_c_simple(engines/overlay/shaders/edit_curve_handle_geom.glsl SRC)
 data_to_c_simple(engines/overlay/shaders/edit_curve_handle_vert.glsl SRC)
 data_to_c_simple(engines/overlay/shaders/edit_curve_point_vert.glsl SRC)
 data_to_c_simple(engines/overlay/shaders/edit_curve_wire_vert.glsl SRC)
+data_to_c_simple(engines/overlay/shaders/edit_lattice_point_vert.glsl SRC)
+data_to_c_simple(engines/overlay/shaders/edit_lattice_wire_vert.glsl SRC)
 data_to_c_simple(engines/overlay/shaders/edit_mesh_common_lib.glsl SRC)
 data_to_c_simple(engines/overlay/shaders/edit_mesh_facefill_frag.glsl SRC)
 data_to_c_simple(engines/overlay/shaders/edit_mesh_facefill_vert.glsl SRC)
diff --git a/source/blender/draw/engines/overlay/overlay_engine.c b/source/blender/draw/engines/overlay/overlay_engine.c
index 83ff341593a..61a08f9795c 100644
--- a/source/blender/draw/engines/overlay/overlay_engine.c
+++ b/source/blender/draw/engines/overlay/overlay_engine.c
@@ -134,6 +134,7 @@ static void OVERLAY_cache_init(void *vedata)
     case CTX_MODE_EDIT_METABALL:
       break;
     case CTX_MODE_EDIT_LATTICE:
+      OVERLAY_edit_lattice_cache_init(vedata);
       break;
     case CTX_MODE_PARTICLE:
       break;
@@ -239,6 +240,7 @@ static void OVERLAY_cache_populate(void *vedata, Object *ob)
         OVERLAY_edit_surf_cache_populate(vedata, ob);
         break;
       case OB_LATTICE:
+        OVERLAY_edit_lattice_cache_populate(vedata, ob);
         break;
       case OB_MBALL:
         OVERLAY_edit_metaball_cache_populate(vedata, ob);
@@ -305,6 +307,9 @@ static void OVERLAY_cache_populate(void *vedata, Object *ob)
       case OB_LIGHTPROBE:
         OVERLAY_lightprobe_cache_populate(vedata, ob);
         break;
+      case OB_LATTICE:
+        OVERLAY_lattice_cache_populate(vedata, ob);
+        break;
     }
   }
 
@@ -347,6 +352,9 @@ static void OVERLAY_draw_scene(void *vedata)
     case CTX_MODE_EDIT_TEXT:
       OVERLAY_edit_text_draw(vedata);
       break;
+    case CTX_MODE_EDIT_LATTICE:
+      OVERLAY_edit_lattice_draw(vedata);
+      break;
     default:
       break;
   }
diff --git a/source/blender/draw/engines/overlay/overlay_extra.c b/source/blender/draw/engines/overlay/overlay_extra.c
index 0ce7e3f8898..d73c22f28fe 100644
--- a/source/blender/draw/engines/overlay/overlay_extra.c
+++ b/source/blender/draw/engines/overlay/overlay_extra.c
@@ -189,7 +189,7 @@ void OVERLAY_extra_cache_init(OVERLAY_Data *vedata)
       cb->groundline = BUF_INSTANCE(grp, format, DRW_cache_groundline_get());
     }
     {
-      sh = OVERLAY_shader_extra_wire();
+      sh = OVERLAY_shader_extra_wire(false);
 
       grp = DRW_shgroup_create(sh, extra_ps);
       DRW_shgroup_uniform_block_persistent(grp, "globalsBlock", G_draw.block_ubo);
@@ -197,6 +197,12 @@ void OVERLAY_extra_cache_init(OVERLAY_Data *vedata)
       cb->extra_dashed_lines = BUF_LINE(grp, formats->wire_dashed_extra);
       cb->extra_lines = BUF_LINE(grp, formats->wire_extra);
     }
+    {
+      sh = OVERLAY_shader_extra_wire(true);
+
+      cb->extra_wire = grp = DRW_shgroup_create(sh, extra_ps);
+      DRW_shgroup_uniform_block_persistent(grp, "globalsBlock", G_draw.block_ubo);
+    }
     {
       format = formats->pos;
       sh = OVERLAY_shader_extra_point();
@@ -252,6 +258,20 @@ OVERLAY_ExtraCallBuffers *OVERLAY_extra_call_buffer_get(OVERLAY_Data *vedata, Ob
   return &pd->extra_call_buffers[do_in_front];
 }
 
+void OVERLAY_extra_wire(OVERLAY_ExtraCallBuffers *cb,
+                        struct GPUBatch *geom,
+                        const float mat[4][4],
+                        const float color[4])
+{
+  float draw_mat[4][4];
+  copy_m4_m4(draw_mat, mat);
+  draw_mat[0][3] = color[0];
+  draw_mat[1][3] = color[1];
+  draw_mat[2][3] = color[2];
+  draw_mat[3][3] = color[3];
+  DRW_shgroup_call_obmat(cb->extra_wire, geom, draw_mat);
+}
+
 /* -------------------------------------------------------------------- */
 /** \name Empties
  * \{ */
diff --git a/source/blender/draw/engines/overlay/overlay_lattice.c b/source/blender/draw/engines/overlay/overlay_lattice.c
new file mode 100644
index 00000000000..4e4081ee499
--- /dev/null
+++ b/source/blender/draw/engines/overlay/overlay_lattice.c
@@ -0,0 +1,78 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Copyright 2019, Blender Foundation.
+ */
+
+/** \file
+ * \ingroup draw_engine
+ */
+
+#include "DRW_render.h"
+
+#include "overlay_private.h"
+
+void OVERLAY_edit_lattice_cache_init(OVERLAY_Data *vedata)
+{
+  OVERLAY_PassList *psl = vedata->psl;
+  OVERLAY_PrivateData *pd = vedata->stl->pd;
+  struct GPUShader *sh;
+  DRWShadingGroup *grp;
+
+  {
+    DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS_EQUAL;
+    DRW_PASS_CREATE(psl->edit_lattice_ps, state | pd->clipping_state);
+
+    sh = OVERLAY_shader_edit_lattice_wire();
+    pd->edit_lattice_wires_grp = grp = DRW_shgroup_create(sh, psl->edit_lattice_ps);
+    DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
+    DRW_shgroup_uniform_texture(grp, "weightTex", G_draw.weight_ramp);
+
+    sh = OVERLAY_shader_edit_lattice_point();
+    pd->edit_lattice_points_grp = grp = DRW_shgroup_create(sh, psl->edit_lattice_ps);
+    DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
+  }
+}
+
+void OVERLAY_edit_lattice_cache_populate(OVERLAY_Data *vedata, Object *ob)
+{
+  OVERLAY_PrivateData *pd = vedata->stl->pd;
+  struct GPUBatch *geom;
+
+  geom = DRW_cache_lattice_wire_get(ob, true);
+  DRW_shgroup_call(pd->edit_lattice_wires_grp, geom, ob);
+
+  geom = DRW_cache_lattice_vert_overlay_get(ob);
+  DRW_shgroup_call(pd->edit_lattice_points_grp, geom, ob);
+}
+
+void OVERLAY_lattice_cache_populate(OVERLAY_Data *vedata, Object *ob)
+{
+  OVERLAY_ExtraCallBuffers *cb = OVERLAY_extra_call_buffer_get(vedata, ob);
+  const DRWContextState *draw_ctx = DRW_context_state_get();
+
+  float *color;
+  DRW_object_wire_theme_get(ob, draw_ctx->view_layer, &color);
+
+  struct GPUBatch *geom = DRW_cache_lattice_wire_get(ob, false);
+  OVERLAY_extra_wire(cb, geom, ob->obmat, color);
+}
+
+void OVERLAY_edit_lattice_draw(OVERLAY_Data *vedata)
+{
+  OVERLAY_PassList *psl = vedata->psl;
+
+  DRW_draw_pass(psl->edit_lattice_ps);
+}
diff --git a/source/blender/draw/engines/overlay/overlay_private.h b/source/blender/draw/engines/overlay/overlay_private.h
index 7561a7cd962..bb613b4c93d 100644
--- a/source/blender/draw/engines/overlay/overlay_private.h
+++ b/source/blender/draw/engines/overlay/overlay_private.h
@@ -50,8 +50,7 @@ typedef struct OVERLAY_PassList {
   DRWPass *armature_ps[2];
   DRWPass *edit_curve_wire_ps[2];
   DRWPass *edit_curve_handle_ps;
-  DRWPass *edit_text_overlay_ps;
-  DRWPass *edit_text_wire_ps[2];
+  DRWPass *edit_lattice_ps;
   DRWPass *edit_mesh_depth_ps[2];
   DRWPass *edit_mesh_verts_ps[2];
   DRWPass *edit_mesh_edges_ps[2];
@@ -61,6 +60,8 @@ typedef struct OVERLAY_PassList {
   DRWPass *edit_mesh_mix_occlude_ps;
   DRWPass *edit_mesh_normals_ps;
   DRWPass *edit_mesh_weight_ps;
+  DRWPass *edit_text_overlay_ps;
+  DRWPass *edit_text_wire_ps[2];
   DRWPass *extra_ps[2];
   DRWPass *extra_blend_ps;
   DRWPass *extra_centers_ps;
@@ -155,6 +156,8 @@ typedef struct OVERLAY_ExtraCallBuffers {
   DRWCallBuffer *probe_grid;
 
   DRWCallBuffer *speaker;
+
+  DRWShadingGroup *extra_wire;
 } OVERLAY_ExtraCallBuffers;
 
 typedef struct OVERLAY_ArmatureCallBuffers {
@@ -187,8 +190,8 @@ typedef struct OVERLAY_PrivateData {
   DRWShadingGroup *edit_curve_wire_grp[2];
   DRWShadingGroup *edit_curve_handle_grp;
   DRWShadingGroup *edit_curve_points_grp;
-  DRWShadingGroup *edit_text_overlay_grp;
-  DRWShadingGroup *edit_text_wire_grp[2];
+  DRWShadingGroup *edit_lattice_points_grp;
+  DRWShadingGroup *edit_lattice_wires_grp;
   DRWShadingGroup *edit_mesh_depth_grp[2];
   DRWShadingGroup *edit_mesh_faces_grp[2];
   DRWShadingGroup *edit_mesh_faces_cage_grp[2];
@@ -201,6 +204,8 @@ typedef struct OVERLAY_PrivateData {
   DRWShadingGroup *edit_mesh_lnormals_grp;
   DRWShadingGroup *edit_mesh_analysis_grp;
   DRWShadingGroup *edit_mesh_weight_grp;
+  DRWShadingGroup *edit_text_overlay_grp;
+  DRWShadingGroup *edit_text_wire_grp[2];
   DRWShadingGroup *facing_grp;
   DRWShadingGroup *wires_grp;
   DRWShadingGroup *wires_xray_grp;
@@ -336,6 +341,11 @@ void OVERLAY_edit_curve_cache_populate(OVERLAY_Data *vedata, Object *ob);
 void OVERLAY_edit_surf_cache_populate(OVERLAY_Data *vedata, Object *ob);
 void OVERLAY_edit_curve_draw(OVERLAY_Data *vedata);
 
+void OVERLAY_edit_lattice_cache_init(OVERLAY_Data *vedata);
+void OVERLAY_edit_lattice_cache_populate(OVERLAY_Data *vedata, Object *ob);
+void OVERLAY_lattice_cache_populate(OVERLAY_Data *vedata, Object *ob);
+void OVERLAY_edit_lattice_draw(OVERLAY_Data *vedata);
+
 void OVERLAY_edit_text_cache_init(OVERLAY_Data *vedata);
 void OVERLAY_edit_text_cache_populate(OVERLAY_Data *vedata, Object *ob);
 void OVERLAY_edit_text_draw(OVERLAY_Data *vedata);
@@ -370,6 +380,10 @@ void OVERLAY_empty_shape(OVERLAY_ExtraCallBuffers *cb,
                      

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list