[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