[Bf-blender-cvs] [f09dbc54a5a] temp-sculpt-colors: Merge branch 'master' into temp-sculpt-colors

Joseph Eagar noreply at git.blender.org
Sat Feb 12 16:52:00 CET 2022


Commit: f09dbc54a5a59b189c797193dc29abf2caee0c29
Author: Joseph Eagar
Date:   Sat Feb 12 02:32:00 2022 -0800
Branches: temp-sculpt-colors
https://developer.blender.org/rBf09dbc54a5a59b189c797193dc29abf2caee0c29

Merge branch 'master' into temp-sculpt-colors

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



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

diff --cc source/blender/blenkernel/intern/attribute.c
index 44e24d53e7f,ba33a9fee97..07c64fedf90
--- a/source/blender/blenkernel/intern/attribute.c
+++ b/source/blender/blenkernel/intern/attribute.c
@@@ -36,12 -19,11 +19,12 @@@
  #include "DNA_pointcloud_types.h"
  
  #include "BLI_string_utf8.h"
 +#include "BLI_string_utils.h"
  
  #include "BKE_attribute.h"
+ #include "BKE_curves.h"
  #include "BKE_customdata.h"
  #include "BKE_editmesh.h"
- #include "BKE_hair.h"
  #include "BKE_pointcloud.h"
  #include "BKE_report.h"
  
diff --cc source/blender/draw/intern/draw_cache_impl_mesh.c
index 7ed18a8968d,2d78a3f2b6f..ab04b57bf01
--- a/source/blender/draw/intern/draw_cache_impl_mesh.c
+++ b/source/blender/draw/intern/draw_cache_impl_mesh.c
@@@ -693,80 -639,13 +678,81 @@@ static DRW_MeshCDMask mesh_cd_calc_used
              cd_used.orco = 1;
              break;
            }
 +
 +          /* note that attr->type will always be CD_PROP_COLOR even for
 +             CD_MLOOPCOL layers, see node_shader_gpu_vertex_color in
 +             node_shader_vertex_color.cc
 +           */
 +          case CD_MLOOPCOL:
 +          case CD_PROP_COLOR: {
 +            const AttributeRef *render = &me->attr_color_render;
 +
 +            if (domain == ATTR_DOMAIN_NUM) {
 +              domain = render->domain;
 +            }
 +
 +            if (layer == -1 && name[0] != '\0') {
 +              layer = CustomData_get_named_layer_index(cd_ldata, type, name);
 +              domain = layer != -1 ? ATTR_DOMAIN_CORNER : domain;
 +
 +              if (layer == -1) {
 +                layer = CustomData_get_named_layer_index(cd_vdata, type, name);
 +                domain = layer != -1 ? ATTR_DOMAIN_POINT : domain;
 +              }
 +
 +              if (layer == -1) {
 +                layer = CustomData_get_named_layer_index(cd_ldata, CD_MLOOPCOL, name);
 +
 +                if (layer != -1) {
 +                  domain = ATTR_DOMAIN_CORNER;
 +                  type = CD_MLOOPCOL;
 +                }
 +              }
 +
 +              if (layer == -1) {
 +                layer = CustomData_get_named_layer_index(cd_vdata, CD_MLOOPCOL, name);
 +
 +                if (layer != -1) {
 +                  domain = ATTR_DOMAIN_POINT;
 +                  type = CD_MLOOPCOL;
 +                }
 +              }
 +
 +              if (layer == -1) {
 +                break;
 +              }
 +
 +              AttributeRef ref;
 +              const CustomData *cdata = domain == ATTR_DOMAIN_POINT ? cd_vdata : cd_ldata;
 +              CustomDataLayer *clayer = cdata->layers + layer;
 +
 +              ref.domain = domain;
 +              BLI_strncpy(ref.name, clayer->name, sizeof(ref.name));
 +              ref.type = clayer->type;
 +
 +              int layer_i = mesh_cd_get_vcol_i(cd_vdata, cd_ldata, &ref);
 +
 +              if (layer_i >= 0) {
 +                cd_used.vcol |= 1UL << (uint)layer_i;
 +              }
 +            }
 +            else {
 +              int layer_i = mesh_cd_get_vcol_i(cd_vdata, cd_ldata, render);
 +
 +              if (layer_i >= 0) {
 +                cd_used.vcol |= 1UL << (uint)layer_i;
 +              }
 +            }
 +
 +            break;
 +          }
 +
 +          case CD_PROP_FLOAT3:
            case CD_PROP_BOOL:
+           case CD_PROP_INT8:
            case CD_PROP_INT32:
            case CD_PROP_FLOAT:
 -          case CD_PROP_FLOAT2:
 -          case CD_PROP_FLOAT3:
 -          case CD_PROP_COLOR: {
 +          case CD_PROP_FLOAT2: {
              if (layer != -1 && domain != ATTR_DOMAIN_NUM) {
                drw_mesh_attributes_add_request(attributes, type, layer, domain);
              }
diff --cc source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_vcol.cc
index 990734f481e,138ff9fd1ff..27bd680f9e9
--- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_vcol.cc
+++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_vcol.cc
@@@ -120,67 -25,32 +104,40 @@@ static void init_vcol_format(GPUVertFor
  {
    GPU_vertformat_deinterleave(format);
  
 +  /* note that there are two vcol types that work across point and corner domains */
 +
    const uint32_t vcol_layers = cache->cd_used.vcol;
  
 -  for (int i = 0; i < MAX_MCOL; i++) {
 -    if (vcol_layers & (1 << i)) {
 -      char attr_name[32], attr_safe_name[GPU_MAX_SAFE_ATTR_NAME];
 -      const char *layer_name = CustomData_get_layer_name(cd_ldata, CD_MLOOPCOL, i);
 -      GPU_vertformat_safe_attr_name(layer_name, attr_safe_name, GPU_MAX_SAFE_ATTR_NAME);
 +  blender::Vector<AttributeRef> refs = get_vcol_refs(cd_vdata, cd_ldata, vcol_layers);
  
 -      BLI_snprintf(attr_name, sizeof(attr_name), "c%s", attr_safe_name);
 -      GPU_vertformat_attr_add(format, attr_name, GPU_COMP_U16, 4, GPU_FETCH_INT_TO_FLOAT_UNIT);
 +  for (const AttributeRef &ref : refs) {
 +    char attr_name[32], attr_safe_name[GPU_MAX_SAFE_ATTR_NAME];
  
 -      if (i == CustomData_get_render_layer(cd_ldata, CD_MLOOPCOL)) {
 -        GPU_vertformat_alias_add(format, "c");
 -      }
 -      if (i == CustomData_get_active_layer(cd_ldata, CD_MLOOPCOL)) {
 -        GPU_vertformat_alias_add(format, "ac");
 -      }
 +    GPU_vertformat_safe_attr_name(ref.name, attr_safe_name, GPU_MAX_SAFE_ATTR_NAME);
  
 -      /* Gather number of auto layers. */
 -      /* We only do `vcols` that are not overridden by `uvs`. */
 -      if (CustomData_get_named_layer_index(cd_ldata, CD_MLOOPUV, layer_name) == -1) {
 -        BLI_snprintf(attr_name, sizeof(attr_name), "a%s", attr_safe_name);
 -        GPU_vertformat_alias_add(format, attr_name);
 -      }
 +    BLI_snprintf(attr_name, sizeof(attr_name), "c%s", attr_safe_name);
 +
 +    GPU_vertformat_attr_add(format, attr_name, GPU_COMP_U16, 4, GPU_FETCH_INT_TO_FLOAT_UNIT);
 +
 +    if (BKE_id_attribute_ref_equals(attr_active, &ref)) {
 +      GPU_vertformat_alias_add(format, "ac");
 +    }
 +
 +    if (BKE_id_attribute_ref_equals(attr_render, &ref)) {
 +      GPU_vertformat_alias_add(format, "c");
 +    }
 +
 +    /* Gather number of auto layers. */
 +    /* We only do `vcols` that are not overridden by `uvs`. */
 +
 +    bool bad = ref.domain == ATTR_DOMAIN_CORNER;
 +    bad = bad && CustomData_get_named_layer_index(cd_ldata, CD_MLOOPUV, ref.name) != -1;
 +
 +    if (!bad) {
 +      BLI_snprintf(attr_name, sizeof(attr_name), "a%s", attr_safe_name);
 +      GPU_vertformat_alias_add(format, attr_name);
      }
    }
- 
- #if 0
-   for (int i = 0; i < MAX_MCOL; i++) {
-     if (vcol_layers & (1 << i)) {
-       char attr_name[32], attr_safe_name[GPU_MAX_SAFE_ATTR_NAME];
-       const char *layer_name = CustomData_get_layer_name(cd_ldata, CD_MLOOPCOL, i);
-       GPU_vertformat_safe_attr_name(layer_name, attr_safe_name, GPU_MAX_SAFE_ATTR_NAME);
- 
-       BLI_snprintf(attr_name, sizeof(attr_name), "c%s", attr_safe_name);
-       GPU_vertformat_attr_add(format, attr_name, GPU_COMP_U16, 4, GPU_FETCH_INT_TO_FLOAT_UNIT);
- 
-       if (i == CustomData_get_render_layer(cd_ldata, CD_MLOOPCOL)) {
-         GPU_vertformat_alias_add(format, "c");
-       }
-       if (i == CustomData_get_active_layer(cd_ldata, CD_MLOOPCOL)) {
-         GPU_vertformat_alias_add(format, "ac");
-       }
- 
-       /* Gather number of auto layers. */
-       /* We only do `vcols` that are not overridden by `uvs`. */
-       if (CustomData_get_named_layer_index(cd_ldata, CD_MLOOPUV, layer_name) == -1) {
-         BLI_snprintf(attr_name, sizeof(attr_name), "a%s", attr_safe_name);
-         GPU_vertformat_alias_add(format, attr_name);
-       }
-     }
-   }
- #endif
  }
  
  /* Vertex format for vertex colors, only used during the coarse data upload for the subdivision
diff --cc source/blender/editors/sculpt_paint/sculpt_expand.c
index 6acbe08c7f5,2ef35d540b9..46940b619e6
--- a/source/blender/editors/sculpt_paint/sculpt_expand.c
+++ b/source/blender/editors/sculpt_paint/sculpt_expand.c
@@@ -1330,11 -1314,10 +1314,11 @@@ static void sculpt_expand_colors_update
        continue;
      }
  
 -    copy_v4_v4(vd.col, final_color);
 +    SCULPT_vertex_color_set(ss, vd.index, final_color);
 +
      any_changed = true;
      if (vd.mvert) {
-       vd.mvert->flag |= ME_VERT_PBVH_UPDATE;
+       BKE_pbvh_vert_mark_update(ss->pbvh, vd.index);
      }
    }
    BKE_pbvh_vertex_iter_end;
diff --cc source/blender/editors/sculpt_paint/sculpt_filter_color.c
index 1eed0c88836,93e2d721962..f21caa3fb4a
--- a/source/blender/editors/sculpt_paint/sculpt_filter_color.c
+++ b/source/blender/editors/sculpt_paint/sculpt_filter_color.c
@@@ -206,13 -186,10 +190,13 @@@ static void color_filter_task_cb(void *
        }
      }
  
 -    copy_v3_v3(vd.col, final_color);
 +    float col[4];
 +    SCULPT_vertex_color_get(ss, vd.index, col);
 +
 +    copy_v3_v3(col, final_color);
  
      if (vd.mvert) {
-       vd.mvert->flag |= ME_VERT_PBVH_UPDATE;
+       BKE_pbvh_vert_mark_update(ss->pbvh, vd.index);
      }
    }
    BKE_pbvh_vertex_iter_end;
diff --cc source/blender/editors/sculpt_paint/sculpt_paint_color.c
index cee53c130c8,5d248cb520a..16d168ede08
--- a/source/blender/editors/sculpt_paint/sculpt_paint_color.c
+++ b/source/blender/editors/sculpt_paint/sculpt_paint_color.c
@@@ -101,14 -85,10 +85,14 @@@ static void do_color_smooth_task_cb_exe
  
      float smooth_color[4];
      SCULPT_neighbor_color_average(ss, smooth_color, vd.index);
 -    blend_color_interpolate_float(vd.col, vd.col, smooth_color, fade);
 +    float col[4];
 +
 +    SCULPT_vertex_color_get(ss, vd.index, col);
 +    blend_color_interpolate_float(col, col, smooth_color, fade);
 +    SCULPT_vertex_color_set(ss, vd.index, col);
  
      if (vd.mvert) {
-       vd.mvert->flag |= ME_VERT_PBVH_UPDATE;
+       BKE_pbvh_vert_mark_update(ss->pbvh, vd.index);
      }
    }
    BKE_pbvh_vertex_iter_end;
@@@ -197,14 -177,12 +181,14 @@@ static void do_paint_brush_task_cb_ex(v
      /* Final mix over the original color using brush alpha. */
      mul_v4_v4fl(buffer_color, color_buffer->color[vd.i], brush->alpha);
  
 -    IMB_blend_color_float(vd.col, orig_data.col, buffer_color, brush->blend);
 -
 -    CLAMP4(vd.col, 0.0f, 1.0f);
 +    float col[4];
 +    SCULPT_vertex_color_get(ss, vd.index, col);
 +    IMB_blend_color_float(col, orig_data.col, b

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list