[Bf-blender-cvs] [e06882633aa] tmp-overlay-engine: Overlay Engine: Paint Modes

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


Commit: e06882633aa13cf5c510dff991ea2532abc81077
Author: Clément Foucault
Date:   Sun Nov 17 02:27:39 2019 +0100
Branches: tmp-overlay-engine
https://developer.blender.org/rBe06882633aa13cf5c510dff991ea2532abc81077

Overlay Engine: Paint Modes

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

M	source/blender/draw/CMakeLists.txt
M	source/blender/draw/engines/overlay/overlay_edit_mesh.c
M	source/blender/draw/engines/overlay/overlay_engine.c
A	source/blender/draw/engines/overlay/overlay_paint.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/paint_face_vert.glsl
A	source/blender/draw/engines/overlay/shaders/paint_point_vert.glsl
A	source/blender/draw/engines/overlay/shaders/paint_texture_frag.glsl
A	source/blender/draw/engines/overlay/shaders/paint_texture_vert.glsl
A	source/blender/draw/engines/overlay/shaders/paint_vertcol_frag.glsl
A	source/blender/draw/engines/overlay/shaders/paint_vertcol_vert.glsl
M	source/blender/draw/engines/overlay/shaders/paint_weight_frag.glsl
M	source/blender/draw/engines/overlay/shaders/paint_weight_vert.glsl
A	source/blender/draw/engines/overlay/shaders/paint_wire_vert.glsl

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

diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 13909c2a665..ea75c486a86 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -147,6 +147,7 @@ set(SRC
   engines/overlay/overlay_metaball.c
   engines/overlay/overlay_motion_path.c
   engines/overlay/overlay_outline.c
+  engines/overlay/overlay_paint.c
   engines/overlay/overlay_shader.c
   engines/overlay/overlay_wireframe.c
 
@@ -325,16 +326,10 @@ data_to_c_simple(modes/shaders/object_particle_prim_vert.glsl SRC)
 data_to_c_simple(modes/shaders/object_particle_dot_vert.glsl SRC)
 data_to_c_simple(modes/shaders/object_particle_dot_frag.glsl SRC)
 data_to_c_simple(modes/shaders/object_loose_points_frag.glsl SRC)
-data_to_c_simple(modes/shaders/paint_texture_frag.glsl SRC)
-data_to_c_simple(modes/shaders/paint_texture_vert.glsl SRC)
 data_to_c_simple(modes/shaders/paint_vertex_frag.glsl SRC)
 data_to_c_simple(modes/shaders/paint_vertex_vert.glsl SRC)
-data_to_c_simple(modes/shaders/paint_weight_frag.glsl SRC)
-data_to_c_simple(modes/shaders/paint_weight_vert.glsl SRC)
 data_to_c_simple(modes/shaders/paint_face_selection_vert.glsl SRC)
-data_to_c_simple(modes/shaders/paint_face_vert.glsl SRC)
 data_to_c_simple(modes/shaders/paint_wire_frag.glsl SRC)
-data_to_c_simple(modes/shaders/paint_wire_vert.glsl SRC)
 data_to_c_simple(modes/shaders/paint_vert_frag.glsl SRC)
 data_to_c_simple(modes/shaders/particle_strand_frag.glsl SRC)
 data_to_c_simple(modes/shaders/particle_strand_vert.glsl SRC)
@@ -430,8 +425,15 @@ data_to_c_simple(engines/overlay/shaders/outline_prepass_geom.glsl SRC)
 data_to_c_simple(engines/overlay/shaders/outline_prepass_vert.glsl SRC)
 data_to_c_simple(engines/overlay/shaders/outline_lightprobe_grid_vert.glsl SRC)
 data_to_c_simple(engines/overlay/shaders/outline_resolve_frag.glsl SRC)
+data_to_c_simple(engines/overlay/shaders/paint_face_vert.glsl SRC)
+data_to_c_simple(engines/overlay/shaders/paint_point_vert.glsl SRC)
+data_to_c_simple(engines/overlay/shaders/paint_texture_frag.glsl SRC)
+data_to_c_simple(engines/overlay/shaders/paint_texture_vert.glsl SRC)
+data_to_c_simple(engines/overlay/shaders/paint_vertcol_frag.glsl SRC)
+data_to_c_simple(engines/overlay/shaders/paint_vertcol_vert.glsl SRC)
 data_to_c_simple(engines/overlay/shaders/paint_weight_frag.glsl SRC)
 data_to_c_simple(engines/overlay/shaders/paint_weight_vert.glsl SRC)
+data_to_c_simple(engines/overlay/shaders/paint_wire_vert.glsl SRC)
 data_to_c_simple(engines/overlay/shaders/volume_velocity_vert.glsl SRC)
 data_to_c_simple(engines/overlay/shaders/wireframe_vert.glsl SRC)
 data_to_c_simple(engines/overlay/shaders/wireframe_geom.glsl SRC)
diff --git a/source/blender/draw/engines/overlay/overlay_edit_mesh.c b/source/blender/draw/engines/overlay/overlay_edit_mesh.c
index 6390ac42045..2d41993d77f 100644
--- a/source/blender/draw/engines/overlay/overlay_edit_mesh.c
+++ b/source/blender/draw/engines/overlay/overlay_edit_mesh.c
@@ -136,6 +136,7 @@ void OVERLAY_edit_mesh_cache_init(OVERLAY_Data *vedata)
     sh = OVERLAY_shader_paint_weight();
     pd->edit_mesh_weight_grp = grp = DRW_shgroup_create(sh, psl->edit_mesh_weight_ps);
     DRW_shgroup_uniform_float_copy(grp, "opacity", 1.0);
+    DRW_shgroup_uniform_bool_copy(grp, "drawContours", false);
     DRW_shgroup_uniform_texture(grp, "colorramp", G_draw.weight_ramp);
     DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
   }
diff --git a/source/blender/draw/engines/overlay/overlay_engine.c b/source/blender/draw/engines/overlay/overlay_engine.c
index 61a08f9795c..abe0626eb5d 100644
--- a/source/blender/draw/engines/overlay/overlay_engine.c
+++ b/source/blender/draw/engines/overlay/overlay_engine.c
@@ -56,25 +56,19 @@ static void OVERLAY_engine_init(void *vedata)
       break;
     case CTX_MODE_EDIT_SURFACE:
     case CTX_MODE_EDIT_CURVE:
-      /* Nothing to do. */
-      break;
     case CTX_MODE_EDIT_TEXT:
-      /* Nothing to do. */
-      break;
     case CTX_MODE_EDIT_ARMATURE:
-      break;
     case CTX_MODE_EDIT_METABALL:
-      break;
     case CTX_MODE_EDIT_LATTICE:
+    case CTX_MODE_PAINT_VERTEX:
+    case CTX_MODE_PAINT_TEXTURE:
+    case CTX_MODE_PAINT_WEIGHT:
+    case CTX_MODE_POSE:
+      /* Nothing to do. */
       break;
     case CTX_MODE_PARTICLE:
       break;
-    case CTX_MODE_POSE:
-    case CTX_MODE_PAINT_WEIGHT:
-      break;
     case CTX_MODE_SCULPT:
-    case CTX_MODE_PAINT_VERTEX:
-    case CTX_MODE_PAINT_TEXTURE:
     case CTX_MODE_OBJECT:
     case CTX_MODE_PAINT_GPENCIL:
     case CTX_MODE_EDIT_GPENCIL:
@@ -140,10 +134,11 @@ static void OVERLAY_cache_init(void *vedata)
       break;
     case CTX_MODE_POSE:
     case CTX_MODE_PAINT_WEIGHT:
-      break;
-    case CTX_MODE_SCULPT:
     case CTX_MODE_PAINT_VERTEX:
     case CTX_MODE_PAINT_TEXTURE:
+      OVERLAY_paint_cache_init(vedata);
+      break;
+    case CTX_MODE_SCULPT:
     case CTX_MODE_OBJECT:
     case CTX_MODE_PAINT_GPENCIL:
     case CTX_MODE_EDIT_GPENCIL:
@@ -259,16 +254,23 @@ static void OVERLAY_cache_populate(void *vedata, Object *ob)
     OVERLAY_motion_path_cache_populate(vedata, ob);
   }
 
-  // if (is_geom) {
-  //   if (paint_vertex_mode) {
-  //     OVERLAY_paint_vertex_cache_populate();
-  //   }
-  //   if (paint_texture_mode) {
-  //     OVERLAY_paint_texture_cache_populate();
-  //   }
-  //   if (scuplt_mode) {
-  //     OVERLAY_sculpt_cache_populate();
-  //   }
+  if (in_paint_mode) {
+    switch (draw_ctx->object_mode) {
+      case OB_MODE_VERTEX_PAINT:
+        OVERLAY_paint_vertex_cache_populate(vedata, ob);
+        break;
+      case OB_MODE_WEIGHT_PAINT:
+        OVERLAY_paint_weight_cache_populate(vedata, ob);
+        break;
+      case OB_MODE_TEXTURE_PAINT:
+        OVERLAY_paint_texture_cache_populate(vedata, ob);
+        break;
+      default:
+        break;
+    }
+  }
+  // if (scuplt_mode) {
+  //   OVERLAY_sculpt_cache_populate();
   // }
 
   switch (ob->type) {
@@ -355,6 +357,12 @@ static void OVERLAY_draw_scene(void *vedata)
     case CTX_MODE_EDIT_LATTICE:
       OVERLAY_edit_lattice_draw(vedata);
       break;
+    case CTX_MODE_POSE:
+    case CTX_MODE_PAINT_WEIGHT:
+    case CTX_MODE_PAINT_VERTEX:
+    case CTX_MODE_PAINT_TEXTURE:
+      OVERLAY_paint_draw(vedata);
+      break;
     default:
       break;
   }
diff --git a/source/blender/draw/engines/overlay/overlay_paint.c b/source/blender/draw/engines/overlay/overlay_paint.c
new file mode 100644
index 00000000000..dae371728a9
--- /dev/null
+++ b/source/blender/draw/engines/overlay/overlay_paint.c
@@ -0,0 +1,209 @@
+/*
+ * 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 "DNA_mesh_types.h"
+
+#include "DEG_depsgraph_query.h"
+
+#include "overlay_private.h"
+
+void OVERLAY_paint_cache_init(OVERLAY_Data *vedata)
+{
+  const DRWContextState *draw_ctx = DRW_context_state_get();
+  OVERLAY_PassList *psl = vedata->psl;
+  OVERLAY_PrivateData *pd = vedata->stl->pd;
+  struct GPUShader *sh;
+  DRWShadingGroup *grp;
+  DRWState state;
+
+  const bool use_alpha_blending = (draw_ctx->v3d->shading.type == OB_WIRE);
+  const bool draw_contours = (pd->overlay.wpaint_flag & V3D_OVERLAY_WPAINT_CONTOURS) != 0;
+  float opacity = 0.0f;
+
+  switch (pd->ctx_mode) {
+    case CTX_MODE_PAINT_WEIGHT: {
+      opacity = pd->overlay.weight_paint_mode_opacity;
+      if (opacity > 0.0f) {
+        state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL;
+        state |= use_alpha_blending ? DRW_STATE_BLEND_ALPHA : DRW_STATE_BLEND_MUL;
+        DRW_PASS_CREATE(psl->paint_color_ps, state | pd->clipping_state);
+
+        sh = OVERLAY_shader_paint_weight();
+        pd->paint_surf_grp = grp = DRW_shgroup_create(sh, psl->paint_color_ps);
+        DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
+        DRW_shgroup_uniform_bool_copy(grp, "drawContours", draw_contours);
+        DRW_shgroup_uniform_bool_copy(grp, "useAlphaBlend", use_alpha_blending);
+        DRW_shgroup_uniform_float_copy(grp, "opacity", opacity);
+        DRW_shgroup_uniform_texture(grp, "colorramp", G_draw.weight_ramp);
+      }
+      break;
+    }
+    case CTX_MODE_PAINT_VERTEX: {
+      opacity = pd->overlay.vertex_paint_mode_opacity;
+      if (opacity > 0.0f) {
+        state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL;
+        state |= use_alpha_blending ? DRW_STATE_BLEND_ALPHA : DRW_STATE_BLEND_MUL;
+        DRW_PASS_CREATE(psl->paint_color_ps, state | pd->clipping_state);
+
+        sh = OVERLAY_shader_paint_vertcol();
+        pd->paint_surf_grp = grp = DRW_shgroup_create(sh, psl->paint_color_ps);
+        DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
+        DRW_shgroup_uniform_bool_copy(grp, "useAlphaBlend", use_alpha_blending);
+        DRW_shgroup_uniform_float_copy(grp, "opacity", opacity);
+      }
+      break;
+    }
+    case CTX_MODE_PAINT_TEXTURE: {
+      const ImagePaintSettings *imapaint = &draw_ctx->scene->toolsettings->imapaint;
+      const bool mask_enabled = imapaint->flag & IMAGEPAINT_PROJECT_LAYER_STENCIL &&
+                                imapaint->stencil != NULL;
+
+      opacity = mask_enabled ? pd->overlay.texture_paint_mode_opacity : 0.0f;
+      if (opacity > 0.0f) {
+        state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL | DRW_STATE_BLEND_ALPHA;
+        DRW_PASS_CREATE(psl->paint_color_ps, state | pd->clipping_state);
+
+        GPUTexture *tex = GPU_texture_from

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list