[Bf-blender-cvs] [a8fa8bf3644] temp-sculpt-colors: temp-sculpt-colors: implement patch review items

Joseph Eagar noreply at git.blender.org
Wed Nov 3 23:07:02 CET 2021


Commit: a8fa8bf36445155691cb13feb1647c5b423c622c
Author: Joseph Eagar
Date:   Wed Nov 3 15:06:27 2021 -0700
Branches: temp-sculpt-colors
https://developer.blender.org/rBa8fa8bf36445155691cb13feb1647c5b423c622c

temp-sculpt-colors: implement patch review items

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

M	source/blender/blenkernel/BKE_paint.h
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_attributes.cc
M	source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_vcol.cc
M	source/blender/editors/sculpt_paint/sculpt.c
M	source/blender/editors/sculpt_paint/sculpt_undo.c
M	source/blender/modifiers/intern/MOD_datatransfer.c
M	source/blender/windowmanager/intern/wm_toolsystem.c

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

diff --git a/source/blender/blenkernel/BKE_paint.h b/source/blender/blenkernel/BKE_paint.h
index 3c691df15c3..6d4a242b3cc 100644
--- a/source/blender/blenkernel/BKE_paint.h
+++ b/source/blender/blenkernel/BKE_paint.h
@@ -467,7 +467,6 @@ typedef struct SculptSession {
 
   struct KeyBlock *shapekey_active;
   struct MPropCol *vcol;
-  float (*f3col)[3];
   struct MLoopCol *mcol;
 
   int vcol_domain;
diff --git a/source/blender/blenkernel/intern/paint.c b/source/blender/blenkernel/intern/paint.c
index 53f3692a7bd..3782893d557 100644
--- a/source/blender/blenkernel/intern/paint.c
+++ b/source/blender/blenkernel/intern/paint.c
@@ -1680,15 +1680,11 @@ static void sculpt_update_object(Depsgraph *depsgraph,
 
     ss->vcol = NULL;
     ss->mcol = NULL;
-    ss->f3col = NULL;
 
     if (BKE_pbvh_get_color_layer(me, &cl, &domain)) {
       if (cl->type == CD_PROP_COLOR) {
         ss->vcol = cl->data;
       }
-      else if (cl->type == CD_PROP_FLOAT3) {
-        ss->f3col = cl->data;
-      }
       else {
         ss->mcol = cl->data;
       }
@@ -1824,7 +1820,7 @@ void BKE_sculpt_color_layer_create_if_needed(struct Object *object)
 {
   Mesh *orig_me = BKE_object_get_original_mesh(object);
 
-  int types[] = {CD_PROP_COLOR, CD_PROP_FLOAT3, CD_MLOOPCOL};
+  int types[] = {CD_PROP_COLOR, CD_MLOOPCOL};
   bool has_color = false;
 
   for (int i = 0; i < 3; i++) {
@@ -1840,7 +1836,7 @@ void BKE_sculpt_color_layer_create_if_needed(struct Object *object)
   CustomDataLayer *cl;
   if (has_color) {
     cl = BKE_id_attributes_active_get(&orig_me->id);
-    if (!ELEM(cl->type, CD_PROP_COLOR, CD_MLOOPCOL, CD_PROP_FLOAT3)) {
+    if (!ELEM(cl->type, CD_PROP_COLOR, CD_MLOOPCOL)) {
       cl = NULL;
 
       /* find a color layer */
@@ -1848,7 +1844,7 @@ void BKE_sculpt_color_layer_create_if_needed(struct Object *object)
         CustomData *cdata = step ? &orig_me->ldata : &orig_me->vdata;
 
         for (int i = 0; i < cdata->totlayer; i++) {
-          if (ELEM(cdata->layers[i].type, CD_PROP_COLOR, CD_MLOOPCOL, CD_PROP_FLOAT3)) {
+          if (ELEM(cdata->layers[i].type, CD_PROP_COLOR, CD_MLOOPCOL)) {
             cl = cdata->layers + i;
             break;
           }
diff --git a/source/blender/blenkernel/intern/pbvh.c b/source/blender/blenkernel/intern/pbvh.c
index b88210f5bbb..b999eb3cdd4 100644
--- a/source/blender/blenkernel/intern/pbvh.c
+++ b/source/blender/blenkernel/intern/pbvh.c
@@ -1264,7 +1264,7 @@ bool BKE_pbvh_get_color_layer(const Mesh *me, CustomDataLayer **r_cl, AttributeD
   CustomDataLayer *cl = BKE_id_attributes_active_get((ID *)me);
   AttributeDomain domain;
 
-  if (!cl || !ELEM(cl->type, CD_PROP_FLOAT3, CD_PROP_COLOR, CD_MLOOPCOL)) {
+  if (!cl || !ELEM(cl->type, CD_PROP_COLOR, CD_MLOOPCOL)) {
     return false;
   }
 
diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c b/source/blender/draw/intern/draw_cache_impl_mesh.c
index d78b864a952..88d4f287c9b 100644
--- a/source/blender/draw/intern/draw_cache_impl_mesh.c
+++ b/source/blender/draw/intern/draw_cache_impl_mesh.c
@@ -468,7 +468,7 @@ static bool mesh_cd_calc_active_vcol_layer(Mesh *me, DRW_MeshAttributes *attrs_u
   int type, idx = -1;
   AttributeDomain domain;
 
-  if (layer && ELEM(layer->type, CD_PROP_FLOAT3, CD_PROP_COLOR, CD_MLOOPCOL)) {
+  if (layer && ELEM(layer->type, CD_PROP_COLOR, CD_MLOOPCOL)) {
     domain = BKE_id_attribute_domain((ID *)me, layer);
     type = layer->type;
 
@@ -661,11 +661,11 @@ static DRW_MeshCDMask mesh_cd_calc_used_gpu_layers(const Mesh *me,
             cd_used.orco = 1;
             break;
           }
-          case CD_PROP_FLOAT3:
+
           case CD_PROP_COLOR:
             cd_used.vcol = 1;
-
             /* fallthrough */
+          case CD_PROP_FLOAT3:
           case CD_PROP_BOOL:
           case CD_PROP_INT32:
           case CD_PROP_FLOAT:
diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_attributes.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_attributes.cc
index 8033653b85a..9edefe32fbc 100644
--- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_attributes.cc
+++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_attributes.cc
@@ -95,18 +95,6 @@ template<> struct attribute_type_converter<MPropCol, gpuMeshCol> {
   }
 };
 
-template<> struct attribute_type_converter<MLoopCol, gpuMeshCol> {
-  static gpuMeshCol convert_value(MLoopCol value)
-  {
-    gpuMeshCol result;
-    result.r = value.r * 257;
-    result.g = value.g * 257;
-    result.b = value.b * 257;
-    result.a = value.a * 257;
-    return result;
-  }
-};
-
 /* Return the number of component for the attribute's value type, or 0 if is it unsupported. */
 static uint gpu_component_size_for_attribute_type(CustomDataType type)
 {
@@ -340,10 +328,6 @@ static void extract_attr_init(const MeshRenderData *mr,
       extract_attr_generic<MPropCol, gpuMeshCol>(mr, vbo, request);
       break;
     }
-    case CD_MLOOPCOL: {
-      extract_attr_generic<MLoopCol, gpuMeshCol>(mr, vbo, request);
-      break;
-    }
     default: {
       BLI_assert(false);
     }
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 fb1bc112455..080ef4cdeee 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
@@ -77,7 +77,7 @@ static void extract_vcol_init(const MeshRenderData *mr,
   note that there are three color attribute types that operate over two domains
   (verts and face corners)
   */
-  int vcol_types[3] = {CD_MLOOPCOL, CD_PROP_COLOR, CD_PROP_FLOAT3};
+  int vcol_types[2] = {CD_MLOOPCOL, CD_PROP_COLOR};
 
   CustomDataLayer *actlayer = BKE_id_attributes_active_get((ID *)mr->me);
   AttributeDomain actdomain = actlayer ? BKE_id_attribute_domain((ID *)mr->me, actlayer) :
@@ -89,7 +89,7 @@ static void extract_vcol_init(const MeshRenderData *mr,
     actn = actlayer - (cdata->layers + cdata->typemap[actlayer->type]);
   }
 
-  for (int i = 0; i < 3; i++) {
+  for (int i = 0; i < ARRAY_SIZE(vcol_types); i++) {
     int type = vcol_types[i];
 
     for (int step = 0; step < 2; step++) {
@@ -159,28 +159,27 @@ static void extract_vcol_init(const MeshRenderData *mr,
               BMElem *elem = step ? (BMElem *)l_iter : (BMElem *)l_iter->v;
 
               switch (type) {
-                case CD_PROP_FLOAT3:
                 case CD_PROP_COLOR: {
                   float *color = (float *)BM_ELEM_CD_GET_VOID_P(elem, cd_vcol);
 
                   vcol_data->r = unit_float_to_ushort_clamp(color[0]);
                   vcol_data->g = unit_float_to_ushort_clamp(color[1]);
                   vcol_data->b = unit_float_to_ushort_clamp(color[2]);
-                  vcol_data->a = unit_float_to_ushort_clamp(type == CD_PROP_COLOR ? color[3] :
-                                                                                    1.0f);
+                  vcol_data->a = unit_float_to_ushort_clamp(color[3]);
 
                   break;
                 }
                 case CD_MLOOPCOL: {
+                  float temp[4];
+
                   MLoopCol *mloopcol = (MLoopCol *)BM_ELEM_CD_GET_VOID_P(elem, cd_vcol);
+                  rgba_float_to_uchar((unsigned char *)mloopcol, temp);
+                  linearrgb_to_srgb_v3_v3(temp, temp);
 
-                  vcol_data->r = unit_float_to_ushort_clamp(
-                      BLI_color_from_srgb_table[mloopcol->r]);
-                  vcol_data->g = unit_float_to_ushort_clamp(
-                      BLI_color_from_srgb_table[mloopcol->r]);
-                  vcol_data->b = unit_float_to_ushort_clamp(
-                      BLI_color_from_srgb_table[mloopcol->r]);
-                  vcol_data->a = unit_float_to_ushort_clamp(mloopcol->a * (1.0f / 255.0f));
+                  vcol_data->r = unit_float_to_ushort_clamp(temp[0]);
+                  vcol_data->g = unit_float_to_ushort_clamp(temp[1]);
+                  vcol_data->b = unit_float_to_ushort_clamp(temp[2]);
+                  vcol_data->a = unit_float_to_ushort_clamp(temp[3]);
                   break;
                 }
               }
@@ -195,31 +194,6 @@ static void extract_vcol_init(const MeshRenderData *mr,
           };
 
           switch (type) {
-            case CD_PROP_FLOAT3: {
-              MPropCol3 *colors = (MPropCol3 *)cdata->layers[idx].data;
-
-              if (step) {
-                for (int k = 0; k < mr->loop_len; k++, vcol_data++, colors++) {
-                  vcol_data->r = unit_float_to_ushort_clamp(colors->color[0]);
-                  vcol_data->g = unit_float_to_ushort_clamp(colors->color[1]);
-                  vcol_data->b = unit_float_to_ushort_clamp(colors->color[2]);
-                  unit_float_to_ushort_clamp(1.0f);
-                }
-              }
-              else {
-                const MLoop *ml = mr->mloop;
-
-                for (int k = 0; k < mr->loop_len; k++, vcol_data++, ml++) {
-                  MPropCol3 *color = colors + ml->v;
-
-                  vcol_data->r = unit_float_to_ushort_clamp(color->color[0]);
-                  vcol_data->g = unit_float_to_ushort_clamp(color->color[1]);
-                  vcol_data->b = unit_float_to_ushort_clamp(color->color[2]);
-                  vcol_data->a = unit_float_to_ushort_clamp(1.0f);
-                }
-              }
-              break;
-            }
             case CD_PROP_COLOR: {
               MPropCol *colors = (MPropCol *)cdata->layers[idx].data;
 
@@ -250,10 +224,14 @@ static void extract_vcol_init(const MeshRenderData *mr,
 
               if (step) {
                 for (int k = 0; k < mr->loop_len; k++, vcol_data++, colors++) {
-                  vcol_data->r = unit_float_to_ushort_clamp(BLI_color_from_srgb_table[colors->r]);
-                  vcol_data->g = unit_float_to_ushort_clamp(BLI_color_from_srgb_table[colors->g]);
-                  vcol_data->b = unit_float_to_ushort_clamp(BLI_color_from_srgb_table[colors->b]);
-                  vcol_data->a = unit_float_to_ushort_clamp((float)colors->a * (1.0f / 255.0f));
+                  float temp[4];
+                  rgba_float_to_uchar((unsign

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list