[Bf-blender-cvs] [977031c9d04] temp-sculpt-colors: temp-sculpt-colors: Make requested changes

Joseph Eagar noreply at git.blender.org
Sat Jan 15 08:10:06 CET 2022


Commit: 977031c9d045dbb9845dbbf352e99027d7cd6890
Author: Joseph Eagar
Date:   Fri Jan 14 23:09:33 2022 -0800
Branches: temp-sculpt-colors
https://developer.blender.org/rB977031c9d045dbb9845dbbf352e99027d7cd6890

temp-sculpt-colors: Make requested changes

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

M	source/blender/blenkernel/intern/paint.c
M	source/blender/blenkernel/intern/pbvh.c
M	source/blender/draw/intern/draw_cache_impl_mesh.c
M	source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_vcol.cc
M	source/blender/editors/geometry/geometry_attributes.cc
M	source/blender/editors/sculpt_paint/sculpt.c
M	source/blender/editors/sculpt_paint/sculpt_intern.h
M	source/blender/editors/sculpt_paint/sculpt_ops.c
M	source/blender/editors/sculpt_paint/sculpt_paint_color.c
M	source/blender/editors/sculpt_paint/sculpt_undo.c

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

diff --git a/source/blender/blenkernel/intern/paint.c b/source/blender/blenkernel/intern/paint.c
index 03c54dce915..96d484b7d78 100644
--- a/source/blender/blenkernel/intern/paint.c
+++ b/source/blender/blenkernel/intern/paint.c
@@ -1806,8 +1806,8 @@ void BKE_sculpt_color_layer_create_if_needed(struct Object *object)
   bool has_color = false;
 
   for (int i = 0; i < ARRAY_SIZE(types); i++) {
-    bool ok = CustomData_has_layer(&orig_me->vdata, types[i]);
-    ok = ok || CustomData_has_layer(&orig_me->ldata, types[i]);
+    bool ok = CustomData_has_layer(&orig_me->vdata, types[i]) ||
+              CustomData_has_layer(&orig_me->ldata, types[i]);
 
     if (ok) {
       has_color = true;
@@ -2082,8 +2082,8 @@ void BKE_sculpt_ensure_orig_mesh_data(Scene *scene, Object *object)
   BKE_mesh_tessface_clear(mesh);
 
   /* We always need to flush updates from depsgraph here, since at the very least
-   * `BKE_sculpt_face_sets_ensure_from_base_mesh_visibility()` will have updated some data layer
-   * of the mesh.
+   * `BKE_sculpt_face_sets_ensure_from_base_mesh_visibility()` will have updated some data layer of
+   * the mesh.
    *
    * All known potential sources of updates:
    *   - Addition of, or changes to, the `CD_SCULPT_FACE_SETS` data layer
diff --git a/source/blender/blenkernel/intern/pbvh.c b/source/blender/blenkernel/intern/pbvh.c
index beb64c8cfd0..922d8ae7810 100644
--- a/source/blender/blenkernel/intern/pbvh.c
+++ b/source/blender/blenkernel/intern/pbvh.c
@@ -1243,29 +1243,29 @@ static int pbvh_get_buffers_update_flags(PBVH *UNUSED(pbvh))
   return update_flags;
 }
 
-bool BKE_pbvh_get_color_layer(const Mesh *me, CustomDataLayer **r_cl, AttributeDomain *r_attr)
+bool BKE_pbvh_get_color_layer(const Mesh *me, CustomDataLayer **r_layer, AttributeDomain *r_attr)
 {
-  CustomDataLayer *cl = BKE_id_attributes_active_color_get((ID *)me);
+  CustomDataLayer *layer = BKE_id_attributes_active_color_get((ID *)me);
   AttributeDomain domain;
 
-  if (!cl || !ELEM(cl->type, CD_PROP_COLOR, CD_MLOOPCOL)) {
+  if (!layer || !ELEM(layer->type, CD_PROP_COLOR, CD_MLOOPCOL)) {
     return false;
   }
 
-  domain = BKE_id_attribute_domain((ID *)me, cl);
+  domain = BKE_id_attribute_domain((ID *)me, layer);
 
   if (!ELEM(domain, ATTR_DOMAIN_POINT, ATTR_DOMAIN_CORNER)) {
     return false;
   }
 
-  if (cl) {
-    *r_cl = cl;
+  if (layer) {
+    *r_layer = layer;
     *r_attr = domain;
 
     return true;
   }
   else {
-    *r_cl = NULL;
+    *r_layer = NULL;
     return false;
   }
 }
@@ -1321,18 +1321,18 @@ static void pbvh_update_draw_buffer_cb(void *__restrict userdata,
                                      update_flags);
         break;
       case PBVH_FACES: {
-        CustomDataLayer *cl = NULL;
+        CustomDataLayer *layer = NULL;
         AttributeDomain domain;
 
-        BKE_pbvh_get_color_layer(pbvh->mesh, &cl, &domain);
+        BKE_pbvh_get_color_layer(pbvh->mesh, &layer, &domain);
 
         GPU_pbvh_mesh_buffers_update(node->draw_buffers,
                                      pbvh->verts,
                                      pbvh->vert_normals,
                                      CustomData_get_layer(pbvh->vdata, CD_PAINT_MASK),
-                                     cl ? cl->data : NULL,
-                                     cl ? cl->type : -1,
-                                     cl ? domain : ATTR_DOMAIN_AUTO,
+                                     layer ? layer->data : NULL,
+                                     layer ? layer->type : -1,
+                                     layer ? domain : ATTR_DOMAIN_AUTO,
                                      CustomData_get_layer(pbvh->pdata, CD_SCULPT_FACE_SETS),
                                      pbvh->face_sets_color_seed,
                                      pbvh->face_sets_color_default,
diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c b/source/blender/draw/intern/draw_cache_impl_mesh.c
index 8bde4e081d6..5dbeb6a30d5 100644
--- a/source/blender/draw/intern/draw_cache_impl_mesh.c
+++ b/source/blender/draw/intern/draw_cache_impl_mesh.c
@@ -746,7 +746,6 @@ static DRW_MeshCDMask mesh_cd_calc_used_gpu_layers(const Mesh *me,
             break;
           }
 
-            /* fallthrough */
           case CD_PROP_FLOAT3:
           case CD_PROP_BOOL:
           case CD_PROP_INT32:
diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_vcol.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_vcol.cc
index 705f6a88cb9..c2952dd0621 100644
--- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_vcol.cc
+++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_vcol.cc
@@ -31,11 +31,6 @@
 
 #include <vector>
 
-namespace blender::draw {
-
-/* ---------------------------------------------------------------------- */
-/** \name Extract VCol
- * \{ */
 
 /* get all vcol layers as AttributeRefs, filtered by vcol_layers.
  *  the casual use of std::vector should be okay here.
@@ -45,49 +40,43 @@ static std::vector<AttributeRef> get_vcol_refs(const CustomData *cd_vdata,
                                                const uint vcol_layers)
 {
   std::vector<AttributeRef> refs;
-
-  const CustomDataType vcol_types[2] = {CD_PROP_COLOR, CD_MLOOPCOL};
-  const AttributeDomain domains[2] = {ATTR_DOMAIN_POINT, ATTR_DOMAIN_CORNER};
-
   uint layeri = 0;
 
-  for (int step1 = 0; step1 < ARRAY_SIZE(vcol_types); step1++) {
-    CustomDataType type = vcol_types[step1];
+  auto buildList = [&](const CustomData *cdata, CustomDataType type, AttributeDomain domain) {
+    int i = cdata->typemap[(int)type];
 
-    for (int step2 = 0; step2 < 2; step2++) {
-      const CustomData *cdata = step2 ? cd_ldata : cd_vdata;
-      AttributeDomain domain = domains[step2];
+    if (i == -1) {
+      return;
+    }
 
-      int i = cdata->typemap[(int)type];
+    for (; i < cdata->totlayer && (CustomDataType)cdata->layers[i].type == type; i++, layeri++) {
+      const CustomDataLayer *layer = cdata->layers + i;
 
-      if (i == -1) {
+      if (!(vcol_layers & (1UL << layeri)) || (layer->flag & CD_FLAG_TEMPORARY)) {
         continue;
       }
 
-      for (; i < cdata->totlayer && (CustomDataType)cdata->layers[i].type == type; i++, layeri++) {
-        const CustomDataLayer *layer = cdata->layers + i;
-
-        if (!(vcol_layers & (1UL << layeri)) || (layer->flag & CD_FLAG_TEMPORARY)) {
-          continue;
-        }
-
-        AttributeRef ref;
-        ref.domain = domain;
-        ref.type = layer->type;
-        BLI_strncpy(ref.name, layer->name, sizeof(ref.name));
+      AttributeRef ref;
+      ref.domain = domain;
+      ref.type = layer->type;
+      BLI_strncpy(ref.name, layer->name, sizeof(ref.name));
 
-        refs.push_back(ref);
-      }
+      refs.push_back(ref);
     }
-  }
+  };
+
+  buildList(cd_vdata, CD_PROP_COLOR, ATTR_DOMAIN_POINT);
+  buildList(cd_vdata, CD_MLOOPCOL, ATTR_DOMAIN_POINT);
+  buildList(cd_ldata, CD_PROP_COLOR, ATTR_DOMAIN_CORNER);
+  buildList(cd_ldata, CD_MLOOPCOL, ATTR_DOMAIN_CORNER);
 
   return refs;
 }
 
-extern "C" int mesh_cd_get_vcol_i(const Mesh *me,
-                                  const CustomData *cd_vdata,
-                                  const CustomData *cd_ldata,
-                                  const struct AttributeRef *ref)
+int mesh_cd_get_vcol_i(const Mesh *me,
+                       const CustomData *cd_vdata,
+                       const CustomData *cd_ldata,
+                       const struct AttributeRef *ref)
 {
   auto refs = get_vcol_refs(cd_vdata, cd_ldata, UINT_MAX);
   int i = 0;
@@ -101,20 +90,28 @@ extern "C" int mesh_cd_get_vcol_i(const Mesh *me,
 
   return -1;
 }
-extern "C" int mesh_cd_get_active_color_i(const Mesh *me,
-                                          const CustomData *cd_vdata,
-                                          const CustomData *cd_ldata)
+int mesh_cd_get_active_color_i(const Mesh *me,
+                               const CustomData *cd_vdata,
+                               const CustomData *cd_ldata)
 {
   return mesh_cd_get_vcol_i(me, cd_vdata, cd_ldata, &me->attr_color_active);
 }
 
-extern "C" int mesh_cd_get_render_color_i(const Mesh *me,
-                                          const CustomData *cd_vdata,
-                                          const CustomData *cd_ldata)
+int mesh_cd_get_render_color_i(const Mesh *me,
+                               const CustomData *cd_vdata,
+                               const CustomData *cd_ldata)
 {
   return mesh_cd_get_vcol_i(me, cd_vdata, cd_ldata, &me->attr_color_render);
 }
 
+
+namespace blender::draw {
+
+/* ---------------------------------------------------------------------- */
+/** \name Extract VCol
+ * \{ */
+
+
 /* Initialize the common vertex format for vcol for coarse and subdivided meshes. */
 static void init_vcol_format(GPUVertFormat *format,
                              const MeshBatchCache *cache,
diff --git a/source/blender/editors/geometry/geometry_attributes.cc b/source/blender/editors/geometry/geometry_attributes.cc
index 17dbb61048d..6ec5b82147c 100644
--- a/source/blender/editors/geometry/geometry_attributes.cc
+++ b/source/blender/editors/geometry/geometry_attributes.cc
@@ -93,7 +93,7 @@ static int geometry_attribute_add_exec(bContext *C, wmOperator *op)
   CustomDataType type = (CustomDataType)RNA_enum_get(op->ptr, "data_type");
   AttributeDomain domain = (AttributeDomain)RNA_enum_get(op->ptr, "domain");
   CustomDataLayer *layer = BKE_id_attribute_new(
-      id, name, type, CD_MASK_PROP_ALL, domain, op->reports);
+      id, name, type, domain, CD_MASK_PROP_ALL, op->reports);
 
   if (layer == nullptr) {
     return OPERATOR_CANCELLED;
@@ -117,15 +117,15 @@ static void next_color_attr(struct ID *id, CustomDataLayer *layer, bool is_rende
     return;
   }
 
-  AttributeDomainMask domain_mask = ATTR_DOMAIN_MASK_POINT | ATTR_DOMAIN_MASK_CORNER;
+  AttributeDomainMask domain_mask = (AttributeDomainMask)(ATTR_DOMAIN_MASK_POINT | ATTR_DOMAIN_MASK_CORNER);
   CustomDataMask type_mask = CD_MASK_PROP_COLOR | CD_MASK_MLOOPCOL;
 
   int length = BKE_id_attributes_length(id, domain_mask, type_mask);
-  int idx = BKE_id_attribute_index_from_ref(id, ref, domain_mask, type_mask);
+  

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list